MCP Atlassian: Unauthenticated arbitrary local file read via upload_attachment file_path, chained with missing auth on streamable-http transport
Summary
In the documented multi-user HTTP deployment (--transport streamable-http with global operator Atlassian credentials), sooperset/mcp-atlassian exposes all tools to unauthenticated network clients, and the upload_attachment tool reads an attacker-supplied file_path with no path validation. Chained, an unauthenticated network attacker reads arbitrary files on the MCP server host (e.g. /proc/self/environ → the operator's Atlassian API token + .env secrets, ~/.ssh/id_rsa, /etc/passwd) by uploading them to an attacker-chosen page/issue and reading them back.
Details
Missing authentication (transport):
- streamable-http binds
0.0.0.0by default (src/mcp_atlassian/__init__.py:151). - The OAuth-proxy auth provider is opt-in (
ATLASSIAN_OAUTH_PROXY_ENABLE, default false), somain_mcpis built withauth=None(src/mcp_atlassian/servers/main.py:724-731, 813-817). UserTokenMiddleware._parse_auth_headersetsauth_validation_erroronly for a malformed Authorization header; a request with no Authorization header passes through (main.py:416-446, 582-595)._get_fetcherthen falls through to the global credential fallback using the operator's.envAtlassian token (src/mcp_atlassian/servers/dependencies.py:644-676).check_write_accessgates only on read-only mode, not auth → read and write tools reachable.
Arbitrary file read (sink):
upload_attachment'sfile_pathflows unsanitized intoopen(file_path, 'rb')— Confluencesrc/mcp_atlassian/confluence/attachments.py:477(fromservers/confluence.py:1294-1369); Jirasrc/mcp_atlassian/jira/attachments.py:386(fromservers/jira.py:1609-1673). Novalidate_safe_path/ allowlist (contrast the download flow, hardened after CVE-2026-27825).
Proof of Concept
# unauthenticated (no Authorization header) against a default streamable-http deployment:
tools/call upload_attachment { "file_path": "/proc/self/environ", "page_id": "<attacker-chosen>" }
# then read it back:
tools/call download_attachment { ... } # returns the bytes (base64) -> operator's ATLASSIAN token + .env secrets
Impact
Unauthenticated arbitrary local file read on the MCP server host — including the operator's Atlassian API token and .env secrets — a boundary the Atlassian-scoped tool must not cross, plus unauthenticated use of every read/write Atlassian tool as the operator's (often admin) principal. Distinct from GHSA-xjgw-4wvw-rgm4 (file write via download_path) and GHSA-7r34-79r5-rcc9 (URL-header SSRF).
Suggested fix
Require authentication on the streamable-http transport by default (do not fall back to operator global credentials for unauthenticated requests); apply validate_safe_path/allowlist to file_path in upload_attachment as the download flow already does.
Affected
mcp-atlassian <= 0.21.1.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | mcp-atlassian | < 0.22.0 | 0.22.0 |
References
- https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-cc5h-2pwp-pvcc
- https://github.com/sooperset/mcp-atlassian/pull/1448
- https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460
- https://github.com/sooperset/mcp-atlassian
- https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0
- https://pypi.org/project/mcp-atlassian
- https://github.com/advisories/GHSA-cc5h-2pwp-pvcc
- https://nvd.nist.gov/vuln/detail/CVE-2026-77248
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N- Weakness (CWE)
CWE-22- Platform
- Python (PyPI)
- Package
mcp-atlassian- Disclosed
- 22.09.2026
- Updated
- 11.10.2026 15:18
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2026-4089 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-cc5h-2pwp-pvcc - CC BY 4.0
Vulnerability history: mcp-atlassian
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 30
- First → latest
- 03.2026 09.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Critical 2
- High 19
- Medium 9
Disclosures per year
- 2026: 30
-
MCP Atlassian: Unauthenticated arbitrary local file read via upload_attachment file_path, chained with missing auth on streamable-http transport this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.