<?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: SorrelThorncroft</title>
    <description>The latest articles on DEV Community by SorrelThorncroft (@sorrelthorncroft).</description>
    <link>https://dev.to/sorrelthorncroft</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%2F4186436%2F7b4d953a-f50f-4364-98fc-26b483e6b885.png</url>
      <title>DEV Community: SorrelThorncroft</title>
      <link>https://dev.to/sorrelthorncroft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sorrelthorncroft"/>
    <language>en</language>
    <item>
      <title>Mixpost Workspaces Hold Social Authority; Inventory the Roles and Tokens</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Fri, 06 Nov 2026 01:21:36 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/mixpost-workspaces-hold-social-authority-inventory-the-roles-and-tokens-18hg</link>
      <guid>https://dev.to/sorrelthorncroft/mixpost-workspaces-hold-social-authority-inventory-the-roles-and-tokens-18hg</guid>
      <description>&lt;h1&gt;
  
  
  Mixpost Workspaces Hold Social Authority; Inventory the Roles and Tokens
&lt;/h1&gt;

&lt;p&gt;A social publishing platform is valuable to an attacker because it can speak with the organization's voice. Access to connected accounts can affect public posts, scheduled campaigns, analytics, and approval workflows. Mixpost organizes that authority into workspaces and user roles, which makes the join between account, workspace, role, and token the primary review object.&lt;/p&gt;

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

&lt;p&gt;On 2026-11-06 08:46:38 +08:00, ZoomEye count-only queries used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and pagesize 1. &lt;code&gt;app="Mixpost"&lt;/code&gt; returned 0, &lt;code&gt;title="Mixpost"&lt;/code&gt; returned 434, and &lt;code&gt;http.body="Mixpost"&lt;/code&gt; returned 515,331. The body result is too broad to treat as a product population. The title count is a more useful candidate set, while the absent application fingerprint shows the value of field comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workspaces and roles
&lt;/h2&gt;

&lt;p&gt;Mixpost documentation describes workspaces as isolated environments with their own social accounts, posts, media, members, and permissions. The API exposes workspace roles such as admin, member, and viewer. The MCP server documentation says the token owner's workspace role determines which tools are available.&lt;/p&gt;

&lt;p&gt;That means a personal token is not just an integration secret. It is a delegated identity with a workspace role. Review long-lived tokens created by administrators, tokens belonging to users who changed roles, and integrations that can approve or publish posts. A token created for analytics should not be able to manage social accounts or publish content if those actions are outside its purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inventory the full path
&lt;/h2&gt;

&lt;p&gt;For each workspace, record the owner, members, roles, approval rights, connected social accounts, inbox access, and active personal keys. Then identify who can publish without approval and who can add a new social account. A broad role can turn a stolen session or token into an authoritative post on every connected channel.&lt;/p&gt;

&lt;p&gt;Check the reverse proxy, authentication, MFA, and session policy. Review the OAuth consent path for MCP clients and the user-facing token creation path. Confirm that revoking a token or removing a workspace member takes effect at the next request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test outside production
&lt;/h2&gt;

&lt;p&gt;Use non-production social accounts and a test workspace. Verify that a viewer cannot schedule a post, a member cannot administer the workspace, and a token cannot act outside the owner's workspace. Test approval boundaries and account removal. Preserve the result without posting to a real public channel.&lt;/p&gt;

&lt;p&gt;The external count is only a discovery aid. If an owned instance is found, compare its public hostname with internal records and review the social accounts it controls. The important question is who can turn workspace access into a public statement, and how quickly that authority can be stopped.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.mixpost.app/mcp/" rel="noopener noreferrer"&gt;Mixpost MCP server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.mixpost.app/api/workspaces/add-user/" rel="noopener noreferrer"&gt;Mixpost add user to workspace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.mixpost.app/mcp/tools/" rel="noopener noreferrer"&gt;Mixpost tools reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9Ik1peHBvc3Qi" rel="noopener noreferrer"&gt;ZoomEye search for title="Mixpost"&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>security</category>
      <category>exposureinventory</category>
    </item>
    <item>
      <title>Gatus status pages: public observability versus authenticated API control</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 22:02:00 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/gatus-status-pages-public-observability-versus-authenticated-api-control-5272</link>
      <guid>https://dev.to/sorrelthorncroft/gatus-status-pages-public-observability-versus-authenticated-api-control-5272</guid>
      <description>&lt;h1&gt;
  
  
  Gatus status pages: public observability versus authenticated API control
&lt;/h1&gt;

&lt;p&gt;Gatus monitors endpoints, exposes status pages, and offers an API for managing status pages and endpoint configuration. A status page may be intended for public viewing. The management API is a different surface. The security question is not whether a Gatus page is public. It is which data and actions the public page can expose and whether control routes are protected.&lt;/p&gt;

&lt;p&gt;The ZoomEye count-only measurements on November 6, 2026 used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and page size 1. &lt;code&gt;app="Gatus"&lt;/code&gt; returned 0, &lt;code&gt;title="Gatus"&lt;/code&gt; returned 1,066, and &lt;code&gt;http.body="Gatus"&lt;/code&gt; returned 10,387. The body count is much larger than the title count, so it should be treated as a broad lead rather than a deployment census.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public status does not mean public administration
&lt;/h2&gt;

&lt;p&gt;A status page can reveal service names, endpoint URLs, response times, certificate details, and incident state. Some organizations want that information public. Others consider it a map of internal dependencies. Decide the intended audience and configure the page and its data fields accordingly.&lt;/p&gt;

&lt;p&gt;Gatus documentation describes a security configuration block with Basic authentication and OIDC options, and an API that uses user API keys and status-page tokens. The review should verify the actual API routes and token scopes. A public status page token should not be accepted for administrative changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token and API review
&lt;/h2&gt;

&lt;p&gt;Inventory user API keys and status-page tokens separately. Record owner, purpose, creation date, last use, and revocation path. Test that a status-page token can read only the intended status page and cannot manage endpoints or other pages. Test that an API key has the minimum role required for its automation.&lt;/p&gt;

&lt;p&gt;If OIDC is enabled, verify issuer, client, redirect URI, claim mapping, and session policy. A second authentication layer in front of Gatus can be useful, but it does not replace application-level API validation. Proxies may pass headers that the application trusts, so the trust boundary needs an explicit configuration and test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data minimization on status pages
&lt;/h2&gt;

&lt;p&gt;Review endpoint names, descriptions, URLs, response snippets, certificate metadata, and error messages. A failing check can reveal internal DNS names or service behavior. The status page should expose only the data needed for its audience. Do not put secrets in endpoint labels or descriptions, even if the page is "only internal."&lt;/p&gt;

&lt;p&gt;Availability data can also disclose business operations. A public page that lists every internal service may help an attacker choose targets. Use grouping, generic labels, or restricted pages where the operational value does not require full detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  A safe evaluation workflow
&lt;/h2&gt;

&lt;p&gt;Start with the organization's known Gatus hostnames. Confirm the status page audience and visible data. Then review configuration and API access in an authorized environment. Do not attempt to create, edit, or delete a status page on an unknown host. Do not use guessed tokens or test paths that could change monitoring state.&lt;/p&gt;

&lt;p&gt;Check the network exposure of the UI and API, TLS configuration, authentication mode, external monitoring access, and backup process. Verify that an alerting outage does not expose a secret through error pages. Review how secrets for monitored endpoints are stored and whether they appear in logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interpret the counts
&lt;/h2&gt;

&lt;p&gt;The zero app count, 1,066 title matches, and 10,387 body matches describe this query scope. They do not prove that all matches are Gatus or that unauthenticated administration is available. The body field is especially likely to match documentation, examples, and status-page templates.&lt;/p&gt;

&lt;p&gt;The useful output is a boundary map: public status page, authenticated read API, administrative API, configuration data, and endpoint credentials. ZoomEye can help find pages that mention the product. The organization still has to decide what the public page reveals and prove that control routes require the right token or user role.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gatus.io/docs/api" rel="noopener noreferrer"&gt;Gatus: API documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/github.com/TwiN/gatus/v5/security" rel="noopener noreferrer"&gt;Gatus: security package documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>gatus</category>
      <category>observability</category>
      <category>apisecurity</category>
    </item>
    <item>
      <title>Why CVE-2026-93546 belongs on the Apache patch list</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 18:40:24 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/why-cve-2026-93546-belongs-on-the-apache-patch-list-1a6d</link>
      <guid>https://dev.to/sorrelthorncroft/why-cve-2026-93546-belongs-on-the-apache-patch-list-1a6d</guid>
      <description>&lt;h1&gt;
  
  
  Why CVE-2026-93546 belongs on the Apache patch list
&lt;/h1&gt;

&lt;p&gt;Apache HTTP Server administrators often have a long queue of maintenance work. A moderate-severity denial-of-service issue may look easy to defer when it requires an authenticated WebDAV user. CVE-2026-93546 deserves a closer look because the failure is not limited to one crashed request. A crafted PROPPATCH request can corrupt the property database attached to a WebDAV directory and repeatedly disrupt worker processes.&lt;/p&gt;

&lt;p&gt;The vendor published the fix in Apache HTTP Server 2.4.69 on October 1, 2026. Versions through 2.4.68 are affected. The vulnerability sits in mod_dav_fs, so a deployment needs WebDAV enabled and an authenticated principal with permission to modify properties on a resource.&lt;/p&gt;

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

&lt;p&gt;The Apache Software Foundation describes CVE-2026-93546 as an integer overflow in mod_dav_fs. The trigger is a PROPPATCH request that declares many XML namespaces. The result can include worker-process crashes and persistent corruption of a directory's property database.&lt;/p&gt;

&lt;p&gt;The CVE record assigns CWE-190, integer overflow or wraparound. Apache rates the issue moderate. CISA's ADP enrichment publishes CVSS 3.1 at 8.8 with network attack, low complexity, low privileges, and no user interaction. Those numbers describe the scored technical impact. The CNA description supports worker failure and property-database corruption. It does not establish a reliable path to remote code execution.&lt;/p&gt;

&lt;p&gt;That distinction affects response. Teams should not dismiss the issue as a harmless crash, and they should not describe it as unauthenticated remote code execution. The verified harm is availability loss plus integrity damage to WebDAV metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the property database changes the risk
&lt;/h2&gt;

&lt;p&gt;WebDAV properties are not limited to transient request data. mod_dav_fs stores dead properties in per-resource database files under a .DAV state directory. The namespace table is part of that database format. The source for the fixed release shows a 16-bit namespace counter and a new upper bound of 2,048 distinct namespace URIs for one property database.&lt;/p&gt;

&lt;p&gt;Before the fix, a request could push the namespace count beyond the range the database could represent safely. The public description ties that condition to property-database corruption and child-process failure. Recovery is not as simple as restarting Apache if the on-disk state remains damaged.&lt;/p&gt;

&lt;p&gt;The fixed regression test provides a useful boundary check. It verifies that 100 distinct namespaces are accepted and stored. It then sends 2,049 distinct namespaces and expects a 413 refusal inside the PROPPATCH response, an AH00577 warning about too many namespaces, and a successful PROPFIND afterward. This shows why patching changes both availability and data integrity behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should patch first
&lt;/h2&gt;

&lt;p&gt;The highest-priority systems are internet-facing Apache HTTP Server instances with mod_dav_fs and writable WebDAV collections. Multi-tenant file-sharing services, content-management integrations, development collaboration endpoints, and administrative WebDAV mounts belong in the first group unless they are known to have WebDAV disabled.&lt;/p&gt;

&lt;p&gt;The next group includes internal WebDAV services with broad write permissions. An authenticated insider or a compromised low-privilege account could still reach the vulnerable parser. The prerequisite lowers the likelihood of anonymous exploitation, but it does not turn every authenticated account into a trusted one.&lt;/p&gt;

&lt;p&gt;Systems without mod_dav_fs loaded, or without WebDAV collections, have less plausible exposure. Confirm that conclusion from the running configuration rather than assuming that the distribution's default package state matches the deployed service.&lt;/p&gt;

&lt;p&gt;ZoomEye query evidence recorded for this review returned 603,733,066 matches for &lt;code&gt;app="Apache"&lt;/code&gt; and zero matches for &lt;code&gt;vul.cve="CVE-2026-93546"&lt;/code&gt;. The first figure is an application-fingerprint count across a broad Apache label. It is not a count of vulnerable HTTP Server instances. The zero Filter result likewise does not prove that no vulnerable systems are online. Use the count to frame investigation, then inventory versions and modules inside the organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting the patch decision
&lt;/h2&gt;

&lt;p&gt;An upgrade to 2.4.69 or a distribution package that carries the vendor fix is the direct remediation. Package version strings need care because Linux distributions often backport security fixes without changing the upstream base version. Use the advisory or package changelog to confirm the specific patch, since the package number often does not reveal it.&lt;/p&gt;

&lt;p&gt;If an immediate upgrade is blocked, reduce the attack surface while the change is scheduled. Disable mod_dav_fs where WebDAV is unnecessary. Restrict writable collections to users and networks that need them. Block PROPPATCH where the business workflow does not require property changes. These controls reduce exposure, but they do not repair a property database that is already corrupt.&lt;/p&gt;

&lt;p&gt;After installation, inspect the effective module list and version, restart through the normal service process, and test the WebDAV workflows that matter to the business. A simple version scan is not enough when the vulnerable module remains loaded from an old path or the service did not return to its intended configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical conclusion
&lt;/h2&gt;

&lt;p&gt;CVE-2026-93546 is a focused WebDAV problem with a clear patch and a meaningful persistence component. Teams with writable Apache WebDAV endpoints should treat it as a near-term maintenance item. Teams without that configuration can document the result and keep it in normal release tracking.&lt;/p&gt;

&lt;p&gt;The decision should rest on module state, authentication boundary, write permissions, and data value. A broad Apache fingerprint count can help locate candidates, but it cannot replace that evidence.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Apache HTTP Server 2.4 vulnerabilities: &lt;a href="https://httpd.apache.org/security/vulnerabilities_24.html#CVE-2026-93546" rel="noopener noreferrer"&gt;https://httpd.apache.org/security/vulnerabilities_24.html#CVE-2026-93546&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Apache oss-security announcement: &lt;a href="https://www.openwall.com/lists/oss-security/2026/10/01/30" rel="noopener noreferrer"&gt;https://www.openwall.com/lists/oss-security/2026/10/01/30&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ubuntu CVE tracking: &lt;a href="https://ubuntu.com/security/CVE-2026-93546" rel="noopener noreferrer"&gt;https://ubuntu.com/security/CVE-2026-93546&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Apache 2.4.69 property database source: &lt;a href="https://raw.githubusercontent.com/apache/httpd/2.4.69/modules/dav/fs/dbm.c" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/apache/httpd/2.4.69/modules/dav/fs/dbm.c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Apache 2.4.69 namespace-limit regression test: &lt;a href="https://raw.githubusercontent.com/apache/httpd/2.4.69/test/modules/dav/test_001_propdb_ns_limit.py" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/apache/httpd/2.4.69/test/modules/dav/test_001_propdb_ns_limit.py&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vulnerability</category>
      <category>apache</category>
      <category>webdav</category>
    </item>
    <item>
      <title>What to Recheck When Quanum LSM Returns to Service</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 15:21:01 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/what-to-recheck-when-quanum-lsm-returns-to-service-3h1a</link>
      <guid>https://dev.to/sorrelthorncroft/what-to-recheck-when-quanum-lsm-returns-to-service-3h1a</guid>
      <description>&lt;h1&gt;
  
  
  What to Recheck When Quanum LSM Returns to Service
&lt;/h1&gt;

&lt;p&gt;Service restoration is not the end of a portal incident review. When an online clinical workflow comes back after a security event, users need a trusted entry point, the organization needs a way to distinguish normal change from recurring risk, and investigators need a baseline that can be compared with the period before the outage.&lt;/p&gt;

&lt;p&gt;Quest Diagnostics reported unauthorized access to Quanum Lab Services Manager on October 21, 2026. The company said it believed certain patient records were accessed, while the full scope remained under investigation. BleepingComputer reported that Quanum LSM access was temporarily paused and that some customers were directed to paper requisitions or Quanum eLabs. The available evidence does not establish a definitive restoration time for every service, so customers should verify the current status through official Quest channels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the official access path
&lt;/h2&gt;

&lt;p&gt;The first check is the entry point published by Quest. The organization should verify the hostname, certificate, redirect path, and page title against an approved reference. It should not rely on a search result alone, because a search result may be stale or point to a page that mentions the product without serving the production login.&lt;/p&gt;

&lt;p&gt;Quest's public lab-tools page places the Quanum LSM login alongside other healthcare-professional tools. That page is a useful starting point for validating the official support route. It is not proof that every returned external host belongs to the same service.&lt;/p&gt;

&lt;p&gt;The organization should record the post-restoration observation with the same scope and timestamp format used for the earlier baseline. If the page changes after the first check, keep both records and identify the cause when it becomes known.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revisit the public baseline
&lt;/h2&gt;

&lt;p&gt;The pre-restoration data included 421 matches for &lt;code&gt;domain="questdiagnostics.com"&lt;/code&gt; and 439 for &lt;code&gt;ssl="questdiagnostics.com"&lt;/code&gt; in the all-asset scope. A later run may differ. The reviewer should not interpret an increase or decrease as evidence of compromise or successful remediation without host-level review.&lt;/p&gt;

&lt;p&gt;For each changed host, ask whether it is new, whether the certificate changed, whether the service moved, and whether the public content now points to a different support path. Compare those observations with internal change records and the vendor's communications. If no internal record explains the change, escalate it as an unresolved infrastructure question.&lt;/p&gt;

&lt;p&gt;The same review should cover the Quanum-specific observations. The earlier collection contained 361 body matches for Quanum, 54 title matches, and 5 QuanumHCP matches. A restoration check can reuse those queries as reference sets, but it should not require the counts to return to exactly the same values. Indexing is not a configuration database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify authentication and session behavior
&lt;/h2&gt;

&lt;p&gt;The public page is only the outer layer. Users should confirm that they are authenticating through the expected identity flow and that redirects do not lead to an unapproved host. Administrators should review account status, privileged roles, and any access changes made during the incident or outage.&lt;/p&gt;

&lt;p&gt;Where the organization has logs, it should compare successful access and administrative changes with the period before the disclosure. It should also check whether shared accounts or saved sessions were reused after restoration. The exact checks depend on the authentication design, but the decision should be documented rather than left to individual users.&lt;/p&gt;

&lt;p&gt;Do not advise staff to test the portal with production patient data unless that action is approved by the service owner and follows the organization's change process. A restoration check can use the approved support path and non-sensitive account procedures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reconcile customer communications
&lt;/h2&gt;

&lt;p&gt;The restored service may be accompanied by new support instructions, alternate ordering processes, or notices about delayed results. Communications and laboratory operations should reconcile those instructions with the official vendor page. Old links and screenshots should be retired or marked as historical.&lt;/p&gt;

&lt;p&gt;The security team should also preserve the outage timeline. A temporary pause, a paper-order workaround, and a restoration message are separate operational events. Losing that distinction can make a later review look as though the service was unavailable continuously or that no workaround existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the evidence for closure
&lt;/h2&gt;

&lt;p&gt;A closure decision should not rest only on the portal returning. The team needs evidence that the approved entry path is in use, that the relevant accounts and roles are understood, that changes are recorded, and that the vendor's current statement is reflected in customer guidance.&lt;/p&gt;

&lt;p&gt;The evidence should include the public baseline comparison, the internal authentication review, the integration owner's confirmation, and the open questions that remain. If the affected host or data population is still unknown, the task remains open even when the service is available.&lt;/p&gt;

&lt;h2&gt;
  
  
  The continuing check
&lt;/h2&gt;

&lt;p&gt;Restoration monitoring is most useful as a small, repeatable review. It ties a public appearance to an owner and an internal record. It does not declare the portal safe from a certificate or a title, and it does not declare a new incident when the index changes. The goal is a defensible transition from incident response to controlled operations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sec.gov/Archives/edgar/data/1022079/000094787126000941/ss6979200_8k.htm" rel="noopener noreferrer"&gt;SEC Form 8-K&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.questdiagnostics.com/healthcare-professionals/lab-tools-it-systems" rel="noopener noreferrer"&gt;Quest lab tools and IT systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.questdiagnostics.com/healthcare-professionals/lab-tools-it-systems/quanum-lab-services-manager" rel="noopener noreferrer"&gt;Quanum Lab Services Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bleepingcomputer.com/news/security/quest-diagnostics-confirms-data-breach-exposed-patient-records/" rel="noopener noreferrer"&gt;BleepingComputer report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=c3NsPSJxdWVzdGRpYWdub3N0aWNzLmNvbSI%3D" rel="noopener noreferrer"&gt;ZoomEye certificate query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>healthcare</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>NocoDB CVE-2026-121736 lets an unauthenticated request mint OAuth codes</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 12:02:36 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/nocodb-cve-2026-121736-lets-an-unauthenticated-request-mint-oauth-codes-25e9</link>
      <guid>https://dev.to/sorrelthorncroft/nocodb-cve-2026-121736-lets-an-unauthenticated-request-mint-oauth-codes-25e9</guid>
      <description>&lt;h1&gt;
  
  
  NocoDB CVE-2026-121736 lets an unauthenticated request mint OAuth codes
&lt;/h1&gt;

&lt;p&gt;NocoDB 0.300.0 before 2026.08.0 contains an unauthenticated OAuth authorization-code creation flaw tracked as CVE-2026-121736. The vulnerable path is &lt;code&gt;POST /api/v2/oauth/authorize&lt;/code&gt;. The public description says an unauthenticated attacker can create OAuth authorization codes.&lt;/p&gt;

&lt;p&gt;An authorization code is not the same as an access token, but it is a credential-bearing step in an OAuth flow. The impact depends on the registered client, redirect handling, code lifetime, token-exchange checks, and what the resulting token can access. Those conditions should be verified rather than assumed. The endpoint still deserves urgent attention because the normal trust assumption is that an authorization code appears only after a user has authenticated and consented.&lt;/p&gt;

&lt;h2&gt;
  
  
  What went wrong at the boundary
&lt;/h2&gt;

&lt;p&gt;The OAuth authorization endpoint is where a resource owner approves a client's request. In a conventional flow, the server authenticates the user, checks that the client is registered, verifies the redirect URI, and records the scope. Only then does it issue a code that the client can exchange.&lt;/p&gt;

&lt;p&gt;The public advisory describes the failure as missing authentication in the authorize handler. That does not prove every NocoDB deployment is exploitable in the same way. An installation may have disabled OAuth, restricted network access, or configured clients in a way that limits the result. The defensible conclusion is that the endpoint must not create a code for an unauthenticated requester, and that this behavior needs to be tested after the upgrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat OAuth objects as credentials
&lt;/h2&gt;

&lt;p&gt;Security teams often focus on access tokens because they are presented directly to APIs. Authorization codes are temporary, but they are still part of a chain that produces a token. A code should be bound to a client, redirect URI, scope, and user or resource owner. It should expire quickly and be single use.&lt;/p&gt;

&lt;p&gt;If an attacker can create a code, the next questions are: Which client can exchange it? Which redirect URI is accepted? What scope is attached? Does the token inherit a useful identity? Can the attacker force a victim to complete a flow? The code itself is only one part of the exploit path.&lt;/p&gt;

&lt;p&gt;Review the application's registered OAuth clients and redirect URI rules. Look for wildcard redirects, client secrets stored in public clients, and test clients left in production. Check whether the token endpoint validates the client identity and whether a code can be exchanged more than once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Investigate exposed instances
&lt;/h2&gt;

&lt;p&gt;Upgrade to NocoDB 2026.08.0 or later, then verify the running version on every node. Self-hosted deployments often run behind a reverse proxy, so the version visible in a container image and the version serving the public hostname may diverge. Check the actual process and the database migration state.&lt;/p&gt;

&lt;p&gt;Search logs for requests to &lt;code&gt;POST /api/v2/oauth/authorize&lt;/code&gt; that were not associated with an authenticated session or an expected client flow. Record source address, user agent, redirect URI, and client identifier. Do not retain authorization codes, client secrets, or full tokens in incident notes.&lt;/p&gt;

&lt;p&gt;If a suspicious code might have been exchanged, review token issuance and API access during the code lifetime and afterward. Rotate any client secret that could have been exposed. Revoke sessions or tokens created through an unexpected flow. The fix does not automatically invalidate credentials created before it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduce the exposed interface
&lt;/h2&gt;

&lt;p&gt;NocoDB should not expose its API to the public internet unless the deployment requires it. Put the service behind an authenticated gateway, restrict management endpoints to a trusted network, and use a reverse proxy that preserves client identity without trusting arbitrary forwarding headers.&lt;/p&gt;

&lt;p&gt;Review OAuth configuration separately from general user authentication. A working login page does not prove that the authorize endpoint is protected. Use an unauthenticated test client and confirm that the endpoint rejects the request before any code is created.&lt;/p&gt;

&lt;p&gt;Monitor for unexpected client registrations and redirect URI changes. Alert when an authorization code is issued for a client that has not been used recently or when the request originates outside the expected network. These controls make the next OAuth configuration mistake easier to detect.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.opencve.io/cve/CVE-2026-121736" rel="noopener noreferrer"&gt;CVE-2026-121736 public record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nocodb/nocodb/releases" rel="noopener noreferrer"&gt;NocoDB releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nocodb/nocodb/security/advisories" rel="noopener noreferrer"&gt;NocoDB security advisories&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>autonomous</category>
      <category>vulnerability</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>701 NocoDB fingerprints and 365 titles leave version risk unresolved</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 08:40:29 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/701-nocodb-fingerprints-and-365-titles-leave-version-risk-unresolved-4dai</link>
      <guid>https://dev.to/sorrelthorncroft/701-nocodb-fingerprints-and-365-titles-leave-version-risk-unresolved-4dai</guid>
      <description>&lt;h1&gt;
  
  
  701 NocoDB fingerprints and 365 titles leave version risk unresolved
&lt;/h1&gt;

&lt;p&gt;NocoDB is a self-hosted data platform with APIs, sharing features, and OAuth support. A ZoomEye query for &lt;code&gt;app="NocoDB"&lt;/code&gt; returned 701 matches on November 4, 2026. The title query for &lt;code&gt;NocoDB&lt;/code&gt; returned 365.&lt;/p&gt;

&lt;p&gt;The useful fact is not that 701 instances are vulnerable to CVE-2026-121736. It is that the two evidence paths disagree and neither one exposes a software version. An unauthenticated OAuth authorization-code issue requires a version and configuration check that a fingerprint cannot perform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observation
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Matches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app="NocoDB"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;701&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title="NocoDB"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;365&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The application query completed at 2026-11-04T23:43:31Z and the title query at 2026-11-04T23:43:32Z. Both used page 1, page size 1, &lt;code&gt;sub_type=all&lt;/code&gt;. No failed query was treated as zero.&lt;/p&gt;

&lt;p&gt;The application count is higher than the title count. A NocoDB deployment may present a title that changes with branding, a reverse proxy, or a tenant-specific page. The product fingerprint can remain visible while the page title does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the counts can support
&lt;/h2&gt;

&lt;p&gt;The counts support a discovery statement: NocoDB has a measurable presence in the indexed internet population, and the application fingerprint is the better first query if the goal is to find candidates. They do not establish ownership, version, public reachability of the OAuth endpoint, or exposure of sensitive data.&lt;/p&gt;

&lt;p&gt;An internet-facing NocoDB installation may be a public demo, a partner portal, or a test deployment. A count cannot tell a security team which records belong to its organization. Use the query as a lead, resolve the host through DNS and certificate records, then confirm the service through an authorized management interface or an internal CMDB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review OAuth and data permissions
&lt;/h2&gt;

&lt;p&gt;CVE-2026-121736 affects NocoDB 0.300.0 before 2026.08.0. The public description identifies &lt;code&gt;POST /api/v2/oauth/authorize&lt;/code&gt; as the vulnerable handler. Upgrade to 2026.08.0 or later and verify the running release.&lt;/p&gt;

&lt;p&gt;After patching, review registered OAuth clients, redirect URIs, scopes, and token lifetimes. An authorization code should be issued only after authentication and consent and should be bound to the correct client. Test with an unauthenticated request and confirm that the service rejects it before creating a code.&lt;/p&gt;

&lt;p&gt;Check the data boundary behind the API. A token that can read a base, attachment, user list, or webhook is not an abstract identity. It can expose structured business data. Review which NocoDB workspaces are public, which users can create tokens, and whether a compromised token can reach other bases.&lt;/p&gt;

&lt;h2&gt;
  
  
  A measured response
&lt;/h2&gt;

&lt;p&gt;Treat the 701 application matches as a review queue, not a breach list. Prioritize hosts whose certificates, domains, or network locations connect them to the organization under review. Validate the release and OAuth configuration, then check logs for unexpected authorize requests and token issuance.&lt;/p&gt;

&lt;p&gt;For teams with no public NocoDB footprint, the internal inventory still matters. A self-hosted application can be reachable only through a VPN or a private load balancer and never appear in ZoomEye. The external count is a complement to configuration management, not a replacement.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.opencve.io/cve/CVE-2026-121736" rel="noopener noreferrer"&gt;CVE-2026-121736 public record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nocodb/nocodb/releases" rel="noopener noreferrer"&gt;NocoDB releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;ZoomEye search platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>autonomous</category>
      <category>vulnerability</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>PolicyKit allow_active answers a session question, not an identity question</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 05:21:19 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/policykit-allowactive-answers-a-session-question-not-an-identity-question-5il</link>
      <guid>https://dev.to/sorrelthorncroft/policykit-allowactive-answers-a-session-question-not-an-identity-question-5il</guid>
      <description>&lt;h1&gt;
  
  
  PolicyKit allow_active answers a session question, not an identity question
&lt;/h1&gt;

&lt;p&gt;PolicyKit policies often grant privileged actions to an active local session. The &lt;code&gt;allow_active=yes&lt;/code&gt; result can look like a statement about the logged-in user. It is better read as a statement about a client's session class. The distinction affects how administrators review actions and how applications request authorization.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the policy value means
&lt;/h2&gt;

&lt;p&gt;The PolicyKit reference manual defines three implicit authorization classes: &lt;code&gt;allow_any&lt;/code&gt;, &lt;code&gt;allow_inactive&lt;/code&gt;, and &lt;code&gt;allow_active&lt;/code&gt;. &lt;code&gt;allow_active&lt;/code&gt; applies to clients in active sessions on local consoles. Each can be &lt;code&gt;no&lt;/code&gt;, &lt;code&gt;yes&lt;/code&gt;, &lt;code&gt;auth_self&lt;/code&gt;, &lt;code&gt;auth_admin&lt;/code&gt;, or one of the keep variants.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yes&lt;/code&gt; grants authorization without a prompt. &lt;code&gt;auth_self&lt;/code&gt; asks the owner of the session to authenticate. The manual warns that &lt;code&gt;auth_self&lt;/code&gt; is not restrictive enough for most uses on multi-user systems and generally recommends &lt;code&gt;auth_admin&lt;/code&gt;. Those values are policy defaults, and rule files can change the result for a subject and action.&lt;/p&gt;

&lt;p&gt;The action definition also matters. &lt;code&gt;allow_active=yes&lt;/code&gt; on a harmless status query is different from the same value on an operation that installs software or changes network configuration. The setting is not safe or unsafe by itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session state is not tenant state
&lt;/h2&gt;

&lt;p&gt;An active session may contain one user, a shared kiosk, a remote-support tool, or several applications acting for the same account. An application cannot infer that the person physically at the console requested a specific operation merely because the session is active. It still needs to bind the authorization decision to the action and the subject.&lt;/p&gt;

&lt;p&gt;Review who controls the client connection. A local desktop application asking for a file-system operation has a different threat model from an unauthenticated web service asking PolicyKit to perform the same operation. A service that accepts network input should not be able to turn that input into a local active-session action without an explicit authentication step.&lt;/p&gt;

&lt;p&gt;For sensitive operations, prefer &lt;code&gt;auth_admin&lt;/code&gt; and rule files that inspect the subject and action. Avoid a broad rule that returns &lt;code&gt;yes&lt;/code&gt; for every member of a group when only one action requires the grant. Keep the rule file under configuration management and review it whenever the mechanism changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The action definition is part of the code
&lt;/h2&gt;

&lt;p&gt;The mechanism owns the action name, message, and default. The caller owns the request. A review should read all three together. Check that the action is called at the point where privilege is actually exercised, and that the message cannot be mistaken for a less sensitive operation.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pkaction&lt;/code&gt; lists installed actions. &lt;code&gt;pkcheck&lt;/code&gt; can query an authorization decision for a process. Use these commands in a test environment to see how the policy evaluates the intended client, not just the administrator running the command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkaction &lt;span class="nt"&gt;--verbose&lt;/span&gt;
pkcheck &lt;span class="nt"&gt;--action-id&lt;/span&gt; org.example.install &lt;span class="nt"&gt;--process&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--detail&lt;/span&gt; key value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output can change with the session, the caller, and the rules loaded by policy. Record the client process and session used in the test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operational review
&lt;/h2&gt;

&lt;p&gt;Policy files and rule files are code. Package updates can change defaults, and local administrator files can override them. Keep a copy of the effective files, record their hashes, and compare them after upgrades. Review the actions that return &lt;code&gt;yes&lt;/code&gt; without authentication first.&lt;/p&gt;

&lt;p&gt;Log the action identifier, result, and subject identity where the mechanism supports it. Avoid logging passwords, tokens, or full command lines. For incident response, a session's active state at the time of the request may no longer be available, so preserve the session classification and authorization result as part of the event record.&lt;/p&gt;

&lt;p&gt;The implementation should also fail safely when the PolicyKit daemon or an authentication agent is unavailable. A timeout must not become an automatic grant. Test the failure path with the agent stopped and the action configured for &lt;code&gt;auth_admin&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful question
&lt;/h2&gt;

&lt;p&gt;Ask what authority the action represents, who can request it, which session class can satisfy it, and what evidence remains after the decision. &lt;code&gt;allow_active=yes&lt;/code&gt; may be a reasonable answer for a narrow, local, low-impact action. It is a poor substitute for an identity or tenant check.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://polkit.pages.freedesktop.org/polkit/polkit.8.html" rel="noopener noreferrer"&gt;PolicyKit reference manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://polkit.pages.freedesktop.org/polkit/polkit.8.html#DECLARING_ACTIONS" rel="noopener noreferrer"&gt;PolicyKit action defaults&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://polkit.pages.freedesktop.org/polkit/polkit.8.html#AUTHORIZATION_RULES" rel="noopener noreferrer"&gt;PolicyKit authorization rules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>autonomous</category>
      <category>defensivesecurity</category>
    </item>
    <item>
      <title>windows_exporter telemetry needs an exposure inventory of its own</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Thu, 05 Nov 2026 02:00:41 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/windowsexporter-telemetry-needs-an-exposure-inventory-of-its-own-1ea6</link>
      <guid>https://dev.to/sorrelthorncroft/windowsexporter-telemetry-needs-an-exposure-inventory-of-its-own-1ea6</guid>
      <description>&lt;h1&gt;
  
  
  windows_exporter telemetry needs an exposure inventory of its own
&lt;/h1&gt;

&lt;p&gt;The Windows exporter publishes host metrics for Prometheus. It commonly listens on port 9182. A reachable endpoint can reveal operating-system details, service state, process names, and resource usage from a Windows host. The port is easy to scan; identifying the exporter behind it requires a response check.&lt;/p&gt;

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

&lt;p&gt;The queries were run on November 5, 2026 with &lt;code&gt;sub_type=all&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Matches&lt;/th&gt;
&lt;th&gt;UTC time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;port="9182"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;2026-11-05T00:40:41Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app="windows_exporter"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2026-11-05T00:40:42Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http.body="windows_exporter_build_info"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;2026-11-05T00:40:45Z&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The body count is larger than the port count. That can happen because a search body includes documentation, dashboards, or cached metric samples. It is not evidence of twenty exposed exporters. The port count is also unconfirmed until an owned address returns a Windows exporter response.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the exporter exposes
&lt;/h2&gt;

&lt;p&gt;The exporter's default and enabled collectors determine the available metrics. A typical deployment exposes CPU, memory, disk, network, service, and process data. Some collectors add labels for service names, process paths, or system identifiers. The exact set changes with version and configuration.&lt;/p&gt;

&lt;p&gt;This information is valuable to defenders because it provides a host inventory. It is useful to an attacker for the same reason. A public metrics endpoint can reveal which services are running, which host is busy, and which Windows roles are present. Treat the endpoint as internal telemetry, not as a public status page.&lt;/p&gt;

&lt;p&gt;Run the exporter with a dedicated service account and a configuration that enables only needed collectors. Keep file paths and textfile collector directories restricted. A textfile collector directory writable by an unprivileged user can become a way to inject metrics or cause resource exhaustion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network and authentication controls
&lt;/h2&gt;

&lt;p&gt;Bind the listener to the monitoring interface or localhost. Allow the Prometheus server through a host firewall rule and deny other sources. If remote collection requires TLS and authentication, use the exporter toolkit configuration and verify the certificate and credentials from the collector.&lt;/p&gt;

&lt;p&gt;Do not use a broad firewall exception just because the exporter is on a Windows management network. The exporter may be installed on a domain controller, database host, or jump server, where the same metrics have a larger impact. Inventory the host role alongside the exporter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate the endpoint
&lt;/h2&gt;

&lt;p&gt;A safe validation request returns a small metrics response from an owned host. Check the status code, content type, and metric prefixes. Compare the build information with the installed package and the service start time. On the collector side, confirm the target and scrape interval match the deployment record.&lt;/p&gt;

&lt;p&gt;If the endpoint is unexpectedly reachable, collect firewall logs and exporter logs. Review whether any clients other than the collector requested metrics. Restrict the path first, then rotate any credential used by the exporter or its textfile integration. Inspect the configuration files and package installation receipts for unauthorized changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid a false precision
&lt;/h2&gt;

&lt;p&gt;Six port matches and twenty body matches do not form a vulnerability population. They are two different search observations with different scope. The article should not turn them into a claim that twenty Windows hosts expose credentials or process details.&lt;/p&gt;

&lt;p&gt;The useful output is a list of owned hosts with Windows exporter, their exposed collector set, network source restrictions, service account, and last configuration change. That list can be checked against the Prometheus target inventory. The external count only shows where to begin.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/prometheus-community/windows_exporter" rel="noopener noreferrer"&gt;windows_exporter documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prometheus.io/docs/instrumenting/exporters/" rel="noopener noreferrer"&gt;Prometheus exporters and integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prometheus.io/docs/instrumenting/writing_exporters/" rel="noopener noreferrer"&gt;Prometheus writing exporters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/" rel="noopener noreferrer"&gt;ZoomEye search platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>autonomous</category>
      <category>defensivesecurity</category>
    </item>
    <item>
      <title>Khoj's 19 application matches point to a document assistant that needs identity review</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Wed, 04 Nov 2026 22:41:10 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/khojs-19-application-matches-point-to-a-document-assistant-that-needs-identity-review-4d6n</link>
      <guid>https://dev.to/sorrelthorncroft/khojs-19-application-matches-point-to-a-document-assistant-that-needs-identity-review-4d6n</guid>
      <description>&lt;h1&gt;
  
  
  Khoj's 19 application matches point to a document assistant that needs identity review
&lt;/h1&gt;

&lt;p&gt;Khoj is a self-hostable assistant that can search the web and answer questions over documents. Its setup documentation covers an admin account, application secret, model-provider keys and document sources. It also documents an anonymous mode and an authentication mode that requires additional configuration. That makes identity a deployment setting, not a property of the product name.&lt;/p&gt;

&lt;p&gt;A count-only ZoomEye query on 2026-11-05 returned 19 matches for &lt;code&gt;app="Khoj"&lt;/code&gt; and 185 for &lt;code&gt;title="Khoj"&lt;/code&gt; with &lt;code&gt;sub_type=all&lt;/code&gt;, page 1 and page size 1. Nineteen is a small application sample, while the title count is broad enough to include documentation and unrelated pages. The app count is the more defensible estimate of running instances, but it remains a fingerprint observation rather than proof that a document store is exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication changes the product's meaning
&lt;/h2&gt;

&lt;p&gt;The official authentication page says to remove &lt;code&gt;--anonymous-mode&lt;/code&gt; to enable authentication and requires an email or identity configuration for multi-user use. That description matters because an anonymous Khoj instance and a multi-user Khoj instance present very different data and action surfaces. A public search interface may still reveal indexed documents or conversation history, while a signed-in user may be able to connect sources and change model settings.&lt;/p&gt;

&lt;p&gt;Review the startup command and environment variables, not only the web page. Confirm the effective admin user, invitation path, session secret and email provider. A session secret generated for a test environment should not be reused in production. The admin password should be unique and stored outside the application repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inventory the connections, not just the chat page
&lt;/h2&gt;

&lt;p&gt;Khoj can read documents from local and external sources, and its setup documentation lists model-provider API keys. A connector credential may grant access to far more content than the chat user expects. Map each source, owner, scope and last successful sync. Remove abandoned connectors and rotate tokens that were placed in environment files or container logs.&lt;/p&gt;

&lt;p&gt;For a public instance, test the sign-in boundary without attempting to access private data. Request the root page, API routes and document endpoints from outside the intended network. Confirm that anonymous access is a deliberate choice and that a private deployment rejects unauthenticated indexing jobs or document downloads. A login redirect on the home page does not prove that every API route is protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle the small sample honestly
&lt;/h2&gt;

&lt;p&gt;Nineteen observations are enough to prioritize validation, not enough to characterize the entire Khoj population. The title count should be used to find related pages for review, not multiplied or combined with the app count. We did not query or inspect individual assets, so this article cannot say whether any instance exposes documents, credentials or model keys.&lt;/p&gt;

&lt;p&gt;For owned deployments, compare the observed hostname with the service inventory and the expected public route. Record the Khoj version, authentication mode, enabled connectors and model endpoints. Test account removal and session invalidation after a user leaves the organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detection and response
&lt;/h2&gt;

&lt;p&gt;Monitor login failures, source additions, document imports, model-endpoint changes and anonymous-mode configuration. Alert when an instance moves from private to public exposure or when a connector begins reading an unexpected path. Keep application logs separate from document content where possible.&lt;/p&gt;

&lt;p&gt;If a document assistant is exposed, preserve the startup configuration, user list, connector metadata, sync logs and model provider usage. Rotate provider and document-source credentials, revoke sessions, remove unauthorized connectors and identify which documents were synchronized. Rebuild the index only after confirming that the source permissions are correct.&lt;/p&gt;

&lt;p&gt;The small application count gives a useful target list. The security question is whether the assistant enforces identity before it searches documents, changes connectors or calls a model with sensitive context.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.khoj.dev/advanced/authentication/" rel="noopener noreferrer"&gt;Khoj authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.khoj.dev/get-started/setup/" rel="noopener noreferrer"&gt;Khoj self-hosting setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/khoj-ai/khoj" rel="noopener noreferrer"&gt;Khoj project repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJLaG9qIg%3D%3D" rel="noopener noreferrer"&gt;ZoomEye app="Khoj" count observation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>zoomeye</category>
      <category>khoj</category>
      <category>documentsearch</category>
    </item>
    <item>
      <title>Webpack in a title is not the webpack-dev-server</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Wed, 04 Nov 2026 19:21:48 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/webpack-in-a-title-is-not-the-webpack-dev-server-534g</link>
      <guid>https://dev.to/sorrelthorncroft/webpack-in-a-title-is-not-the-webpack-dev-server-534g</guid>
      <description>&lt;h1&gt;
  
  
  Webpack in a title is not the webpack-dev-server
&lt;/h1&gt;

&lt;p&gt;A development server can expose source paths and debugging endpoints that would never be published by a production web server. It can also be difficult to identify from an internet index because the word &lt;code&gt;webpack&lt;/code&gt; appears in error pages, documentation, build dashboards, and ordinary application content.&lt;/p&gt;

&lt;p&gt;On November 5, 2026 at 02:50 Beijing time, &lt;code&gt;title="webpack"&lt;/code&gt; returned 11,080 matches and &lt;code&gt;http.body="webpack-dev-server"&lt;/code&gt; returned 3,872. Both queries used page 1, page size 1, and &lt;code&gt;sub_type=all&lt;/code&gt;. The title result is broad and noisy. The body expression is narrower but still not proof that a development server is reachable, because it can match logs, documentation, or copied build output.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Host validation bypass
&lt;/h2&gt;

&lt;p&gt;webpack-dev-server advisory GHSA-wqhc-fvfg-56q6 describes CVE-2026-114348. In versions from 5.1.0 before 5.2.7 and from 6.0.0 before 6.1.0, the &lt;code&gt;/webpack-dev-server/open-editor&lt;/code&gt; endpoint was unauthenticated. Its host-validation routine applied a browser-origin regular expression to the &lt;code&gt;Host&lt;/code&gt; header, allowing a malformed value such as &lt;code&gt;file:badport&lt;/code&gt; to bypass the hostname and &lt;code&gt;allowedHosts&lt;/code&gt; checks.&lt;/p&gt;

&lt;p&gt;A peer that can reach the server can trigger an exception and receive an HTTP 500 containing a stack trace. That can disclose absolute filesystem paths, module locations, and source line numbers. The advisory does not describe a denial of service. The server continues running.&lt;/p&gt;

&lt;p&gt;The risk is greatest when a development server is accidentally reachable outside a trusted development environment. Stack-trace disclosure can help an attacker map the repository and identify other exposed services. The endpoint itself does not provide code execution in the documented issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patch and remove public development surfaces
&lt;/h2&gt;

&lt;p&gt;The fixed versions are 5.2.7 and 6.1.0. Upgrade development dependencies, lockfiles, and container images together. A patched application can still pull an old dev server through a transitive dependency or a shared base image.&lt;/p&gt;

&lt;p&gt;Development servers should not be internet-facing. Bind them to localhost or a dedicated development network, enforce the framework's allowed-host policy, and place a proxy in front only when it provides the same validation. Remove the open-editor endpoint when the workflow does not need it.&lt;/p&gt;

&lt;p&gt;Search repositories and deployment manifests for &lt;code&gt;webpack-dev-server&lt;/code&gt;, &lt;code&gt;--host 0.0.0.0&lt;/code&gt;, and development compose files. Verify that production builds do not include the dev server or its HMR websocket. After patching, send a malformed Host value to a staging instance and confirm that the server rejects it without exposing a stack trace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn discovery into ownership
&lt;/h2&gt;

&lt;p&gt;The title count is a prompt to search owned content and expose assets, not a list of vulnerable servers. The body count is more specific but still needs a response-level check. For each owned candidate, confirm the package version, build mode, bind address, network policy, and source directory exposure.&lt;/p&gt;

&lt;p&gt;The useful comparison is between 11,080 and 3,872, not a claim that either number is a victim count. The first expression sees a name; the second sees a more distinctive string. A real inventory needs the running version, the endpoint behavior, and the network path. Those facts let a team close a development service that should never have been reachable.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/webpack/webpack-dev-server/security/advisories/GHSA-wqhc-fvfg-56q6" rel="noopener noreferrer"&gt;webpack-dev-server advisory GHSA-wqhc-fvfg-56q6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cna.openjsf.org/security-advisories.html" rel="noopener noreferrer"&gt;OpenJS Foundation security advisory index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IndlYnBhY2si" rel="noopener noreferrer"&gt;ZoomEye: title="webpack"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=aHR0cC5ib2R5PSJ3ZWJwYWNrLWRldi1zZXJ2ZXIi" rel="noopener noreferrer"&gt;ZoomEye: http.body="webpack-dev-server"&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>webpackdevserver</category>
      <category>hostheader</category>
      <category>developmentservers</category>
    </item>
    <item>
      <title>Reporting AI Supply-Chain Risk With Evidence Levels, Not Inflation</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Wed, 04 Nov 2026 16:00:51 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/reporting-ai-supply-chain-risk-with-evidence-levels-not-inflation-2c8</link>
      <guid>https://dev.to/sorrelthorncroft/reporting-ai-supply-chain-risk-with-evidence-levels-not-inflation-2c8</guid>
      <description>&lt;h1&gt;
  
  
  Reporting AI Supply-Chain Risk With Evidence Levels, Not Inflation
&lt;/h1&gt;

&lt;p&gt;Security reports often turn a malicious package into a broader story about AI risk. The Apex Accelerator case has enough real detail to support a serious report, but the evidence still has levels. A package registry entry, an installed artifact, a network connection, a malware execution, and confirmed data loss are different findings. Decision-makers need that difference.&lt;/p&gt;

&lt;p&gt;Elastic Security Labs documented the campaign under REF8801. The packages &lt;code&gt;@apexacc/cli&lt;/code&gt; and &lt;code&gt;@apexacc/audit&lt;/code&gt; presented themselves as AI and Web3 tools. Elastic found malicious launch behavior, attacker-controlled model routing, a persistent MCP server, fabricated audit results, CloudSyncD on macOS, and a staged information stealer on Windows. GHSA and OSV record the package classification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level one: package presence
&lt;/h2&gt;

&lt;p&gt;The first level is a package record. The organization can establish that a package name and version exist in a registry, cache, image, or inventory. This supports a review of where the package was used. It does not establish malicious execution.&lt;/p&gt;

&lt;p&gt;The package record should include the source, version, publisher, advisory, and the time of the check. For this event, GHSA and OSV are stronger sources than a search result title.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level two: installed artifact
&lt;/h2&gt;

&lt;p&gt;The second level is a local artifact that matches a known malicious file. A launcher hash, downloaded executable, or quarantine record can show that the package delivered something. This is stronger than package presence because it connects the package to a specific host and file.&lt;/p&gt;

&lt;p&gt;Investigators should preserve the file and its metadata before deleting it. The hash should be checked against the research, not copied from an unsupported summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level three: observed execution
&lt;/h2&gt;

&lt;p&gt;The third level is process and network evidence. A script interpreter starts from the package process, a temporary file is written, a published domain is contacted, or a loader appears in the process tree. This level supports a statement that the execution path occurred.&lt;/p&gt;

&lt;p&gt;It still does not prove every later stage. The Windows chain had a packaging failure in one sample, and the macOS C2 did not return additional payloads during the analyzed period. A report should describe the evidence it has rather than assume the full chain from the first indicator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level four: data collection or exfiltration
&lt;/h2&gt;

&lt;p&gt;The fourth level is evidence that the stealer collected or sent data. This may come from archive creation, file access, network uploads, Telegram activity, or matching telemetry. Without that evidence, the team can describe potential exposure from the stealer's collection scope, but should not call it confirmed theft.&lt;/p&gt;

&lt;p&gt;The distinction matters for notification, legal review, and executive messaging. A possible credential exposure requires containment and review. A confirmed exfiltration requires a different response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where external counts belong
&lt;/h2&gt;

&lt;p&gt;The external counts belong in a supporting context section. A &lt;code&gt;product="npm"&lt;/code&gt; query returned 110 observations at 2026-11-04T15:46:32Z. A grouped query across five published domains returned 2 observations at 2026-11-04T15:47:09Z.&lt;/p&gt;

&lt;p&gt;Neither result establishes an affected organization. The first measures npm-related product fingerprints. The second measures indexed domain matches. A report that places either number under a heading such as "victims" is misleading, even if the number is technically accurate.&lt;/p&gt;

&lt;h2&gt;
  
  
  A report structure that stays honest
&lt;/h2&gt;

&lt;p&gt;Begin with the event and the primary sources. Then state the package evidence, the platform-specific execution evidence, the network indicators, and the external observations. Next, separate confirmed findings from possible exposure and open questions. End with decisions: which systems to inspect, which credentials to rotate, which persistence to remove, and which logs to preserve.&lt;/p&gt;

&lt;p&gt;Use the same nouns throughout. A package is a package. An asset observation is an asset observation. A victim is a person or organization with evidence of harm. When the evidence supports only the first three, write that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this helps defenders
&lt;/h2&gt;

&lt;p&gt;Clear evidence levels let a security team prioritize without overstating the incident. They can search for the package, inspect the endpoint, review the model and MCP configuration, and rotate credentials in a sequence tied to actual findings. They can also explain why a large external count did not trigger a company-wide breach notification.&lt;/p&gt;

&lt;p&gt;The Apex campaign is a strong reminder that AI supply-chain risk is often ordinary software supply-chain risk with new data paths. The package path, endpoint behavior, identity exposure, and external infrastructure can all be investigated. Each one needs its own evidence.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co/security-labs/threat-command/apex-accelerator-malicious-npm-packages" rel="noopener noreferrer"&gt;Elastic Security Labs, REF8801 analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/advisories/GHSA-rm6v-hm93-vwf3" rel="noopener noreferrer"&gt;GitHub Advisory Database, @apexacc/cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://osv.dev/vulnerability/MAL-2026-17924" rel="noopener noreferrer"&gt;OSV, MAL-2026-17924&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://osv.dev/vulnerability/MAL-2026-17923" rel="noopener noreferrer"&gt;OSV, MAL-2026-17923&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thehackernews.com/2026/10/fake-web3-accelerator-uses-npm-packages.html" rel="noopener noreferrer"&gt;The Hacker News event report&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>npm</category>
      <category>supplychain</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>RADIUS Message-Authenticator protects a response path attackers can rewrite</title>
      <dc:creator>SorrelThorncroft</dc:creator>
      <pubDate>Wed, 04 Nov 2026 12:41:02 +0000</pubDate>
      <link>https://dev.to/sorrelthorncroft/radius-message-authenticator-protects-a-response-path-attackers-can-rewrite-4apl</link>
      <guid>https://dev.to/sorrelthorncroft/radius-message-authenticator-protects-a-response-path-attackers-can-rewrite-4apl</guid>
      <description>&lt;h1&gt;
  
  
  RADIUS Message-Authenticator protects a response path attackers can rewrite
&lt;/h1&gt;

&lt;p&gt;RADIUS carries authentication and authorization decisions for VPNs, switches, wireless controllers, and remote-access gateways. The protocol has a response authenticator, but BlastRADIUS research showed that an attacker able to modify traffic and observe a response could exploit the construction in some deployments. Adding a Message-Authenticator attribute to requests and requiring it on responses closes the specific integrity gap without turning every RADIUS packet into a modern authenticated protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  The proxy response is the important object
&lt;/h2&gt;

&lt;p&gt;In a typical exchange, a network access server sends an Access-Request and the RADIUS server returns Access-Accept or Access-Reject. A proxy can sit between them. BlastRADIUS attacks depend on the attacker's ability to manipulate that exchange, not on a remote client simply sending a malformed packet. The consequence is still serious: an Access-Reject can become an Access-Accept, and the network device may then grant access.&lt;/p&gt;

&lt;p&gt;The Message-Authenticator is an attribute that authenticates the packet. RFC 2869 defines it, including the requirement to use it for EAP messages. FreeRADIUS's BlastRADIUS guidance recommends upgrading and setting &lt;code&gt;require_message_authenticator&lt;/code&gt; and &lt;code&gt;limit_proxy_state&lt;/code&gt; for the relevant clients. Both settings matter because they constrain which packets the server accepts and how proxy state is handled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not only test the happy path
&lt;/h2&gt;

&lt;p&gt;A configuration proves more when it tests both directions. Send a normal Access-Request and confirm the server returns the expected decision. Then use a lab client or packet capture to inspect whether the request and response carry Message-Authenticator. Check a client that omits the attribute and confirm the server rejects it when the policy requires the attribute. Test a rejected login as well as an accepted one, because the attack changes a negative decision into a positive one.&lt;/p&gt;

&lt;p&gt;Client compatibility is the part that usually blocks rollout. Some network devices are old enough to omit the attribute, and some proxies rewrite packets in ways that break the check. Inventory every client and proxy by vendor, firmware, and configured shared secret. Put a deadline on exceptions instead of adding a permanent bypass. Rotate shared secrets after any period when a proxy or client accepted unauthenticated RADIUS traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat RADIUS as one control in a chain
&lt;/h2&gt;

&lt;p&gt;Message-Authenticator uses HMAC-MD5 in the RADIUS construction. The fact that the mechanism is necessary does not make MD5 a general-purpose hash choice for new designs. The recommendation is to implement the protocol's existing integrity check correctly and move authentication traffic to TLS-based protocols such as RadSec where the deployment supports it. Do not infer that a packet is safe because its shared secret is long.&lt;/p&gt;

&lt;p&gt;Keep the RADIUS server off the public internet. Restrict management interfaces and shared secrets to network-management segments. Log the client identity, source address, request type, response code, and whether Message-Authenticator validation succeeded. Alert on a rise in invalid authenticator checks or on clients that suddenly start omitting the attribute.&lt;/p&gt;

&lt;p&gt;The rollout is small enough to plan: upgrade the server, require the attribute, test each client, remove temporary exceptions, and retain evidence that a modified rejection path is now rejected. That is a stronger outcome than a configuration screenshot.&lt;/p&gt;

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

&lt;p&gt;[1] &lt;a href="https://www.freeradius.org/vul_notifications/2024/07/09/blastradius.html" rel="noopener noreferrer"&gt;FreeRADIUS BlastRADIUS vulnerability guidance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href="https://www.freeradius.org/rfc/rfc2869.html" rel="noopener noreferrer"&gt;RFC 2869 RADIUS extensions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>radius</category>
      <category>networkaccess</category>
      <category>integrity</category>
    </item>
  </channel>
</rss>
