<?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: yutianle</title>
    <description>The latest articles on DEV Community by yutianle (@bianliang).</description>
    <link>https://dev.to/bianliang</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%2F4125308%2F36c3cc89-28d8-4805-856a-aced629d2d3c.png</url>
      <title>DEV Community: yutianle</title>
      <link>https://dev.to/bianliang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bianliang"/>
    <language>en</language>
    <item>
      <title>Why an Authenticated GitLab Account Is Enough for Server-Side Code Execution</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 16:20:40 +0000</pubDate>
      <link>https://dev.to/bianliang/why-an-authenticated-gitlab-account-is-enough-for-server-side-code-execution-3o76</link>
      <guid>https://dev.to/bianliang/why-an-authenticated-gitlab-account-is-enough-for-server-side-code-execution-3o76</guid>
      <description>&lt;h1&gt;
  
  
  Why an Authenticated GitLab Account Is Enough for Server-Side Code Execution
&lt;/h1&gt;

&lt;p&gt;Severity scores for CVE-2026-89078 and CVE-2026-93577 read 9.9, and the access they require is an authenticated account able to commit CI/CD configuration. That combination is what makes the September 23, 2026 GitLab patch release urgent for self-managed operators.&lt;/p&gt;

&lt;h2&gt;
  
  
  The attacker model
&lt;/h2&gt;

&lt;p&gt;No anonymous reachability is required. The attacker holds a valid account, or a stolen credential, with enough project permission to add or modify pipeline configuration. Malformed regular expressions in that configuration trigger a double free in CVE-2026-89078 and an integer overflow in CVE-2026-93577.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pipeline configuration as a trust boundary
&lt;/h2&gt;

&lt;p&gt;Pipeline files are executed as code, yet they enter through ordinary source control. Teams routinely grant pipeline editing rights far more widely than administrative rights, on the assumption that only the administrator can affect the server. These flaws break that assumption, because the parser that reads pipeline data runs on the server itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the attacker gains
&lt;/h2&gt;

&lt;p&gt;Success means code execution on the GitLab server, in the process that stores repositories, holds CI variables, and authenticates to connected systems. GitLab's advisory notes that the flaw "could have allowed an authenticated user to execute arbitrary code on the GitLab server." A compromised developer credential, or a legitimate but malicious insider, therefore carries risk well beyond the projects they can see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure and affected scope
&lt;/h2&gt;

&lt;p&gt;Self-managed Community Edition and Enterprise Edition deployments in 19.2 before 19.2.7, 19.3 before 19.3.3, and 19.4 before 19.4.1 are in scope. A ZoomEye search for app="GitLab" on 2026-09-24 returned 1,316,748 assets, which measures how many internet-facing deployments carry the fingerprint, not how many are vulnerable.&lt;/p&gt;

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

&lt;p&gt;Upgrade to 19.4.1, 19.3.3, or 19.2.7. Reduce the number of accounts that can change pipeline configuration, review personal access tokens and deploy keys with pipeline scope, and rotate CI variables on instances that were exposed while unpatched.&lt;/p&gt;

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

&lt;p&gt;SecurityOnline, "GitLab Critical Patch Release Fixes Severe RCE Flaws," September 23, 2026: &lt;a href="https://securityonline.info/gitlab-critical-patch-release-rce/" rel="noopener noreferrer"&gt;https://securityonline.info/gitlab-critical-patch-release-rce/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vulnerability</category>
      <category>gitlab</category>
      <category>remotecodeexecution</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Woodpecker CI at 1,831 Titles and 2 Application Fingerprints: What a Narrow Signature Gap Means</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 15:40:31 +0000</pubDate>
      <link>https://dev.to/bianliang/woodpecker-ci-at-1831-titles-and-2-application-fingerprints-what-a-narrow-signature-gap-means-1bo2</link>
      <guid>https://dev.to/bianliang/woodpecker-ci-at-1831-titles-and-2-application-fingerprints-what-a-narrow-signature-gap-means-1bo2</guid>
      <description>&lt;h1&gt;
  
  
  Woodpecker CI at 1,831 Titles and 2 Application Fingerprints: What a Narrow Signature Gap Means
&lt;/h1&gt;

&lt;p&gt;Continuous integration systems are among the more consequential self-hosted services, because the pipeline they run holds the credentials to deploy. Measuring their reachability is therefore worth doing carefully, and Woodpecker CI is a useful case for a signature comparison that does not behave as a title count would suggest.&lt;/p&gt;

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

&lt;p&gt;Collected from ZoomEye AI on 2026-10-02:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title="Woodpecker"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 1,831 matches.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app="Woodpecker"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 2 matches.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;title="Woodpecker CI"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 0 matches.
Counts are indexed-service observations at collection time and describe reachable assets, not vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Two problems in the same set
&lt;/h2&gt;

&lt;p&gt;The first problem is a name collision. "Woodpecker" is a common English word and the name of unrelated software and organisations, so an HTML title containing it is not evidence of the CI product. The 1,831 title matches almost certainly include a large share of pages that have nothing to do with continuous integration.&lt;br&gt;
The second problem is the opposite of the one seen with several other products in this series. Here the application fingerprint does exist, but it matches only two services, while the title matches 1,831. A signature that matches two hosts against a title count of nearly two thousand is a signature that is either narrow or new.&lt;br&gt;
Neither field produces a usable population estimate on its own. The third query shows why refining the name does not help: the more specific string &lt;code&gt;"Woodpecker CI"&lt;/code&gt; produces nothing, because the product's own pages do not use that exact title. Refinement that assumes the product name matches its marketing name will fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a reachable CI system carries
&lt;/h2&gt;

&lt;p&gt;The reason to care is the payload. A CI system holds or can obtain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code for every repository it builds.&lt;/li&gt;
&lt;li&gt;Deployment credentials for every target it deploys to, often in the form of tokens or keys stored as repository secrets.&lt;/li&gt;
&lt;li&gt;The ability to run arbitrary code as part of a build, which is the mechanism by which a pipeline compromise becomes a supply-chain event.
That combination is why CI is a high-value target independent of what other services an organisation runs. The relevant exposure question is not whether the web interface is reachable, but whether an unauthenticated actor can influence what the pipeline runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Measuring a product without a reliable name
&lt;/h2&gt;

&lt;p&gt;The practical lesson from these three numbers concerns method. When a product's name is a common word and its signature set is thin, a public measurement cannot produce a trustworthy instance count, and the correct output is a statement of that limitation rather than a number.&lt;br&gt;
What can still be done is a format-based query. CI systems typically expose distinctive paths and response structures: a health endpoint, a build status badge, an API route with a known prefix. A query built on one of those is far more specific than a title string, and it is the technique that produces a defensible count.&lt;br&gt;
For the operator, the more reliable route is direct. A pipeline system should be reachable from a known network, by a known set of users, and by webhook sources from the code host. Comparing the intended set against observed traffic is a better measurement than any public query.&lt;/p&gt;

&lt;h2&gt;
  
  
  What operators should check
&lt;/h2&gt;

&lt;p&gt;Is the CI web interface reachable from outside the organisation's network, and if so, is it authenticated at the edge?&lt;br&gt;
Are repository secrets scoped to the repositories and environments that need them, rather than shared across a project?&lt;br&gt;
Do builds run in ephemeral runners rather than on a long-lived host that also holds deployment credentials?&lt;br&gt;
Is the webhook path restricted to the expected source, so that a forged webhook cannot trigger a build?&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ZoomEye fits
&lt;/h2&gt;

&lt;p&gt;ZoomEye is a legitimate part of this workflow in two ways that do not depend on the name query being reliable. Running the format-based query over time shows whether the population is changing, and running it against a known address range answers the operator's direct question. Both uses require the query to be specific enough to trust, which is exactly what the title query demonstrates it is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take away
&lt;/h2&gt;

&lt;p&gt;1,831 titles, 2 fingerprints and 0 for the more specific product string. The first is inflated by a name collision, the second is suspiciously narrow, and the third shows that adding a qualifier does not help. When the numbers disagree this way, the honest output is a limitation statement plus a better query, not a population estimate built from the largest figure.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye AI, &lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;cyberspace search&lt;/a&gt; - counts collected 2026-10-02 with the queries stated above&lt;/li&gt;
&lt;li&gt;Woodpecker CI, &lt;a href="https://woodpecker-ci.org/docs/intro" rel="noopener noreferrer"&gt;Woodpecker documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye, &lt;a href="https://www.zoomeye.ai/doc" rel="noopener noreferrer"&gt;search syntax reference&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>exposure</category>
      <category>cicd</category>
      <category>measurementmethod</category>
    </item>
    <item>
      <title>Copy Fail (CVE-2026-31431): 732 bytes from a low-privilege shell to root on Linux</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:40:29 +0000</pubDate>
      <link>https://dev.to/bianliang/copy-fail-cve-2026-31431-732-bytes-from-a-low-privilege-shell-to-root-on-linux-3ajm</link>
      <guid>https://dev.to/bianliang/copy-fail-cve-2026-31431-732-bytes-from-a-low-privilege-shell-to-root-on-linux-3ajm</guid>
      <description>&lt;h1&gt;
  
  
  Copy Fail (CVE-2026-31431): 732 bytes from a low-privilege shell to root on Linux
&lt;/h1&gt;

&lt;p&gt;Local privilege escalation flaws have a narrower audience than remote ones, which is why they attract less attention. Copy Fail, tracked as CVE-2026-31431, was disclosed on 29 April 2026 and turns a modest local foothold into root on the major Linux distributions. Its relevance rests on a premise defenders often forget: any initial access that lands a normal user on a host is a few steps away from being an administrative compromise.&lt;/p&gt;

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

&lt;p&gt;The vulnerability is in the Linux kernel's AF_ALG cryptographic interface, specifically the algif_aead module that handles AEAD ciphers. The published research describes a four-byte controlled write into the page cache, combined with splice and the authencesn template, which is enough to modify data the kernel will later trust. The exploit is small, and the researchers' reference implementation is 732 bytes.&lt;br&gt;
The score is CVSS 7.8, with a local attack vector. Affected kernels are those below 6.18.22, below 6.19.12, and below 7.0 depending on the release line. Fixed kernels are 6.18.22 or later, 6.19.12 or later, and 7.0 or later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a local bug matters on shared and containerised hosts
&lt;/h2&gt;

&lt;p&gt;Copy Fail does not cross a network boundary by itself, but it changes what a low-privilege execution point is worth. On a shared build runner, a CI container that runs untrusted code, or any multi-tenant host, the ability to escalate to root converts a contained process into control of the node and everything scheduled on it.&lt;br&gt;
The kernel interface it abuses is not exotic. AF_ALG is present on ordinary systems, and the vulnerability is reached through code the attacker runs locally, which is exactly the position an attacker holds after a container breakout, a compromised dependency, or a foothold from a phishing payload.&lt;/p&gt;

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

&lt;p&gt;Upgrade the kernel to a fixed release through the distribution package manager. Because the flaw is reached locally, patching effort should track where untrusted code already executes: container hosts, CI runners and machines with many users come first.&lt;br&gt;
Kernel patches usually need a reboot, so teams that defer reboots are effectively unpatched. Track the kernel version actually running rather than the one that was installed, and treat a pending kernel update as an open finding.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;XMU Information and Network Center advisory, 3 October 2026, &lt;a href="https://inc.xmu.edu.cn/info/1041/9412.htm" rel="noopener noreferrer"&gt;https://inc.xmu.edu.cn/info/1041/9412.htm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Xint, "Copy Fail: 732 bytes to root on Linux", &lt;a href="https://xint.io/blog/copy-fail-linux-distributions" rel="noopener noreferrer"&gt;https://xint.io/blog/copy-fail-linux-distributions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn, AKSARC-2026-0001 advisory for CVE-2026-31431, &lt;a href="https://learn.microsoft.com/zh-cn/azure/aks/aksarc/security-bulletins" rel="noopener noreferrer"&gt;https://learn.microsoft.com/zh-cn/azure/aks/aksarc/security-bulletins&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>privilegeescalation</category>
      <category>kernel</category>
    </item>
    <item>
      <title>A photo library is an identity record that happens to contain pictures</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:20:29 +0000</pubDate>
      <link>https://dev.to/bianliang/a-photo-library-is-an-identity-record-that-happens-to-contain-pictures-25kh</link>
      <guid>https://dev.to/bianliang/a-photo-library-is-an-identity-record-that-happens-to-contain-pictures-25kh</guid>
      <description>&lt;h1&gt;
  
  
  A photo library is an identity record that happens to contain pictures
&lt;/h1&gt;

&lt;p&gt;A title query for Immich returns 510 matches in ZoomEye. The figure looks small beside the categories around it, and the contents of a single instance can outrank all of them. Personal media is where identifying material accumulates even though nobody decided to collect it.&lt;/p&gt;

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

&lt;p&gt;The query ran on 2026-10-01 and matched the title field for the literal string. ZoomEye title matching is inclusive, so a record returns when the string appears anywhere in the parsed title. One match equals one indexed record, captured whenever the scanner last reached the host.&lt;br&gt;
The count therefore describes how many indexed records present the name. It says nothing about whether the instance holds a personal library or a test album, whether login is enforced, or who runs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the product holds
&lt;/h2&gt;

&lt;p&gt;Immich is a self-hosted replacement for consumer photo services. It backs up media from mobile clients, indexes it, pulls metadata out of image files and serves a browsable library, with search, albums and face grouping in recent versions. A typical deployment runs the application server, a database, a cache and a machine learning component for recognition tasks.&lt;br&gt;
The important property is the metadata rather than the storage. Photographs from phones carry capture time and device model and, when location services were enabled, coordinates. Face grouping adds a second index that links one person across years of pictures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a small count is not a small risk
&lt;/h2&gt;

&lt;p&gt;Three concerns follow from the contents.&lt;br&gt;
Location history. A library with coordinates reconstructs where a person slept, worked and travelled, and the pattern shows up before any image is opened.&lt;br&gt;
Presence information. Face grouping and search make it possible to answer questions about a named individual without browsing the whole collection, which turns the library into a queryable biography.&lt;br&gt;
Third-party exposure. Family photographs include people who never agreed to any of this, and their presence in the library is not something the operator can consent to for them.&lt;br&gt;
The authentication path matters for the same reason. Mobile backup is a convenience feature, and the convenience of a client that reconnects automatically is the same property that makes a stolen token more useful than a stolen password.&lt;/p&gt;

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

&lt;p&gt;A title match cannot distinguish a personal library, an internal media archive for a small organisation, and a demonstration deployment. It also cannot tell you whether the instance sits behind a reverse proxy with an identity provider in front of it or is reachable directly over the network.&lt;br&gt;
The claim that holds is narrow. Hundreds of self-hosted media libraries are indexed, a small population that still needs an owner and a policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the check honestly
&lt;/h2&gt;

&lt;p&gt;Identify the instances your organisation runs and verify them directly. Confirm whether the library is reachable from outside the network and where authentication is enforced. Confirm whether the mobile client configuration is shared, and whether session tokens are long-lived. Confirm where media is stored and whether that storage is reachable from other hosts. Confirm whether the recognition components run with access to cloud credentials.&lt;br&gt;
Where the library is personal, the sensible default is access over a private network. Where it is organisational, treat it as a records system with an identity dimension rather than as a file share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implications for defenders
&lt;/h2&gt;

&lt;p&gt;Judge this category by what the contents let someone infer rather than by the number of records indexed. A small exposed library can disclose more about the people in it than a large database of page views.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye query for title="Immich": &lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkltbWljaCI%3D" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkltbWljaCI%3D&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Immich documentation: &lt;a href="https://immich.app/docs/overview/introduction" rel="noopener noreferrer"&gt;https://immich.app/docs/overview/introduction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Immich source repository: &lt;a href="https://github.com/immich-app/immich" rel="noopener noreferrer"&gt;https://github.com/immich-app/immich&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>exposure</category>
      <category>immich</category>
      <category>attacksurface</category>
    </item>
    <item>
      <title>Assessing Real-World Risk From CVE-2026-78249 Without Overstating It</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 01:40:31 +0000</pubDate>
      <link>https://dev.to/bianliang/assessing-real-world-risk-from-cve-2026-78249-without-overstating-it-k7j</link>
      <guid>https://dev.to/bianliang/assessing-real-world-risk-from-cve-2026-78249-without-overstating-it-k7j</guid>
      <description>&lt;h1&gt;
  
  
  Assessing Real-World Risk From CVE-2026-78249 Without Overstating It
&lt;/h1&gt;

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

&lt;p&gt;CVE-2026-78249 is a path traversal vulnerability in multifunction printers from FUJIFILM Business Innovation Corp. and Sharp Corporation, disclosed by JPCERT/CC as JVNVU#90160989 on 2026-09-30. It is CWE-22, with a CVSS v4.0 base score of 6.9 and a CVSS v3.1 base score of 4.9.&lt;br&gt;
The published vectors are CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N and CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N.&lt;/p&gt;

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

&lt;p&gt;The device does not properly limit a pathname to a restricted directory. An attacker who can access the web management interface and submit a specially crafted request can cause sensitive information stored in the MFP to be obtained.&lt;br&gt;
What the advisory does not provide matters as much as what it does. There is no proof of concept, no request syntax, no list of reachable files, and no statement of active exploitation. The v4.0 privileges value of High indicates the attacker operates from a privileged position on the management surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calibrating the risk
&lt;/h2&gt;

&lt;p&gt;Several factors argue against inflating this beyond its published severity. Impact is confidentiality only, with integrity and availability both None. Privileges required are High, not None. No exploitation in the wild is reported in the advisory, and no public exploit is referenced.&lt;br&gt;
Other factors argue against dismissing it. The affected devices are common and frequently internet-visible, as the exposure figure below illustrates. Printers are often outside routine patch cadence. The disclosure is severe enough to be recorded at 6.9 in CVSS v4.0, and the data stored on an MFP can be genuinely useful in an intrusion.&lt;br&gt;
The reasonable reading is a medium-severity, conditions-dependent disclosure bug that deserves scheduled remediation and a check on management-interface reachability, not emergency escalation or alarm.&lt;/p&gt;

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

&lt;p&gt;The outcome is disclosure of stored device data, with no reported effect on integrity or availability.&lt;/p&gt;

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

&lt;p&gt;JVN attributes the vulnerability to multiple MFPs from FUJIFILM Business Innovation Corp. and Sharp Corporation and states that a wide range of products is affected, deferring names, models, and versions to the vendors. Both vendors are listed as Vulnerable with a last update of 2026-09-30.&lt;/p&gt;

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

&lt;p&gt;A verified ZoomEye observation for this topic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search Dork: &lt;code&gt;app="FUJIFILM" || app="Sharp"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Exposure: 22,608 instances identified globally
This count of fingerprint-matching assets shows the product families are widely deployed and externally discoverable. It is not a count of vulnerable devices, and it should not be presented as one.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;JVN lists vendor firmware updates as the solution and vendor workarounds as a mitigation. A proportionate response is to map affected models against vendor guidance, schedule the update, restrict access to management interfaces in the interim, and avoid treating the flaw as a mass-exploitation emergency absent evidence that it is one.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;JVNVU#90160989, JPCERT/CC/JVN, published 2026-09-30: &lt;a href="https://jvn.jp/en/vu/JVNVU90160989/index.html" rel="noopener noreferrer"&gt;https://jvn.jp/en/vu/JVNVU90160989/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FUJIFILM Business Innovation Corp. vendor information&lt;/li&gt;
&lt;li&gt;Sharp Corporation vendor information&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>pathtraversal</category>
      <category>mfp</category>
      <category>printing</category>
    </item>
    <item>
      <title>Certificate name verification: wildcards, SANs and the checks that fail open</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Mon, 05 Oct 2026 00:20:30 +0000</pubDate>
      <link>https://dev.to/bianliang/certificate-name-verification-wildcards-sans-and-the-checks-that-fail-open-21g7</link>
      <guid>https://dev.to/bianliang/certificate-name-verification-wildcards-sans-and-the-checks-that-fail-open-21g7</guid>
      <description>&lt;h1&gt;
  
  
  Certificate name verification: wildcards, SANs and the checks that fail open
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Identity is a separate question from trust
&lt;/h2&gt;

&lt;p&gt;A certificate chain can be valid while the name on it is wrong for the service being contacted. Chain validation answers whether a trusted authority issued the certificate; name verification answers whether the certificate describes the host the client intended to reach. Libraries implement them as separate steps, and the second step is the one most often weakened by application code that calls a low-level API and forgets it.&lt;/p&gt;

&lt;p&gt;RFC 6125 described the matching rules for domain-based service identity. RFC 9525 updated them for TLS, and both share the same core requirement: the identity is matched against dNSName entries in the subjectAltName extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the modern rules require
&lt;/h2&gt;

&lt;p&gt;The subjectAltName extension is authoritative. The commonName field is legacy and is no longer a fallback for deciding which host a certificate is valid for. A client that still consults commonName accepts certificates that the modern rules reject.&lt;/p&gt;

&lt;p&gt;Wildcards are permitted only in the leftmost label, and only as the entire label. A name such as &lt;em&gt;.example.com matches &lt;a href="http://www.example.com" rel="noopener noreferrer"&gt;www.example.com&lt;/a&gt; and api.example.com. It does not match example.com itself, because a wildcard must occupy at least one label, and it does not match a.b.example.com, because the wildcard covers a single label. A pattern such as w&lt;/em&gt;.example.com or *.api.example.com sits outside the permitted form and should be rejected by a conforming client.&lt;/p&gt;

&lt;p&gt;Case does not matter for the comparison. Internationalised names are compared in their ASCII-compatible encoding, which is why two registrations of the same name can look identical on screen while differing in their A-label representation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where implementations fail open
&lt;/h2&gt;

&lt;p&gt;Four mistakes recur in application code that performs its own verification.&lt;/p&gt;

&lt;p&gt;The first is disabling verification and compensating with an explicit hostname check somewhere else in the call path. The compensating check is usually attached to a code path that a retry or a redirect bypasses. The second is writing a custom matcher that uses string suffix comparison, so that notexample.com matches example.com. The third is accepting a certificate with an empty subjectAltName when the code falls back to commonName. The fourth is pinning to a certificate or public key without planning for rotation, which produces an outage that a maintainer resolves by removing the pin.&lt;/p&gt;

&lt;p&gt;Each of these turns a strong protocol property into an application-level decision that is not tested against the failure case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying a deployment
&lt;/h2&gt;

&lt;p&gt;For a host that serves several names, confirm which names appear in subjectAltName and check that a wildcard is not silently covering a name it should not. A certificate for *.example.com presented for example.com or for a.b.example.com should be rejected, and testing those two cases is a quick way to find a matcher that is doing suffix comparison.&lt;/p&gt;

&lt;p&gt;Where certificate pinning is used, record the pinned value, the rotation plan and the party who owns the update. Where a client is expected to verify, confirm the failure path by pointing it at a certificate for the wrong name and observing that the connection is refused rather than accepted with a warning.&lt;/p&gt;

&lt;p&gt;For internal services the same rules apply, and private certificate authorities make it tempting to issue broad wildcards for convenience. A wildcard that covers an entire internal namespace converts a single key compromise into the ability to impersonate every service in that namespace.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;RFC 6125, Representation and Verification of Domain-Based Application Service Identity. &lt;a href="https://www.rfc-editor.org/rfc/rfc6125.html" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/rfc/rfc6125.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;RFC 9525, Service Identity in TLS. &lt;a href="https://www.rfc-editor.org/rfc/rfc9525.html" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/rfc/rfc9525.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;RFC 5280, Internet X.509 Public Key Infrastructure Certificate and CRL Profile. &lt;a href="https://www.rfc-editor.org/rfc/rfc5280.html" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/rfc/rfc5280.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>tls</category>
      <category>pki</category>
      <category>certificates</category>
    </item>
    <item>
      <title>Lateral Movement Across Zimbra Clusters via CVE-2026-73570</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:00:27 +0000</pubDate>
      <link>https://dev.to/bianliang/lateral-movement-across-zimbra-clusters-via-cve-2026-73570-2np5</link>
      <guid>https://dev.to/bianliang/lateral-movement-across-zimbra-clusters-via-cve-2026-73570-2np5</guid>
      <description>&lt;h1&gt;
  
  
  Lateral Movement Across Zimbra Clusters via CVE-2026-73570
&lt;/h1&gt;

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

&lt;p&gt;A Zimbra deployment is rarely a single host. Mailbox nodes, proxies and supporting services are usually joined into a cluster, and clusters are built on trust. Microsoft's account of the CVE-2026-73570 intrusions shows attackers inheriting that trust and using it as transportation, which is why a single compromised node has to be handled as a cluster-wide event.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trust the attackers used
&lt;/h2&gt;

&lt;p&gt;Zimbra clusters often authenticate between nodes through a shared SSH key. Having gained a foothold on one server through the unauthenticated command injection, the attackers reused that key to move between nodes. They copied web shells and their own tools with rsync and deleted the source files afterwards, a step that both tidies the origin node and confuses simple file-timeline analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  A second campaign's tooling
&lt;/h2&gt;

&lt;p&gt;Microsoft observed a different campaign using a Go-based remote access agent that offered shell access, file transfer and SOCKS5 proxying. A proxy of this kind lets an operator pivot further without necessarily installing anything on the next hop, which complicates host-based detection and shifts more weight onto network monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why cluster trust magnifies impact
&lt;/h2&gt;

&lt;p&gt;Shared-key trust is a design convenience: every node can administer every other node. The same property means one successful injection is not one successful intrusion. Where the CVE-2026-73570 web shells were found, copies had also landed on peer mailbox nodes, which is consistent with automated propagation once the shared key was in hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardening the pivot
&lt;/h2&gt;

&lt;p&gt;Reducing lateral movement in a clustered deployment means treating inter-node trust as a security boundary: scope authorised keys to the operations that are actually required, and treat unexpected rsync activity between mail nodes and unexpected outbound proxy sessions as signals. Replacing a shared key is part of incident response, not an afterthought, because a key reused during an intrusion cannot be trusted afterwards.&lt;/p&gt;

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

&lt;p&gt;ZoomEye shows &lt;code&gt;app="Zimbra"&lt;/code&gt; at 210,756 instances, a product fingerprint rather than a confirmed vulnerable population. The CVE-specific query &lt;code&gt;vul.cve="CVE-2026-73570"&lt;/code&gt; returned 0.&lt;/p&gt;

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

&lt;p&gt;Upgrade to Zimbra 10.1.20 or later and remove &lt;code&gt;zimbra-snmp&lt;/code&gt; or disable SNMP notifications if not needed. Then rotate cluster keys and Zimbra service credentials, and sweep every node rather than the first host where a compromise is suspected.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Microsoft Threat Intelligence summary of Zimbra CVE-2026-73570 attacks (SecurityOnline.info report)&lt;/li&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities Catalog&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>vulnerability</category>
      <category>zimbra</category>
      <category>cve202673570</category>
    </item>
    <item>
      <title>When an Agent Reaches Root: The Zammad Attack and Machine-Speed Intrusion</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 15:20:28 +0000</pubDate>
      <link>https://dev.to/bianliang/when-an-agent-reaches-root-the-zammad-attack-and-machine-speed-intrusion-460m</link>
      <guid>https://dev.to/bianliang/when-an-agent-reaches-root-the-zammad-attack-and-machine-speed-intrusion-460m</guid>
      <description>&lt;h1&gt;
  
  
  When an Agent Reaches Root: The Zammad Attack and Machine-Speed Intrusion
&lt;/h1&gt;

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

&lt;p&gt;The Zammad compromise at DIVD is memorable for two reasons. Technically it is a two-stage chain: CVE-2026-102489 for session hijacking and remote code execution as the &lt;code&gt;zammad&lt;/code&gt; user, CVE-2026-102490 for escalation to root. Operationally, DIVD says the intrusion "indicates an agentic AI powered attack, something we had not seen before."&lt;/p&gt;

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

&lt;p&gt;The mechanics are conventional enough. CVE-2026-102489 requires no privileges and only some passive user interaction, scoring 8.7 standalone on CVSS 4.0. CVE-2026-102490 needs local access, scoring 8.5 alone, and completes the path to root. Both records rate the chain 9.4, Critical, and mark it automatable — a label that fits the observed behaviour.&lt;br&gt;
What stood out to investigators was the script's internal commentary. Log files showed the attacker's scripts carried notes in which the agent justified its own actions, something DIVD argues a human attacker "wouldn't bother with." The activity was fast but messy: DIVD describes an agent "deciding each next step itself at speed on sloppy logic." Those overexplaining notes later made reverse engineering easier, and DIVD found no link to any known threat actor.&lt;/p&gt;

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

&lt;p&gt;The outcome was still severe. Attackers took volunteer data, including DIVD email addresses and possibly contact details, and DIVD warns this makes it easier for someone to pose as a volunteer. Network segmentation limited the damage. For defenders the practical lesson is that speed of exploitation is no longer bounded by a human operator's typing, so dwell time assumptions need revision.&lt;/p&gt;

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

&lt;p&gt;CVE-2026-102489 is exploitable on Zammad 6.3.0 through 6.5.4; versions 7.0.0 to 7.1.3 contain the defect but are assessed as not exploitable due to environment conditions. CVE-2026-102490 covers Zammad 1.5.0 to the 7.1.0 alpha. Linux and Docker deployments are affected.&lt;/p&gt;

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

&lt;p&gt;At collection time, &lt;code&gt;app="Zammad"&lt;/code&gt; matched 11,977 instances on ZoomEye (2026-10-02T06:12:32Z). This measures fingerprint exposure, not confirmed vulnerable systems; a &lt;code&gt;vul.cve&lt;/code&gt; query for CVE-2026-102490 returned zero results. Machine-speed exploitation raises the value of knowing which instances are reachable before an incident begins.&lt;/p&gt;

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

&lt;p&gt;Upgrade to Zammad version 7 or take the service offline to remove the remote stage. The escalation bug remains in current releases pending a vendor fix. Additional steps recommended by DIVD: run the published log check script, cut direct internet access or require VPN, rotate credentials stored on or reachable from the server, and segment the helpdesk from other critical systems. Assume compromise for instances that were exposed before patching.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://securityonline.info/zammad-zero-day-cve-2026-102489/" rel="noopener noreferrer"&gt;Zammad zero-day chain report&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>zammad</category>
      <category>cve2026102490</category>
      <category>helpdesk</category>
    </item>
    <item>
      <title>Confluence exposure: 1.8 million fingerprint matches depend on which fingerprint you use</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 06:20:26 +0000</pubDate>
      <link>https://dev.to/bianliang/confluence-exposure-18-million-fingerprint-matches-depend-on-which-fingerprint-you-use-oi</link>
      <guid>https://dev.to/bianliang/confluence-exposure-18-million-fingerprint-matches-depend-on-which-fingerprint-you-use-oi</guid>
      <description>&lt;h1&gt;
  
  
  Confluence exposure: 1.8 million fingerprint matches depend on which fingerprint you use
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The wiki that holds the architecture
&lt;/h2&gt;

&lt;p&gt;A Confluence instance usually contains the material an attacker wants before touching a server: network diagrams, credential rotation procedures, cloud account structure, escalation paths and onboarding guides. It is also, in most organisations, reachable from the corporate network and often from the internet for partner access.&lt;br&gt;
Measuring how much of it is exposed turns out to depend heavily on which query is used, and the difference is large enough to change the conclusion.&lt;/p&gt;

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

&lt;p&gt;Three queries against ZoomEye on 2026-09-26 (UTC), Python SDK, sub_type=all, page size one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app="Atlassian Confluence": 1,847,430&lt;/li&gt;
&lt;li&gt;app="Confluence": 179,807&lt;/li&gt;
&lt;li&gt;title="Confluence": 1,208,692&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the two fingerprints differ by a factor of ten
&lt;/h2&gt;

&lt;p&gt;The longer application string returns roughly ten times the matches of the shorter one. In this dataset, the fully qualified name is the productive fingerprint, and the short form is not a subset that behaves predictably. Recording both is the honest approach: they are different observations of overlapping populations.&lt;br&gt;
The title query lands between the two at 1,208,692. Title matches include login pages, 404 pages served by a configured application, and any page whose title mentions the product. That is a broader and noisier set than a curated fingerprint, but it is also the set that catches builds the signature does not recognise.&lt;br&gt;
For an operator the lesson is procedural. When a finding depends on a single fingerprint, the finding inherits the coverage of that fingerprint. Two queries with an explicit note about which one drives the decision make the conclusion reproducible next quarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical implications
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use the qualified application fingerprint as the primary measure and keep the title query as a secondary estimate. Record both with the collection time, so a future comparison is not confused by a signature update.&lt;/li&gt;
&lt;li&gt;For the assets in scope, the questions worth asking are the ones Atlassian's own security guidance frames: is anonymous access disabled, are public links audited and expired, is the instance version current, and are administrative accounts separated from content authors.&lt;/li&gt;
&lt;li&gt;Monitor for change. A Confluence instance that becomes reachable is often a new deployment or a migration, and both produce a short window during which configuration is at its most permissive.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;These are matched asset counts. They do not prove that an instance is unauthenticated, that content is readable, or that a specific version with a specific advisory is installed. Atlassian Cloud instances and self-managed instances behave differently and are not separated by these queries. Counts change with signature updates and with the ordinary life cycle of internet-facing services.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Atlassian security advisories — &lt;a href="https://www.atlassian.com/trust/security/advisories" rel="noopener noreferrer"&gt;https://www.atlassian.com/trust/security/advisories&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye documentation — &lt;a href="https://www.zoomeye.ai/doc" rel="noopener noreferrer"&gt;https://www.zoomeye.ai/doc&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>confluence</category>
      <category>fingerprintcoverage</category>
      <category>exposuremanagement</category>
    </item>
    <item>
      <title>Zipkin at 40 Titles and 562 Fingerprints: When the Signature Finds More Than the Name</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 04:00:26 +0000</pubDate>
      <link>https://dev.to/bianliang/zipkin-at-40-titles-and-562-fingerprints-when-the-signature-finds-more-than-the-name-f9i</link>
      <guid>https://dev.to/bianliang/zipkin-at-40-titles-and-562-fingerprints-when-the-signature-finds-more-than-the-name-f9i</guid>
      <description>&lt;h1&gt;
  
  
  Zipkin at 40 Titles and 562 Fingerprints: When the Signature Finds More Than the Name
&lt;/h1&gt;

&lt;p&gt;Distributed tracing backends are usually described by what they help you debug. As an exposure subject they are interesting for a different reason: they receive a structured record of every request that flows through an instrumented system, which is a map of the application's internal calls.&lt;br&gt;
Zipkin provides a compact illustration of a signature-versus-name divergence, in the direction where the signature finds more.&lt;/p&gt;

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

&lt;p&gt;Collected from ZoomEye AI on 2026-10-02:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title="Zipkin"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 40 matches.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app="Zipkin"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 562 matches.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;title="Zipkin" &amp;amp;&amp;amp; port="9411"&lt;/code&gt; with &lt;code&gt;sub_type="all"&lt;/code&gt;: 0 matches.
Counts are indexed-service observations at collection time and describe reachable assets rather than vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The fingerprint finds fourteen times as many services as the title query, and the direction is the reverse of what a branded web application would produce.&lt;br&gt;
Two factors explain it. First, Zipkin's user interface is a single-page application, and the page that a scanner retrieves on the query port is often not the page that carries the product name in its title; the title may be generic or may be set by the browser after the application loads. A response-body fingerprint does not depend on a title being present in the initial HTML.&lt;br&gt;
Second, the tracing collector is commonly exposed as an ingestion endpoint rather than as a browsable interface. An ingestion endpoint receives spans over HTTP and returns a minimal acknowledgement. A scanner that fingerprints the response will match it; a scanner looking for a title will find nothing to match.&lt;br&gt;
The zero on the intersection is consistent with both readings and should be treated as a query limitation rather than as a statement about the deployment of the query port. As with the other cases in this series, a zero on a port-intersection query does not establish that no service uses that port.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a tracing backend holds
&lt;/h2&gt;

&lt;p&gt;Zipkin stores spans. A span records a unit of work: the service that handled it, the operation name, the timing, and, depending on instrumentation, the tags and annotations attached to it.&lt;br&gt;
The tags are the part that matters for a security assessment. Instrumentation is frequently configured to record HTTP headers, database statements, or the parameters of an outgoing call, because those are exactly the values an engineer needs when a request is slow or failing. In some configurations that means a tracing backend contains fragments of request data, including identifiers and, occasionally, credentials that were passed as parameters.&lt;br&gt;
That is a description of what an instrumented deployment can record, not a claim about any of the counted instances. Whether a specific deployment records sensitive tags is a configuration decision that the measurement cannot see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why tracing backends get exposed
&lt;/h2&gt;

&lt;p&gt;Tracing infrastructure is deployed by engineers for engineers, and it is often brought up quickly during an incident-response or performance exercise. The pattern that follows is familiar from other observability tools: the service is bound to all interfaces because that is the default, the query interface is left open because the team that uses it is small and trusted, and the exposure is never revisited because nothing broke.&lt;br&gt;
The measurement's contribution is to turn that informal state into a number that can be compared against an inventory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What operators should check
&lt;/h2&gt;

&lt;p&gt;Is the tracing query interface reachable from outside the internal network, and if so, is it behind authentication?&lt;br&gt;
Is the collector's ingestion endpoint reachable, and is it write-protected or rate-limited?&lt;br&gt;
Which spans are recorded with tag data that could include request parameters or headers, and is the sampling configuration the one that was intended?&lt;br&gt;
What is the retention period, since a tracing backend accumulates a detailed request history over time?&lt;/p&gt;

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

&lt;p&gt;This case completes a set of examples in which a product's measurability depends on what it puts in its responses. A branded web interface is measurable by title. A middleware component with no page of its own is measurable by fingerprint and not by title. A tracing backend whose interface is a single-page application is measurable by fingerprint more reliably than by title, because the fingerprint does not require a name in the initial response.&lt;br&gt;
The consistent practice across all of them is to state which field produced the number and what scope it was run in. A count without that context is not a measurement; it is a number that happens to be reproducible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ZoomEye fits
&lt;/h2&gt;

&lt;p&gt;The fingerprint field is the useful signal here, and the query is reproducible. Running it over time shows whether the tracing population is changing, and running it against an organisation's own address space answers the direct question of whether its own backend is indexed. Both are legitimate uses that do not require treating 562 as an exposure estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take away
&lt;/h2&gt;

&lt;p&gt;40 titles, 562 fingerprints and a zero on the port intersection. The fingerprint is the more reliable field because a single-page interface does not always put the product name in the initial HTML. Report the field with the number, and check the tag configuration on your own deployment rather than inferring it from a public count.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ZoomEye AI, &lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;cyberspace search&lt;/a&gt; - counts collected 2026-10-02 with the queries stated above&lt;/li&gt;
&lt;li&gt;Zipkin, &lt;a href="https://zipkin.io/pages/quickstart" rel="noopener noreferrer"&gt;Zipkin documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenTelemetry, &lt;a href="https://opentelemetry.io/docs/" rel="noopener noreferrer"&gt;OpenTelemetry documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye, &lt;a href="https://www.zoomeye.ai/doc" rel="noopener noreferrer"&gt;search syntax reference&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>exposure</category>
      <category>observability</category>
      <category>measurementmethod</category>
    </item>
    <item>
      <title>6,918 Paperless matches: a document archive that was meant to replace the filing cabinet</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 01:20:26 +0000</pubDate>
      <link>https://dev.to/bianliang/6918-paperless-matches-a-document-archive-that-was-meant-to-replace-the-filing-cabinet-aaa</link>
      <guid>https://dev.to/bianliang/6918-paperless-matches-a-document-archive-that-was-meant-to-replace-the-filing-cabinet-aaa</guid>
      <description>&lt;h1&gt;
  
  
  6,918 Paperless matches: a document archive that was meant to replace the filing cabinet
&lt;/h1&gt;

&lt;p&gt;Paperless-ngx scans paper documents, runs optical character recognition over them, and stores the result as searchable files. Teams adopt it to stop losing invoices and contracts, which means the archive ends up holding exactly the records a company must protect.&lt;br&gt;
ZoomEye finds 6,918 assets whose HTML title contains "Paperless". The query used English double-quoted values and ran in &lt;code&gt;all&lt;/code&gt; scope. Some of those matches are unrelated projects that share the word, so the Paperless-ngx share of the total is smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the archive is sensitive by construction
&lt;/h2&gt;

&lt;p&gt;A document archive is an identity record in disguise. Invoices carry bank details and addresses. Contracts name signatories. Employment paperwork includes national identifiers. Once scanned and indexed, all of it becomes searchable text with a single query box in front of it.&lt;br&gt;
The application also stores metadata that is easy to overlook: correspondent names, tags, and the dates attached to every file. That metadata describes relationships, budgets, and timelines even when the document images are never opened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Access model and common mistakes
&lt;/h2&gt;

&lt;p&gt;Self-hosted deployments usually authenticate against a local user table, and many rely on a reverse proxy for TLS. The frequent mistakes are familiar. Accounts are created for family members or temporary staff and never removed. The archive sits on a public hostname because remote access was convenient. Backups are written to the same volume, so a compromise takes the copies too.&lt;br&gt;
Older releases of the project have addressed authentication and file-handling issues, and a deployment that has not been upgraded in a year carries the fixes it skipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  A review that fits the tool
&lt;/h2&gt;

&lt;p&gt;Establish whether the archive must be reachable without a VPN. For most households and small teams the answer is no, and closing the port removes the risk entirely.&lt;br&gt;
Then confirm the version, enable multi-factor authentication where supported, and review the user list. Export a copy of the index and store it separately, so that a lost archive does not also erase the record of what it contained.&lt;/p&gt;

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

&lt;p&gt;The count is a starting point for scoping; an operator can restrict the query to their own address space and verify that nothing answers unexpectedly. The link reproduces the query used here.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Paperless-ngx documentation: &lt;a href="https://docs.paperless-ngx.com/" rel="noopener noreferrer"&gt;https://docs.paperless-ngx.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZoomEye search, query &lt;code&gt;title="Paperless"&lt;/code&gt;, scope &lt;code&gt;all&lt;/code&gt;, retrieved 2026-10-03, count 6,918&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>exposure</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>ShieldCrash: A Second Path Around the Microsoft Defender ShieldBreak Fix</title>
      <dc:creator>yutianle</dc:creator>
      <pubDate>Sun, 04 Oct 2026 00:00:26 +0000</pubDate>
      <link>https://dev.to/bianliang/shieldcrash-a-second-path-around-the-microsoft-defender-shieldbreak-fix-4689</link>
      <guid>https://dev.to/bianliang/shieldcrash-a-second-path-around-the-microsoft-defender-shieldbreak-fix-4689</guid>
      <description>&lt;h1&gt;
  
  
  ShieldCrash: A Second Path Around the Microsoft Defender ShieldBreak Fix
&lt;/h1&gt;

&lt;p&gt;On 9 September 2026, an anonymous researcher publishing as Nightmare Eclipse released a proof of concept named ShieldCrash. It targets Microsoft Defender and it reaches NT AUTHORITY\SYSTEM level file reads on Windows hosts that have taken the September 2026 cumulative update in full. The technique is a bypass, not a fresh class of bug: it walks back into the privilege boundary that Microsoft had already attempted to close.&lt;/p&gt;

&lt;h2&gt;
  
  
  The patch it defeats
&lt;/h2&gt;

&lt;p&gt;The original issue is tracked as CVE-2026-69414, also called ShieldBreak, in the Microsoft Malware Protection Engine, with a CVSS base score of 7.8. Microsoft addressed the primary exploitation path, and according to the researcher the fix closed the conditions that made the original technique repeatable while leaving one location from which the underlying problem could still be triggered.&lt;br&gt;
That description matches a common shape in patching. A fix is written against the path that was reported and demonstrated. Adjacent paths that share the same privileged component but reach it through different primitives may remain open, and they are only found when someone goes looking for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the bypass does
&lt;/h2&gt;

&lt;p&gt;The most detailed public description explains the bypass as a composition of lower-level Windows mechanisms rather than a single trick. It describes object manager symbolic links, content switching through the Cloud Filter API, and CLFS namespaces used together, with a pair of symbolic link traps and a time-of-check to time-of-use race between Defender scanning a file and acting on it. On that reading, the malicious content is placed into a system directory during the window, and elevation to SYSTEM follows through a Windows Error Reporting task.&lt;br&gt;
The published impact is SYSTEM-level arbitrary file read. That grants access to protected system configuration, credential material and sensitive data that a standard user cannot open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boundary worth stating clearly
&lt;/h2&gt;

&lt;p&gt;What has been demonstrated is arbitrary file read. Arbitrary write and full code execution have not been shown, and there is no confirmed evidence of exploitation in the wild.&lt;br&gt;
This distinction matters for prioritisation and it should not be read as reassurance. For an attacker who already holds local code execution, a reliable read primitive with SYSTEM rights is a usable escalation step and a usable reconnaissance step. Being able to read what the highest-privileged account can read is a meaningful position to attack from, even before it becomes code execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on the affected engine versions
&lt;/h2&gt;

&lt;p&gt;Two public sources describe the affected patch level with different engine version strings. One refers to the fix in engine version 1.1.26080.3, while an institutional advisory describes hosts with engine 1.1.26060.3008 and later as still affected by the bypass. This article reports both statements as published and does not reconcile them, because the discrepancy has not been resolved publicly. Administrators should treat the version detail as unconfirmed and rely on the vendor's own guidance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What administrators can do now
&lt;/h2&gt;

&lt;p&gt;There was no official fix at publication. Microsoft's stated direction is an update to the Malware Protection Engine, and the practical action is to keep engine updates applied promptly when they arrive.&lt;br&gt;
The available interim mitigation is narrowing and it is worth applying anyway. Enable Defender cloud protection. Separately, one advisory suggests creating a zero-byte file at the path Defender would otherwise place its own DLL, on the reasoning that Defender does not overwrite a file that already exists, which interrupts the chain. That workaround addresses the described technique rather than the class of problem, so it should be treated as temporary.&lt;br&gt;
The broader control is the one that applies to every local privilege escalation primitive: reduce the number of ways an attacker can obtain local code execution in the first place. Script execution policies, application control, and monitoring for unsigned binaries launching from user-writable directories all limit how much a read primitive like this one is worth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wider context
&lt;/h2&gt;

&lt;p&gt;The researcher and Microsoft remain in an ongoing dispute over vulnerability bounty and disclosure practice. Since April 2026 the same researcher has disclosed ShieldBreak, LegacyHive, RoguePlanet, BlueHammer, RedSun, YellowKey, GreenPlasma, MiniPlasma and UnDefend, most of which Microsoft has addressed while others remain without an official patch.&lt;/p&gt;

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

&lt;p&gt;The precise object that Defender mishandles, the exact sequence of operations, and the mechanism that converts the read into SYSTEM context are described in different levels of detail across public sources. This article does not add detail it does not have, and does not claim that arbitrary code execution has been demonstrated.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Advisory on ShieldCrash and GitLab path traversal, Xiamen University Information and Network Center: &lt;a href="https://net.xmu.edu.cn/info/1041/9622.htm" rel="noopener noreferrer"&gt;https://net.xmu.edu.cn/info/1041/9622.htm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ShieldCrash zero-day published, bypassing the ShieldBreak patch: &lt;a href="http://m.xitongzhijia.net/news/20260910/304745.html" rel="noopener noreferrer"&gt;http://m.xitongzhijia.net/news/20260910/304745.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Security Update Guide, CVE-2026-69414: &lt;a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-69414" rel="noopener noreferrer"&gt;https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-69414&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>windows</category>
      <category>defender</category>
      <category>privilegeescalation</category>
    </item>
  </channel>
</rss>
