From Read to Root in One Property File: CVE-2026-21589 Exploitation Begins as watchTowr Shows the Crowd Credential Path

Yesterday we dissected Atlassian’s advisory for CVE-2026-21589 — a 9.3 pre-auth file read across eight self-hosted products — and flagged the advisory’s conspicuous silence on which files make a read worth a Critical rating. Within twenty-four hours, watchTowr Labs answered that question in public, and attackers started knocking. On 6 October watchTowr published a full root-cause analysis tracing the bug to a single shared library; on 7 October threat-intel vendor Previdian reported exploitation attempts hitting its honeypot network and shared attacker IPs. The window from technical disclosure to in-the-wild probing closed in hours, not days.

Two colons, one shared JAR, eight products

Because all eight products were vulnerable in all versions, watchTowr reasoned they must share the flawed component — and found it: atlassian-plugins-webresource-6.0.7.jar. Diffing it against the patched 6.0.8 build surfaced routing code that converts double colons (::) into forward slashes. That single conversion smuggles a traversal payload shaped like ..::..::..::<dir>::file.txt through a resource-serving route whose slash-stripping defenses never fire, because at the point of inspection there are no slashes to strip. Notably, Atlassian’s own stopgap WAF regex — which we quoted yesterday — already matched :: alongside slashes and backslashes, suggesting the vendor knew exactly which character sequence was load-bearing.

watchTowr demonstrated the read through a color-picker plugin route in Jira, extracting the normally protected WEB-INF/web.xml, and showed equivalent routes in Confluence and Bitbucket: effectively any file under the application server root, provided the attacker knows its exact path — the constraint Atlassian’s advisory states and this research treats as a speed bump rather than a barrier, since these products’ source trees are public.

The file that justifies the 9.3

A file read alone looked under-scored at Critical, so watchTowr followed the advisory’s hint about sensitive configurations and found the prize: Atlassian Crowd deployments store crowd.properties under WEB-INF/classes, containing the application name and password in plaintext. With those leaked credentials an attacker talks directly to Crowd — Atlassian’s identity and SSO hub — to list users, create new accounts and add them to groups like jira-administrators. That is the subsequent-system chain the CVSS vector’s SI:H/SA:H half gestures at without naming: unauthenticated read becomes identity-plane admin in Crowd-integrated deployments. Yesterday we wrote that defenders were left scoring their environments against a number whose reasoning was not shown. The reasoning is now shown, and it is worse than the number’s skeptics assumed — while confirming that non-Crowd deployments face the narrower read-only exposure.

Two restraint notes, both to watchTowr’s credit. The researchers created but did not publish a working exploit, releasing instead a script that checks whether a Jira, Confluence or Bitbucket instance is vulnerable — detection without weaponization. And their exposure estimate — just under 700,000 discoverable Confluence instances, putting the total affected population in the six-to-seven-figure range — is a search-engine census, not a vulnerable count; patched, internal and Cloud instances sit inside it. Treat it as the upper bound of the haystack, not the number of needles.

What to do — updated for day two

  • Re-read yesterday’s patch table before you touch anything: Crowd 7.1.7, Bamboo 10.2.24, from the advisory — not the CVE record’s 7.1.1 and 10.2.4. Scanner-fed tooling may still be ingesting the wrong values; verify what your scanner believes “fixed” means for this CVE.
  • Prioritize Crowd-integrated deployments for emergency patching. The demonstrated path from file read to jira-administrators makes these the highest-blast-radius targets, and the honeypot traffic shows attackers are already sweeping.
  • Run watchTowr’s vulnerability-check script across your estate, then search access logs with double URL-decoding for .. adjacent to /, \ or ::. Do it before upgrading where possible — log rotation is already shrinking the window, and Atlassian concedes it “cannot confirm if your instances have been affected.”
  • If you find hits against Crowd hosts, rotate the Crowd application credentials and audit Crowd for created accounts and group additions — not just the file-read indicators. A read of crowd.properties is a credential compromise of the identity plane, and the response has to match that scope.
  • Keep internet-facing instances off the internet until patched, login or no login. The flaw is pre-authentication, the technique is now public, and exploitation attempts began the same week as disclosure. Atlassian’s first instruction remains the only control that does not depend on a regex.

Verification note: the 6 October watchTowr publication date, the shared-JAR identification (6.0.7 vulnerable vs 6.0.8 patched), the double-colon-to-slash conversion, the traversal payload shape, the Jira color-picker route and WEB-INF/web.xml read, the Confluence/Bitbucket equivalents, the crowd.properties location and plaintext contents, the Crowd API path to administrator groups, the withheld exploit versus published check script, and the ~700,000-Confluence exposure census were read directly from watchTowr Labs’ writeup. The 7 October exploitation timing, the Previdian honeypot report and the shared attacker IPs are from Help Net Security’s 7 October report. The advisory facts (5 October date, eight products, fixed-version table, “cannot confirm” statement, log-search guidance) are from our 6 October briefing linked above, grounded in Atlassian’s advisory and the CVE record. We tested nothing, exploited nothing, and reproduced no payload.

Sources: