mediumCVSS 6.1Vulnerability

CVE-2026-77250

### Summary When OAuth tokens are saved, MCP Atlassian always writes a plaintext fallback copy under `~/.mcp-atlassian/oauth-<client_id>.json`. The fallback file is created with the process default umask rather than restrictive permissions. In this environment the file was created as mode `0664`, exposing access and refresh tokens to same-group local users and any process that can read the home directory. ### Details `OAuthConfig._save_tokens()` stores OAuth token data in keyring, but it also unconditionally maintains a plaintext file fallback for backwards compatibility in `src/mcp_atlassian/utils/oauth.py:350-386`. If keyring saving fails it also falls back to the same file path in `src/mcp_atlassian/utils/oauth.py:387-391`. The fallback writer creates `~/.mcp-atlassian` and then writes `oauth-<client_id>.json` with a normal `open(token_path, "w")` call in `src/mcp_atlassian/utils/oauth.py:392-420`. No `mode=0o600`, `os.open(..., 0o600)`, `chmod`, or owner-only directory permission is applied. The file contains both `access_token` and `refresh_token` (`src/mcp_atlassian/utils/oauth.py:360-367`) and is later loaded from the same plaintext path in `src/mcp_atlassian/utils/oauth.py:450-470`. The security policy warns that OAuth client credentials and secrets should not be exposed (`SECURITY.md:39-44`), but the current implementation creates a persistent plaintext token copy even when keyring succeeds. ### PoC The following safe local proof uses a temporary `HOME` and mocked keyring writes. It creates and deletes only temporary files. ```bash uv run python - <<'PY' import json, os, shutil, stat, tempfile from pathlib import Path from unittest.mock import patch from mcp_atlassian.utils.oauth import OAuthConfig home = tempfile.mkdtemp(prefix='mcp-atlassian-oauth-poc-') old_home = os.environ.get('HOME') os.environ['HOME'] = home try: cfg = OAuthConfig(client_id='poc-client', client_secret='client-secret', redirect_uri='http://localhost/callback', scope='offl

Properties

ghsa_id
GHSA-g5xv-mhgm-v5f6
severity
medium
summary
MCP Atlassian: OAuth fallback token storage writes plaintext access and refresh tokens with group-readable permissions
cvss_score
6.1
cve_id
CVE-2026-77250
cvss_vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
signal_observed_at
2026-09-23T04:35:57+00:00
is_ghsa_only
false
ghsa_published
2026-09-22T20:36:34Z
source_url
https://github.com/advisories/GHSA-g5xv-mhgm-v5f6
ghsa_updated
2026-09-22T20:36:36Z

Related Entities (4)

VULNERABLE_TO (1)

[Software]pip/mcp-atlassian

AFFECTS (1)

[Software]pip/mcp-atlassian

HAS_WEAKNESS (1)

[Weakness]Cleartext Storage of Sensitive Information

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-77250 (CVSS 6.1) — Ninja Signal Threat Intelligence | Ninja Signal