CVE-2026-77243: MCP Atlassian: ENABLED_TOOLS / Toolset authorization bypass

Published Sep 22, 2026
·
Updated

Summary

ENABLEDTOOLS and TOOLSETS filters are enforced at tools/list time only. tools/call dispatches from the full unfiltered tool registry (73 tools). Any user with access to the server endpoint that knows a tool name can invoke it directly. Tool names are not secret since mcp-atlassian is open source. Any direct JSON-RPC call bypasses the restriction entirely.

READONLYMODE is not affected: it has dual enforcement at list time (listtoolsmcp) and call time @checkwriteaccess decorator. The developers applied the correct pattern to READONLYMODE but not to ENABLEDTOOLS or toolsets - confirming this is an implementation oversight.

Impact

Any user with access to the MCP server's HTTP endpoint can invoke any of the 73 registered tools regardless of ENABLEDTOOLS or TOOLSETS configuration - including write and delete operations on Jira issues, Confluence pages, etc. Operators deploying mcp-atlassian via Streamable HTTP rely on ENABLEDTOOLS to enforce least-privilege access; the bypass invalidates that model entirely.

The security impact concentrates in multi-user / HTTP-transport deployments, where the tool filter is a trust boundary between clients. In a single-user stdio deployment there is no second principal to defend against.

Details In src/mcpatlassian/servers/main.py, AtlassianMCP overrides listtoolsmcp and applies the TOOLSETS and ENABLEDTOOLS filters before returning the tool list to clients. The calltoolmcp handler is not overridden. FastMCP's default calltoolmcp resolves the tool from the local tool manager / mounted servers, the full unfiltered inventory, so the filters never apply at call time.

Proof of Concept

All calls are issued against the HTTP transport, with ENABLEDTOOLS=jirasearch configured - only jirasearch should be reachable.

Step 1 - negative control: tools/list correctly filters by ENABLEDTOOLS: req → tools/list ← { "tools": [ { "name": "jirasearch" } ] } # only 1 tool; jiragetissue / jiracreateissue absent

Step 2 - confidentiality bypass: tools/call dispatches jiragetissue despite its exclusion from the list: req → tools/call jiragetissue { "issuekey": "SEC-1" } ← { ... issue fields (summary, status, ...) ... } # executed; not blocked

Step 3 - integrity bypass: tools/call dispatches the write tool jiracreateissue: req → tools/call jiracreateissue { "projectkey": "SEC", "summary": "[PoC] ENABLEDTOOLS bypass", "issuetype": "Task" } ← { ... "key": "SEC-<n>" ... } # issue created despite ENABLEDTOOLS=jirasearch

Step 1 proves the filter exists and is enforced at list time, so Steps 2–3 are a genuine authorization bypass, not an open/unconfigured endpoint. The same result holds with TOOLSETS=jiraread configured: write tools are absent from tools/list yet execute via tools/call.

Local reproduction

Extract enabledtoolsbypasstoolauthorization.zip: Fill Atlassian credentials in docker-compose.yml (ENABLEDTOOLS=jirasearch is preset); ensure issue SEC-1 exists, or update the project/issue key in poc.sh docker compose up -d # mcp-atlassian, streamable-http, 0.0.0.0, ENABLEDTOOLS=jirasearch ./poc.sh # exits 0 on success docker compose down -v

Requires Docker, curl, jq, and an Atlassian Cloud site with a Jira project (free tier works). The script runs the three steps above: it confirms tools/list returns only jirasearch, then dispatches the excluded jiragetissue (read) and jiracreateissue (write) via tools/call. The test issue it creates is deleted automatically on exit.

Credit Discovered by Francisco Rosales of Manifold Security

Other sources

MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, ENABLEDTOOLS and TOOLSETS are applied when tools are listed but are not rechecked when a tools/call request is dispatched. A client that knows a hidden tool name can directly invoke excluded read, write, or delete tools despite the operator's configured least-privilege restrictions. The advisory traces the vulnerable input and processing flow through ENABLEDTOOLS, TOOLSETS, tools/list, tools/call, and calltoolmcp, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.

MITRE

Affected Software

2 affected componentsFixes available
MCP Atlassian MCP Atlassian<0.22.0
pip/mcp-atlassian<0.22.0
0.22.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade pip/mcp-atlassian to a version that resolves this vulnerability.

    Fixed in 0.22.0
  2. Upgrade

    Upgrade mcp-atlassian to a version that resolves this vulnerability.

    Fixed in 0.22.0

Event History

Sep 22, 2026
CVE Published
via MITRE·05:57 PM
Data Sourced
via MITRE·05:57 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·06:17 PM
DescriptionSeverityWeakness
Advisory Published
via GitHub·08:34 PM
Data Sourced
via GitHub·08:34 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are exposed to this bypass?

MCP Atlassian versions prior to 0.22.0 are affected. Deployments that use ENABLED_TOOLS or TOOLSETS to restrict available Confluence or Jira tools are exposed because those restrictions are not enforced during tool invocation.

2

What does an attacker need to exploit the issue?

An attacker needs client access sufficient to send a tools/call request and knowledge of the name of an excluded tool. No user interaction is required, and the hidden tool does not need to appear in the tools/list response.

3

What can an attacker do through the bypass?

A client can directly invoke excluded read, write, or delete tools. This can bypass the operator's configured least-privilege restrictions and affect confidentiality, integrity, and availability.

4

What should teams do if they use tool allowlists or toolsets?

Upgrade MCP Atlassian to version 0.22.0, which fixes the issue. Until then, do not rely on ENABLED_TOOLS or TOOLSETS as an enforcement boundary for preventing direct tool calls.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203