<?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: kozhevniko</title>
    <description>The latest articles on DEV Community by kozhevniko (@kozhevniko).</description>
    <link>https://dev.to/kozhevniko</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%2F4125316%2Ffd669e89-7ad5-4a22-8b23-6e0990d00d7f.png</url>
      <title>DEV Community: kozhevniko</title>
      <link>https://dev.to/kozhevniko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kozhevniko"/>
    <language>en</language>
    <item>
      <title>1,897,463 MongoDB services: how unauthenticated data stores became routine</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Tue, 06 Oct 2026 21:40:33 +0000</pubDate>
      <link>https://dev.to/kozhevniko/1897463-mongodb-services-how-unauthenticated-data-stores-became-routine-5cek</link>
      <guid>https://dev.to/kozhevniko/1897463-mongodb-services-how-unauthenticated-data-stores-became-routine-5cek</guid>
      <description>&lt;h1&gt;
  
  
  1,897,463 MongoDB services: how unauthenticated data stores became routine
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;MongoDB and Redis share a pattern: both were designed to run inside a trusted network, both became a common backend for quickly written applications, and both continue to appear at scale in exposure data. When authentication is optional in practice, it is often absent in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method and scope
&lt;/h2&gt;

&lt;p&gt;On 2026-09-30 (UTC) we queried ZoomEye for the MongoDB service fingerprint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query: &lt;code&gt;service="mongodb"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Scope: all asset types, global&lt;/li&gt;
&lt;li&gt;Matching assets: 1,897,463&lt;/li&gt;
&lt;li&gt;Search link: &lt;a href="https://www.zoomeye.ai/searchResult?q=c2VydmljZT0ibW9uZ29kYiI%3D" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=c2VydmljZT0ibW9uZ29kYiI%3D&lt;/a&gt;
We also attempted to scope exploitation history directly with a query for specific CVE identifiers. The queries &lt;code&gt;vul.cve="CVE-2026-88771"&lt;/code&gt;, &lt;code&gt;vul.cve="CVE-2026-76461"&lt;/code&gt; and &lt;code&gt;vul.cve="CVE-2026-94127"&lt;/code&gt; each returned zero matched assets. That result is reported here as a measurement limitation, not as evidence that those vulnerabilities are absent from the environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the count is a standing problem
&lt;/h2&gt;

&lt;p&gt;A reachable database is different from a reachable web service. A web flaw usually requires a specific vulnerability to exist, while an unauthenticated data store requires only a connection. The reported outcome in these cases is rarely a single record; it is usually wholesale copying of a collection, often followed by a ransom note left in place of the data.&lt;br&gt;
The pattern repeats because the convenient deployment habit is hard to break. A developer starts a container, connects from an application, and moves on. Authentication is deferred, binding is left at the default, and the firewall rule that was supposed to restrict access is created later or never. The service then stays reachable for years.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Confirm the bind address and enable authentication, then verify from outside the host that an unauthenticated connection is refused.&lt;/li&gt;
&lt;li&gt;Restrict network access so that only application hosts can reach the database port.&lt;/li&gt;
&lt;li&gt;Enable role-based access control and give each application only the privileges it needs.&lt;/li&gt;
&lt;li&gt;Enable audit logging if the deployment supports it, and monitor for bulk read operations.&lt;/li&gt;
&lt;li&gt;Verify that backups are current and that a restore has been tested, because the recovery path matters when data is copied or deleted.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reading the measurement
&lt;/h2&gt;

&lt;p&gt;1,897,463 counts services matching the MongoDB fingerprint. It cannot report whether authentication is enforced, because that would require an authenticated connection. The figure measures visibility, which is a proxy for the population that must be checked by its owners.&lt;/p&gt;

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

&lt;p&gt;Cloud providers, managed database services and private networks hide most production instances from external measurement. The zero results from the vulnerability queries also show that the platform's vulnerability index does not cover every recent CVE at the time of collection. Both points should be stated plainly when a number like this is cited internally.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;MongoDB security checklists on authentication, authorization and network exposure.&lt;/li&gt;
&lt;li&gt;ZoomEye queries &lt;code&gt;service="mongodb"&lt;/code&gt; and the vulnerability identifier queries, collected 2026-09-30 UTC.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>exposure</category>
      <category>mongodb</category>
      <category>datasecurity</category>
    </item>
    <item>
      <title>6,378,556 Hosts on Port 10250: The Cluster Node Interface That Assumes a Trusted Network</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Tue, 06 Oct 2026 14:20:31 +0000</pubDate>
      <link>https://dev.to/kozhevniko/6378556-hosts-on-port-10250-the-cluster-node-interface-that-assumes-a-trusted-network-44da</link>
      <guid>https://dev.to/kozhevniko/6378556-hosts-on-port-10250-the-cluster-node-interface-that-assumes-a-trusted-network-44da</guid>
      <description>&lt;h1&gt;
  
  
  6,378,556 Hosts on Port 10250: The Cluster Node Interface That Assumes a Trusted Network
&lt;/h1&gt;

&lt;p&gt;Kubernetes distributes a control interface to every node in a cluster. The kubelet agent, which starts and manages containers on a host, exposes an HTTP API on port 10250 that the control plane uses to run commands, read logs and query node status. A query for port="10250" returned 6,378,556 matching assets on 23 September 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement scope
&lt;/h2&gt;

&lt;p&gt;The query was executed once against the ZoomEye index on 23 September 2026: port="10250". It returned 6,378,556 matching assets. The unit is a listening service on that port at the recorded collection time, which includes cluster node interfaces and any other software bound to the same port.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a node interface is sensitive
&lt;/h2&gt;

&lt;p&gt;The kubelet API is designed for the control plane. Its authentication and authorization behaviour is configurable, and a node configured to accept anonymous requests gives any client on the network the ability to perform the same operations the control plane performs: list pods, retrieve container logs, execute commands inside running containers and read the credentials that those containers are given.&lt;br&gt;
That last capability matters most. Workloads in a cluster are commonly issued service account tokens and mounted secrets. A client that can execute inside a container inherits everything that container can reach, which often includes internal APIs, database credentials and cloud provider identity. The path from a node interface to an identity is short.&lt;br&gt;
The component also sits outside what most teams monitor. The kubelet is not an application the team deployed, it is part of the platform, and its port is rarely in an application inventory. Cluster-level network policy tends to govern pod-to-pod traffic, while the node interface lives on the host network.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 6,378,556 supports
&lt;/h2&gt;

&lt;p&gt;The figure supports a scoping conclusion. A population of this size means that cluster node interfaces are reachable from untrusted networks in large numbers, and that automated scanning for this port will find candidates without any targeting decision on the attacker's part.&lt;br&gt;
It also supports an inventory point. Port 10250 is registered to a specific purpose, and other software does bind it. A match count in the millions indicates broad exposure of whatever is listening, and the appropriate defensive response is to determine which of an organisation's own systems are in the set rather than to reason about the total.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the count cannot support
&lt;/h2&gt;

&lt;p&gt;The count does not indicate the authentication mode of any individual node. A kubelet that requires authenticated requests and a kubelet that permits anonymous access both listen on the same port, and the difference between them determines the impact of the exposure.&lt;br&gt;
It does not indicate authorization configuration. Even with authentication in place, a permissive authorization mode can allow authenticated requests far beyond what the cluster intends.&lt;br&gt;
It does not distinguish cluster nodes from standalone container hosts that expose a compatible interface, nor from services unrelated to Kubernetes that happen to be bound to the port.&lt;br&gt;
It does not measure exploitation. No claim about compromise follows from a port count, and none is made here.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical test, run from inside
&lt;/h2&gt;

&lt;p&gt;The useful version of this measurement is performed by the cluster operator rather than against the internet. From a machine outside the cluster network, attempt an unauthenticated request to the node interface and observe whether the API answers with node or pod information. Where it does, the node is published beyond its trust boundary and the response itself is the evidence.&lt;br&gt;
Alongside that test, three checks belong in the same review. Confirm that the node interface is reachable only from the control plane and from any monitoring systems that require it, using network controls rather than application configuration. Confirm that anonymous authentication is disabled and that the authorization mode is set to a restrictive option. Confirm that workload credentials are short-lived and scoped, so that a single container read does not yield standing access to everything the cluster touches.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye port query port="10250", collected 23 September 2026: 6,378,556 matching assets&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>exposuremanagement</category>
      <category>containersecurity</category>
    </item>
    <item>
      <title>GitOps control planes: the Argo CD exposure question</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Tue, 06 Oct 2026 12:20:31 +0000</pubDate>
      <link>https://dev.to/kozhevniko/gitops-control-planes-the-argo-cd-exposure-question-52i1</link>
      <guid>https://dev.to/kozhevniko/gitops-control-planes-the-argo-cd-exposure-question-52i1</guid>
      <description>&lt;h1&gt;
  
  
  GitOps control planes: the Argo CD exposure question
&lt;/h1&gt;

&lt;p&gt;A GitOps controller holds the credentials that let it change a cluster. It reads from a repository and writes to a Kubernetes API, and it usually does so across several clusters at once. That combination makes the controller's own web interface and API a high-value target, and it explains why Argo CD's documentation devotes a full page to security considerations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context and method
&lt;/h2&gt;

&lt;p&gt;Counts were collected through the ZoomEye SDK on 2026-09-26 UTC. Both queries returned the same total, which is informative on its own.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app="Argo CD": 61,983&lt;/li&gt;
&lt;li&gt;title="Argo CD": 61,983
An identical result from a fingerprint query and a title query is unusual. It suggests the matching paths converged on the same set of responses rather than that the two independent methods agree by coincidence. The number should be treated as indicative of a widely deployed product that is easy to identify from its responses, and it is not a count of misconfigured installations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the controller can do
&lt;/h2&gt;

&lt;p&gt;The controller stores connection details for the clusters it manages and the repository credentials it uses. Its interface shows the state of applications, and depending on permissions it can trigger a sync, which applies whatever is in the repository to the cluster. In the common single-sign-on deployment the front end delegates authentication to an identity provider, so the exposure question becomes whether that delegation is actually enforced on every path into the service, including the API and the CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration points that decide the exposure
&lt;/h2&gt;

&lt;p&gt;The initial administrator account is a real credential that many deployments keep enabled after single sign-on is configured. Anonymous access is a documented setting and is enabled deliberately in some evaluations. TLS termination is often delegated to an ingress controller, and the ingress configuration decides whether the service is reachable besides the intended hostname. Repository credentials may be stored as cluster secrets or referenced from an external store, which changes what a cluster read yields.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checks worth running
&lt;/h2&gt;

&lt;p&gt;List the hostnames that resolve to the controller and request each of them, rather than testing only the documented one. Confirm that the initial admin account is disabled or its password rotated, and that anonymous access is off. Review the roles bound to the controller's service account, because those roles define what a sync can change. Check whether repository credentials are reachable from the controller's namespace, and whether an audit log records sync operations with an attributable identity.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Argo CD documentation, security considerations&lt;/li&gt;
&lt;li&gt;Argo CD documentation, RBAC configuration and the default admin account&lt;/li&gt;
&lt;li&gt;Argo CD documentation, private repository credential management&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>argocd</category>
      <category>gitops</category>
      <category>exposure</category>
    </item>
    <item>
      <title>Group-IB's August 2026 APAC Ransomware Data: What 190 Incidents Actually Tell You</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Tue, 06 Oct 2026 09:40:31 +0000</pubDate>
      <link>https://dev.to/kozhevniko/group-ibs-august-2026-apac-ransomware-data-what-190-incidents-actually-tell-you-5f5o</link>
      <guid>https://dev.to/kozhevniko/group-ibs-august-2026-apac-ransomware-data-what-190-incidents-actually-tell-you-5f5o</guid>
      <description>&lt;h1&gt;
  
  
  Group-IB's August 2026 APAC Ransomware Data: What 190 Incidents Actually Tell You
&lt;/h1&gt;

&lt;p&gt;Group-IB published ransomware tracking for the Asia-Pacific region covering August 2026. The recorded total was 190 incidents, a 26.7 percent increase month over month. The country distribution is instructive: India led with 32 incidents, Australia followed with 24, and Taiwan placed third with 20. Manufacturing was the most targeted sector with 38 incidents, and a single group, The Gentlemen, accounted for 37 of the incidents in the period.&lt;/p&gt;

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

&lt;p&gt;Public ransomware counts measure one thing well and several things poorly. They measure claims, because they are built largely from leak-site monitoring. They do not measure the true incident rate, because many victims never appear on a leak site and many claims are exaggerated or duplicated.&lt;br&gt;
That caveat does not make the data useless. It makes it a signal about attacker attention rather than a complete census. A month-over-month rise of 26.7 percent in recorded claims means more pressure on disclosed victims, and it means the groups producing those claims are active.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the distribution suggests
&lt;/h2&gt;

&lt;p&gt;The sector split matters more than the country split for most defenders. Manufacturing's lead is consistent with the pattern that has held for several quarters: production systems have availability requirements that make them hard to take offline, and operational technology boundaries are uneven. The concentration in a single group, 37 incidents from The Gentlemen, points to a disciplined operator running a repeatable playbook rather than a crowd of independent actors.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use this
&lt;/h2&gt;

&lt;p&gt;Treat the report as a prioritization input, not a benchmark. If your organization sits in manufacturing, or in the countries at the top of the list, the relevant question is whether your identity controls, backup isolation and recovery testing would survive an operator running that playbook. Leak-site statistics will not answer that question. Your own tabletop exercise will.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Group-IB ransomware activity report for the Asia-Pacific region, August 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>ransomware</category>
      <category>threatintelligence</category>
      <category>apac</category>
    </item>
    <item>
      <title>Detection and verification for CVE-2026-102795 in Apache Traffic Server</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 23:20:30 +0000</pubDate>
      <link>https://dev.to/kozhevniko/detection-and-verification-for-cve-2026-102795-in-apache-traffic-server-1h3p</link>
      <guid>https://dev.to/kozhevniko/detection-and-verification-for-cve-2026-102795-in-apache-traffic-server-1h3p</guid>
      <description>&lt;h1&gt;
  
  
  Detection and verification for CVE-2026-102795 in Apache Traffic Server
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;CVE-2026-102795 is an improper access control flaw in Apache Traffic Server, published 2 October 2026. Apache Traffic Server 9.0.0 through 9.2.14 and 10.0.0 through 10.1.3 are affected. Fixed releases are 9.2.15 and 10.1.4. The advisory frames the issue as a SNI to Host header matching policy that does not behave as intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  What defenders can actually verify
&lt;/h2&gt;

&lt;p&gt;This is not a vulnerability that produces a distinctive log line, so detection starts with configuration and version truth rather than signature hunting.&lt;br&gt;
&lt;strong&gt;Version truth.&lt;/strong&gt; Enumerate every Traffic Server instance, including instances behind load balancers and instances in disaster-recovery sites that rarely carry traffic. Record the build string, not the package name.&lt;br&gt;
&lt;strong&gt;Configuration truth.&lt;/strong&gt; Identify which instances terminate TLS and route by hostname. For each, list the virtual hosts that are expected to serve content. An entry that nobody can justify is worth investigating.&lt;br&gt;
&lt;strong&gt;Behaviour truth.&lt;/strong&gt; In staging, issue two requests: one where the SNI and Host values match, and one where they deliberately do not. If the second request is served rather than refused, the deployment is relying on behaviour the fix is meant to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on absence of evidence
&lt;/h2&gt;

&lt;p&gt;No exploitation in the wild has been reported for CVE-2026-102795, and there is no confirmed public proof of concept. The absence of exploitation reports is not evidence that exposure is theoretical, but neither does it justify describing the flaw as actively attacked. Both overstatement and dismissal are failures of the same kind: they substitute a conclusion for the available facts.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Branch&lt;/th&gt;
&lt;th&gt;Affected&lt;/th&gt;
&lt;th&gt;Fixed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;9.x&lt;/td&gt;
&lt;td&gt;9.0.0 - 9.2.14&lt;/td&gt;
&lt;td&gt;9.2.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.x&lt;/td&gt;
&lt;td&gt;10.0.0 - 10.1.4 and earlier&lt;/td&gt;
&lt;td&gt;10.1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The earlier CVE-2026-41920 record gave the wrong 9.x range and pointed at 9.1.15; CVE-2026-102795 supersedes it.&lt;/p&gt;

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

&lt;p&gt;ZoomEye measured &lt;strong&gt;311,469&lt;/strong&gt; assets matching &lt;code&gt;app="Apache Traffic Server"&lt;/code&gt; on 3 October 2026, with 0 for &lt;code&gt;vul.cve="CVE-2026-102795"&lt;/code&gt;. Use the first figure to size the inventory effort and the second to remind yourself that index coverage lags disclosure.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Upgrade to 9.2.15 or 10.1.4.&lt;/li&gt;
&lt;li&gt;Confirm the running build identifier on every instance.&lt;/li&gt;
&lt;li&gt;Re-run the staged matching and mismatching request pair and store the results.&lt;/li&gt;
&lt;li&gt;Remove catch-all virtual hosts so an unexpected name fails closed.&lt;/li&gt;
&lt;/ol&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>FusionAuth: 2,411 title matches on the authentication server that issues your tokens</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 22:40:29 +0000</pubDate>
      <link>https://dev.to/kozhevniko/fusionauth-2411-title-matches-on-the-authentication-server-that-issues-your-tokens-3547</link>
      <guid>https://dev.to/kozhevniko/fusionauth-2411-title-matches-on-the-authentication-server-that-issues-your-tokens-3547</guid>
      <description>&lt;h1&gt;
  
  
  FusionAuth: 2,411 title matches on the authentication server that issues your tokens
&lt;/h1&gt;

&lt;p&gt;An authentication server signs the tokens that applications accept as proof of identity. FusionAuth fills that role for many deployments, and a ZoomEye title search for &lt;code&gt;title="FusionAuth"&lt;/code&gt; on 2026-10-01 returned 2,411 matches.&lt;/p&gt;

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

&lt;p&gt;The figure is a title-field result. It counts pages that render the FusionAuth name in their HTML title, which includes the administrative interface, the login pages served for tenant applications, and documentation instances. It does not confirm a version or an installation, and it should be read as a population indicator.&lt;br&gt;
Two thousand four hundred and eleven matches give an owner a list of manageable size. Reconciling it against a host inventory is a task of hours rather than weeks, which makes the query a practical inventory input rather than a research exercise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The material the server holds
&lt;/h2&gt;

&lt;p&gt;FusionAuth stores user records, application registrations, signing keys and the configuration for the identity providers it federates with. Its documentation covers tenants, applications, API keys, and the way signing keys are generated and rotated.&lt;br&gt;
Key material is the important part. A signing key that is reachable by an unauthorised party allows tokens to be forged for any application that trusts the server, and the tokens are accepted without further checks by design. The same applies to the API keys that administrative clients use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checks that follow from 2,411
&lt;/h2&gt;

&lt;p&gt;The review is familiar to anyone who has audited an identity server. Is the administrative interface reachable from outside the perimeter, and does it require multi-factor authentication? Are the API keys scoped, rotated and stored outside the application configuration? Is the login page for each tenant exposed only where it needs to be?&lt;br&gt;
Reviewing the list also involves a question that the count cannot answer: whether any of the matches belong to the organisation without being in its inventory. Measurement finds services that documentation misses, and identity servers are the ones where that gap matters most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implications
&lt;/h2&gt;

&lt;p&gt;Identity servers are configured once and then depended upon for everything else. The count sets the population, and the configuration review decides whether the dependency is a controlled one.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye query for &lt;code&gt;title="FusionAuth"&lt;/code&gt;: &lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkZ1c2lvbkF1dGgi" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkZ1c2lvbkF1dGgi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FusionAuth documentation: &lt;a href="https://fusionauth.io/docs/" rel="noopener noreferrer"&gt;https://fusionauth.io/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FusionAuth source repository: &lt;a href="https://github.com/FusionAuth/fusionauth-containers" rel="noopener noreferrer"&gt;https://github.com/FusionAuth/fusionauth-containers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>fusionauth</category>
      <category>identity</category>
      <category>tokens</category>
    </item>
    <item>
      <title>CVE-2026-80097: The Authenticator App Is a Credential Store, Not Just a Prompt</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 21:20:30 +0000</pubDate>
      <link>https://dev.to/kozhevniko/cve-2026-80097-the-authenticator-app-is-a-credential-store-not-just-a-prompt-468h</link>
      <guid>https://dev.to/kozhevniko/cve-2026-80097-the-authenticator-app-is-a-credential-store-not-just-a-prompt-468h</guid>
      <description>&lt;h1&gt;
  
  
  CVE-2026-80097: The Authenticator App Is a Credential Store, Not Just a Prompt
&lt;/h1&gt;

&lt;p&gt;Microsoft Authenticator was the control most organisations reached for once they moved past SMS codes. CVE-2026-80097 concerns improper authentication in that app, and it is worth reading carefully rather than filing under "mobile bug".&lt;/p&gt;

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

&lt;p&gt;NVD describes CVE-2026-80097 as improper authentication in Microsoft Authenticator allowing an unauthorized attacker to elevate privileges locally. The weakness is CWE-287, and the CVSS base score is 8.6. It was published on 8 September 2026, and Microsoft's update guide is the vendor reference.&lt;br&gt;
The important qualifiers are "locally" and "elevate privileges". This is not a remote takeover of the vault. It is a flaw in the authentication logic of a component the organisation has designated as the thing that proves identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an authenticator app is not just a second factor
&lt;/h2&gt;

&lt;p&gt;Microsoft Authenticator holds far more than one-time codes. It stores passwordless credentials, push notification registrations, account metadata for every identity the user has linked, and it acts as a broker for sign-ins through the Microsoft identity platform. On a shared or supervised device it can span multiple accounts.&lt;br&gt;
The app's own authentication boundary is therefore a security control in its own right. If an attacker already has a foothold on the device, the question is whether reaching the app's internal state requires anything more than what that foothold provides. A local elevation in a credential-bearing app changes the answer, and it changes it for every account the app can act for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The small, boring mitigations that work
&lt;/h2&gt;

&lt;p&gt;Enforce device passcodes and biometrics on any device that holds an authenticator app, and require re-authentication at the OS level rather than inside the app alone. The app's own lock screen is a convenience feature; the platform lock is the control.&lt;br&gt;
Keep number matching enabled rather than simple approve/deny. Number matching does not fix this flaw, but it is the control that removes the entire class of MFA fatigue attacks, and it costs nothing.&lt;br&gt;
Limit how many accounts a single device holds. A personal phone carrying one corporate identity is a smaller blast radius than a tablet signed into six tenants.&lt;br&gt;
Then check for rooted and jailbroken devices among the population that holds authenticator registrations. Local privilege escalation flaws are worth materially more on a device whose platform integrity is already broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patch management for an app nobody counts
&lt;/h2&gt;

&lt;p&gt;Mobile applications sit outside most software inventory, which is the awkward part. The practical approach is to use whatever device management is in place to report installed application versions on managed devices, and to close the gap by policy on unmanaged ones: require that the app be updated within a defined window, and treat out-of-date authenticator builds the same way as an unpatched VPN client.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;NVD record for CVE-2026-80097: &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-80097" rel="noopener noreferrer"&gt;https://nvd.nist.gov/vuln/detail/CVE-2026-80097&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-80097" rel="noopener noreferrer"&gt;https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-80097&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>identity</category>
      <category>mfa</category>
      <category>mobile</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Container Registries and Orchestration: 57,017 Harbor and 78,059 Consul Fingerprints</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 14:00:29 +0000</pubDate>
      <link>https://dev.to/kozhevniko/container-registries-and-orchestration-57017-harbor-and-78059-consul-fingerprints-2i20</link>
      <guid>https://dev.to/kozhevniko/container-registries-and-orchestration-57017-harbor-and-78059-consul-fingerprints-2i20</guid>
      <description>&lt;h1&gt;
  
  
  Container Registries and Orchestration: 57,017 Harbor and 78,059 Consul Fingerprints
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Two sides of the same deployment
&lt;/h2&gt;

&lt;p&gt;Container registries distribute images to the hosts that run them. Service discovery and configuration systems tell those hosts where everything else is. Together they describe an application platform's internal map, and their internet exposure is worth measuring separately because each exposes a different capability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurements
&lt;/h2&gt;

&lt;p&gt;Queried on 25 September 2026 through the ZoomEye SDK with application fingerprints: &lt;code&gt;app="Harbor"&lt;/code&gt; returned 57,017 matching assets, &lt;code&gt;app="Consul"&lt;/code&gt; returned 78,059, and &lt;code&gt;app="Docker Registry"&lt;/code&gt; returned 1. Counts represent fingerprint matches in ZoomEye's index at query time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each exposure leaks
&lt;/h2&gt;

&lt;p&gt;A reachable container registry is a distribution point. If an attacker can push to it, every host that pulls from it receives the attacker's image. If they can only read from it, the registry still discloses which images the organisation runs, including internal-only components whose names and versions are otherwise not published.&lt;br&gt;
A reachable service discovery or configuration system is a map. Consul, for example, can expose the service catalogue, health status, and in some configurations the key-value store used for dynamic configuration. That is a reconnaissance advantage that does not require exploiting anything: it tells the attacker what exists and often where it runs.&lt;br&gt;
The &lt;code&gt;Docker Registry&lt;/code&gt; count of 1 is a reminder that fingerprint naming is inconsistent across products. The official registry image presents itself in ways that the fingerprint may not match reliably, so a count of 1 should be read as a fingerprint limitation rather than as evidence that one registry is exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the registry number deserves attention
&lt;/h2&gt;

&lt;p&gt;The Harbor count is the one to act on. The same September 2026 exploitation cluster that included artifact repositories also demonstrated that the default configuration of a software distribution system can be an authentication bypass. A registry with an administrative interface reachable from the internet inherits the same risk category, and unlike an application server it can be used to distribute code to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical checks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Restrict registry and service catalogue APIs to the networks that need them, and require authenticated, scoped tokens for pulls rather than anonymous access.&lt;/li&gt;
&lt;li&gt;Enable and verify content signing or provenance so that a pushed image can be attributed, since detection of a malicious push depends on being able to tell legitimate images from new ones.&lt;/li&gt;
&lt;li&gt;Review the key-value store for secrets placed there for dynamic configuration, and rotate anything that was reachable during a suspected exposure window.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Fingerprint counts depend on how services present themselves and undercount deployments behind proxies or authentication gateways. Harbor saw a significant share of its deployments moved behind corporate identity providers after earlier advisories, which the count does not distinguish. All figures are single-date observations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye search, executed 25 September 2026: &lt;code&gt;app="Harbor"&lt;/code&gt; returned 57,017 matching assets; &lt;code&gt;app="Consul"&lt;/code&gt; returned 78,059; &lt;code&gt;app="Docker Registry"&lt;/code&gt; returned 1 (SDK, sub_type=all, total count)&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities catalog, September 2026 additions referenced for context: &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;li&gt;MITRE ATT&amp;amp;CK T1190 Exploit Public-Facing Application: &lt;a href="https://attack.mitre.org/techniques/T1190" rel="noopener noreferrer"&gt;https://attack.mitre.org/techniques/T1190&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>docker</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Drupal Contributed Modules: 36 CVEs in One September 2026 Advisory Batch</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:00:31 +0000</pubDate>
      <link>https://dev.to/kozhevniko/drupal-contributed-modules-36-cves-in-one-september-2026-advisory-batch-3d4j</link>
      <guid>https://dev.to/kozhevniko/drupal-contributed-modules-36-cves-in-one-september-2026-advisory-batch-3d4j</guid>
      <description>&lt;h1&gt;
  
  
  Drupal Contributed Modules: 36 CVEs in One September 2026 Advisory Batch
&lt;/h1&gt;

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

&lt;p&gt;CERT-BUND published advisory WID-SEC-2026-3554 on 23 September 2026 and rated it high risk. The record collects 36 CVE identifiers, from CVE-2026-96355 through CVE-2026-96398, against contributed Drupal projects rather than Drupal core.&lt;br&gt;
The affected projects are Webform, Webform REST, Cloud, Project Browser, Commerce Decoupled Checkout, Mermaid Diagram Field, CookieCuttr, REST &amp;amp; JSON API Authentication, Stop administrator login, Tawk.to Live chat application, Editoria11y Accessibility Checker, AI CKEditor, Combined image style, CSS Usage Analyzer, Smart Content and Diba carousel slider.&lt;br&gt;
The advisory describes consequences that span remote code execution, privilege escalation, security control bypass, data manipulation and disclosure, and cross-site scripting. That breadth matters for triage: an operator cannot assume a single exploit class and a single detection rule will cover the batch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why contributed modules drive the risk
&lt;/h2&gt;

&lt;p&gt;Drupal core receives focused security attention and a predictable release rhythm. Contributed projects do not. They are maintained by volunteers and small vendors, they carry their own release schedules, and many sites enable a dozen or more of them. A site that patches core promptly can still run an outdated contributed module for months.&lt;br&gt;
The batch also shows how a maintenance wave produces a cluster of identifiers at once. Nineteen projects published fixes on the same day, and the structured record points to 36 separate Drupal security advisories, sa-contrib-2026-154 through sa-contrib-2026-191. Operators who only watch Drupal core announcements will miss all of them.&lt;/p&gt;

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

&lt;p&gt;A ZoomEye query on the product fingerprint returned 436,286 matching Drupal assets at the time of writing. The figure describes Drupal deployments in the index, not deployments that carry a vulnerable contributed module. Publicly reachable Drupal sites remain the pool from which an attacker has to find one that runs an unpatched extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do first
&lt;/h2&gt;

&lt;p&gt;Inventory the contributed projects on every Drupal site you run, then compare each version against the fixed releases. Build the comparison from the advisory rather than from memory, because several projects shipped two fixed branches.&lt;br&gt;
Stop at the highest-value targets. A module that handles authentication or API access deserves attention before a presentation-layer module, even though both appear in the same advisory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patch and verify
&lt;/h2&gt;

&lt;p&gt;Deploy the fixed versions, then confirm the running code changed. Drupal caches aggressively, and a stale container image or an unapplied update hook leaves the vulnerable code in place while the version string looks correct.&lt;br&gt;
Check the advisory pages for each project you use. Where a vendor describes a configuration that avoids the flaw, apply it until the update lands in production.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;CERT-BUND advisory WID-SEC-2026-3554, published 23 September 2026&lt;/li&gt;
&lt;li&gt;CERT-BUND structured advisory record, including the product version list and referenced Drupal advisories sa-contrib-2026-154 to sa-contrib-2026-191&lt;/li&gt;
&lt;li&gt;ZoomEye exposure query app="Drupal", executed 24 September 2026, exact count 436286&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>drupal</category>
      <category>vulnerability</category>
    </item>
    <item>
      <title>Jupyter Notebooks on the Open Internet: 408,240 Body Matches</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Mon, 05 Oct 2026 09:20:32 +0000</pubDate>
      <link>https://dev.to/kozhevniko/jupyter-notebooks-on-the-open-internet-408240-body-matches-3ai7</link>
      <guid>https://dev.to/kozhevniko/jupyter-notebooks-on-the-open-internet-408240-body-matches-3ai7</guid>
      <description>&lt;h1&gt;
  
  
  Jupyter Notebooks on the Open Internet: 408,240 Body Matches
&lt;/h1&gt;

&lt;p&gt;Jupyter is infrastructure that teams deploy and then rarely revisit. ZoomEye indexes the service side of those deployments, and the observed population is large enough that the exposure question is worth stating with the measurement attached rather than with an adjective.&lt;/p&gt;

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

&lt;p&gt;ZoomEye was queried for Jupyter pages. The query &lt;code&gt;http.body="Jupyter"&lt;/code&gt; returned &lt;strong&gt;408,240&lt;/strong&gt; matches. The measurement was taken on 2026-10-04 (UTC) with the SDK &lt;code&gt;sub_type&lt;/code&gt; set to &lt;code&gt;all&lt;/code&gt;, which covers device and domain assets in one scope. A second, narrower fingerprint was collected. The query &lt;code&gt;title="Jupyter"&lt;/code&gt; returned 149,922 matches, which shows how much a result depends on the field chosen rather than on the asset population itself. The number is an index count of matching assets, not a count of vulnerable or misconfigured systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the number is not the finding
&lt;/h2&gt;

&lt;p&gt;A port answer or a product fingerprint tells you that something is speaking the protocol. It does not tell you whether authentication is enabled, whether the instance is a lab that will be deleted tomorrow, or whether the service is reachable from the public internet by design.&lt;br&gt;
A notebook server is an execution environment with a browser front end. A body-content query returns 408,240 matches, and the operational question is how many of them accept a request without a token.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the exposure actually means
&lt;/h2&gt;

&lt;p&gt;The practical reading of a count this size is that the service is common, that scanning tools find it cheaply, and that the security of each instance depends on configuration decisions made by the operator rather than on the protocol. Attackers do not need to enumerate the whole population; they need the subset that answers without credentials, and that subset is discovered by probing rather than by counting.&lt;br&gt;
Jupyter has supported tokens and password authentication for years, and the classic failure is a server started with authentication disabled or bound to all interfaces during debugging and never stopped. Execution in a notebook reaches the host through the functions the kernel can call, which makes an unauthenticated notebook server equivalent to remote code execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use this measurement
&lt;/h2&gt;

&lt;p&gt;The verification step is to request the server root without a token and see whether a kernel list is returned. The configuration step is to keep the server on localhost behind an SSH tunnel, or to place authentication in front of it. Version control history, environment variables and the notebook files themselves frequently contain credentials that the server will display to whoever asks.&lt;br&gt;
ZoomEye is useful here because it reports what the internet can see rather than what the configuration was intended to be. That gap, between intent and observation, is where this class of exposure lives.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Jupyter documentation: Running a public notebook server: &lt;a href="https://jupyter-notebook.readthedocs.io/en/stable/public_server.html" rel="noopener noreferrer"&gt;https://jupyter-notebook.readthedocs.io/en/stable/public_server.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Jupyter Server documentation: Security: &lt;a href="https://jupyter-server.readthedocs.io/en/latest/operators/security.html" rel="noopener noreferrer"&gt;https://jupyter-server.readthedocs.io/en/latest/operators/security.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye search for the primary query, measured 2026-10-04 (UTC), &lt;code&gt;sub_type=all&lt;/code&gt;: 408,240 matches&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>attacksurface</category>
      <category>exposure</category>
    </item>
    <item>
      <title>Why vul.cve Returns Zero for CVE-2026-96365: Reading Exposure Data Honestly</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Sun, 04 Oct 2026 23:00:29 +0000</pubDate>
      <link>https://dev.to/kozhevniko/why-vulcve-returns-zero-for-cve-2026-96365-reading-exposure-data-honestly-2120</link>
      <guid>https://dev.to/kozhevniko/why-vulcve-returns-zero-for-cve-2026-96365-reading-exposure-data-honestly-2120</guid>
      <description>&lt;h1&gt;
  
  
  Why vul.cve Returns Zero for CVE-2026-96365: Reading Exposure Data Honestly
&lt;/h1&gt;

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

&lt;p&gt;CVE-2026-96365 is one of 36 identifiers in CERT-BUND advisory WID-SEC-2026-3554, published 23 September 2026 and rated high risk. The advisory covers 16 contributed Drupal projects, with identifiers running from CVE-2026-96355 to CVE-2026-96398. Interpretation starts with the two ZoomEye results collected for this article.&lt;/p&gt;

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

&lt;p&gt;The public record describes remote exploitation in five outcome classes: arbitrary code execution, extended privileges, bypass of security measures, data manipulation or disclosure, and cross-site scripting. It does not publish the defect behind each identifier, and that gap carries into external scanning. A scanner indexes what a service presents; a flaw in a contributed module may not present anything distinct enough to fingerprint.&lt;/p&gt;

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

&lt;p&gt;CERT-BUND scores probability and damage at 4 out of 4, with a CVSS v3.1 base score of 9.8 and a temporal score of 8.5. The scanning gap does not reduce that severity. It only means external data cannot substitute for internal assessment.&lt;/p&gt;

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

&lt;p&gt;The affected projects and their fixed releases are Webform 6.2.12 and 6.3.1, Webform REST 4.2.1, Cloud 7.0.1, Project Browser 2.0.3 and 2.1.5, Commerce Decoupled Checkout 1.8.0, Mermaid Diagram Field 1.0.9, CookieCuttr 2.0.3, REST &amp;amp; JSON API Authentication 3.2.0, Stop administrator login 1.6, Tawk.to Live chat application 3.0.4, Editoria11y Accessibility Checker 2.2.23 and 3.0.9, AI CKEditor 1.4.3, Combined image style 1.0.7, CSS Usage Analyzer 1.0.2, Smart Content 3.2.1, and Diba carousel slider 3.0.2.&lt;/p&gt;

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

&lt;p&gt;Two queries were run on 27 September 2026. The product query app="Drupal" returned 436403 indexed assets. The vulnerability query vul.cve="CVE-2026-96365" returned 0. The second result means the identifier is not indexed as an exposed service, which is expected for a freshly assigned CVE. Neither count identifies hosts running an affected module, and no count should be read as a victim tally.&lt;/p&gt;

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

&lt;p&gt;Use the product count to size the population to review and the module list to scope what to check. Patch each affected module to the fixed release for its branch. Keep the two evidence types separate in reporting: what the internet shows about Drupal deployments, and what the inventory shows about modules you run.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;CERT-BUND advisory WID-SEC-2026-3554, published 23 September 2026: &lt;a href="https://wid.cert-bund.de/portal/wid/securityadvisory?name=WID-SEC-2026-3554" rel="noopener noreferrer"&gt;https://wid.cert-bund.de/portal/wid/securityadvisory?name=WID-SEC-2026-3554&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CERT-BUND structured record for WID-SEC-2026-3554, 16 projects and 19 fixed releases: &lt;a href="https://wid.cert-bund.de/content/public/content/3f0df5d6-5291-41b3-92f2-0c016281c91f" rel="noopener noreferrer"&gt;https://wid.cert-bund.de/content/public/content/3f0df5d6-5291-41b3-92f2-0c016281c91f&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye search app="Drupal", executed 27 September 2026, exact count 436403: &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJEcnVwYWwi" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=YXBwPSJEcnVwYWwi&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>drupal</category>
      <category>cve202696365</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>Triage Order After a Credential-Exposure Advisory: What to Fix First on Fortinet Edge Devices</title>
      <dc:creator>kozhevniko</dc:creator>
      <pubDate>Sun, 04 Oct 2026 22:00:28 +0000</pubDate>
      <link>https://dev.to/kozhevniko/triage-order-after-a-credential-exposure-advisory-what-to-fix-first-on-fortinet-edge-devices-49li</link>
      <guid>https://dev.to/kozhevniko/triage-order-after-a-credential-exposure-advisory-what-to-fix-first-on-fortinet-edge-devices-49li</guid>
      <description>&lt;h1&gt;
  
  
  Triage Order After a Credential-Exposure Advisory: What to Fix First on Fortinet Edge Devices
&lt;/h1&gt;

&lt;p&gt;On 18 June 2026, the Australian Cyber Security Centre (ACSC) published an alert titled "Reported widespread credential exposure affecting Fortinet Firewalls and VPN Gateways" [1]. The alert is aimed at all Australians and Australian organisations that use Fortinet devices, and it describes a malicious campaign that is reported to be widespread, largely using exposed credentials and credential-based attacks against Fortinet firewalls and VPN gateways. The ACSC states that this activity can lead to potential compromise and further credential exposure.&lt;/p&gt;

&lt;p&gt;The advisory is explicit about the consequence it is concerned with: leveraging these credentials could enable a malicious actor's remote access to the devices and connected networks, as well as allow changes to various settings, including security controls [1]. That is the risk model. It is not a story about a newly disclosed software vulnerability being exploited. The ACSC describes credential-based attacks against internet-facing edge devices. The alert does not name a CVE, does not publish an affected version list, and does not state how many devices or organisations were affected [1]. Those omissions matter for triage, because they mean the scope of the event cannot be bounded from the advisory alone.&lt;/p&gt;

&lt;p&gt;The alert's mitigation advice is a list: rotate all admin and VPN credentials immediately; ensure devices are patched against older-firmware vulnerabilities; restrict management interface exposure so that firewall admin and management interfaces are not internet accessible unless necessary; enforce MFA on all external interfaces; store credentials with PBKDF2 hashing, logging back in to admin accounts after updating so that encryption changes to PBKDF2; and examine authentication and access logs for abnormal logins or changes [1]. An update to the alert notes that Fortinet released a blog post and additional guidance, and directs affected organisations to review and monitor that post [1][2].&lt;/p&gt;

&lt;p&gt;Read as a checklist, that list invites parallel execution. Read as a risk-sequencing problem, it implies an order. The four main workstreams - credential rotation, firmware currency, management-plane restriction, and MFA enforcement - have different effort profiles, different operational risk, and different dependencies. Running them in the wrong order can either waste effort or create new exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the order is not arbitrary
&lt;/h2&gt;

&lt;p&gt;Credential rotation is the only control on the list that directly addresses the reported attack path. If credentials are the vector, then changing them removes the vector for the accounts that are changed. It is also the control with the shortest time-to-effect and, in most environments, the lowest dependency on change windows. That combination argues for doing it first, and the ACSC says to do it immediately [1].&lt;/p&gt;

&lt;p&gt;The caveat is that rotation is only durable if the other controls follow. Rotating a credential on a device whose management interface is internet-accessible and whose MFA is absent simply resets the clock. The new credential is exposed to the same collection path as the old one. This is why rotation first does not mean rotation alone.&lt;/p&gt;

&lt;p&gt;Firmware currency is the next consideration, but it is not the same kind of control. The advisory asks organisations to ensure devices are patched against older-firmware vulnerabilities [1]. That is a general hardening step, not a response to a named vulnerability in this campaign, because no CVE is named. Patching is higher effort and higher risk than rotation: it can require maintenance windows, it can interrupt VPN service, and it can introduce regressions. It should be planned and executed deliberately, not rushed into the same window as credential rotation unless the environment is small and the change is well understood.&lt;/p&gt;

&lt;p&gt;Management-plane restriction is the control that changes the attack surface rather than the credential. If the admin interface is not reachable from the internet, credential-based attacks against that interface lose their transport. The ACSC frames this as a conditional: management interfaces should not be internet accessible unless necessary [1]. The word "unless" is doing real work. Some organisations have a genuine operational need for remote management, and for them the answer is not to remove access but to constrain it - source restrictions, jump hosts, or a VPN that is itself protected by MFA. This work is often slower than rotation because it touches network architecture and change control, but it is more durable than rotation alone.&lt;/p&gt;

&lt;p&gt;MFA enforcement on all external interfaces is the control that raises the cost of a stolen credential. It is listed separately from management-plane restriction, and it applies to external interfaces generally, not only to admin access [1]. MFA is high-value but also high-friction: it depends on identity infrastructure, it can break service accounts and automation, and it requires enrolment and support. In a triage order, MFA is the control that should be sequenced after the immediate exposure is reduced, because it is the one most likely to be rolled back under pressure if it is rushed.&lt;/p&gt;

&lt;p&gt;PBKDF2 hashing and log review sit at different points again. The PBKDF2 instruction is specific: store credentials with PBKDF2 hashing, and log back in to admin accounts after updating so that encryption changes to PBKDF2 [1]. That is a configuration change with a verification step, and it belongs with the credential workstream rather than as a separate project. Log review is detective rather than preventive, and it should start early and continue, because it is how an organisation learns whether the preventive controls are holding.&lt;/p&gt;

&lt;h2&gt;
  
  
  A defensible sequence
&lt;/h2&gt;

&lt;p&gt;The order that follows from the advisory's own framing is: rotate, then reduce exposure, then raise authentication cost, then patch on a planned cycle, with log review running throughout. Rotation first because it is immediate and directly relevant. Management-plane restriction next because it removes the transport for the reported attack. MFA next because it protects the credentials that remain in use. Firmware currency on a planned schedule because it is a general hardening measure and carries the most operational risk. PBKDF2 and log review woven into the credential and detection workstreams respectively.&lt;/p&gt;

&lt;p&gt;This is a sequence, not a schedule. The point is dependency and risk, not elapsed time. An organisation with a small number of devices and a maintenance window available may compress the sequence. An organisation with a large estate and complex change control may run management-plane restriction in parallel with rotation for different device groups. What the advisory argues against is treating the list as unordered, because the controls are not interchangeable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using ZoomEye to scope the estate
&lt;/h2&gt;

&lt;p&gt;Triage needs an inventory. The ACSC alert does not provide an affected version list or a victim count, so an organisation cannot use the advisory to determine whether it is in scope [1]. It has to determine that from its own asset data.&lt;/p&gt;

&lt;p&gt;ZoomEye can be used here as an asset-identification and exposure-review input, not as a compromise detector. A query for &lt;code&gt;app="FortiGate"&lt;/code&gt; returned an exact count of 983996 internet-observable assets, observed on 2026-09-23 [3]. That figure is the number of internet-observable assets matching that query. It is not a count of compromised devices, not a count of vulnerable devices, and not a count of victims. ZoomEye does not detect compromise, and nothing in this article should be read as claiming that it does.&lt;/p&gt;

&lt;p&gt;What the figure is useful for is measurement hygiene and jurisdiction scoping. It establishes the scale of internet-observable FortiGate presence as a population, which is a denominator against which an organisation can compare its own externally visible footprint. If an organisation runs the same query restricted to its own address space, or reviews its own external attack surface, it can identify which of its devices are observable from the internet at all. That is the first question in management-plane restriction: which management interfaces are reachable? The ZoomEye count does not answer that question for a specific organisation, but it frames why the question matters at population scale.&lt;/p&gt;

&lt;p&gt;The same query can support continuous monitoring. Re-running an exposure query over time and comparing results is a way to detect changes in what is observable, which is relevant to the management-plane restriction workstream. Again, this is exposure review, not compromise detection.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the evidence does not establish
&lt;/h2&gt;

&lt;p&gt;The advisory is a reported campaign, not a completed incident report. It does not name a CVE, does not list affected versions, and does not give a victim count [1]. The ZoomEye figure is an observation of internet-observable assets, not an incident metric [3]. Any triage plan built on this evidence should be explicit about those limits. The controls are defensible because they reduce credential-based risk generally, not because they map to a published indicator set.&lt;/p&gt;

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

&lt;p&gt;[1] ACSC, "Reported widespread credential exposure affecting Fortinet Firewalls and VPN Gateways", published 2026-06-18T07:18:43Z, updated 22/06/2026. &lt;a href="https://www.cyber.gov.au/about-us/view-all-content/alerts-and-advisories/reported-widespread-credential-exposure-affecting-fortinet-firewalls-and-vpn-gateways" rel="noopener noreferrer"&gt;https://www.cyber.gov.au/about-us/view-all-content/alerts-and-advisories/reported-widespread-credential-exposure-affecting-fortinet-firewalls-and-vpn-gateways&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] Fortinet PSIRT blog, "Analysis of reported credential compromise of FortiGate devices". &lt;a href="https://www.fortinet.com/blog/psirt-blogs/analysis-of-reported-credential-compromise-of-fortigate-devices" rel="noopener noreferrer"&gt;https://www.fortinet.com/blog/psirt-blogs/analysis-of-reported-credential-compromise-of-fortigate-devices&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] ZoomEye query &lt;code&gt;app="FortiGate"&lt;/code&gt;, exact_count=983996, observed 2026-09-23T17:14-17:15Z. &lt;a href="https://www.zoomeye.org/searchResult?q=app%3D%22FortiGate%22" rel="noopener noreferrer"&gt;https://www.zoomeye.org/searchResult?q=app%3D%22FortiGate%22&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>fortinet</category>
      <category>credentialexposure</category>
      <category>zoomeye</category>
    </item>
  </channel>
</rss>
