<?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: jeffrey</title>
    <description>The latest articles on DEV Community by jeffrey (@jeffreyciend).</description>
    <link>https://dev.to/jeffreyciend</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%2F4127405%2F7e2bf268-0802-463b-808c-ea62a8f1cb9c.jpeg</url>
      <title>DEV Community: jeffrey</title>
      <link>https://dev.to/jeffreyciend</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeffreyciend"/>
    <language>en</language>
    <item>
      <title>CVE-2026-102795 in Apache Traffic Server: building a version inventory before you patch</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Wed, 07 Oct 2026 08:00:33 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/cve-2026-102795-in-apache-traffic-server-building-a-version-inventory-before-you-patch-1bc5</link>
      <guid>https://dev.to/jeffreyciend/cve-2026-102795-in-apache-traffic-server-building-a-version-inventory-before-you-patch-1bc5</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-102795 in Apache Traffic Server: building a version inventory before you patch
&lt;/h1&gt;

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

&lt;p&gt;Apache Traffic Server is affected by CVE-2026-102795, an improper access control flaw that the Apache Software Foundation disclosed on 2 October 2026 as part of a batch of eight CVEs spanning three projects. The same advisory batch covered Apache OpenOffice and the Apache Directory LDAP API. Reporting on the batch places CVE-2026-102795 at the top of the severity table with a 9.3 CVSSv3 score, while the accompanying prose describes it as an improper access control issue rated 7.0 on CVSS 4.0. Both figures appear in the same secondary report, and NVD had not published an analysed record at the time of writing, so treat the precise score as unsettled rather than as an established fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the flaw concerns
&lt;/h2&gt;

&lt;p&gt;The published description states that a "SNI to Host header matching policy is not properly enforced". SNI, the Server Name Indication extension, travels in the TLS handshake and tells a listener which certificate and, by extension, which virtual service the client expects. The HTTP Host header carries a similar claim inside the request itself. Operators who run Traffic Server in front of multiple backends typically want those two values checked against each other so that a client cannot retrieve content through an unintended route. CVE-2026-102795 concerns a case where that enforcement does not hold as intended.&lt;br&gt;
Apache has not published a step-by-step exploitation narrative in the material available so far, and no public proof-of-concept is confirmed. That makes the practical question narrower than it first appears: which of your properties relies on SNI and Host agreement for separation, and does that separation still hold after the upgrade?&lt;/p&gt;

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

&lt;p&gt;The affected range is unusually clean to enumerate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Traffic Server 9.0.0 through 9.2.14&lt;/li&gt;
&lt;li&gt;Apache Traffic Server 10.0.0 through 10.1.3
The fixed releases are 9.2.15 and 10.1.4. Administrators should note that a prior record, CVE-2026-41920, described the same access control weakness but listed an incorrect 9.x range and named 9.1.15 as the fix. Anyone who used that earlier record as the basis for a change ticket may have concluded they were already current. They were not.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A ZoomEye query for &lt;code&gt;app="Apache Traffic Server"&lt;/code&gt; returned &lt;strong&gt;311,469&lt;/strong&gt; matching assets on 3 October 2026. A separate query on &lt;code&gt;vul.cve="CVE-2026-102795"&lt;/code&gt; returned 0, which is expected for a freshly published CVE that indexers have not yet correlated.&lt;br&gt;
The product figure describes the size of the observable population. It does not mean that 311,469 systems are vulnerable, because it cannot distinguish a current build from an older one and cannot tell whether SNI and Host matching is part of any given deployment's design.&lt;/p&gt;

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

&lt;p&gt;Upgrade to 9.2.15 or 10.1.4 and then confirm the change rather than assuming it. A useful check has three parts. First, verify the running build identifier through your normal configuration endpoint or package metadata. Second, if your deployment depends on SNI and Host agreement, reproduce the routing decision in a staging environment with both a matching and a deliberately mismatched pair. Third, keep the evidence attached to the change record, because the superseded CVE record makes "we already patched this" a plausible and incorrect conclusion for a reviewer to reach.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;SecurityOnline reporting on the Apache advisory batch, 3 October 2026&lt;/li&gt;
&lt;li&gt;Apache Traffic Server download and release information&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>apachetrafficserver</category>
      <category>accesscontrol</category>
    </item>
    <item>
      <title>ZooKeeper Information Disclosure: Existence Watches Leak Restricted Znode Names</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Wed, 07 Oct 2026 05:20:33 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/zookeeper-information-disclosure-existence-watches-leak-restricted-znode-names-12b9</link>
      <guid>https://dev.to/jeffreyciend/zookeeper-information-disclosure-existence-watches-leak-restricted-znode-names-12b9</guid>
      <description>&lt;h1&gt;
  
  
  ZooKeeper Information Disclosure: Existence Watches Leak Restricted Znode Names
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Among the four Apache ZooKeeper flaws fixed in September 2026, CVE-2026-59739 exposes information rather than allowing direct deletion. The bug sits in the watch management subsystem and resurfaces during client reconnection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;An earlier patch intended to close a watch-management weakness. That fix proved incomplete. The incomplete patch is the root cause of the current issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mechanism
&lt;/h2&gt;

&lt;p&gt;Attackers register existence watches on paths that do not exist yet. When a client reconnects, the service returns watch-related data that reveals restricted znode names. The node payload itself stays protected, which is why this is an information disclosure and not a data breach of stored values.&lt;/p&gt;

&lt;h2&gt;
  
  
  What leaks and why it matters
&lt;/h2&gt;

&lt;p&gt;Exposed paths frequently contain sensitive usernames and internal identifiers. Naming conventions in a ZooKeeper tree can reveal service topology, environment names or account references. That reconnaissance shortens the path to follow-on attacks, including the unauthenticated deletion path described in CVE-2026-79993.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;Affected releases are ZooKeeper 3.8.0 through 3.8.6 and 3.9.0 through 3.9.5. Apache reported no confirmed exploitation and no public proof-of-concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mitigation
&lt;/h2&gt;

&lt;p&gt;Move to 3.8.7 or 3.9.6. Until then, limit who can reach port 2181 and treat znode naming as sensitive metadata. Operators should also watch for unusual watch registration against non-existent paths.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Critical Apache ZooKeeper Vulnerabilities Patched in Update (SecurityOnline): &lt;a href="https://securityonline.info/apache-zookeeper-vulnerabilities-fixed/" rel="noopener noreferrer"&gt;https://securityonline.info/apache-zookeeper-vulnerabilities-fixed/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Apache ZooKeeper security advisories: &lt;a href="https://zookeeper.apache.org/security.html" rel="noopener noreferrer"&gt;https://zookeeper.apache.org/security.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>apachezookeeper</category>
      <category>vulnerability</category>
      <category>cve202659739</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>CVE-2026-95675: Unauthenticated Root Command Injection in D-Link DAP-1360 Firmware</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Wed, 07 Oct 2026 04:20:33 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/cve-2026-95675-unauthenticated-root-command-injection-in-d-link-dap-1360-firmware-1hd</link>
      <guid>https://dev.to/jeffreyciend/cve-2026-95675-unauthenticated-root-command-injection-in-d-link-dap-1360-firmware-1hd</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-95675: Unauthenticated Root Command Injection in D-Link DAP-1360 Firmware
&lt;/h1&gt;

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

&lt;p&gt;CVE-2026-95675 is a critical OS command injection flaw in the web management interface of the D-Link DAP-1360, a long-retired wireless access point and range extender. The vulnerability is rated Critical, with a reported CVSS v3 score of 9.8. Public technical analysis and working exploit code are available. D-Link has confirmed that it will not release a fix.&lt;/p&gt;

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

&lt;p&gt;The defect lives in the device's web server binary rather than in a plugin or optional service. The network diagnostic handler behind &lt;code&gt;apply.cgi&lt;/code&gt; reads a value from the &lt;code&gt;ipv4 ping&lt;/code&gt; parameter, formats it into a system &lt;code&gt;ping&lt;/code&gt; command, and hands the resulting string to the command interpreter without sanitising it.&lt;br&gt;
Because the string is never escaped, an attacker can append shell metacharacters. The interpreter then treats the trailing text as additional commands. The endpoint performs no authentication check, so no credentials, session, or prior access to the administrative UI is required. Commands execute with root privileges, which is the highest privilege level on the appliance.&lt;/p&gt;

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

&lt;p&gt;Successful exploitation gives an unauthenticated remote attacker full command execution as root through the management interface. From there an attacker can read and rewrite device configuration, alter routing or wireless settings, and install a persistent foothold that survives reboots. A compromised access point is an attractive pivot point: it sits inside the network perimeter, it is usually trusted, and it is rarely monitored as closely as a server.&lt;/p&gt;

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

&lt;p&gt;All hardware revisions of the D-Link DAP-1360 running firmware version 6.14 and earlier are affected. D-Link formally retired the DAP-1360 product family in August 2020, and the vendor states that all firmware development for the product has ceased. There will be no patched release.&lt;/p&gt;

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

&lt;p&gt;A ZoomEye search for the product fingerprint &lt;code&gt;app="D-Link DAP-1360"&lt;/code&gt; returned 423 matching instances worldwide at the time of writing. A CVE-scoped query, &lt;code&gt;vul.cve="CVE-2026-95675"&lt;/code&gt;, returned no indexed assets, which is expected for a freshly assigned identifier. The product fingerprint therefore gives the more useful exposure estimate, and it only counts assets that still answer with a recognisable DAP-1360 signature; devices hidden behind firewalls or with a modified management banner are not represented.&lt;/p&gt;

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

&lt;p&gt;There is no firmware fix and none is planned. The only complete remediation is replacement with supported hardware.&lt;br&gt;
Where replacement cannot happen immediately, apply compensating controls: block access to the device's web management interface from untrusted networks, place the management UI on a dedicated VLAN restricted to trusted administrators, and treat any DAP-1360 as a potentially compromised asset if it has ever been reachable from an untrusted network. Inventory the installed base, confirm which units still carry firmware 6.14 or older, and prioritise their removal.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://securityonline.info/d-link-dap-1360-vulnerability-poc/" rel="noopener noreferrer"&gt;D-Link DAP-1360 vulnerability details and PoC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;D-Link product security advisory for the retired DAP-1360 family&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>vulnerability</category>
      <category>dlink</category>
      <category>commandinjection</category>
    </item>
    <item>
      <title>426,677 titles against 12,055 fingerprints: locating the Tenda gateways behind CVE-2026-104610</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Wed, 07 Oct 2026 03:00:32 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/426677-titles-against-12055-fingerprints-locating-the-tenda-gateways-behind-cve-2026-104610-4kon</link>
      <guid>https://dev.to/jeffreyciend/426677-titles-against-12055-fingerprints-locating-the-tenda-gateways-behind-cve-2026-104610-4kon</guid>
      <description>&lt;h1&gt;
  
  
  426,677 titles against 12,055 fingerprints: locating the Tenda gateways behind CVE-2026-104610
&lt;/h1&gt;

&lt;p&gt;CVE-2026-104610 affects the Tenda HG7, HG9 and HG10 fibre gateways. Finding them from outside is harder than the headline severity suggests, because the obvious query and the accurate query return very different populations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we measured
&lt;/h2&gt;

&lt;p&gt;Two queries were run against ZoomEye on 2026-10-04 (UTC), both at &lt;code&gt;sub_type=all&lt;/code&gt; with a page size of one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title="Tenda"&lt;/code&gt; returned &lt;strong&gt;426,677&lt;/strong&gt; matching services.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app="Tenda"&lt;/code&gt; returned &lt;strong&gt;12,055&lt;/strong&gt; matching services.
The first number counts anything whose HTML title contains the vendor name. That includes the vendor's product pages, reseller listings, documentation mirrors, and the router interfaces themselves. The second number is the application fingerprint the platform assigns to Tenda devices. For an inventory of devices, the fingerprint is the closer estimate, and 12,055 is the defensible figure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the title match is the wrong query
&lt;/h2&gt;

&lt;p&gt;Title-based searches on a consumer networking brand are noisy by construction. A page titled "Tenda N300 Wireless Router" is a shop page. A device interface is usually titled with a generic login string or a model number rather than the brand. The title query therefore over-counts non-devices and under-counts real ones, sometimes in the same result set.&lt;br&gt;
The honest conclusion is that neither query identifies which gateways are affected models. The HG7, HG9 and HG10 are carrier-supplied fibre terminals, and a carrier-grade deployment rarely advertises a marketing title. The device may answer HTTP with a minimal page and a firmware string, which is what the application fingerprint is built from.&lt;br&gt;
That is a general lesson about exposure measurement: for consumer and carrier equipment, the relationship between searchable metadata and the affected population is weak. The measurement describes discoverability, not deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the number is good for
&lt;/h2&gt;

&lt;p&gt;The 12,055 figure is still useful, for a specific purpose. It establishes that a meaningful population of Tenda-fingerprinted assets is reachable from the internet, which is the precondition for remote exploitation of CVE-2026-104610. It also sets an expectation for the scale of any coordinated response: this is not a handful of devices.&lt;br&gt;
For an operator, the productive version of the exercise is to combine the fingerprint with a scope filter. Adding a &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;org&lt;/code&gt; or &lt;code&gt;cidr&lt;/code&gt; term restricts the same dork to the ranges you care about, and the resulting count is an exposure number for a real estate rather than for the internet. That is the form in which the measurement supports a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  From exposure to remediation
&lt;/h2&gt;

&lt;p&gt;The remediation path for CVE-2026-104610 does not depend on the count. Where a vulnerable HG7, HG9 or HG10 is reachable on its management interface from the WAN side, that exposure should be closed first, because the exploit is public and needs no authentication. Restricting management to an administrative VLAN and removing the WAN-side listener are controls that work whether or not Tenda has shipped a fix.&lt;br&gt;
Detection is available in the interim. Requests to &lt;code&gt;/boaform/formLoopBack&lt;/code&gt; with an unusually long &lt;code&gt;Ethtype&lt;/code&gt; value are distinctive, and an alert on that pattern costs little to add.&lt;br&gt;
The measurement closes one gap and leaves the important one open: knowing that Tenda devices are on the internet does not tell you which are the affected models. That answer comes from the carrier or from the device itself, and it is the step no external index can perform.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-104610" rel="noopener noreferrer"&gt;CVE-2026-104610 record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;ZoomEye&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>zoomeye</category>
      <category>iot</category>
      <category>measurement</category>
    </item>
    <item>
      <title>1,316,357 GitLab Matches and 456,436 Title Matches: Sizing a Self-Managed Code Host</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 15:40:32 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/1316357-gitlab-matches-and-456436-title-matches-sizing-a-self-managed-code-host-5ac7</link>
      <guid>https://dev.to/jeffreyciend/1316357-gitlab-matches-and-456436-title-matches-sizing-a-self-managed-code-host-5ac7</guid>
      <description>&lt;h1&gt;
  
  
  1,316,357 GitLab Matches and 456,436 Title Matches: Sizing a Self-Managed Code Host
&lt;/h1&gt;

&lt;p&gt;A self-managed code host is one of the few systems in an enterprise that holds both the source code and the credentials to deploy it. That combination makes its exposure profile worth understanding in detail, and it makes the choice of query unusually consequential.&lt;/p&gt;

&lt;h2&gt;
  
  
  The context
&lt;/h2&gt;

&lt;p&gt;CVE-2026-85706 is a path traversal vulnerability in GitLab CE and EE that allows unauthenticated arbitrary file reads through the commits API, with a CVSS score of 10.0. Reporting described real exploitation to steal configuration files and SSH keys. CISA added it to KEV on 11 September 2026 with a federal remediation deadline of 14 September.&lt;/p&gt;

&lt;p&gt;The affected versions span several release trains: before 19.1.8, before 19.2.6 and before 19.3.2. A related issue, CVE-2026-87719, is an insecure deserialization flaw that can leak search configuration and credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the queries return
&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;Matches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app="GitLab"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1,316,357&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="GitLab"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;456,436&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The fingerprint count is roughly three times the title count. That ratio is informative. It suggests that a substantial share of GitLab deployments do not present the product name in the page title, which is consistent with organisations applying their own branding to self-managed instances.&lt;/p&gt;

&lt;p&gt;For exposure assessment, the fingerprint query is the appropriate baseline. The title query undercounts by a wide margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a code host is a high-value target
&lt;/h2&gt;

&lt;p&gt;The reason GitLab appears repeatedly in incident reporting is not that it is unusually vulnerable. It is what it holds. A self-managed GitLab instance typically stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Source code for internal and customer projects.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD variables and secrets&lt;/strong&gt;, which often include deployment credentials for production systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSH private keys and deploy tokens.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database credentials and API tokens.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single unauthenticated file read can therefore expose material that grants access well beyond the code host itself. That is why the observed exploitation focused on configuration files and SSH keys rather than on source code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the exposure count
&lt;/h2&gt;

&lt;p&gt;A figure above one million requires the same qualifications as the other products in this series, with one addition specific to GitLab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The fingerprint covers both CE and EE.&lt;/strong&gt; Community and Enterprise editions share the fingerprint but differ in feature set and support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version is not part of the query.&lt;/strong&gt; The affected ranges are specific to several release trains, and patched instances remain fingerprinted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public instances are a subset.&lt;/strong&gt; Many GitLab deployments are internal-only, reachable through a VPN or a corporate network. A fingerprinted instance is not necessarily internet-reachable for the specific API path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some matches are mirrors and public repositories.&lt;/strong&gt; GitLab.com itself and public project mirrors contribute to the count.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Detection guidance from the reporting
&lt;/h2&gt;

&lt;p&gt;The observed exploitation used the commits API. A specific detection approach was published: search for HTTP POST requests to paths matching the projects repository commits endpoint that include a &lt;code&gt;file.path&lt;/code&gt; parameter. That is a narrow, actionable signature rather than a generic anomaly.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical method
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the fingerprint query as the baseline.&lt;/strong&gt; &lt;code&gt;app="GitLab"&lt;/code&gt; is the meaningful signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify version on instances you own&lt;/strong&gt; against the fixed releases for each affected train.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search logs for the specific request pattern.&lt;/strong&gt; The &lt;code&gt;file.path&lt;/code&gt; parameter on the commits endpoint is the signature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate what a file read would expose.&lt;/strong&gt; SSH keys, CI/CD variables, deploy tokens and database credentials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider whether self-managed GitLab belongs on the public internet.&lt;/strong&gt; For most organisations, the answer is that it does not, and the fix is a network control rather than a patch.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The general point
&lt;/h2&gt;

&lt;p&gt;For a system that holds deployment credentials, the exposure count is a proxy for something else: the number of places where a single unauthenticated request could yield the keys to production. That framing is more useful than the raw number, because it points at the control that actually reduces the risk, which is removing the instance from the public internet rather than waiting for a patch window.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye search results for &lt;code&gt;app="GitLab"&lt;/code&gt; (1,316,357) and &lt;code&gt;title="GitLab"&lt;/code&gt; (456,436), collected 23 September 2026&lt;/li&gt;
&lt;li&gt;GitLab security advisory for CVE-2026-85706 and CVE-2026-87719&lt;/li&gt;
&lt;li&gt;NVD entries for both CVEs&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities Catalog, GitLab entry added 11 September 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>exposuremanagement</category>
      <category>supplychain</category>
    </item>
    <item>
      <title>Audiobookshelf: no app fingerprint and 13,963 title matches</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 13:00:31 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/audiobookshelf-no-app-fingerprint-and-13963-title-matches-16hb</link>
      <guid>https://dev.to/jeffreyciend/audiobookshelf-no-app-fingerprint-and-13963-title-matches-16hb</guid>
      <description>&lt;h1&gt;
  
  
  Audiobookshelf: no app fingerprint and 13,963 title matches
&lt;/h1&gt;

&lt;p&gt;A self-hosted media server usually sits on a home network, which is exactly what makes its internet-reachable instances interesting. Audiobookshelf serves audiobooks and podcasts, and the index identifies it by page title while finding nothing by application signature.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the queries measured
&lt;/h2&gt;

&lt;p&gt;Two queries were run against the ZoomEye index on 5 October 2026, scoped to all asset types.&lt;br&gt;
Search query: &lt;code&gt;app="Audiobookshelf"&lt;/code&gt;. Result: 0 matching assets.&lt;br&gt;
Comparison query: &lt;code&gt;title="Audiobookshelf"&lt;/code&gt;. Result: 13,963 matching assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading a one-sided result
&lt;/h2&gt;

&lt;p&gt;A single figure with no fingerprint counterpart is a weaker measurement than a pair, and the weakness should be stated rather than smoothed over. The title count covers assets whose page carries the product name. It includes running instances, and it includes pages that reference the product.&lt;br&gt;
The population is large enough to suggest that a meaningful share of these assets are real deployments. A media server that is reachable from the internet is usually one that was set up for personal use and published so it can be reached from outside the home.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an instance holds
&lt;/h2&gt;

&lt;p&gt;Audiobookshelf stores a library, user accounts and, in a typical configuration, the details needed to reach the storage behind it. The interface is the control surface. Authentication is the only layer between a public address and both the library and the accounts.&lt;br&gt;
Two configuration patterns produce most of the exposure. A container with a published port on a host with a public address, and a reverse proxy that was added to make remote access work and was never scoped to the accounts that should have it.&lt;/p&gt;

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

&lt;p&gt;Compare the count against the hosts the organisation manages. A media server is rarely in a corporate asset inventory, which is the reason to check for one rather than assume it is absent.&lt;br&gt;
Where remote access is a requirement, the useful check is which accounts exist and whether any of them were created for a purpose that no longer applies. A server with one live account and five forgotten ones has five ways in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;The figure describes indexed assets on one day and cannot separate a running server from a page that mentions one. It does not identify versions, authentication methods or owner intent. A count this size is an inventory prompt, not a finding.&lt;/p&gt;

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

&lt;p&gt;[1] Audiobookshelf. &lt;a href="https://www.audiobookshelf.org/" rel="noopener noreferrer"&gt;https://www.audiobookshelf.org/&lt;/a&gt;&lt;br&gt;
[2] Audiobookshelf source repository. &lt;a href="https://github.com/advplyr/audiobookshelf" rel="noopener noreferrer"&gt;https://github.com/advplyr/audiobookshelf&lt;/a&gt;&lt;br&gt;
[3] ZoomEye. &lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>exposure</category>
      <category>media</category>
    </item>
    <item>
      <title>1538 Jenkins, 169 Harbor and 32 SonarQube Results: The Build Chain Has a Public Address</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 07:40:32 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/1538-jenkins-169-harbor-and-32-sonarqube-results-the-build-chain-has-a-public-address-21ib</link>
      <guid>https://dev.to/jeffreyciend/1538-jenkins-169-harbor-and-32-sonarqube-results-the-build-chain-has-a-public-address-21ib</guid>
      <description>&lt;h1&gt;
  
  
  1538 Jenkins, 169 Harbor and 32 SonarQube Results: The Build Chain Has a Public Address
&lt;/h1&gt;

&lt;p&gt;Build and release tooling holds the credentials that deploy to production. It is also frequently reachable from the internet, because it was stood up quickly for a project and never moved behind the perimeter. A ZoomEye query set collected on 22 September 2026 returned:&lt;/p&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;Total results&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Jenkins"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1,538&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Harbor"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;169&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"SonarQube"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Portainer"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;943,412&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Grafana"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;603,672&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Portainer and Grafana are included for scale comparison. The build-chain tools are the smaller numbers, and the smaller numbers are the ones that hold deployment credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the build chain is a high-value target
&lt;/h2&gt;

&lt;p&gt;A CI server is not a normal application. It has, by design, the ability to execute code, to read source repositories, to access artefact registries, and to deploy to production environments. Compromising a CI server is not a step toward production access; it is production access.&lt;/p&gt;

&lt;p&gt;The credential set on a CI server typically includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source control tokens with write access&lt;/li&gt;
&lt;li&gt;Registry credentials for pushing images&lt;/li&gt;
&lt;li&gt;Cloud provider credentials for deployment&lt;/li&gt;
&lt;li&gt;Signing keys for artefacts&lt;/li&gt;
&lt;li&gt;Secrets injected into build jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a credential that the CI server must hold to do its job. That is the reason the CI server is a target rather than an application with a bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jenkins: the largest count and the broadest surface
&lt;/h2&gt;

&lt;p&gt;Jenkins is the most widely deployed open-source automation server, and the indexed count of 1,538 reflects that. Jenkins is also extensible through plugins, and the plugin ecosystem is where most of its vulnerabilities have appeared.&lt;/p&gt;

&lt;p&gt;The exposure pattern for Jenkins is usually an instance reachable on the internet with the web UI available. Depending on configuration, that may expose job names, build logs, and in some cases the script console. Build logs are an underrated disclosure: they frequently contain environment variables, tokens echoed by a build step, and internal hostnames.&lt;/p&gt;

&lt;p&gt;The controls are network placement and authentication. Jenkins should be behind a VPN or an access proxy, and the anonymous read permission should be disabled unless there is a specific reason to allow it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Harbor: the registry that holds your images
&lt;/h2&gt;

&lt;p&gt;Harbor is a container registry. The indexed count of 169 is small, and the consequence of exposure is direct: a reachable registry with weak credentials allows an attacker to pull private images, which reveals application internals, embedded secrets and the deployment topology.&lt;/p&gt;

&lt;p&gt;A registry also allows pushing. An attacker who can push to a registry that your cluster pulls from has a supply chain path that does not require compromising the build system at all.&lt;/p&gt;

&lt;p&gt;The controls are authentication, project-level access control, and network placement. A registry should not be reachable from the internet, and image signing with admission enforcement converts a push into a blocked deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  SonarQube: the smallest count and the most sensitive content
&lt;/h2&gt;

&lt;p&gt;SonarQube performs static analysis and stores the results. The indexed count of 32 is the smallest in this set, and the content is among the most sensitive: source code, findings that describe exploitable weaknesses, and in some configurations the source of every project in the organisation.&lt;/p&gt;

&lt;p&gt;A reachable SonarQube instance with default administrative credentials is a source code disclosure. The historical pattern of default credentials on first install makes this a configuration issue rather than an exploit.&lt;/p&gt;

&lt;p&gt;The controls are the same as for the others: network placement, changed default credentials, and authentication on the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the scale comparison
&lt;/h2&gt;

&lt;p&gt;The Portainer and Grafana counts are two orders of magnitude larger than the build-chain tools. That is not a statement that Portainer is more important. It reflects that both products are widely deployed as management or monitoring interfaces, often on internet-facing hosts, and both respond to a simple HTTP probe.&lt;/p&gt;

&lt;p&gt;The comparison is useful for one purpose: it shows that the build-chain counts are not large because the index is small. The index covers these services. The build-chain tools are simply less often exposed, and where they are exposed, the consequences are more direct.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check in your own estate
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Query your own netblocks for the build-chain products by name.&lt;/strong&gt; &lt;code&gt;app:&lt;/code&gt; queries identify the product rather than just the port.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check anonymous access.&lt;/strong&gt; Jenkins anonymous read and SonarQube public project visibility are the two settings that turn reachability into disclosure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check default credentials.&lt;/strong&gt; Harbor and SonarQube have both had first-install defaults.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check what the tool can reach.&lt;/strong&gt; A CI server's outbound access to production is the blast radius.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check build log retention.&lt;/strong&gt; Logs that contain tokens should be treated as secrets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;These figures are a snapshot collected on 22 September 2026. An &lt;code&gt;app:&lt;/code&gt; query depends on the product's fingerprint being detectable, which varies with version, theme customisation and reverse proxy configuration. The counts are lower bounds for the deployed population, not complete inventories.&lt;/p&gt;

&lt;p&gt;A reachable instance is not a compromised instance. The measurement establishes exposure; confirming the impact requires checking the specific configuration.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye, &lt;a href="https://www.zoomeye.org/" rel="noopener noreferrer"&gt;cyberspace search engine&lt;/a&gt;. Query set: &lt;code&gt;app:"Jenkins"&lt;/code&gt;, &lt;code&gt;app:"Harbor"&lt;/code&gt;, &lt;code&gt;app:"SonarQube"&lt;/code&gt;, &lt;code&gt;app:"Portainer"&lt;/code&gt;, &lt;code&gt;app:"Grafana"&lt;/code&gt;; collected 22 September 2026.&lt;/li&gt;
&lt;li&gt;Jenkins, &lt;a href="https://www.jenkins.io/doc/book/security/" rel="noopener noreferrer"&gt;Securing Jenkins&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Harbor, &lt;a href="https://goharbor.io/docs/latest/administration/" rel="noopener noreferrer"&gt;Security documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;SonarSource, &lt;a href="https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/" rel="noopener noreferrer"&gt;SonarQube security documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;NIST, &lt;a href="https://csrc.nist.gov/pubs/sp/800/204/c/final" rel="noopener noreferrer"&gt;SP 800-204C: Implementation of DevSecOps for a Microservices-based Application System&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>supplychain</category>
      <category>cicd</category>
      <category>jenkins</category>
    </item>
    <item>
      <title>Why Port 2375 Alone Overstates the Docker Problem</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 05:00:31 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/why-port-2375-alone-overstates-the-docker-problem-5bmc</link>
      <guid>https://dev.to/jeffreyciend/why-port-2375-alone-overstates-the-docker-problem-5bmc</guid>
      <description>&lt;h1&gt;
  
  
  Why Port 2375 Alone Overstates the Docker Problem
&lt;/h1&gt;

&lt;p&gt;The CARBONATO advisory names TCP port 2375 as the typical way into an exposed Docker host. That detail is operationally useful, and it is easy to over-read. If a team treats "port 2375 is open" as equivalent to "Docker Remote API is exposed without authentication", it will over-count its own risk and misallocate response effort.&lt;br&gt;
A measurement makes the gap concrete. Querying ZoomEye for port 2375 on 30 September 2026 returned 1,437,638 assets. Querying the Docker application fingerprint on that same port returned 1,032.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;port="2375"                                   -&amp;gt; 1,437,638
app="Docker" &amp;amp;&amp;amp; port="2375"                   -&amp;gt;     1,032
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gap spans three orders of magnitude. It is the distance between a port number and a product identity.&lt;br&gt;
The reason is straightforward. Ports are conventions. Docker's Remote API uses 2375 by default, but nothing reserves the number. Other software listens there, and a port-only query cannot separate a Docker daemon from any other service that happens to bind the same value. ZoomEye's application fingerprint adds the identification step: it classifies the service behind the port, so the result describes Docker assets rather than traffic on a number.&lt;br&gt;
The next layer is subtler still. Within the Docker population, several fingerprints produce different populations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app="Docker"                        -&amp;gt; 13,246
app="Docker" &amp;amp;&amp;amp; service="http"      -&amp;gt;  9,477
http.header.server="Docker"         -&amp;gt; 59,902
banner="Docker"                     -&amp;gt; 354,334
app="Docker" &amp;amp;&amp;amp; port="2375"         -&amp;gt;  1,032
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line maps to a different asset relationship. &lt;code&gt;app="Docker"&lt;/code&gt; describes assets ZoomEye identifies as Docker regardless of how they are reached. &lt;code&gt;http.header.server="Docker"&lt;/code&gt; describes responses whose Server header names Docker, a weaker and broader signal. &lt;code&gt;banner="Docker"&lt;/code&gt; matches banner text and pulls in the widest set. Only the last line constrains both product and the specific exposure path the advisory describes.&lt;br&gt;
None of this makes a port query useless. When the incident itself is about an exposed service, a port query documents the size of the listen surface, and that is a legitimate thing to report. The number becomes misleading when it is presented as a count of vulnerable Docker hosts.&lt;br&gt;
The practical rule is to label the query. "1,437,638 assets respond on port 2375" is accurate. "1,437,638 Docker hosts are exposed" is not. Run the fingerprint query alongside the port query and report both.&lt;br&gt;
ZoomEye supports that comparison because it exposes product and header fields next to port fields, so the same interface can answer the narrow and broad versions of the question. The search below runs the narrow one.&lt;br&gt;
ZoomEye counts describe observed exposure at the time of the query. They do not confirm that any asset accepts unauthenticated API calls, and they do not confirm compromise.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;CSA / SingCERT, "Advisory on CARBONATO Botnet Campaign Targeting Exposed Docker Daemons", 30 September 2026: &lt;a href="https://www.csa.gov.sg/alerts-and-advisories/advisories/ad-2026-012" rel="noopener noreferrer"&gt;https://www.csa.gov.sg/alerts-and-advisories/advisories/ad-2026-012&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docker, "Protect the Docker daemon socket": &lt;a href="https://docs.docker.com/engine/security/protect-access/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/security/protect-access/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye queries executed 2026-09-30 between 17:16:57Z and 17:18:17Z, sub_type=all; counts as listed above.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>querydesign</category>
      <category>exposure</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>29,151,855 Matches on Port 5060: The Signalling Layer Nobody Maps</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 04:00:30 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/29151855-matches-on-port-5060-the-signalling-layer-nobody-maps-3inh</link>
      <guid>https://dev.to/jeffreyciend/29151855-matches-on-port-5060-the-signalling-layer-nobody-maps-3inh</guid>
      <description>&lt;h1&gt;
  
  
  29,151,855 Matches on Port 5060: The Signalling Layer Nobody Maps
&lt;/h1&gt;

&lt;p&gt;Session Initiation Protocol is how voice and video calls are set up, and port 5060 is where that signalling lives. A ZoomEye query for port="5060" returned 29,151,855 matches, and at that size the question worth asking is what the number actually contains.&lt;/p&gt;

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

&lt;p&gt;The query port="5060" was executed on 25 September 2026 with sub_type=all and pagesize 1. The result was 29,151,855 total matches. As before, the number is a match total rather than a sample of live call servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a large number here means something specific
&lt;/h2&gt;

&lt;p&gt;Port assignment is not random. 5060 is defined for SIP, and it is overwhelmingly used for SIP and for services that look like SIP to a scanner. When a port-mapped query returns tens of millions of matches, the honest interpretation is that a very large amount of internet-facing infrastructure answers on a port that the voice industry reserved for call setup.&lt;br&gt;
That matters, because SIP sits in an unusual trust position. It is the control plane for real-time communications, it is frequently deployed by teams outside the security function, and it is exposed outbound as well as inbound because remote workers and carriers need to reach it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parsing surface, not the port
&lt;/h2&gt;

&lt;p&gt;A raw port match is the weakest kind of external evidence. It does not distinguish a SIP registrar from a random service that happens to bind 5060, and it does not tell you which vendor implementation is behind the port.&lt;br&gt;
The better version of the question is what a specific vendor's voice platform looks like from outside, because then the answer describes a product population. A product fingerprint query, confirmed against a small probe before being trusted, gives a population whose patch status you can reason about. A port query gives a population whose patch status you cannot reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with 29 million
&lt;/h2&gt;

&lt;p&gt;Treat the number as a signal about the industry rather than about your estate. Then reduce it to your own context.&lt;br&gt;
Inventory the voice infrastructure that is externally reachable, and separate what must be published from what was published for a project that ended. Session border controllers, conference bridges, and unified communications edge roles are the components that legitimately need external presence; softphone provisioning servers usually do not.&lt;br&gt;
Apply transport security where the platform supports it, and require TLS on the signalling path rather than leaving cleartext SIP on 5060. Then filter at the border: carriers and remote endpoints can be restricted to known networks far more often than teams assume.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye search for port="5060": &lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;RFC 3261, SIP: &lt;a href="https://www.rfc-editor.org/rfc/rfc3261" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/rfc/rfc3261&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>sip</category>
      <category>voip</category>
      <category>attacksurface</category>
    </item>
    <item>
      <title>Citrix NetScaler CVE-2026-88771 and CVE-2026-88772: two edge RCE flaws attacked before a fix existed</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Tue, 06 Oct 2026 02:40:37 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/citrix-netscaler-cve-2026-88771-and-cve-2026-88772-two-edge-rce-flaws-attacked-before-a-fix-existed-1og6</link>
      <guid>https://dev.to/jeffreyciend/citrix-netscaler-cve-2026-88771-and-cve-2026-88772-two-edge-rce-flaws-attacked-before-a-fix-existed-1og6</guid>
      <description>&lt;h1&gt;
  
  
  Citrix NetScaler CVE-2026-88771 and CVE-2026-88772: two edge RCE flaws attacked before a fix existed
&lt;/h1&gt;

&lt;p&gt;Citrix published fixes for two NetScaler flaws on 2026-09-27 after watchTowr reported unpatched remote code execution bugs under active exploitation. Both flaws are rated 9.5 under CVSS v4.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two vulnerabilities
&lt;/h2&gt;

&lt;p&gt;CVE-2026-88771 is improper input validation that lets an unauthenticated attacker run arbitrary commands. Citrix states that it affects all NetScaler ADC and NetScaler Gateway deployments on the affected versions, with no additional feature required.&lt;br&gt;
CVE-2026-88772 is a memory overflow that can lead to remote code execution or denial of service. It affects appliances with DTLS enabled. DTLS is on by default for VPN virtual servers, so a NetScaler Gateway is affected unless DTLS was explicitly turned off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline
&lt;/h2&gt;

&lt;p&gt;watchTowr said on 2026-09-26 that it was responding to reports of unpatched NetScaler RCE issues and called the information credible. It later said the two flaws were found during forensic investigations. Citrix did not state whether its two flaws are the ones watchTowr described, but they match that account. Administrators on r/Citrix reported being told to shut down NetScalers immediately.&lt;br&gt;
Citrix said exploits of CVE-2026-88771 and CVE-2026-88772 on unmitigated deployments had been observed. It did not say how widely the flaws were exploited, by whom, or since when. Both flaws were therefore used before any public fix existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affected versions and fixes
&lt;/h2&gt;

&lt;p&gt;Appliances on 14.1-73.32 and 13.1-63.21, the builds that fixed the August authentication bypass CVE-2026-19490, are inside the affected range and need the new update. Fixed releases are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NetScaler ADC and NetScaler Gateway 14.1-73.37 and later&lt;/li&gt;
&lt;li&gt;NetScaler ADC and NetScaler Gateway 13.1-64.23 and later 13.1 releases&lt;/li&gt;
&lt;li&gt;NetScaler ADC 14.1-FIPS 14.1-73.37 and later 14.1-FIPS releases&lt;/li&gt;
&lt;li&gt;NetScaler ADC 13.1-FIPS and 13.1-NDcPP 13.1-37.279 and later releases
The 13.1 fix arrived after that branch reached End of Maintenance on 2026-09-15.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What a defender should do
&lt;/h2&gt;

&lt;p&gt;NetScaler ADC and Gateway sit at the edge, handling VPN, remote access, load balancing, and authentication. The bulletin lists no workaround and no indicators of compromise for the two exploited flaws. Because exploitation preceded disclosure, patching restores safety but does not show whether an attacker already established access. Teams should preserve authentication and VPN logs before applying changes, then hunt for anomalous command execution and outbound connections.&lt;/p&gt;

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

&lt;p&gt;ZoomEye returned 239,277 matches for app="Citrix NetScaler" on 2026-09-30 (UTC). The figure counts assets that match the fingerprint, not confirmed vulnerable appliances, and the affected configuration still has to be verified per device.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Citrix NetScaler security bulletin covering the September 2026 releases.&lt;/li&gt;
&lt;li&gt;watchTowr reports on unpatched NetScaler RCE activity.&lt;/li&gt;
&lt;li&gt;The Hacker News coverage of the confirmed exploitation.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>networksecurity</category>
      <category>citrix</category>
      <category>netscaler</category>
    </item>
    <item>
      <title>603,475 Grafana and 77,968 Kibana Instances: Measuring the Observability Layer's Public Surface</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Mon, 05 Oct 2026 15:20:29 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/603475-grafana-and-77968-kibana-instances-measuring-the-observability-layers-public-surface-5bm9</link>
      <guid>https://dev.to/jeffreyciend/603475-grafana-and-77968-kibana-instances-measuring-the-observability-layers-public-surface-5bm9</guid>
      <description>&lt;h1&gt;
  
  
  603,475 Grafana and 77,968 Kibana Instances: Measuring the Observability Layer's Public Surface
&lt;/h1&gt;

&lt;p&gt;Observability platforms sit in an unusual position. They are not production services, but they hold the credentials, query results and topology data that describe production. Grafana, Kibana and Prometheus are common in that role, and all three can be reached from the public internet.&lt;/p&gt;

&lt;p&gt;ZoomEye data collected on 20 September 2026 shows how much of that layer is visible.&lt;/p&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;Exact count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Grafana"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;603,475&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Kibana"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;77,968&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Prometheus"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;248&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Zabbix"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"RabbitMQ"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;227&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"Kafka"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;165&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app:"OpenSearch"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;571&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why the two large numbers need a caveat
&lt;/h2&gt;

&lt;p&gt;The Grafana and Kibana counts are large enough that they should be read as fingerprint match counts rather than counts of live, reachable dashboards. Grafana and Kibana are both widely embedded and widely referenced, and a fingerprint can match assets, headers or pages associated with the product beyond a running instance.&lt;/p&gt;

&lt;p&gt;That does not make the numbers useless. It makes them a starting point for a narrower query. Combining the application filter with a network filter, or with a port filter, produces a result set that can be attributed to a specific environment. The global count establishes that the product surface is large; the scoped query establishes whether any of it is yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the smaller counts describe
&lt;/h2&gt;

&lt;p&gt;Prometheus, Zabbix, RabbitMQ, Kafka and OpenSearch return counts in the hundreds, which makes them easier to reason about.&lt;/p&gt;

&lt;p&gt;Prometheus is a metrics store and query engine. An exposed Prometheus endpoint often has no authentication by default, which makes it a direct information disclosure path. The count of 248 reachable services is small enough for an operator to check against their own inventory.&lt;/p&gt;

&lt;p&gt;Zabbix is a monitoring platform with a web interface and an agent protocol. An exposed Zabbix frontend is an authentication surface, and the count of 150 describes how many answer publicly.&lt;/p&gt;

&lt;p&gt;RabbitMQ and Kafka are messaging systems. Their counts of 227 and 165 describe brokers that answer from a public address. A message broker carries the data that applications exchange, and access to it is often equivalent to access to those applications.&lt;/p&gt;

&lt;p&gt;OpenSearch is a search and analytics engine derived from Elasticsearch. The count of 571 describes reachable services, and an exposed search engine is a data exposure path in the same way a database is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why observability is a credential problem
&lt;/h2&gt;

&lt;p&gt;A dashboard is only as sensitive as the data sources behind it. Grafana and Kibana connect to databases, log stores and metrics systems using stored credentials. An attacker who reaches a dashboard with weak or default authentication inherits those connections.&lt;/p&gt;

&lt;p&gt;Metrics and logs also describe the environment. A Prometheus instance reveals service names, host names, versions and request patterns. A log store reveals error messages that frequently contain tokens, internal URLs and stack traces. This is reconnaissance that does not require exploiting a vulnerability.&lt;/p&gt;

&lt;p&gt;Messaging systems sit between the observability layer and production. A broker that is reachable and unauthenticated gives an attacker the ability to read or inject messages, which is a path to the applications on both ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with the measurement
&lt;/h2&gt;

&lt;p&gt;Scope the queries to your own address space and treat the result as an inventory task. For each match, decide whether the service should be reachable from outside the expected network. Dashboards, metrics endpoints and message brokers generally should not be.&lt;/p&gt;

&lt;p&gt;Where a service must be reachable, check the authentication configuration. Prometheus and several metrics exporters ship without authentication by default, so the presence of a login page is not a safe assumption. Put the service behind a reverse proxy that enforces authentication, or restrict access by network policy.&lt;/p&gt;

&lt;p&gt;Rotate the credentials the dashboard holds. If a dashboard was reachable, the data source credentials it stored should be treated as exposed.&lt;/p&gt;

&lt;p&gt;Re-run the queries after remediation to confirm the change. A service that stops appearing in a scoped result is a verified improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;These counts describe fingerprint matches, not confirmed vulnerable or unauthenticated instances. The Grafana and Kibana figures in particular should be treated as match counts. Version detection and direct inspection are required before any host is classified as misconfigured. All figures are a snapshot from 20 September 2026.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye queries &lt;code&gt;app:"Grafana"&lt;/code&gt; (603,475), &lt;code&gt;app:"Kibana"&lt;/code&gt; (77,968), &lt;code&gt;app:"OpenSearch"&lt;/code&gt; (571), &lt;code&gt;app:"Prometheus"&lt;/code&gt; (248), &lt;code&gt;app:"RabbitMQ"&lt;/code&gt; (227), &lt;code&gt;app:"Kafka"&lt;/code&gt; (165) and &lt;code&gt;app:"Zabbix"&lt;/code&gt; (150), collected 20 September 2026.&lt;/li&gt;
&lt;li&gt;Grafana, Kibana, Prometheus, Zabbix, RabbitMQ, Kafka and OpenSearch product documentation for service roles and default authentication behaviour.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>attacksurface</category>
      <category>observability</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>CVE-2026-70585: A Use-After-Free in the Windows NFS Client Stack</title>
      <dc:creator>jeffrey</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:40:29 +0000</pubDate>
      <link>https://dev.to/jeffreyciend/cve-2026-70585-a-use-after-free-in-the-windows-nfs-client-stack-15c3</link>
      <guid>https://dev.to/jeffreyciend/cve-2026-70585-a-use-after-free-in-the-windows-nfs-client-stack-15c3</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-70585: A Use-After-Free in the Windows NFS Client Stack
&lt;/h1&gt;

&lt;p&gt;Windows can mount NFS shares as a client, and that capability pulls a remote procedure call parser into the kernel's network path. CVE-2026-70585 is a use-after-free in that parser, and it is a good example of a low CVSS score attached to a high-consequence code path.&lt;/p&gt;

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

&lt;p&gt;NVD describes CVE-2026-70585 as a use-after-free in Windows Services for NFS ONCRPC XDR Driver allowing an authorized attacker to execute code locally. The weakness is CWE-416 and the CVSS base score is 7.0. It was published on 8 September 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the score and the description diverge from intuition
&lt;/h2&gt;

&lt;p&gt;The word "locally" in the description does not mean the attacker is sitting at the console. It means the code path is reachable from the local system's network stack after a share is mounted, which in practice means an attacker who controls the NFS server can influence what the client parses.&lt;br&gt;
That scenario is the one worth taking seriously. The NFS server that a Windows host mounts might be an internal file server, a NAS appliance, a lab system, or a partner's storage. Any of those can be compromised, misconfigured, or simply hostile. When the client's XDR parser mishandles a response, the client's kernel is the thing that fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parsing problem, stated plainly
&lt;/h2&gt;

&lt;p&gt;External Data Representation is a serialization format, and a decoder for it must make length and type decisions on the basis of bytes that came over the wire. A use-after-free in that decoder means the code touched a data structure after something else had already released it, the conventional recipe for attacker-influenced memory reuse.&lt;br&gt;
The reason this sits at 7.0 rather than higher is the metrics: the attacker needs a position that lets them answer as the NFS server, and the outcome is described as local code execution. Both of those constraints are real. Neither of them makes the bug harmless in an environment where NFS mounts are common and the storage tier is not treated as a trust boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling
&lt;/h2&gt;

&lt;p&gt;Apply the September 2026 updates to any Windows host with the NFS client feature installed. Check first: the feature is often a leftover from a migration project rather than a deliberate design decision, and removing the client from hosts that do not need it eliminates the surface.&lt;br&gt;
Where NFS mounts are required, pin them to specific servers rather than accepting mounts from arbitrary addresses, and treat the storage network as a security zone with its own access control. A file server that answers NFS requests to a broad address range is a server that can decide what a Windows kernel parses.&lt;br&gt;
Finally, consider whether the Windows-to-NFS path needs to exist at all. SMB is the native protocol for Windows clients, and every protocol removed from the client stack is a parser that can no longer be attacked.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;NVD record for CVE-2026-70585: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-70585" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-70585&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft update guide entry: &lt;a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-70585" rel="noopener noreferrer"&gt;https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-70585&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft September 2026 release notes: &lt;a href="https://msrc.microsoft.com/update-guide/releaseNote/2026-Sep" rel="noopener noreferrer"&gt;https://msrc.microsoft.com/update-guide/releaseNote/2026-Sep&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>windows</category>
      <category>nfs</category>
      <category>kernel</category>
      <category>memorysafety</category>
    </item>
  </channel>
</rss>
