<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OnaEiuspkz</title>
    <description>The latest articles on DEV Community by OnaEiuspkz (@onaeiuspkz).</description>
    <link>https://dev.to/onaeiuspkz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4127462%2F464d79fd-d761-42c0-8d3e-b8176e27b0c8.png</url>
      <title>DEV Community: OnaEiuspkz</title>
      <link>https://dev.to/onaeiuspkz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onaeiuspkz"/>
    <language>en</language>
    <item>
      <title>The Mail and Collaboration Edge Still Answers on Its Own Ports</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 17:22:05 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/the-mail-and-collaboration-edge-still-answers-on-its-own-ports-4kfl</link>
      <guid>https://dev.to/onaeiuspkz/the-mail-and-collaboration-edge-still-answers-on-its-own-ports-4kfl</guid>
      <description>&lt;h1&gt;
  
  
  The Mail and Collaboration Edge Still Answers on Its Own Ports
&lt;/h1&gt;

&lt;p&gt;Mail servers and document collaboration suites are the two categories where the internet-facing surface is the least likely thing to sit behind a CDN. They terminate their own TLS, they own their own hostnames, and they are usually the oldest continuously running service in an organisation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Counts from 28 October 2026
&lt;/h2&gt;

&lt;p&gt;ZoomEye queries returned the following. Title:"Exchange" 101,582 and app:"Exchange" 8,490. App:"Zimbra" 149. App:"Roundcube" 49. Title:"ONLYOFFICE" 241,809 and app:"Collabora" 15, with title:"Collabora" 2,180.&lt;br&gt;
The mail numbers describe a persistent, self-hosted surface. Exchange title matches exceed application matches by more than an order of magnitude, which is the familiar attribution gap: an Outlook Web App login page identifies the product to a human and not always to a fingerprint engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this surface stays exposed
&lt;/h2&gt;

&lt;p&gt;Three reasons recur.&lt;br&gt;
Remote access is the product. A mail server that is reachable only from a VPN is a mail server that users complain about. The pressure to publish it is architectural, not careless.&lt;br&gt;
Upgrade cycles are long. Mail and groupware migrations are the projects that get deferred, so a suite installed in one year is often still serving in the fifth.&lt;br&gt;
The perimeter is compound. A single deployment can present webmail, ActiveSync, autodiscover, SMTP submission and an admin console, each with its own path and its own authentication behaviour. Hardening one path does not harden the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the risk concentrates
&lt;/h2&gt;

&lt;p&gt;For mail, the historically productive attack surfaces are webmail authentication, the autodiscover endpoint, and the administrative interface when it is reachable from the same address space. Each has produced exploited vulnerabilities in recent years, and each is frequently the component that was not in the patch scope.&lt;br&gt;
For document collaboration, the pattern shifts to proxy and connector components. OnlyOffice and Collabora both provide a document server that fetches files from a storage backend; the interesting bugs are usually in that fetch path, for example proxy or URL handling that lets a crafted request reach something it should not.&lt;br&gt;
The 241,809 ONLYOFFICE title matches and the 2,180 Collabora title matches suggest a substantial population of document servers published directly. Whether they sit behind an authenticating proxy is not visible from the count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the numbers honestly
&lt;/h2&gt;

&lt;p&gt;Title matching is a coarse instrument. A title:"Exchange" match may be a webmail page, a health endpoint, an error page, or a redirect that happens to carry the product name. The counts are useful for sizing and useless for identifying a specific version or patch state.&lt;br&gt;
Application fingerprints are the opposite: precise when they fire, silent when they do not. Where the two disagree by an order of magnitude, the honest statement is a range, and the article should say so.&lt;/p&gt;

&lt;h2&gt;
  
  
  A short checklist for this surface
&lt;/h2&gt;

&lt;p&gt;Enumerate every hostname that resolves to a mail or document server, not just the primary one. Autodiscover and the document server are routinely forgotten.&lt;br&gt;
Confirm whether the administrative interface is reachable from the internet. If it is, that is the finding.&lt;br&gt;
Track the vendor advisories for the specific edition, and keep the connector and proxy components in the same patch scope as the main application.&lt;br&gt;
Put a reverse proxy with authentication in front of document servers that do not need to be public, and check afterwards that the original port is closed rather than merely unpublished.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ZoomEye queries collected 28 October 2026: title:"Exchange" 101,582; app:"Exchange" 8,490; app:"Zimbra" 149; app:"Roundcube" 49; title:"ONLYOFFICE" 241,809; app:"Collabora" 15; title:"Collabora" 2,180: &lt;a href="https://www.zoomeye.org" rel="noopener noreferrer"&gt;https://www.zoomeye.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye query syntax reference: &lt;a href="https://www.zoomeye.org/doc" rel="noopener noreferrer"&gt;https://www.zoomeye.org/doc&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>measurement</category>
      <category>mail</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>VMmanager control planes share port 443 with the sites they manage</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 14:20:42 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/vmmanager-control-planes-share-port-443-with-the-sites-they-manage-4ea0</link>
      <guid>https://dev.to/onaeiuspkz/vmmanager-control-planes-share-port-443-with-the-sites-they-manage-4ea0</guid>
      <description>&lt;h1&gt;
  
  
  VMmanager control planes share port 443 with the sites they manage
&lt;/h1&gt;

&lt;p&gt;Of the 2,823 VMmanager interfaces that answered publicly on 27 October 2026, 1,592 responded on port 443. That is more than half the population serving an administration login on the same port the hosting business uses for customer websites, and it shapes what a firewall change looks like in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Port distribution
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Matching assets&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="VMmanager"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2,823&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="VMmanager" &amp;amp;&amp;amp; port="443"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1,592&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="VMmanager" &amp;amp;&amp;amp; port="8443"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="VMmanager" &amp;amp;&amp;amp; port="8080"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The remaining assets either answer on other ports or were recorded without a port match in the scan. The concentration on 443 is the part worth planning around.&lt;/p&gt;

&lt;h2&gt;
  
  
  One port, two jobs
&lt;/h2&gt;

&lt;p&gt;A control panel that shares 443 with tenant websites creates a conflict for whoever writes the firewall rule. Blocking the port protects the panel and simultaneously removes customer sites, which generates support load and commercial pressure. Adding an address allowlist to the panel instead keeps the port open and narrows who can reach the login. The second option costs less, which is why it is often the one that gets done.&lt;br&gt;
The vendor's own guidance anticipated this conflict. ISPsystem asked customers to configure infrastructure firewalls to block inbound and outbound connections to the VMmanager platform and to the virtualisation nodes, allowing access only to trusted administrators and vendor support. An outbound block is unusual, and it interrupts update delivery and licence checks as well as attacker traffic. Operators who applied it on 20 October were choosing a short outage over continued exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying the change from outside
&lt;/h2&gt;

&lt;p&gt;The measurement gives a way to confirm the rule actually took effect. Run the title query against your own ranges before the change and again afterwards. A panel that disappears from public results is evidence the inbound rule works. A panel still visible after the change suggests the rule is incomplete or the scan read a cached response. Record the query, the timestamp and the count for each round so the comparison is defensible in a later review.&lt;br&gt;
This check does not replace reading the firewall configuration. It catches the case where the intended rule and the deployed rule diverge, which is common when several teams maintain the same perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Segmenting the management plane properly
&lt;/h2&gt;

&lt;p&gt;Restricting SSH to trusted addresses and rotating local passwords were the other two steps the vendor listed, and both work better when the management plane sits on its own network segment. A panel reachable only from an administrative VLAN is not visible to a scan at all, so the problem of a shared port disappears rather than being managed. For hosting businesses with several offices, that segment also becomes the place to enforce multi-factor authentication for administrators instead of applying it per service.&lt;br&gt;
The transition takes planning. Existing customer-facing configuration may assume the panel is reachable from the internet, and monitoring or backup jobs may authenticate to it from outside. Mapping those dependencies before the firewall change is cheaper than discovering them during it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the port count adds
&lt;/h2&gt;

&lt;p&gt;The 1,592 figure is not a vulnerability count. It measures how many interfaces are exposed on the port most likely to be kept open for unrelated reasons. For an operator trying to argue for a segmentation project, that is a concrete number to bring to the discussion, and it can be reproduced with a single query on any future date.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Record, "Hackers steal customer data from major Russian hosting provider FirstVDS", 19 October 2026. &lt;a href="https://therecord.media/russia-cyberattack-firstvds-cloud" rel="noopener noreferrer"&gt;https://therecord.media/russia-cyberattack-firstvds-cloud&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ISPsystem, "Security Incident Involving a Vulnerability in a VMmanager 6 Build", 20 October 2026. &lt;a href="https://www.ispsystem.com/news/vulnerability-incident" rel="noopener noreferrer"&gt;https://www.ispsystem.com/news/vulnerability-incident&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye queries executed 27 October 2026. Counts describe reachable management interfaces, not confirmed vulnerable installations.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>zoomeye</category>
      <category>vmmanager</category>
      <category>hosting</category>
    </item>
    <item>
      <title>CVE-2026-15176: The alias Rewrite Overflow That Survived Since 2005</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:21:16 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/cve-2026-15176-the-alias-rewrite-overflow-that-survived-since-2005-528f</link>
      <guid>https://dev.to/onaeiuspkz/cve-2026-15176-the-alias-rewrite-overflow-that-survived-since-2005-528f</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-15176: The alias Rewrite Overflow That Survived Since 2005
&lt;/h1&gt;

&lt;p&gt;The oldest of the five NGINX flaws fixed in 1.30.6 and 1.31.7 is also the one with the widest version range. CVE-2026-15176 affects releases from 0.1.29 onward, which means it has been present in essentially every NGINX build shipped since May 2005. F5 rates it 9.2 Critical on CVSS v4.0, and F5's own engineers are credited with finding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mechanism
&lt;/h2&gt;

&lt;p&gt;The flaw lives in the gap between two phases of request handling. NGINX first selects a location, then, if that location contains a &lt;code&gt;rewrite&lt;/code&gt;, it can change the request URI and start location selection again. During the interval after the rewrite and before the next location is chosen, the request still carries the old location's context.&lt;/p&gt;

&lt;p&gt;If that old location used &lt;code&gt;alias&lt;/code&gt;, and if anything in that window reads &lt;code&gt;$request_filename&lt;/code&gt;, NGINX maps the rewritten URI onto a file path using a prefix that was sized for the pre-rewrite URI. When the location's prefix is longer than the rewritten URI, that mapping overflows a buffer in the worker process.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$request_filename&lt;/code&gt; is not an exotic directive. It appears in &lt;code&gt;return&lt;/code&gt;, in &lt;code&gt;set&lt;/code&gt;, in &lt;code&gt;if&lt;/code&gt;, in &lt;code&gt;add_header&lt;/code&gt;, and in access-log formats. An operator who logs the resolved file path, or who returns it, or who adds a header derived from it, satisfies the read condition without ever intending to touch internals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploitation conditions
&lt;/h2&gt;

&lt;p&gt;Three elements must coincide. The location must use &lt;code&gt;alias&lt;/code&gt;. A &lt;code&gt;rewrite&lt;/code&gt; reachable in that location must change the URI. And something must read &lt;code&gt;$request_filename&lt;/code&gt; during the window described above.&lt;/p&gt;

&lt;p&gt;An attacker who can send requests to such a location can drive the overflowing mapping. F5's assessment is that this leads to a worker crash and possibly to code execution. A crash alone is a denial of service against the listener; code execution inside a worker inherits that worker's privileges, which on a typical deployment is an unprivileged service account, but a compromised worker still handles traffic and holds session material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affected range and why it is broad
&lt;/h2&gt;

&lt;p&gt;The range 0.1.29 through 1.31.6 is the widest of the five issues and covers two decades of production installs. Many long-lived configurations mix &lt;code&gt;alias&lt;/code&gt; and &lt;code&gt;rewrite&lt;/code&gt;, particularly when a static subtree was moved and a rewrite kept old URLs working. The combination is not rare in inherited configuration files, and because nothing complains about it, it survives migrations.&lt;/p&gt;

&lt;p&gt;Older branches remain inside the range. NGINX publishes fixes only for the stable and mainline branches, so a server pinned to 1.28 that has not received a distribution backport is still exposed after this release ships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;The impact has two levels. The first is availability: a crafted request can terminate a worker, and repeated requests can keep workers cycling, which degrades service without any data compromise. The second is integrity: memory corruption in a worker can, in the wrong conditions, be leveraged into code execution. F5's rating treats the second level as the defining one.&lt;/p&gt;

&lt;p&gt;The reason to treat this as urgent rather than theoretical is the exposure window. A flaw that has existed since 2005 has had two decades in which configurations could accumulate the exact combination, and it required no attacker-supplied secret, only a request to the right location.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation
&lt;/h2&gt;

&lt;p&gt;Upgrade to 1.30.6 or 1.31.7.&lt;/p&gt;

&lt;p&gt;For teams that cannot upgrade immediately, F5's workaround is to stop using &lt;code&gt;alias&lt;/code&gt; in any location that also rewrites, and to stop reading &lt;code&gt;$request_filename&lt;/code&gt; in that context. In practice the simplest form is to convert the affected location to use &lt;code&gt;root&lt;/code&gt; with an adjusted path, or to move the rewrite into a separate location block so that the alias and the rewrite never share a context.&lt;/p&gt;

&lt;p&gt;Logging deserves a specific mention. Access-log formats that include &lt;code&gt;$request_filename&lt;/code&gt; are a common source of the read condition, and they are usually inherited from a template rather than written deliberately. Audit &lt;code&gt;log_format&lt;/code&gt; definitions before assuming the condition is absent.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;nginx -T&lt;/code&gt; and find every location block containing &lt;code&gt;alias&lt;/code&gt;. For each, check whether the same block contains &lt;code&gt;rewrite&lt;/code&gt;, and check whether the resolved path is referenced anywhere in that block or in the access-log format applied to it. Where both are present, that location is the one to fix first.&lt;/p&gt;

&lt;p&gt;Externally, the flaw does not advertise itself. There is no banner, no version string and no response signature that identifies a vulnerable configuration, which is why configuration review and not scanning is the reliable test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NGINX security advisories: &lt;a href="https://nginx.org/en/security_advisories.html" rel="noopener noreferrer"&gt;https://nginx.org/en/security_advisories.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;F5 advisory K000162416: &lt;a href="https://my.f5.com/manage/s/article/K000162416" rel="noopener noreferrer"&gt;https://my.f5.com/manage/s/article/K000162416&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Alias handling fix commit: &lt;a href="https://github.com/nginx/nginx/commit/f8a23425bd6840c4c36b4264edf576ba3646156f" rel="noopener noreferrer"&gt;https://github.com/nginx/nginx/commit/f8a23425bd6840c4c36b4264edf576ba3646156f&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NGINX download page: &lt;a href="https://nginx.org/en/download.html" rel="noopener noreferrer"&gt;https://nginx.org/en/download.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>security</category>
    </item>
    <item>
      <title>Remote Access by Default: Auditing the Plex Port Forwards That Made Plex2Shell Exploitable</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 08:08:19 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/remote-access-by-default-auditing-the-plex-port-forwards-that-made-plex2shell-exploitable-3cp</link>
      <guid>https://dev.to/onaeiuspkz/remote-access-by-default-auditing-the-plex-port-forwards-that-made-plex2shell-exploitable-3cp</guid>
      <description>&lt;h1&gt;
  
  
  Remote Access by Default: Auditing the Plex Port Forwards That Made Plex2Shell Exploitable
&lt;/h1&gt;

&lt;p&gt;Every account of the Plex2Shell campaign boils down to the same precondition: the server had to be reachable. The vulnerability chain, comprising CVE-2026-96652, CVE-2026-96654, CVE-2026-96655 and CVE-2026-96656, is only exploitable from outside if requests arrive from outside. That makes network configuration the highest-leverage control an administrator has, and the one most likely to be undocumented.&lt;br&gt;
This article treats the exposure question as an audit problem rather than a patching problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the vulnerable state looks like
&lt;/h2&gt;

&lt;p&gt;Plex Media Server before 1.43.3.10861 is affected. CVE-2026-96656, an external control of file name or path rated 8.6, is the stage that writes an attacker-supplied library into a directory the service loads code from. The three preceding flaws supply the request primitives and the owner token needed to reach that point. Combined, the result is unauthenticated remote code execution.&lt;br&gt;
Reachability is what converts "affected" into "exposed". Common paths to reachability include an explicit router port forward for TCP 32400, UPnP or NAT-PMP automatic mapping triggered by the application's remote access feature, a reverse proxy or tunnel configured for convenience, and cloud-hosted deployments where the firewall allows inbound access by default.&lt;br&gt;
The first two are the ones administrators forget, because they were created by software rather than by a person writing a firewall rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step one: find out what is actually forwarded
&lt;/h2&gt;

&lt;p&gt;Start at the perimeter and work inward. On the router, list every active port forward and inspect the UPnP mapping table, which is often a separate page or an API call and frequently shows entries that the port forwarding page does not. On hosts behind the router, check whether the Plex service itself enabled mapping by querying the application's remote access status.&lt;br&gt;
For a fleet, the equivalent is external attack surface measurement. ZoomEye queries executed for this article returned 508,009 matches for &lt;code&gt;product="Plex Media Server"&lt;/code&gt;, 508,033 for &lt;code&gt;app="Plex"&lt;/code&gt; and 507,974 for &lt;code&gt;app="Plex Media Server"&lt;/code&gt;. A CVE-scoped filter &lt;code&gt;vul.cve="CVE-2026-96656"&lt;/code&gt; returned zero. Those numbers count internet-facing services matching Plex fingerprints, not vulnerable installations, and they are useful precisely in that role: they tell you which addresses match the product regardless of what your asset register believes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step two: confirm reachability from a real external viewpoint
&lt;/h2&gt;

&lt;p&gt;Testing from inside the network provides false reassurance. UPnP hairpin translation and proxy behaviour mean an internal request to a public address may succeed without any external exposure existing, or fail while exposure does exist. Use an external vantage point or an independent measurement service, and test the actual port, not the hostname.&lt;br&gt;
Record the result against the asset. "Internally reachable" is not the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step three: decide whether the exposure is required
&lt;/h2&gt;

&lt;p&gt;Remote access is a genuine feature with legitimate uses, so the audit outcome is not always removal. Three defensible end states exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Removed.&lt;/strong&gt; No inbound path. Suitable when the server serves a single household or a building-local display.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mediated.&lt;/strong&gt; Reachability preserved but filtered through a VPN, an authenticated reverse proxy, or an identity-aware access gateway. The Plex port is no longer the first thing a scanner sees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retained and monitored.&lt;/strong&gt; Exposure accepted with an explicit owner, a patch SLA, and external monitoring that alerts when the fingerprint appears in public scan data.
The unacceptable fourth state is exposure nobody knows about, which is the normal condition of automatic UPnP mappings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step four: patch and verify together
&lt;/h2&gt;

&lt;p&gt;Closing the network path does not patch the application, and patching does not close the path. Both are needed. Upgrade to 1.43.3.10861 or later, then confirm the running version from the web interface, because package managers and update prompts disagree more often than their documentation suggests.&lt;br&gt;
After patching, revisit the version quarterly. Exploitation of this chain was observed in October 2026, two months after the fix shipped, which shows how long an exposed population persists without active review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step five: assume exposure implies risk of compromise
&lt;/h2&gt;

&lt;p&gt;A server that was reachable with an unpatched build may have been compromised regardless of current version. Reporting on the campaign describes mining and proxy payloads that leave the host functional and the interface responsive. Absence of an obvious outage is not evidence of integrity.&lt;br&gt;
Three checks produce useful signal: unexpected shared objects in the codec directory, processes consuming resources outside playback windows, and outbound connections to hosts the server has no relationship with. Any positive result moves the host into incident handling rather than patch management.&lt;/p&gt;

&lt;h2&gt;
  
  
  A configuration register worth keeping
&lt;/h2&gt;

&lt;p&gt;Six fields make the difference between an audited deployment and a forgotten one: product and version, exposure status, exposure mechanism (forward, UPnP, tunnel, cloud), owner, patch policy, and last external verification date. The Plex2Shell campaign would have had far less reach if operators kept the fourth and sixth fields for their media servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CVE-2026-96656, CVE-2026-96652, CVE-2026-96654 and CVE-2026-96655 records, CVE.org.&lt;/li&gt;
&lt;li&gt;Plex Media Server security release thread, forums.plex.tv.&lt;/li&gt;
&lt;li&gt;Plex support documentation on remote access, UPnP and NAT-PMP behaviour.&lt;/li&gt;
&lt;li&gt;Ars Technica, reporting on exploitation of the Plex chain, October 2026.&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities catalog, October 2026 additions.&lt;/li&gt;
&lt;li&gt;ZoomEye queries executed for this article: &lt;code&gt;product="Plex Media Server"&lt;/code&gt; (508,009), &lt;code&gt;app="Plex"&lt;/code&gt; (508,033), &lt;code&gt;app="Plex Media Server"&lt;/code&gt; (507,974), &lt;code&gt;vul.cve="CVE-2026-96656"&lt;/code&gt; (0).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>plex</category>
      <category>rce</category>
      <category>exposure</category>
    </item>
    <item>
      <title>1,537 titles and 14 fingerprints: UVDesk exposure, and the 9.3 behind it</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 04:21:50 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/1537-titles-and-14-fingerprints-uvdesk-exposure-and-the-93-behind-it-4gb7</link>
      <guid>https://dev.to/onaeiuspkz/1537-titles-and-14-fingerprints-uvdesk-exposure-and-the-93-behind-it-4gb7</guid>
      <description>&lt;h1&gt;
  
  
  1,537 titles and 14 fingerprints: UVDesk exposure, and the 9.3 behind it
&lt;/h1&gt;

&lt;p&gt;UVDesk Community Skeleton is an open-source helpdesk, and its two ZoomEye counts differ by a factor of a hundred: 1,537 title matches against 14 application fingerprints on 27 October 2026. That gap is not a measurement error. It is the difference between "a page whose title names the product" and "a host that a rule can positively identify", and the case for caring about the population comes from a record with a 9.3 score that landed in September.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurement
&lt;/h2&gt;

&lt;p&gt;ZoomEye, &lt;code&gt;sub_type=all&lt;/code&gt;, one page per query, totals only, no host records retrieved:&lt;br&gt;
| Query | Total |&lt;br&gt;
|---|---|&lt;br&gt;
| &lt;code&gt;title:"UVDesk"&lt;/code&gt; | 1,537 |&lt;br&gt;
| &lt;code&gt;app:"UVDesk"&lt;/code&gt; | 14 |&lt;br&gt;
A hundred-to-one is the widest ratio in this collection outside the products whose titles are ordinary English words, and it needs an explanation before either figure goes into a report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the ratio is this wide
&lt;/h2&gt;

&lt;p&gt;UVDesk is deployed as a Symfony application behind a web server, and most operators publish it on a domain or subdomain of their own. The framework's default templates render a title, but theme overrides and white-labelling are common in a helpdesk — the portal is customer-facing, so organisations rename it. The title becomes "Support Centre" or the company name; the underlying Symfony assets, cookies and route patterns do not change, so the fingerprint still matches.&lt;br&gt;
That produces the classic asymmetry: the fingerprint catches white-labelled deployments, and the title catches the ones that never customised. Fourteen fingerprint matches describe hosts the index can positively identify; 1,537 title matches describe pages whose title contains the string, which includes documentation sites, tutorial pages, theme marketplaces and comparison articles alongside live instances.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes the 14 worth more than their size
&lt;/h2&gt;

&lt;p&gt;On 16 September 2026, CVE-2026-92805 was published against UVDesk Community Skeleton through 1.1.8: the installation wizard endpoints in the &lt;code&gt;ConfigureHelpdesk&lt;/code&gt; controller "fail to authenticate or validate installation state", so an unauthenticated caller can repoint the database and create super administrator accounts. CVSS v3.1 score 9.3, and no account required.&lt;br&gt;
Four more records sit in the same product family, all authorization failures in ordinary features: stored XSS in the SwiftMailer configuration identifier (5.1), a saved-reply endpoint that lets agents read replies belonging to other support groups (5.3), an &lt;code&gt;editAgent&lt;/code&gt; privilege escalation where an agent with agent-management rights can set their own role to &lt;code&gt;ROLE_ADMIN&lt;/code&gt; (8.6), and an IDOR in &lt;code&gt;rateTicket&lt;/code&gt; that lets a customer rate other customers' tickets (5.3).&lt;br&gt;
The set has a shape worth naming: every one of them is a case where the request is trusted to describe the object, the group or the role it wants. A helpdesk is a concentration of exactly the data those boundaries protect — correspondence, contact records, and often credentials pasted into a ticket by a confused user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the two numbers together
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery: use the fingerprint.&lt;/strong&gt; &lt;code&gt;app:"UVDesk"&lt;/code&gt; finds white-labelled instances that a title query misses. Fourteen is small, and inside your own address space a small precise list is worth more than a large imprecise one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then test the wizard path directly.&lt;/strong&gt; The routes are public in the skeleton repository: &lt;code&gt;/wizard/xhr/check-requirements&lt;/code&gt;, &lt;code&gt;/wizard/xhr/verify-database-credentials&lt;/code&gt;, &lt;code&gt;/wizard/xhr/intermediary/super-user&lt;/code&gt;, &lt;code&gt;/wizard/xhr/load/migrations&lt;/code&gt;, &lt;code&gt;/wizard/xhr/load/super-user&lt;/code&gt;. A request to any of these on an installed host that reaches the controller instead of being refused is the finding, and it needs no payload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version first, exposure second.&lt;/strong&gt; Core-framework fixes for the three 2025 records are in 1.1.7; the wizard record is against the skeleton through 1.1.8. An exposed instance on either side of those boundaries is a different conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit administrators after any suspicion.&lt;/strong&gt; CVE-2025-71421 leaves an administrator account behind, and CVE-2026-92805 creates one. Enumerate accounts with &lt;code&gt;ROLE_ADMIN&lt;/code&gt; and check each against change control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reporting the pair
&lt;/h2&gt;

&lt;p&gt;The honest sentence is: 1,537 indexed pages carry UVDesk in their title, 14 hosts are positively identified by fingerprint, and the population of running instances lies between those observations rather than at either end. Quoting 1,537 as an exposure count inflates by two orders of magnitude; quoting 14 as a census assumes every operator customised their portal. Reporting both, with the reason for the gap, is the only version that survives review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;Both totals are single-day index observations from one provider. The explanation for the ratio is an inference about white-labelling and Symfony asset patterns, not a classification of matched pages. No host was inspected, no wizard path was tested against a live system for this article, and no exploitation in the wild is asserted. CVE identifiers, scores and version boundaries are quoted from their NVD records.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NVD record for CVE-2026-92805: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-92805" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-92805&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;UVDesk community-skeleton repository: &lt;a href="https://github.com/uvdesk/community-skeleton" rel="noopener noreferrer"&gt;https://github.com/uvdesk/community-skeleton&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;UVDesk core-framework release v1.1.7: &lt;a href="https://github.com/uvdesk/core-framework/releases/tag/v1.1.7" rel="noopener noreferrer"&gt;https://github.com/uvdesk/core-framework/releases/tag/v1.1.7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2025-71421: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2025-71421" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2025-71421&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2025-71420: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2025-71420" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2025-71420&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2026-105029: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-105029" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-105029&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye search syntax reference: &lt;a href="https://www.zoomeye.org/doc" rel="noopener noreferrer"&gt;https://www.zoomeye.org/doc&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>exposure</category>
      <category>helpdesk</category>
      <category>measurement</category>
    </item>
    <item>
      <title>CVE-2026-111497: how a Brotli block-switch error became a Node.js memory write</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Tue, 27 Oct 2026 01:22:44 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/cve-2026-111497-how-a-brotli-block-switch-error-became-a-nodejs-memory-write-lai</link>
      <guid>https://dev.to/onaeiuspkz/cve-2026-111497-how-a-brotli-block-switch-error-became-a-nodejs-memory-write-lai</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-111497: how a Brotli block-switch error became a Node.js memory write
&lt;/h1&gt;

&lt;p&gt;A single wrong assumption inside a streaming decompressor is enough to turn a malformed archive into a memory-corruption primitive. CVE-2026-111497 is that case for the Brotli decoder shipped with Node.js: input that should be rejected as invalid is instead treated as merely incomplete, and the decoder keeps copying into a fixed-size internal buffer.&lt;/p&gt;

&lt;p&gt;The Node.js project published the fix in its October 21, 2026 security releases, alongside nine other CVEs. The Singapore Cyber Security Agency rates the Brotli issue 9.8 on CVSS v3.1, while the Node.js advisory classifies the same defect as high. Both statements describe one defect; the difference is scoring convention, not disagreement about the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the decoder did wrong
&lt;/h2&gt;

&lt;p&gt;Brotli is a general-purpose compression format, and like any streaming decoder it processes input in pieces. A stream is divided into meta-blocks and blocks, and the decoder carries state between calls until a block ends. When the state machine encounters a block switch it cannot interpret, the correct response is to declare a permanent format error and stop.&lt;/p&gt;

&lt;p&gt;According to the advisory, the bundled decoder did something else. An invalid block switch was reported as a temporary need for more input. A caller that faithfully follows the streaming contract then does the reasonable thing: it feeds more bytes and asks the decoder to continue. The internal buffer holding that state is eight bytes wide, and it kept receiving input it was never sized to hold. The result is a write past the end of the buffer, in the same process that is decoding untrusted content.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an attacker actually needs
&lt;/h2&gt;

&lt;p&gt;The precondition is application-level rather than network-level. Something in the deployment has to hand attacker-controlled Brotli data to &lt;code&gt;node:zlib&lt;/code&gt;. That covers a lot of ground in real services: an API that accepts a compressed request body, a worker that unpacks a compressed job payload, a proxy or gateway written in Node.js that inflates upstream responses, or a CLI that opens a compressed file produced elsewhere.&lt;/p&gt;

&lt;p&gt;Where such a path exists, the consequences follow the usual pattern for an out-of-bounds write in a parser. The process can die, which is a denial of service. Memory adjacent to the overflow can be read back or reflected through later output, which is disclosure of process memory. And with enough control over the overwritten bytes, an attacker can redirect execution, which is remote code execution in the advisory's wording.&lt;/p&gt;

&lt;p&gt;Two details keep this from being a universal remote exploit. First, the vulnerable code sits behind the application's choice to decompress. A Node.js service that never inflates Brotli input never reaches the bug, no matter what an attacker sends. Second, the write is small and constrained by the decoder's state machine, so weaponising it demands more than a fuzzer crash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixed versions and the buffer story
&lt;/h2&gt;

&lt;p&gt;The affected release lines are 22.x, 24.x and 26.x. Fixes are 22.23.4, 24.22.1 and 26.12.1, and the project notes that end-of-life lines are always affected when a security release lands, which is a polite way of saying that unsupported branches will not receive this patch at all.&lt;/p&gt;

&lt;p&gt;The upstream component matters too. The CVE record attributes the defect to Brotli 1.0.3 through 1.2.0 in &lt;code&gt;c/dec/decode.c&lt;/code&gt;, with fixes in 1.0.10, 1.1.1 and 1.2.1. Teams that vendor Brotli separately from Node.js, or build native services against the same library, inherit the same decode path and need the same version floor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do this week
&lt;/h2&gt;

&lt;p&gt;Upgrade to the fixed release on each supported line and treat older branches as unsupported rather than merely unpatched. Where an upgrade has to wait, reduce reachability: cap decompressed and compressed sizes before inflation, reject Brotli bodies from untrusted clients when the endpoint does not require them, and keep the decoding work in a process that does not hold credentials worth stealing.&lt;/p&gt;

&lt;p&gt;It is also worth checking the dependency rather than only the runtime version string. A container built on an older base image, or a service pinned to a Node.js build from before the release, will report the same application version while carrying the vulnerable decoder.&lt;/p&gt;

&lt;p&gt;The bug was reported by Khai Tran and Sylvie Mayer of OpenAI Codex Security and fixed by mcollina and aduh95. It is a reminder that the boring parts of a runtime, the decoders nobody reads, decide how much damage a malformed packet can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" rel="noopener noreferrer"&gt;Node.js October 21, 2026 Security Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-154/" rel="noopener noreferrer"&gt;Singapore CSA alert AL-2026-154&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tenable.com/cve/CVE-2026-111497" rel="noopener noreferrer"&gt;CVE-2026-111497 record&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>vulnerability</category>
      <category>node</category>
      <category>brotli</category>
    </item>
    <item>
      <title>The Codecs directory: why CVE-2026-96656 turns a transcoder preference into code execution</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 22:24:03 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/the-codecs-directory-why-cve-2026-96656-turns-a-transcoder-preference-into-code-execution-49a3</link>
      <guid>https://dev.to/onaeiuspkz/the-codecs-directory-why-cve-2026-96656-turns-a-transcoder-preference-into-code-execution-49a3</guid>
      <description>&lt;h1&gt;
  
  
  The Codecs directory: why CVE-2026-96656 turns a transcoder preference into code execution
&lt;/h1&gt;

&lt;p&gt;Of the four Plex Media Server issues fixed in 1.43.3.10861, only CVE-2026-96656 gives an attacker the final step. The other three produce requests, internal calls and a token. This one plants a file where the service looks for code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the NVD record actually says
&lt;/h2&gt;

&lt;p&gt;The record for CVE-2026-96656 describes an external control of file name or path flaw, scored 7.2 on CVSS 3.1 by a secondary scoring source. Three details carry the exploit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The preference &lt;code&gt;TranscoderH264Options&lt;/code&gt; is appended verbatim to x264's option string on every transcode.&lt;/li&gt;
&lt;li&gt;An admin user can therefore write arbitrary files.&lt;/li&gt;
&lt;li&gt;At startup, all &lt;code&gt;.so&lt;/code&gt; files are run without signature, execute bit or symbol checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plex's own summary is shorter: an arbitrary file write to the Codecs directory through transcoder preferences. CISA classifies the same issue as CWE-73 and lists it in the Known Exploited Vulnerabilities catalog from 2026-10-20, with a due date of 2026-10-23 and a forensic triage requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a verbatim append matters
&lt;/h2&gt;

&lt;p&gt;An option string that is passed to an external encoder is normally built from fixed fields. If a user-controlled preference is concatenated without quoting or validation, characters that mean something to the shell or to the argument parser stop being data. That is the mechanism class here: the value is trusted where it should be escaped.&lt;/p&gt;

&lt;p&gt;The consequence of the flaw is a file write, not execution by itself. Execution comes from the loading behaviour that follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an unsigned shared object runs
&lt;/h2&gt;

&lt;p&gt;Plex ships its own transcoder and stores codec libraries in a Codecs directory inside the server data path. On startup the service loads the shared objects it finds there. According to the NVD record there is no signature verification, no requirement that the file carry the execute bit, and no symbol check against an allowlist.&lt;/p&gt;

&lt;p&gt;That combination converts the file write into persistence. An attacker who can place a &lt;code&gt;.so&lt;/code&gt; file in the directory does not need to exploit a memory corruption bug, defeat ASLR or find a gadget chain. The loader does the work on the next start, under the privileges of the Plex service account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The role of the other three CVEs
&lt;/h2&gt;

&lt;p&gt;CVE-2026-96656 requires administrative access, which on a hardened deployment is not something an unauthenticated attacker has. That is what the rest of the chain supplies. CVE-2026-96652 gives an unauthenticated SSRF through &lt;code&gt;/player/timeline&lt;/code&gt; with any &lt;code&gt;X-Plex-Token&lt;/code&gt; value. CVE-2026-96654 reaches internal agent functions over the loopback interface through &lt;code&gt;searchOne&lt;/code&gt;. CVE-2026-96655 discloses the server owner's admin token through the transcode path parameter.&lt;/p&gt;

&lt;p&gt;With the owner token, the attacker holds the admin capability the file write needs. Plex states the combined effect plainly: chained together, the issues let an unauthenticated remote attacker run code with the privileges of the Plex Media Server process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detection on a live host
&lt;/h2&gt;

&lt;p&gt;Because the payload is a file, this part of the chain is inspectable. Compare the contents of the Codecs folder against a known-good installation of the same version. Any &lt;code&gt;.so&lt;/code&gt; or &lt;code&gt;.dll&lt;/code&gt; file without a matching counterpart on a clean build deserves a hash and a timestamp.&lt;/p&gt;

&lt;p&gt;Then read &lt;code&gt;Preferences.xml&lt;/code&gt;. A &lt;code&gt;TranscoderH264Options&lt;/code&gt; value that nobody on the team set is the precondition for the write. Plex recommends checking that file for transcoder options you did not configure, and deleting everything in the Codecs folder as part of remediation.&lt;/p&gt;

&lt;p&gt;Process names matter as a secondary signal. Plex lists &lt;code&gt;myawesomeproxy&lt;/code&gt;, &lt;code&gt;mylovelyminer&lt;/code&gt; and &lt;code&gt;x12345&lt;/code&gt; as examples observed after exploitation, and notes outbound traffic to &lt;code&gt;proxystream.st&lt;/code&gt; plus high CPU while idle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation that addresses the loader
&lt;/h2&gt;

&lt;p&gt;Upgrading to 1.43.3.10861 or later closes the write path, but it does not remove a file that is already in the Codecs directory. Reboot after the upgrade only if the directory was verified clean.&lt;/p&gt;

&lt;p&gt;Where compromise is plausible, Plex recommends rebuilding the server from a clean installation instead of reusing the data directory, deleting the Codecs contents, signing out all devices and changing the Plex password. Treat mounted shares and credentials reachable from the service account as exposed.&lt;/p&gt;

&lt;p&gt;A tighter default would help beyond this CVE: keep the server's data directory writable only by the service account, monitor that directory for new shared objects, and restrict remote access and port 32400 forwarding to hosts that need them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure context
&lt;/h2&gt;

&lt;p&gt;A ZoomEye query for &lt;code&gt;app="Plex Media Server"&lt;/code&gt; returned 507,974 matching assets when this article was prepared, while &lt;code&gt;vul.cve="CVE-2026-96654"&lt;/code&gt; returned 0. The product count measures internet-facing Plex installations, not hosts confirmed vulnerable, and it does not reveal which of them have untrusted users with admin rights.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CVE-2026-96656 record: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-96656" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-96656&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Plex security notice: &lt;a href="https://forums.plex.tv/t/important-security-update-for-plex-media-server-v1-43-2-and-earlier/942319" rel="noopener noreferrer"&gt;https://forums.plex.tv/t/important-security-update-for-plex-media-server-v1-43-2-and-earlier/942319&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CISA KEV entry for CVE-2026-96656: &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-96656" rel="noopener noreferrer"&gt;https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-96656&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CVE-2026-96654 record: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-96654" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-96654&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CVE-2026-96655 record: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-96655" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-96655&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>plexmediaserver</category>
      <category>cve202696654</category>
      <category>remotecodeexecution</category>
    </item>
    <item>
      <title>Wavlink returns 3,502 fingerprint matches, 73 title matches, and zero hosts that carry both</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 19:21:02 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/wavlink-returns-3502-fingerprint-matches-73-title-matches-and-zero-hosts-that-carry-both-1l3j</link>
      <guid>https://dev.to/onaeiuspkz/wavlink-returns-3502-fingerprint-matches-73-title-matches-and-zero-hosts-that-carry-both-1l3j</guid>
      <description>&lt;h1&gt;
  
  
  Wavlink returns 3,502 fingerprint matches, 73 title matches, and zero hosts that carry both
&lt;/h1&gt;

&lt;p&gt;CVE-2026-113802 was published on 20 October 2026 against Wavlink WL-WN530BE1-A firmware through M30BE1_V251117, an OS command injection in the &lt;code&gt;ioos&lt;/code&gt; binary. The &lt;code&gt;sub_23B54&lt;/code&gt; function passes the unsanitised &lt;code&gt;file_id&lt;/code&gt; parameter of &lt;code&gt;/protocol.csp?opt=ovpn_file&lt;/code&gt; requests with &lt;code&gt;type=del&lt;/code&gt; to &lt;code&gt;popen()&lt;/code&gt;. A remote unauthenticated attacker can send a forged &lt;code&gt;IP-FROM: 127.0.0.1&lt;/code&gt; header to bypass login and execute commands as root. NVD scores it 9.8 under CVSS 3.1 and 9.3 under CVSS 4.0.&lt;br&gt;
That combination, unauthenticated and root, makes the deployment count the question worth answering, and the data returns a conflict.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurement
&lt;/h2&gt;

&lt;p&gt;Queries ran through the ZoomEye SDK on 27 October 2026 with &lt;code&gt;sub_type=all&lt;/code&gt; and &lt;code&gt;pagesize=1&lt;/code&gt;.&lt;br&gt;
| Query | Role | Matched total |&lt;br&gt;
| --- | --- | ---: |&lt;br&gt;
| &lt;code&gt;app="Wavlink"&lt;/code&gt; | vendor application fingerprint | 3,502 |&lt;br&gt;
| &lt;code&gt;title="Wavlink"&lt;/code&gt; | page title text | 73 |&lt;br&gt;
| &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; port=80&lt;/code&gt; | fingerprint on port 80 | 2,992 |&lt;br&gt;
| &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; port=443&lt;/code&gt; | fingerprint on HTTPS | 449 |&lt;br&gt;
| &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; service="http"&lt;/code&gt; | fingerprint with HTTP service | 2,905 |&lt;br&gt;
| &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; title="Wavlink"&lt;/code&gt; | fingerprint and title together | 0 |&lt;br&gt;
No count identifies a WL-WN530BE1-A, and no scan field reports firmware version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero is the finding
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; title="Wavlink"&lt;/code&gt; returns 0 against a fingerprint population of 3,502. Not a small overlap, not a partial one. Zero.&lt;br&gt;
Two explanations are available and both are plausible. The first is that Wavlink's administrative interface does not put the vendor name in the HTML title, so the two fields describe genuinely disjoint sets of pages: the fingerprinter recognises a banner or a header that a title query cannot see, and the title never contains the word.&lt;br&gt;
The second is that the conjunction is measuring a field combination that the indexer does not produce for this class of device, in the same way that &lt;code&gt;service="http"&lt;/code&gt; undercounts TLS listeners in other measurements in this series.&lt;br&gt;
Whichever holds, the operational conclusion is the same. Title-based inventory of this product is useless, and the fingerprint is the only handle. A team that searched by title would find 73 hosts out of a population of at least 3,502.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ports: 85 percent on plain HTTP
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; port=80&lt;/code&gt; returns 2,992, which is 85 percent of the fingerprint total. &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; port=443&lt;/code&gt; returns 449, or 13 percent. &lt;code&gt;app="Wavlink" &amp;amp;&amp;amp; service="http"&lt;/code&gt; returns 2,905, almost exactly the port 80 figure.&lt;br&gt;
For consumer networking equipment this is a coherent picture. The devices serve their management interface over plain HTTP on port 80, TLS is uncommon, and the service classification agrees with the port because the listener is unambiguously HTTP.&lt;br&gt;
The figure that matters for the vulnerability is 2,992. An unauthenticated command injection on a device whose management interface is on port 80 is reachable by anyone who can route to that port, and the header-bypass in the advisory means the normal credential prompt does not stand in the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The header bypass is worth understanding on its own
&lt;/h2&gt;

&lt;p&gt;The advisory describes a forged &lt;code&gt;IP-FROM: 127.0.0.1&lt;/code&gt; header as the way to bypass login. The application trusts a client-supplied header to decide whether a request came from the loopback interface, and treats loopback as authenticated.&lt;br&gt;
The pattern is a trust inversion, where a value the client controls decides how the client is treated. Applications behind reverse proxies do something similar when they trust &lt;code&gt;X-Forwarded-For&lt;/code&gt;, and the mitigation is the same. The header must only be honoured when the request arrived from an address that is genuinely the proxy or the loopback interface, and the check must be on the socket's peer address rather than on a header.&lt;br&gt;
On a device where the web server is the same process as the application, there is no proxy and no legitimate reason for a client to supply that header at all. It should be stripped on ingress.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an operator can do
&lt;/h2&gt;

&lt;p&gt;There is no patch described in the advisory beyond the firmware version in the affected range. The device is consumer-grade, so the realistic controls are network-level: do not expose the management interface to the internet, and if remote access is a requirement, put it behind a VPN or an authenticating reverse proxy that strips inbound &lt;code&gt;IP-FROM&lt;/code&gt; headers.&lt;br&gt;
Check the firmware version on any Wavlink device in service and compare it with the range in the record. Then enumerate which of those devices answer on port 80 from outside the local network, since that is the set where the vulnerability is reachable without a further step.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;ZoomEye cyberspace search&lt;/a&gt;, queried 27 October 2026 with &lt;code&gt;sub_type=all&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-113802" rel="noopener noreferrer"&gt;NVD record for CVE-2026-113802&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/F-yyjy/cve/blob/main/WN530BE1(en).md" rel="noopener noreferrer"&gt;Wavlink WN530BE1 analysis referenced by the CVE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vulncheck.com/advisories/wavlink-wl-wn530be1-a-unauthenticated-os-command-injection-in-ioos-protocol-csp-ovpn-file-handler" rel="noopener noreferrer"&gt;VulnCheck advisory for the Wavlink command injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>wavlink</category>
      <category>iot</category>
      <category>routers</category>
    </item>
    <item>
      <title>Four ways to overflow NSD: anatomy of the CVE-2026-101338 batch</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:25:12 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/four-ways-to-overflow-nsd-anatomy-of-the-cve-2026-101338-batch-43h4</link>
      <guid>https://dev.to/onaeiuspkz/four-ways-to-overflow-nsd-anatomy-of-the-cve-2026-101338-batch-43h4</guid>
      <description>&lt;h1&gt;
  
  
  Four ways to overflow NSD: anatomy of the CVE-2026-101338 batch
&lt;/h1&gt;

&lt;p&gt;The four NSD flaws fixed in 4.15.3 are worth reading together because they are variations on one mistake. In each case the zone-file parser derived a write length that did not match the space it had actually reserved. The fixes tighten those checks. The differences between the four cases show how many places a length can go wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  CVE-2026-101338: SVCB, HTTPS, and the extra parameter
&lt;/h2&gt;

&lt;p&gt;SVCB and HTTPS records carry a set of key-value parameters in wire format. The advisory describes a record whose RDATA is filled to the brim, followed by another ECH parameter. Once the limit is passed, the base64 decoder writes attacker-controlled data of unlimited size.&lt;br&gt;
Two failures combine here. The boundary between "the RDATA is full" and "there is room for another parameter" was computed incorrectly, and the decoder that consumes the resulting value had no bound tied to the remaining space. A single confused length check therefore produced an unbounded write rather than a truncated one.&lt;/p&gt;

&lt;h2&gt;
  
  
  CVE-2026-101339: HIP records and a fixed 191-byte overwrite
&lt;/h2&gt;

&lt;p&gt;HIP records contain a rendezvous server field, itself a domain name. When an RDATA is filled near or at its limit and a rendezvous server is appended, the parser overwrites the stack with up to 191 bytes of attacker-controlled data.&lt;br&gt;
The number is instructive. A fixed, bounded overflow of 191 bytes is still enough to redirect a callback or corrupt saved state, but it demands more precision from an attacker than an unbounded write. It also suggests the check that failed here was local to the rendezvous field rather than the whole record.&lt;/p&gt;

&lt;h2&gt;
  
  
  CVE-2026-101341: short text tokens slip through
&lt;/h2&gt;

&lt;p&gt;Records that carry series of strings, including TXT, NINFO, SPF, AVC, RESINFO and WALLET, had a subtle gap. Text tokens under 32 bytes were not checked to stay within the space reserved for RDATA, which allows an arbitrarily sized out-of-bounds stack write.&lt;br&gt;
The advisory notes the write can overwrite a callback function pointer that is called directly after parsing. That is the difference between corrupting a buffer and influencing control flow. TXT records are also the most commonly editable type in managed DNS platforms, which raises the practical importance of this one.&lt;/p&gt;

&lt;h2&gt;
  
  
  CVE-2026-101337: base64 token arithmetic
&lt;/h2&gt;

&lt;p&gt;When base64 data is split into pieces of three characters or less, tokens were incorrectly calculated to produce zero bytes. The parser therefore believed it needed no space, while the decoder produced up to 64 KB of attacker-controlled data.&lt;br&gt;
This is a size calculation error rather than a missing bound. The write itself was permitted to proceed based on a computed length of zero, and the ceiling of 64 KB comes from the practical size of the input rather than an explicit limit in the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The precondition that keeps the risk uneven
&lt;/h2&gt;

&lt;p&gt;All four advisories repeat the same constraint. Zone files written out by NSD itself will not be formatted in the required way. The zone file must be fed to NSD directly, typically from an operator-controlled provisioning system.&lt;br&gt;
That single sentence splits the affected population into two groups. Servers whose zone data always arrives through transfers from a peer NSD instance are unlikely to see the required shapes in normal operation, though an attacker with write access to the zone directory still reaches the vulnerable parser. Servers whose zone data is assembled by other software are exposed to whatever that software allows its users to express.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;The advisories describe the outcome as execution of arbitrary commands. NSD normally runs as a long-lived daemon, and a corrupted parse can crash it before an attacker achieves anything useful. Getting from a crash to execution requires the write to be shaped for the target build, with the usual dependencies on compiler options, memory layout, and platform hardening.&lt;br&gt;
For a primary authoritative server, successful execution exposes the zone data it serves and the answers it returns. For a hidden primary that feeds public secondaries, the exposure runs through replication rather than direct queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affected scope
&lt;/h2&gt;

&lt;p&gt;NSD 4.10.0 through 4.15.2 inclusive. Earlier releases and 4.15.3 are unaffected. SecurityOnline reports CVSS v4 scores of 8.7 for each CVE and records no public proof-of-concept or in-the-wild exploitation at publication time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure context
&lt;/h2&gt;

&lt;p&gt;Public measurement sizes the service population, not the vulnerable subset. A ZoomEye query for &lt;code&gt;app="NSD"&lt;/code&gt; returned 116,266 assets at the time of writing, and &lt;code&gt;banner="NSD"&lt;/code&gt; returned 628,831. A CVE-scoped query for &lt;code&gt;vul.cve="CVE-2026-101338"&lt;/code&gt; returned zero, which is normal within days of disclosure. Neither count indicates version, configuration, or whether the server parses externally supplied zone files.&lt;br&gt;
Search link: &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJOU0Qi" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=YXBwPSJOU0Qi&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation
&lt;/h2&gt;

&lt;p&gt;Move to NSD 4.15.3 or later, from &lt;a href="https://nlnetlabs.nl/downloads/nsd/nsd-4.15.3.tar.gz" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/nsd-4.15.3.tar.gz&lt;/a&gt;. Per-CVE diffs against 4.15.2 exist for backporting, for example &lt;a href="https://nlnetlabs.nl/downloads/nsd/patch_CVE-2026-101337.diff" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/patch_CVE-2026-101337.diff&lt;/a&gt;, applied with &lt;code&gt;patch -p1&lt;/code&gt; and followed by &lt;code&gt;make install&lt;/code&gt;. Verify the running binary after restart, and run &lt;code&gt;nsd-checkzone&lt;/code&gt; from the fixed release against production zones before the change window.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NLnet Labs advisory for CVE-2026-101338: &lt;a href="https://nlnetlabs.nl/downloads/nsd/CVE-2026-101338.txt" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/CVE-2026-101338.txt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NLnet Labs advisory for CVE-2026-101341: &lt;a href="https://nlnetlabs.nl/downloads/nsd/CVE-2026-101341.txt" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/CVE-2026-101341.txt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NLnet Labs advisory for CVE-2026-101339: &lt;a href="https://nlnetlabs.nl/downloads/nsd/CVE-2026-101339.txt" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/CVE-2026-101339.txt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NLnet Labs advisory for CVE-2026-101337: &lt;a href="https://nlnetlabs.nl/downloads/nsd/CVE-2026-101337.txt" rel="noopener noreferrer"&gt;https://nlnetlabs.nl/downloads/nsd/CVE-2026-101337.txt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SecurityOnline report: &lt;a href="https://securityonline.info/nsd-stack-overwrite-vulnerability-patched/" rel="noopener noreferrer"&gt;https://securityonline.info/nsd-stack-overwrite-vulnerability-patched/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>dns</category>
      <category>nsd</category>
      <category>vulnerability</category>
      <category>cve2026101338</category>
    </item>
    <item>
      <title>Who Owns the Appliance Nobody Inventoried: Governance Gaps Behind CVE-2026-102764</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 13:20:14 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/who-owns-the-appliance-nobody-inventoried-governance-gaps-behind-cve-2026-102764-5e28</link>
      <guid>https://dev.to/onaeiuspkz/who-owns-the-appliance-nobody-inventoried-governance-gaps-behind-cve-2026-102764-5e28</guid>
      <description>&lt;h1&gt;
  
  
  Who Owns the Appliance Nobody Inventoried: Governance Gaps Behind CVE-2026-102764
&lt;/h1&gt;

&lt;p&gt;Remote-support appliances rarely appear on architecture diagrams. They are bought by a team that needed remote access to work, deployed with an internet listener because that is what the setup guide showed, and then absorbed into operations. CVE-2026-102764 makes that ownership gap expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern the incident exposes
&lt;/h2&gt;

&lt;p&gt;The Record reports that the exploitation involved a remote-support appliance reachable from the internet, that the actor obtained every credential the appliance stored, and that files were modified in a way that survives reboots and configuration resets. Each of those facts depends on the appliance existing as a managed asset with a named owner, an owner who can answer what it reaches and what it stores.&lt;br&gt;
Mandiant's advice, as quoted, is to treat any vulnerable appliance reachable from the internet as potentially compromised until reviewed. That instruction assumes someone can enumerate the appliance, restrict its access, and run the review. Where ownership is unclear, none of those steps has an assignee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why shadow infrastructure accumulates
&lt;/h2&gt;

&lt;p&gt;Three conditions push supporting appliances out of security visibility.&lt;br&gt;
The procurement path bypasses security review. A support tool purchased by a help-desk manager, with a subscription tied to a departmental budget, does not trigger the same assessment as a customer-facing platform.&lt;br&gt;
The access pattern looks internal. The appliance reaches inward to endpoints. Its exposure is the listener pointing outward, which is a deployment detail rather than a stated purpose.&lt;br&gt;
The register is built for servers. Asset inventories that enumerate hosts by operating system tend to miss embedded appliances, which report unusual banners and often have no agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What external measurement adds to governance
&lt;/h2&gt;

&lt;p&gt;A fingerprint search is not an inventory system, but it is an independent check on one.&lt;br&gt;
ZoomEye reported 2,185 assets matching &lt;code&gt;app="Bomgar"&lt;/code&gt; on 2026-10-26. Against a single organisation, the same method restricted to owned address ranges and certificate subjects produces a list that can be compared to the internal register. Anything visible externally and absent internally is unowned by definition, at least in the register that security relies on.&lt;br&gt;
| Governance question | Internal answer | External cross-check |&lt;br&gt;
| --- | --- | --- |&lt;br&gt;
| Do we operate this appliance? | Asset register entry | Fingerprint visible in owned ranges |&lt;br&gt;
| Who is responsible? | Change record owner | Named owner confirmed for each visible host |&lt;br&gt;
| What can it reach? | Network policy and firewall rules | Certificate subjects and upstream endpoints reached |&lt;br&gt;
| Is it patched? | Patch job status | Version indicators where the banner exposes them |&lt;/p&gt;

&lt;h2&gt;
  
  
  Assigning the owner is the control
&lt;/h2&gt;

&lt;p&gt;The fix is administrative. Every externally visible remote-support appliance gets a named owner and a change record, and that owner is accountable for patching, for credential rotation, and for reporting reachability changes. Then the register is tested against external measurement every quarter, and the delta is treated as an incident rather than as housekeeping.&lt;br&gt;
That accountability control determines whether an emergency advisory like BT26-05 can be executed at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the count fits
&lt;/h2&gt;

&lt;p&gt;2,185 is a global figure. It is useful context for a board conversation about how much remote-access surface exists across the internet, and it is not a statement about any single estate. The organisation-specific number is the one that matters, and it only exists if someone runs the query against owned ranges and reconciles the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Record, "Suspected Chinese espionage attackers abusing BeyondTrust IT support zero-day": &lt;a href="https://therecord.media/beyond-trust-cyberattack-china" rel="noopener noreferrer"&gt;https://therecord.media/beyond-trust-cyberattack-china&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD, CVE-2026-102764: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-102764" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-102764&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities catalog, CVE-2026-102764: &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-102764" rel="noopener noreferrer"&gt;https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-102764&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;BeyondTrust advisory BT26-05: &lt;a href="https://www.beyondtrust.com/trust-center/security-advisories/bt26-05" rel="noopener noreferrer"&gt;https://www.beyondtrust.com/trust-center/security-advisories/bt26-05&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye search used for the published count: &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJCb21nYXIi" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=YXBwPSJCb21nYXIi&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>assetmanagement</category>
      <category>beyondtrust</category>
      <category>governance</category>
    </item>
    <item>
      <title>Local Attack Vector, Real Risk: Threat Modelling CVE-2026-106931</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 10:22:53 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/local-attack-vector-real-risk-threat-modelling-cve-2026-106931-3nln</link>
      <guid>https://dev.to/onaeiuspkz/local-attack-vector-real-risk-threat-modelling-cve-2026-106931-3nln</guid>
      <description>&lt;h1&gt;
  
  
  Local Attack Vector, Real Risk: Threat Modelling CVE-2026-106931
&lt;/h1&gt;

&lt;p&gt;A CVSS vector that starts with AV:L invites a specific reaction from busy teams: this is not for us. CVE-2026-106931 in SiteGuard Server Edition carries that vector, and it also carries confirmed exploitation in the wild. Both facts are true, and the gap between them is where a threat model has to do its work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the vector honestly
&lt;/h2&gt;

&lt;p&gt;JVN#88474777 and the EG Secure Solutions alert describe OS command injection (CWE-78) in the statistics feature of SiteGuard Server Edition. The vendor publishes CVSS 4.0 base 8.5 with AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N and CVSS 3.0 base 7.8 with AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.&lt;/p&gt;

&lt;p&gt;Three components of that vector define the threat model. AV:L means the attacker path is local to the host rather than over a network service the WAF exposes. PR:L means low privileges are enough to start. UI:N means no one has to click anything or open a file. What the vector does not cover is how many paths to local access exist on a typical web server, and that number is rarely small.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where local access comes from
&lt;/h2&gt;

&lt;p&gt;A production web server usually hosts more than the WAF. Application code, deployment tooling, scheduled jobs, shared hosting clients and support accounts all sit on the same machine. Each of those is a potential route to the low-privilege local access this flaw requires, and none of them are described by the SiteGuard advisory because they belong to other software.&lt;/p&gt;

&lt;p&gt;That reframing changes the question from whether an attacker can reach SiteGuard to whether an attacker who is already on the host can escalate. For a single-purpose appliance with tightly limited access, the second question is hard to answer yes. For a shared web server with several application stacks, it answers itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What escalation buys
&lt;/h2&gt;

&lt;p&gt;Successful exploitation runs OS commands as root, or as SYSTEM on IIS, on the server hosting SiteGuard. The product is a host-based WAF, so the same machine holds its filter configuration, administrative interface and statistics history. An attacker who escalates by this route inherits a position above the control that was supposed to be watching traffic.&lt;/p&gt;

&lt;p&gt;Neither advisory publishes the technique, attacker identity, victim count or the affected code path in detail. The confirmation of exploitation is the strongest published fact, and it is enough to place the flaw in the escalation stage of an intrusion rather than the initial-access stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affected hosts and the versions that matter
&lt;/h2&gt;

&lt;p&gt;SiteGuard Server Edition Ver2.20 and later is in scope when the statistics feature is enabled, and the feature is enabled by default. Fixed versions are 8.00 Update 5 for Apache, Nginx and IIS, and 7.00 Update 6 for Apache and Nginx on FreeBSD. IIS editions Ver3.10 through Ver4.00 Update 4 are not affected. A vendor patch that replaces statistics processing files exists for installations that cannot upgrade, including end-of-life versions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure as a scoping aid
&lt;/h2&gt;

&lt;p&gt;ZoomEye recorded 507 assets for &lt;code&gt;app="SiteGuard"&lt;/code&gt; and 0 for &lt;code&gt;vul.cve="CVE-2026-106931"&lt;/code&gt;. The product count describes internet-visible SiteGuard software and gives a sense of how much of this WAF is deployed where outside observers can see it. For threat modelling, the more useful inference is architectural: host-based WAFs sit on shared servers, and shared servers concentrate the local-access routes that this flaw depends on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning the model into an action list
&lt;/h2&gt;

&lt;p&gt;First, classify each SiteGuard host by how much unrelated workload runs on it. A dedicated appliance and a shared application server belong in different risk tiers even when they run the same version.&lt;/p&gt;

&lt;p&gt;Second, export diagnostic information before patching. The vendor states the update may erase traces of an attack, so collection is a precondition rather than an optional extra.&lt;/p&gt;

&lt;p&gt;Third, review who can log into the host at low privilege, including service accounts and delegated support access, because that population defines the practical attack surface for AV:L and PR:L.&lt;/p&gt;

&lt;p&gt;Fourth, patch. Where the upgrade is blocked, the statistics feature can be disabled to remove the vulnerable path, and management interface access should be limited to trusted networks. Neither step substitutes for the vendor fix on a host that runs shared workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JVN#88474777: &lt;a href="https://jvn.jp/en/jp/JVN88474777/" rel="noopener noreferrer"&gt;https://jvn.jp/en/jp/JVN88474777/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;EG Secure Solutions alert (Japanese): &lt;a href="https://www.eg-secure.co.jp/siteguard/news/alert-202610-1" rel="noopener noreferrer"&gt;https://www.eg-secure.co.jp/siteguard/news/alert-202610-1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Security Affairs, exploit confirmation and disclosure timeline: &lt;a href="https://securityaffairs.com/201258/security/japans-siteguard-waf-flaw-cve-2026-106931-is-already-being-exploited.html" rel="noopener noreferrer"&gt;https://securityaffairs.com/201258/security/japans-siteguard-waf-flaw-cve-2026-106931-is-already-being-exploited.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ZoomEye records: &lt;code&gt;app="SiteGuard"&lt;/code&gt; = 507, &lt;code&gt;vul.cve="CVE-2026-106931"&lt;/code&gt; = 0. Search link: &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJTaXRlR3VhcmQi" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=YXBwPSJTaXRlR3VhcmQi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vulnerability</category>
      <category>threatmodeling</category>
      <category>privilegeescalation</category>
      <category>webapplicationfirewall</category>
    </item>
    <item>
      <title>Why the Junos October 2026 Flaws Matter Even Without a CISA KEV Entry</title>
      <dc:creator>OnaEiuspkz</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:42:36 +0000</pubDate>
      <link>https://dev.to/onaeiuspkz/why-the-junos-october-2026-flaws-matter-even-without-a-cisa-kev-entry-l1m</link>
      <guid>https://dev.to/onaeiuspkz/why-the-junos-october-2026-flaws-matter-even-without-a-cisa-kev-entry-l1m</guid>
      <description>&lt;h1&gt;
  
  
  Why the Junos October 2026 Flaws Matter Even Without a CISA KEV Entry
&lt;/h1&gt;

&lt;p&gt;CISA's Known Exploited Vulnerabilities catalog is a good prioritisation input and a poor excuse. Nine Junos vulnerabilities were published on 2026-10-14 at CVSS v3.1 9.8, and as of catalog version 2026.10.23 none of them appears in it. That absence says something about observed exploitation, and nothing about what an attacker with the right network position can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vulnerability overview
&lt;/h2&gt;

&lt;p&gt;The set spans four surfaces. Pre-authentication web: CVE-2026-101954 in J-Web and NETCONF session handling, CVE-2026-101986 in J-Web CGI execution, and CVE-2026-101983 in httpd. Pre-authentication service layer: CVE-2026-102175 in the sdxd service-deployment daemon. Routing daemon: CVE-2026-101982 and CVE-2026-101990 in EVPN-VPWS and flowspec handling, CVE-2026-102178 in flowspec re-advertisement, and CVE-2026-33789 plus CVE-2026-33796 in the BGP Monitoring Protocol path.&lt;br&gt;
All nine carry CVSS v4.0 scores between 9.2 and 9.3 and are marked "Awaiting Analysis" in NVD at the time of writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mechanism and exploitation conditions
&lt;/h2&gt;

&lt;p&gt;The reasonable question is what an attacker would need in order to turn any of these into something worth reporting.&lt;br&gt;
For the three J-Web flaws and the httpd flaw, the requirement is a reachable HTTP or HTTPS management service. CVE-2026-101983 additionally needs a J-Web virtual-domain configuration. That is a network topology question, not a credential question.&lt;br&gt;
For CVE-2026-102175, the requirement is control of, or a position to intercept, the SDX/SRC deployment connection. That is a supply-chain-adjacent question: who runs that server, and does the router trust an address that someone else can reach first.&lt;br&gt;
For the five routing daemon flaws, the requirement is an established adjacency, plus specific protocol configuration: flowspec peers, EVPN-VPWS service, update-threading, or a BMP station. CVE-2026-33789 is described as reachable by an unauthenticated BGP peer, which in an environment that accepts sessions from customers or partners is a meaningful distinction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;The consistent outcome across most of the set is root on the routing engine. That is not a data-confidentiality story in the usual sense; it is a story about who controls forwarding. An attacker at that level decides which prefixes are preferred, which traffic is sampled, and which routes are silently dropped. The denial-of-service outcomes are secondary but tactically useful: knocking over the routing daemon during a traffic event is a way to make a mitigation fail at the moment it is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affected products and scope
&lt;/h2&gt;

&lt;p&gt;Junos OS is affected on all versions prior to 23.2R2-S7.7, 23.4 before 23.4R2-S8.13, 24.2 before 24.2R2-S5.5, 24.4 before 24.4R2-S5, 25.2 before 25.2R2-S2, 25.4 before 25.4R1-S3 and 26.2 before 26.2R1-S2. Junos OS Evolved is affected on all versions prior to 23.2R2-S7.7-EVO, 23.4 before 23.4R2-S8.11-EVO, 24.2 before 24.2R2-S5.6-EVO, 24.4 before 24.4R2-S5-EVO, 25.2 before 25.2R2-S2-EVO, 25.4 before 25.4R1-S3-EVO, 26.2 before 26.2R1-S2-EVO, the 23.4X100-EVO branch, 25.2X100 before 25.2X100-D35-EVO and 25.4X300 before 25.4X300-D40-EVO.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure context
&lt;/h2&gt;

&lt;p&gt;ZoomEye returns 343,949 assets for &lt;code&gt;app="Juniper"&lt;/code&gt;, which establishes that these platforms are numerous on the public internet and therefore that scanning is continuous. The number is not an affected count. The distinction is worth making explicitly, because the temptation to quote a large figure as a vulnerable population is exactly the kind of shortcut that leads to wrong decisions in the other direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the KEV absence actually means
&lt;/h2&gt;

&lt;p&gt;A KEV entry records confirmed in-the-wild exploitation. Its absence means no such confirmation existed in this catalog version, not that the flaw is theoretical. Plenty of exploited vulnerabilities stay outside the catalog until evidence accumulates. Routers are unusually good at hiding compromise: endpoint tooling rarely reaches them, configuration edits leave few disk artefacts, and an attacker who controls forwarding has little reason to announce it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation and validation
&lt;/h2&gt;

&lt;p&gt;Upgrade to the fixed build for the deployed branch, and use the configuration-dependent preconditions to order the work rather than to defer it. Interim mitigations remove attack paths without removing the flaw: disable web management that nobody uses, restrict management reachability, disable BMP where no monitoring station exists, and prune adjacencies that no longer serve a purpose.&lt;br&gt;
Validation should confirm the release on each routing engine and review configuration integrity on devices that were reachable while unpatched. A KEV status that may change next week is not a reason to leave a 9.8 root vulnerability in place this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Juniper security bulletin, October 2026: &lt;a href="https://supportportal.juniper.net/s/article/2026-10-Security-Bulletin-Junos-OS-and-Junos-OS-Evolved-Multiple-vulnerabilities-resolved" rel="noopener noreferrer"&gt;https://supportportal.juniper.net/s/article/2026-10-Security-Bulletin-Junos-OS-and-Junos-OS-Evolved-Multiple-vulnerabilities-resolved&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2026-102175: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-102175" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-102175&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2026-101986: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-101986" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-101986&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2026-102178: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-102178" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-102178&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVD record for CVE-2026-33789: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-33789" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-33789&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities catalog: &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="noopener noreferrer"&gt;https://www.cisa.gov/known-exploited-vulnerabilities-catalog&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>security</category>
    </item>
  </channel>
</rss>
