CVE-2026-21589 is an unauthenticated file read flaw in eight self-managed Atlassian products: Jira Software, Jira Service Management, Confluence, Bitbucket, Bamboo, Crowd, Crucible and Fisheye. Every Data Center version before Atlassian's fixed releases is affected. CISA added it to the Known Exploited Vulnerabilities catalog on 15 October. Upgrade now, and take exposed instances off the internet until you do.
Atlassian published the advisory on 5 October 2026. Ten days later CISA listed the bug as exploited and gave US federal agencies three days to act, with a forensic triage requirement attached. Atlassian Cloud was patched by Atlassian, and the company says it found no evidence of exploitation there. The risk sits with self-managed Data Center installs, and with older Server installs, for which Atlassian ships no fix.
Below: the official records, affected and fixed versions per product, how the bug works conceptually, how to find and check every instance you own, Atlassian's interim mitigations, and a forensic triage that fits CISA's requirement.
What happened
All times are UTC. Times to the minute come from the CVE.org record, the NVD record, the CISA KEV feed and the metadata of Atlassian's public Jira tickets. Dates without times come from Atlassian's advisory page.
| Date and time (2026) | Event | Source |
|---|---|---|
| 1 Jan, 00:00 | CVE-2026-21589 reserved by Atlassian as a CVE Numbering Authority. A reservation date says nothing about when the bug was found. | CVE.org, dateReserved |
| 2 Oct, 04:26 | CONFSERVER-104488 (Confluence) created | Atlassian Jira |
| 2 Oct, 08:24 to 08:51 | JRASERVER-79546 (Jira), BSERV-20604 (Bitbucket), CWD-6610 (Crowd) and JSDSERVER-16809 (Jira Service Management) created | Atlassian Jira |
| 3 Oct, 01:39 to 01:55 | FE-7583 (Fisheye), CRUC-8741 (Crucible) and BAM-26567 (Bamboo) created | Atlassian Jira |
| 5 Oct | Atlassian releases its advisory for CVE-2026-21589, an arbitrary file access flaw in multiple products | Atlassian advisory |
| 5 Oct, 21:04 | CONFSERVER-104488 marked resolved with fix versions 9.2.26 and 10.2.19 | Atlassian Jira |
| 5 Oct, 21:30 | CVE record published | CVE.org, datePublished |
| 5 Oct, 22:16 | NVD record published | NVD |
| 15 Oct | CISA adds CVE-2026-21589 to KEV; CISA's SSVC entry in the CVE record marks exploitation as "active" | CISA KEV feed; CVE.org ADP container |
| 18 Oct | KEV due date for federal civilian agencies | CISA KEV feed |
| 19 Oct, 18:26 | CVE.org record last updated | CVE.org, dateUpdated |
| 19 Oct, 20:31 | NVD completes analysis (status "Analyzed") with CPE ranges per product | NVD |
| 20 Oct, 17:01 | CONFSERVER-104488 last updated | Atlassian Jira |
| 21 Oct, 14:04 | KEV catalog version 2026.10.21 still lists the entry with the same dates | CISA KEV feed |
Advisory to KEV took ten days; KEV to the federal deadline, three. A change process that needs two weeks for a Jira upgrade was too slow for this one.
What the official records say
Atlassian's advisory
Atlassian's advisory names the products as Bitbucket Data Center, Confluence Data Center, Jira Service Management Data Center, Jira Software Data Center, Bamboo Data Center, Crowd Data Center, Crucible and Fisheye. It says all versions before the listed fix versions are affected, and that the bug lets an unauthenticated attacker access specific files within the web application root directory.
Two limits matter for triage: the attacker must know the exact name and path of the file, and the bug cannot list directory contents. Atlassian warns that some configurations hold sensitive files that raise the risk, without saying which.
Atlassian rates it Critical, 9.3 under CVSS 4.0. For Cloud, the advisory says affected products "have been patched" and that its investigation found no evidence of exploitation, so Cloud customers need do nothing.
If you cannot patch, Atlassian's first instruction is to remove the instance from the internet, including instances behind user authentication. Three mitigation options follow, covered under "Technical details".
The Jira tickets
Each product has a public ticket on jira.atlassian.com listing the same fix versions (see the table under "Technical details"). The Confluence ticket, labelled advisory-released, adds that end of life versions "may also be affected", so Atlassian recommends a fixed Long Term Support (LTS) version or later.
The CVE and NVD records
The CVE.org record, published by Atlassian as CNA, carries the same CVSS 4.0 score of 9.3 and lists each product as "All other versions" affected and each patch version "and later" unaffected. Its problem type reads "Path Traversal (Arbitrary Read/Write)". The advisory, the tickets and NVD all describe a read, not a write. We found nothing in any primary source that describes a write capability, so treat the problem type label as a classification string rather than a statement of impact, and watch for a correction.
NVD scored the issue itself at 7.5 High under CVSS 3.1 and lists CWE-552, "Files or Directories Accessible to External Parties". NVD's description also gives the version where each product first became vulnerable, which the advisory does not: Bitbucket from 4.6.0, Confluence from 5.10.0, Crowd from 2.11.0, Jira Software from 7.1.0, Jira Service Management from 3.1.0 and Bamboo from 7.0.1. For Crucible and Fisheye NVD gives only the fix version.
CISA's KEV entry
CISA added the entry on 15 October 2026 with a due date of 18 October, ransomware use "Unknown" and the forensic triage flag set to "Yes". It tells agencies to apply vendor mitigations under BOD 26-04 and CISA's forensic triage requirements, or stop using the product, and to evaluate each asset's internet exposure.
BOD 26-04, dated 10 June 2026, sets remediation timelines from four facts per asset: public exposure, KEV status, whether exploitation is automatable, and partial or total technical impact. A "& forensic triage" timeline means remediating or mitigating within three days, counted from the KEV addition, plus a forensic triage to assess compromise. Taking a system off the internet counts as a mitigation that moves the timeline.
One detail explains why a file read rates "total" impact. BOD 26-04 defines total control to include an exploit that "reliably reveals log-in credentials". If a readable file holds a password, a read flaw is a takeover flaw.
What is known about exploitation
- CISA lists CVE-2026-21589 in KEV, which CISA does only with evidence of active exploitation. CISA's SSVC decision in the CVE record, timestamped 15 October, says Exploitation "active", Automatable "no", Technical Impact "total".
- Atlassian's advisory, last modified on 5 October, does not report exploitation of Data Center customers. It says Atlassian cannot confirm whether your instance has been affected and asks you to check.
- For Atlassian Cloud, Atlassian says it found no evidence of exploitation.
- KEV lists ransomware use as "Unknown".
- None of the primary sources we read names victims, attackers, the number of affected organisations or the files targeted.
- The KEV entry's notes field links Atlassian's advisory, NVD and the BOD 26-04 documents. It does not add entry specific indicators. CISA's implementation guidance says it adds indicators or specific forensic guidance to the KEV entry whenever it has them.
A technical analysis by independent researchers is referenced from the NVD record and the KEV notes. We do not repeat its details. Treat any specific file or indicator you hear about as a lead, not a complete list.
Where sources differ
| Point | Atlassian | NVD | CISA | Note |
|---|---|---|---|---|
| Severity | Critical, CVSS 4.0 9.3 | High, CVSS 3.1 7.5 | Exploited (KEV) | Different CVSS versions and different scorers. The 4.0 vector rates subsequent system impact high; the 3.1 vector rates confidentiality only. |
| Weakness | Arbitrary file access | CWE-552 | CWE-552 | CVE.org problem type says "Path Traversal (Arbitrary Read/Write)". |
| Read or write | Read | Read | Read | Only the CNA problem type label mentions write. |
| First vulnerable version | "All versions" | Per product start versions | Not stated | Use NVD's ranges for scanners, Atlassian's fix list for patching. |
| Exploitation | Not reported for Data Center; none found for Cloud | Not stated | Active | KEV is the only primary source confirming exploitation. |
Technical details
Identifiers and scores
| Field | Value | Source |
|---|---|---|
| CVE | CVE-2026-21589 | CVE.org |
| CNA | Atlassian | CVE.org |
| CVSS 4.0 (CNA) | 9.3 Critical, CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H | Atlassian advisory, CVE.org |
| CVSS 3.1 (NVD) | 7.5 High, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N | NVD |
| CWE | CWE-552, Files or Directories Accessible to External Parties | NVD, CISA KEV |
| CNA problem type | Path Traversal (Arbitrary Read/Write) | CVE.org |
| KEV date added | 2026-10-15 | CISA KEV |
| KEV due date | 2026-10-18 | CISA KEV |
| KEV ransomware use | Unknown | CISA KEV |
| KEV forensic triage | Yes | CISA KEV |
| CISA SSVC | Exploitation active; Automatable no; Technical Impact total | CVE.org ADP (CISA Vulnrichment) |
| Atlassian tickets | BSERV-20604, CONFSERVER-104488, JSDSERVER-16809, JRASERVER-79546, BAM-26567, CWD-6610, CRUC-8741, FE-7583 | Atlassian advisory |
The CVSS 4.0 vector rates confidentiality high and integrity and availability none on the vulnerable system, then all three high on subsequent systems. The real damage is what a read file lets someone do next, such as reach a database with a credential found in it. The 3.1 vector cannot express that, which explains most of the gap between 9.3 and 7.5.
Affected and fixed versions
Fix versions are as Atlassian publishes them; the "introduced in" column and the ranges are from NVD.
| Product (Atlassian ticket) | Introduced in (NVD) | Fixed versions (Atlassian) | Vulnerable ranges (NVD CPE) |
|---|---|---|---|
| Jira Software Data Center (JRASERVER-79546) | 7.1.0 | 9.12.40, 10.3.26, 11.3.12 | 7.1.0 to before 9.12.40; 9.13.0 to before 10.3.26; 10.4.0 to before 11.3.12 |
| Jira Service Management Data Center (JSDSERVER-16809) | 3.1.0 | 5.12.40, 10.3.26, 11.3.12 | 4.14.0 to before 5.12.40; 5.13.0 to before 10.3.26; 10.4.0 to before 11.3.12; Jira Service Desk from 3.1.0 with no fixed version |
| Confluence Data Center (CONFSERVER-104488) | 5.10.0 | 9.2.26, 10.2.19 | 5.10.0 to before 9.2.26; 9.3.0 to before 10.2.19 |
| Bitbucket Data Center (BSERV-20604) | 4.6.0 | 9.4.26, 10.2.8, 10.5.1 | 7.17.0 to before 9.4.26; 9.5.0 to before 10.2.8; 10.3.0 to before 10.5.1; Bitbucket Server from 4.6.0 with no fixed version |
| Bamboo Data Center (BAM-26567) | 7.0.1 | 10.2.24, 12.1.12 | 7.0.1 to before 10.2.24; 11.0.0 to before 12.1.12 |
| Crowd Data Center (CWD-6610) | 2.11.0 | 6.3.7, 7.0.3, 7.1.7, 7.2.4 | 2.11.0 to before 6.3.7; each 7.0, 7.1 and 7.2 line before its fix |
| Crucible (CRUC-8741) | Not stated | 4.9.15 | Before 4.9.15 |
| Fisheye (FE-7583) | Not stated | 4.9.15 | Before 4.9.15 |
Three readings of that table:
- Feature releases fold into the next LTS fix. Confluence 9.5 or 10.0 falls in the range fixed by 10.2.19. Jira 10.5 moves to 11.3.12. Bamboo 11.x moves to 12.1.12.
- Jira Service Management numbering differs. Its oldest fixed line is 5.12.40, not 9.12.40. Scanner rules that copy the Jira Software number will be wrong.
- Server editions get no fix. NVD's CPE entries for Bitbucket Server and Jira Service Desk have no upper bound. Treat any Server install as vulnerable until replaced.
Atlassian's security bug fix policy, referenced in the advisory, says critical fixes are backported as new maintenance releases for versions covered by the policy, and that binary patches are no longer released. There is no hotfix jar to drop in. You upgrade. Atlassian's October 2026 security bulletin marks fixed versions such as Bamboo 12.1.12 and 10.2.24 as "Data Center Only", which matches the NVD picture: Server editions do not get these releases.
Support windows for the fixed lines
Atlassian's end of life policy page says it supports each feature or LTS release for two years from its first release. Several of the fixes land on LTS lines that reach end of support within weeks of this advisory, so the fix you apply now may need a second upgrade soon after.
| Product | Fixed LTS line | End of support date on Atlassian's policy page |
|---|---|---|
| Jira Software | 10.3 (10.3.26) | 5 December 2026 |
| Jira Software | 11.3 (11.3.12) | 3 December 2027 |
| Jira Service Management | 10.3 (10.3.26) | 5 December 2026 |
| Jira Service Management | 11.3 (11.3.12) | 3 December 2027 |
| Confluence | 9.2 (9.2.26) | 10 December 2026 |
| Confluence | 10.2 (10.2.19) | 2 December 2027 |
| Bitbucket | 9.4 (9.4.26) | 3 December 2026 |
| Bitbucket | 10.2 (10.2.8) | 3 March 2028 |
| Bamboo | 10.2 (10.2.24) | 20 December 2026 |
| Bamboo | 12.1 (12.1.12) | 17 December 2027 |
| Crowd | 7.2 (7.2.4) | 17 May 2028 |
Jira Software 9.12 and Jira Service Management 5.12 are older than the oldest lines the page lists (9.15 and 5.15), yet Atlassian shipped 9.12.40 and 5.12.40; Bitbucket 10.5 is newer than the latest Bitbucket line listed (10.4). If your fix lands on a line ending in December 2026, treat it as a bridge and plan the next LTS move now.
The same page sets out a shared responsibility model that lists private networks, prompt security fixes, and firewalls, VPNs, multi factor authentication and single sign on as customer duties.
The fixed releases also carry dependency fixes
Atlassian's monthly security bulletin for October, published on 20 October, says it covers 162 high severity and 14 critical severity third-party vulnerabilities fixed in releases from the past month. For Bamboo, for example, it lists 12.1.12 and 10.2.24, the same releases that fix CVE-2026-21589, as the fixed versions for dependency issues in open source libraries such as Bouncy Castle, Netty and nanoid. So the upgrade you make for this KEV entry also clears a backlog of open source dependency issues inside the product. That is a reason to take the latest maintenance release on your line, not the minimum fix.
The bug class, conceptually
The weakness is a classic one: a request path that should stay inside what the application serves can be made to point at other files under the web application root. Every Atlassian mitigation blocks URLs with two dots next to a forward slash, a backslash or a double colon, including URL encoded and double encoded forms. That tells defenders three things:
- the issue is about path normalisation, where different layers of the stack disagree on what a path means after decoding;
- encoded forms matter, so a filter that only looks at the raw URL, or only at the decoded one, can miss a request;
- the boundary that fails is the web application root, not the whole file system, so the files at risk are the ones that live inside that directory.
So exposure depends on what sits in that directory in your install: the application's own code and configuration, plus anything an administrator or automation added over the years. Needing the exact path limits blind guessing but not requests for well known default locations. We do not list file names; inventory your own web application directory.
Interim mitigations Atlassian publishes
All three options are in the advisory with the exact rule text. Copy the rule from the advisory, not from a blog or a forum, so you get the current version.
| Option | Applies to | What it does | Notes from the advisory |
|---|---|---|---|
| Take it offline | All products | Remove the instance from the internet until patched or mitigated | Includes instances behind user authentication |
| 1. WAF or proxy rule | All products | Blocks any URL matching Atlassian's regex | Test that it blocks the dot pair next to slash, backslash or double colon, plus encoded forms |
| 2. Tomcat RewriteValve | Confluence, Jira, Jira Service Management, Bamboo, Crowd | Adds the RewriteValve inside the application's Context element and a rewrite.config in the application's WEB-INF that returns 403 on matching paths | Back up first, apply node by node in a cluster, restart each node |
3. urlrewrite.xml rule | Bitbucket only | Adds a rule at the top of the file that returns 404 on matching paths | Apply to every cluster node, every mirror and every mirror farm node |
Crucible and Fisheye have only option 1 or going offline.
Indicators and detection
Atlassian publishes no hashes, IP addresses or user agents. Its detection guidance is a log check, which we turn into commands under "Forensic triage" below.
Who is affected
| You run | Affected? | What to do |
|---|---|---|
| Atlassian Cloud | No action needed according to Atlassian | Nothing for this CVE |
| Jira, Jira Service Management, Confluence, Bitbucket, Bamboo or Crowd Data Center below the fix for your line | Yes | Upgrade to the fixed release; mitigate or take offline until then |
| Crucible or Fisheye below 4.9.15 | Yes | Upgrade to 4.9.15; proxy rule or offline until then |
| Any Server edition | Yes, with no fix | Take offline or restrict hard, then migrate to Data Center or Cloud |
| Bitbucket mirrors or mirror farms | Yes | Upgrade and mitigate every mirror node, not only the primary |
| Atlassian containers on Kubernetes or Docker | Yes, if the image tag is below the fix | Pull the fixed image tag, redeploy, confirm the running version |
| Data Center behind VPN only | Yes, with lower exposure | Still upgrade; anyone on the network can send the request without a login |
Only US federal civilian agencies are bound by the KEV due date; everyone else should read the listing as proof the bug is in use.
Patch before it is exploited
Self-managed Atlassian products have a long record in KEV. In the catalog feed we pulled on 23 October (version 2026.10.21), Atlassian appears as the vendor on 14 entries, CVE-2026-21589 included. Some history worth knowing:
| CVE | Product as KEV names it | Added to KEV | Known ransomware use (KEV) |
|---|---|---|---|
| CVE-2019-11580 | Crowd and Crowd Data Center | 2021-11-03 | Known |
| CVE-2021-26084 | Confluence Server and Data Center | 2021-11-03 | Known |
| CVE-2022-26134 | Confluence Server/Data Center | 2022-06-02 | Known |
| CVE-2022-36804 | Bitbucket Server and Data Center | 2022-09-30 | Unknown |
| CVE-2023-22515 | Confluence Data Center and Server | 2023-10-05 | Known |
| CVE-2023-22518 | Confluence Data Center and Server | 2023-11-07 | Known |
| CVE-2023-22527 | Confluence Data Center and Server | 2024-01-24 | Known |
| CVE-2021-26086 | Jira Server and Data Center | 2024-11-12 | Unknown |
| CVE-2026-21589 | Multiple Products | 2026-10-15 | Unknown |
Two lessons sit in that table. First, Atlassian's self-managed products are a repeat target, and several earlier entries are marked as used in ransomware campaigns. Second, CVE-2021-26086, a Jira file read issue disclosed in 2021, was only added to KEV in November 2024. A file read bug on an old instance does not expire; it waits. For CVE-2026-21589 the cycle from advisory to KEV took ten days.
These tools hold source code, build secrets, runbooks, customer requests and, in Crowd, the identity directory the others trust. A file read on any of them is a supply chain concern, not just an IT ticket.
A patch plan that works for this class of software looks like this:
- Know the owner. Each instance needs a named technical owner who can approve a change the same day.
- Stay on an LTS line. Critical fixes are backported to LTS lines; on a feature release, your fix may be a bigger jump.
- Keep a tested upgrade path. A staging copy with production apps, upgraded monthly, turns an emergency upgrade into a task.
- Pre-approve emergency changes for KEV listed vendor bugs, so a three day deadline does not wait for a change board.
- Keep internet exposure intentional, behind a reverse proxy you control so a vendor rule goes in within an hour.
- Subscribe to vendor alerts. Atlassian's advisory explains how to subscribe to its alert emails. Route them to the owner and the security team.
What to do now
1. Find every instance you own
- Your CMDB, your Atlassian licence records in your Atlassian account, and your cloud asset inventory.
- DNS: search your zones for common names such as jira, confluence, wiki, git, bitbucket, bamboo, crowd, fisheye and crucible.
- Containers: list running Atlassian images on hosts and clusters you own.
# Docker hosts: list running Atlassian containers and their image tags
docker ps --format '{{.Names}}\t{{.Image}}' | grep -i atlassian
# Kubernetes: list every Atlassian image running in every namespace
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{" "}{end}{"\n"}{end}' | grep -i atlassian
# Helm releases installed from Atlassian's charts, with app version
helm list -A | grep -Ei 'jira|confluence|bitbucket|bamboo|crowd'
- Exposure from outside: from a host outside your network, check which of your hostnames answer on the internet. Only scan addresses you own or are authorised to test.
# For each hostname you own, does it answer from the internet?
while read host; do
code=$(curl -s -o /dev/null -m 10 -w '%{http_code}' "https://$host/")
echo "$host $code"
done < my-atlassian-hostnames.txt
2. Check the installed version
Each product reports its version in its administration pages. You can also ask the REST API from inside your network. Replace the host names with your own.
# Jira Software and Jira Service Management
curl -s https://jira.example.internal/rest/api/2/serverInfo | jq -r '.version'
# Confluence
curl -s https://confluence.example.internal/rest/applinks/1.0/manifest | grep -o '<version>[^<]*</version>'
# Bitbucket
curl -s https://bitbucket.example.internal/rest/api/1.0/application-properties | jq -r '.version'
# Bamboo
curl -s -H 'Accept: application/json' https://bamboo.example.internal/rest/api/latest/info | jq -r '.version'
# Crowd
curl -s https://crowd.example.internal/crowd/rest/applinks/1.0/manifest | grep -o '<version>[^<]*</version>'
# Fisheye and Crucible
curl -s -H 'Accept: application/json' https://fecru.example.internal/rest-service-fecru/server-v1 | jq -r '.version.releaseNumber'
Some endpoints need a login on hardened installs; fall back to the administration pages. For Jira Service Management, check the Service Management app version, not only Jira core.
Compare each result against the table in "Technical details". A short script helps when you have many instances:
# check_fixed.py: compare a product version to Atlassian's fixed lines for CVE-2026-21589
import sys
FIXED = {
"jira": ["9.12.40", "10.3.26", "11.3.12"],
"jsm": ["5.12.40", "10.3.26", "11.3.12"],
"confluence": ["9.2.26", "10.2.19"],
"bitbucket": ["9.4.26", "10.2.8", "10.5.1"],
"bamboo": ["10.2.24", "12.1.12"],
"crowd": ["6.3.7", "7.0.3", "7.1.7", "7.2.4"],
"fisheye": ["4.9.15"],
"crucible": ["4.9.15"],
}
import re
def v(s): return tuple(int(x) for x in re.findall(r"\d+", s)[:3])
product, version = sys.argv[1], sys.argv[2]
cur = v(version)
lines = sorted(v(f) for f in FIXED[product])
# fixed if at or above the fix on the same major.minor line, or above the highest fix
same_line = [f for f in lines if f[:2] == cur[:2]]
if same_line:
ok = cur >= same_line[0]
else:
ok = cur > lines[-1]
print(f"{product} {version}: {'fixed' if ok else 'VULNERABLE, upgrade'}")
python3 check_fixed.py confluence 9.2.25
python3 check_fixed.py jsm 5.12.39
The script is a helper, not an authority. A version on a feature line between LTS fixes, or above the highest listed fix, needs a manual check against the NVD ranges and the product's release notes.
3. Patch, or contain while you prepare the patch
- If the instance is reachable from the internet and you cannot upgrade today, restrict it now: firewall rule, security group change, or move it behind your VPN or identity aware proxy.
- Back up the database and home directory, and snapshot the host or volume. You will want the pre-patch state for forensics.
- Upgrade to the fixed release for your line. For clusters, follow the product's rolling or full upgrade guide. For containers, change the image tag to the fixed version and redeploy.
- For Bitbucket, upgrade every mirror and mirror farm node too.
- Remove any interim rule only after you confirm the fixed version is running on every node.
# After a container redeploy, confirm the image tag actually running
kubectl get pods -n atlassian -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}'
# Then confirm the application reports the fixed version
curl -s https://jira.example.internal/rest/api/2/serverInfo | jq -r '.version'
4. Test any interim rule, then triage
If you used an interim rule, test it against your own instance only, with a harmless request to a path that does not exist, in plain and URL encoded forms, as Atlassian advises.
5. Forensic triage that matches CISA's requirement
CISA set the forensic triage flag on this entry. For agencies under BOD 26-04 that means patching alone is not enough: they must also assess whether each asset was compromised, following CISA's forensic triage guidance. Everyone else should do the same, because a read flaw leaves nothing on disk. The only evidence is in logs, and what was read may be used weeks later.
CISA's implementation guidance lays out six steps with target times counted from the KEV addition. It says the timings are recommended practice and that the requirement is an adequate triage. Here is how each step maps to an Atlassian instance.
| CISA step | Target time from KEV addition | What it means for this CVE |
|---|---|---|
| 1. Scoping | First 2 hours | List every in-scope instance, node and mirror; open an out of band channel |
| 2. Preserve and collect evidence | 2 to 24 hours | Copy logs and snapshot hosts before you patch |
| 3. Critical patching and stabilization | 2 to 24 hours | Upgrade to the fixed release once evidence is safe |
| 4. Contain and control | 6 to 24 hours | Restrict or isolate exposed instances without tipping off an intruder |
| 5. Triage analysis | 24 to 48 hours | Hunt the logs, work out what could have been read, look for follow on use |
| 6. Escalation decision | 48 to 72 hours | Write the triage report and decide: no evidence, suspected or confirmed |
Note the order. CISA puts evidence collection before patching because patching "may jeopardize the availability of artifacts". For a file read bug, the artifacts are logs, and an upgrade or a container redeploy is exactly the moment logs get rotated or thrown away with the old pod.
Step 1: Scope. Use the inventory from section 1, including mirrors, cluster nodes and test copies. Agree an out of band channel, since Confluence and Jira may be both the affected systems and your usual coordination tools.
Step 2: Preserve. Copy the application access logs, the Tomcat logs, the reverse proxy and load balancer logs, and WAF logs for the whole period each instance was reachable. Snapshot the host or persistent volume. Keep an evidence log: what you collected, from which system, when, and by whom, as CISA's guidance asks.
# Archive and hash logs before triage; set ACCESS_LOG_DIR to your product's log directory
tar czf atlassian-logs-$(hostname)-$(date +%Y%m%d).tgz "$ACCESS_LOG_DIR"
shasum -a 256 atlassian-logs-*.tgz | tee -a evidence-log.txt
echo "$(date -u +%FT%TZ) collected by $USER from $(hostname)" >> evidence-log.txt
# Kubernetes: save logs from the running pod before it is replaced
kubectl logs -n atlassian <pod-name> --all-containers --timestamps > <pod-name>-$(date +%Y%m%d).log
Step 3: Patch. Upgrade to the fixed release for your line, as in section 3.
Step 4: Contain. If the instance faced the internet, restrict it to your network or VPN after evidence is safe. CISA warns that premature containment can destroy evidence and that containment should not alert an intruder.
Step 5: Analyse. Search the logs the way Atlassian describes: decode each request line up to two times, then look for two dots next to a forward slash, a backslash or a double colon.
# hunt.py: Atlassian's detection logic for CVE-2026-21589, applied to access logs
import re, sys
from urllib.parse import unquote
PAT = re.compile(r'(?:/|\\|::)\.\.|\.\.(?:/|\\|::)')
for path in sys.argv[1:]:
with open(path, errors="replace") as fh:
for n, line in enumerate(fh, 1):
once = unquote(line)
twice = unquote(once)
if PAT.search(line) or PAT.search(once) or PAT.search(twice):
print(f"{path}:{n}: {line.rstrip()}")
python3 hunt.py /path/to/access_logs/* /path/to/proxy_logs/* > hits.txt
wc -l hits.txt
# Summarise hits by source address and status code (common log format: field 1 and field 9)
sed -E 's/^[^:]+:[0-9]+: //' hits.txt | awk '{print $1, $9}' | sort | uniq -c | sort -rn | head -50
Then work through these questions, which follow CISA's list for triage analysis:
- Was anything served? Record time, source, status and response size per hit. A 200 with a real body matters most; a 400, 403 or 404 is an attempt for the timeline.
- What could have been read? Compare each web application directory against a clean copy of the same version from Atlassian's download centre. Anything not in the stock install is a candidate.
- Was a credential exposed? If any hit succeeded, or logs are missing, rotate every credential that could have been in a readable file: database, application link and OAuth, directory bind, mail and external service tokens, plus Bitbucket deployment keys and Bamboo build secrets.
- Was there unauthorised access or lateral movement? Check audit logs for new administrators, application links, tokens and apps; database and directory servers for unusual logins after the earliest hit; Bitbucket for unexpected pushes and Bamboo for unexpected plans or agents.
- Is there persistence or data staging? Look for new scheduled jobs, unexpected apps and large exports in the period after the first hit.
- Do the indicators appear elsewhere? Search every other instance's logs for the source addresses you found.
Step 6: Decide and document. Write a short triage report: incident timeline, the actions you took and when, findings in "who, what, where, when" form, containment to date, and the recommendation. CISA's guidance gives three outcomes. No evidence of compromise means completing remediation and adding heightened monitoring. Suspected compromise means continuing triage and planning an escalation path. Confirmed compromise means moving to full incident response; federal agencies report to CISA through its incident reporting system. Others follow their own incident plan.
What would have helped
Practices any team can use
- An inventory of self-managed vendor software with owners and versions. Every Jira, Confluence and Bitbucket node, mirror and test copy. That list is the first hour of this incident.
- LTS discipline. Teams on an LTS line got a maintenance release. Teams on feature releases had to jump lines under pressure.
- Nothing extra in the web application directory. Keep backups, exports, scripts and copied configs out of the install directory. This is a habit worth adopting for every Java web application, since web root file read bugs are a recurring class.
- Secrets out of files where possible. Use the product's supported options for encrypting database and integration credentials.
- Logs that survive. Keep access logs for at least 90 days in a central store. Forensic triage for a read bug is only as good as the logs you kept.
- Default deny on internet exposure. Put developer and collaboration tools behind a VPN or identity aware proxy unless there is a specific reason not to.
- Retire Server editions. Atlassian's fixed releases are Data Center only, and NVD lists no fixed version for the Server entries. Every Server install is an unfixable instance of this CVE.
Where Safeguard fits
Safeguard does not patch Atlassian products. These are commercial, closed source applications, and the fix must come from Atlassian.
Where it does help is around the products:
- Container images.
safeguard scan --image <name>produces an SBOM of an Atlassian image you run and matches its components against vulnerability databases, with JSON results under./output. That covers the open source components inside, like the dependency fixes in Atlassian's October bulletin. We have not confirmed that the matching flags CVE-2026-21589 for the Atlassian application itself, so the version checks above remain the authority. - Your own code around them.
safeguard scan --dir .scans the plugins, scripts and integrations you build around Jira and Confluence, and the platform shows which projects contain a given component and version. - Policies and gates. Policies and gates evaluated in the platform can stop your own builds from shipping components you have decided to block, so your tooling does not add exposure while you deal with the vendor's.
- The assistant for the grind work. The Safeguard CLI's assistant can run the inventory, version and log hunt commands from this post across your hosts, asking before each command in its default permission mode, and summarise the results. Desktop and phone apps can send that work to a computer running the CLI and approve each step.
Safeguard does not help with the Atlassian upgrade itself, the vendor's release timing, Atlassian Cloud, or network exposure decisions. Those stay with you and Atlassian.
Zero-Day Discovery and Gold
Safeguard's Zero-Day Discovery looks for previously unknown flaws before a CVE exists, in an agentic mode and a deterministic scanner mode, and issues findings as SGZ advisories before they reach public CVE databases. It covers seven open source package ecosystems; Atlassian's commercial products are outside that scope.
Gold Open Source at gold.safeguard.sh is free and needs no login; it shows CVSS, EPSS, KEV status, affected and fixed versions and a recommended safe version for a CVE, through the site, a free read API and a CI gate GitHub Action. We have not confirmed that it holds a record for CVE-2026-21589, so check the site rather than relying on this post. Gold Registry at registry.safeguard.sh provides hardened, signed open source components and container images held to zero exploitable critical or high CVEs; it does not distribute Atlassian products and we make no claim about it here. The habit both are built for applies to everything you build and run around these tools: pull patched, signed components from a curated source and rebuild fast.
Common mistakes
- Copying the Jira Software fix number onto Jira Service Management. The oldest fixed Jira Service Management line is 5.12.40.
- Patching the primary Bitbucket node and forgetting mirrors. Atlassian's mitigation explicitly covers every mirror and mirror farm node; the upgrade must too.
- Treating a login page as protection. The bug needs no authentication. Atlassian's advice to take instances offline includes instances that require a login.
- Testing the proxy rule only with plain dots. Atlassian's rule covers URL encoded and double encoded forms. Test both, against your own instance.
- Patching without hunting. A read leaves no trace on disk. Without a log hunt and a credential rotation decision, you do not know whether anything left.
- Ignoring Server editions because they are "legacy". They are the most exposed instances, not the least.
- Reading CVSS 7.5 as "not urgent". KEV status outranks either score.
Open questions
- Which files were targeted in the exploitation that led to the KEV listing. No primary source we read says.
- Whether Atlassian will update its advisory, still dated 5 October, to reflect exploitation.
- Whether the CVE.org problem type, which mentions write, will be corrected to match the advisory's read only description.
- Whether ransomware operators are using it. KEV says "Unknown".
FAQ
Is CVE-2026-21589 being exploited?
Yes, according to CISA, which added it to KEV on 15 October 2026. Atlassian's advisory does not report Data Center exploitation and found none in Cloud. No primary source names victims or counts.
Which products and versions are affected?
All Data Center versions of Jira Software, Jira Service Management, Confluence, Bitbucket, Bamboo and Crowd before Atlassian's fix versions, plus Crucible and Fisheye before 4.9.15. Server editions are affected and get no fix.
Does an attacker need a login?
No. Atlassian describes the attacker as unauthenticated. They do need to know the exact path of the file they want, and they cannot list directories.
Is it 9.3 or 7.5?
Both. Atlassian's 9.3 (CVSS 4.0) counts impact on systems reachable with what is read; NVD's 7.5 (CVSS 3.1) counts only confidentiality of the vulnerable system.
We use Atlassian Cloud. Do we need to do anything?
Not for this CVE. Atlassian says affected Cloud products have been patched and no Cloud customer action is required.
Can we rely on the WAF rule instead of upgrading?
Only briefly. It is an interim measure and depends on every request passing through the rule. Upgrade, then keep the rule as defence in depth if you like.
Is our internal only Jira safe?
Safer, not safe. Anyone on your network can send the request without a login. Upgrade it right after internet facing instances.
We patched. Do we still need to hunt?
Yes. The upgrade closes the hole but tells you nothing about what was read before. CISA's forensic triage flag on this entry exists for exactly that reason.
Did Safeguard find this vulnerability?
No. Atlassian disclosed it, and independent researchers published a technical analysis. Safeguard's Zero-Day Discovery covers open source package ecosystems, and these are commercial products.
Fix it without waiting for upstream
This incident is the honest limit case for this section. Atlassian's Data Center products are vendor commercial software, so only Atlassian can ship the fix, and upgrading to its fixed release is the remediation; what follows applies to the open source components, plugins, integrations and container images you build and run around those products.
Whatever the vulnerability, most of the risk sits in two gaps. The first is the time between a fix being published and that fix actually running in your production builds. The second, and worse, is the time before any fix exists at all, while a maintainer works out a patch and a release schedule. Waiting through both gaps is a habit, not a requirement. Safeguard gives teams three ways to close them.
1. Autonomous remediation: pull requests, not tickets
When a fixed version exists, Safeguard's Griffin models open a tested, policy gated pull request that moves the affected dependency to the safe version. You can run it on one repository or in bulk across every project that carries the vulnerable version. Remediation covers eight categories, including dependencies, licenses, security posture and findings. Reachability analysis ranks the vulnerable code paths your application actually calls first, so the first pull requests you merge are the ones that matter most. Autonomous remediation ships switched off, with every category set to Manual, so your team decides how much runs on its own and what still needs a human approval.
2. Gold Open Source: the safe version in seconds, free
gold.safeguard.sh is free and needs no login. Search any CVE or package to see affected and fixed versions, CVSS, EPSS, CISA KEV status and a recommended safe version, or use the "Am I affected?" checker. The same data is available through a free read API, README status badges and RSS threat feeds. The safeguard-sh/gold-scan-action GitHub Action can fail a build on a known exploited vulnerability, on any known vulnerability, or never, so a version you have just removed cannot quietly come back in next week's merge.
3. Gold Registry: start from components that are already fixed
registry.safeguard.sh provides hardened, drop in replacements for upstream packages and container images. Every Gold artifact is held continuously to zero exploitable critical or high CVEs, zero malware and a completed license check, with SLSA L3 or higher provenance, a Sigstore signature and a public evidence page you can hand to an auditor. An artifact loses its Gold badge if it regresses. Teams can point their own package directory at the registry so hardened equivalents resolve without changing how developers install anything.
When upstream has no fix yet, or will not ship one, Safeguard first works to get the fix accepted upstream. If the issue is severe or upstream will not move, Safeguard builds a fork, fixes the vulnerability there and publishes a hardened Gold build, so you are not stuck on a maintainer's release schedule. You can also request a hardened, compatibility tested build of a specific package. This fork and patch flow is in early access today, so ask which packages it covers before you plan around it.
| Your situation | What to use |
|---|---|
| A fixed version exists | Autonomous remediation opens the upgrade pull request; Gold Open Source confirms the safe version |
| You need to know today whether you are affected | Gold Open Source lookup and "Am I affected?" checker, free and without login |
| You want vulnerable versions to stop shipping | The Gold scan GitHub Action in CI, plus Safeguard policies and gates |
| Upstream has no fix yet, or will not ship one | A custom Gold request; fork and patch (early access) |
| You want to start clean on new projects | Pull hardened components and images from Gold Registry |
One honest limit: when the vulnerable code lives in a vendor appliance, a hosted service or an operating system runtime you do not build yourself, the fix still has to come from that vendor or distribution. The steps above apply to the open source dependencies and container images you build and ship, which is where most teams carry the largest and least tracked share of their exposure.
See how Safeguard would have helped
These are real product sessions on other examples; none shows this incident or upgrades an Atlassian product. They show the approval based workflow you would use for the inventory, hunting and verification around it.
The CLI demo shows the assistant fixing a lodash CVE: it reads the finding and advisory, asks before each command, edits package.json to lodash 4.17.21, runs npm install and npm test with approval, and pushes nothing. For this incident, you would open the CLI on an administration host and ask it to run the version checks and the log hunt from this post across your Jira, Confluence and Bitbucket nodes, approving each command and getting a table of versions and hits at the end.
Click through it at your own pace, or open it full screen.
The desktop app demo shows a CLI session in the conversation list, a folder choice, and Approve or Deny on each command and file edit, ending with an upgrade done and tests passing. Here you would pick the folder that holds your Kubernetes manifests or Helm values for Atlassian, ask for the image tags to move to the fixed versions, and approve each file edit and dry run before anything is applied.
Click through it at your own pace, or open it full screen.
The mobile app demo shows a real Android session sending work to a computer running the CLI and approving a command on the phone with Allow once, Allow for turn or Deny. A three day KEV deadline lands on evenings and weekends; this is how the on-call engineer approves the log archive, the hunt and the post upgrade version check from a phone.
Click through it at your own pace, or open it full screen.
To try it on your own projects, download Safeguard and read the CLI documentation. For finding affected systems quickly, see using SBOMs to find affected products fast; for other enterprise and edge flaws this month, see edge device zero-days in October 2026, Eptura Archibus CVE-2026-107186 and our October 2026 roundup.
Quick check
Your Jira Service Management reports 5.12.40. Your scanner says the fix is 9.12.40. Are you vulnerable?
No. Atlassian lists 5.12.40 as a fixed Jira Service Management version. The 9.12.40 number belongs to Jira Software. Fix the scanner rule and record the evidence.
You upgraded Confluence to 10.2.19 last night. Are you done?
Not yet. The upgrade closes the hole, but CISA flags this entry for forensic triage. Preserve and search the access logs for the exposure window, decide on credential rotation, and document the result.
Sources
- Atlassian: CVE-2026-21589 Arbitrary File Access Vulnerability impacts Multiple Products
- Atlassian Jira: CONFSERVER-104488
- Atlassian Jira: JRASERVER-79546
- Atlassian Jira: JSDSERVER-16809
- Atlassian Jira: BSERV-20604
- Atlassian Jira: BAM-26567
- Atlassian Jira: CWD-6610
- Atlassian Jira: CRUC-8741
- Atlassian Jira: FE-7583
- NVD: CVE-2026-21589
- CVE.org: CVE-2026-21589
- CISA Known Exploited Vulnerabilities catalog: CVE-2026-21589
- CISA KEV catalog JSON feed
- CISA: BOD 26-04 Prioritizing Security Updates Based on Risk
- CISA: BOD 26-04 Implementation Guidance
- Atlassian: End of life policy
- Atlassian: Security Bulletin, October 20 2026
Last reviewed: 23 October 2026. This is a developing story; check the linked advisories for the latest status.