<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 19:15:47 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-77268</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-77268</link>
      <description>&lt;p&gt;MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the OAuth fallback token directory and JSON file are created without explicit owner-only modes. Local users or processes with access through the resulting group or world permission bits can read access and refresh tokens and reuse the associated Atlassian session. The advisory traces the vulnerable input and processing flow through ~/.mcp-atlassian, oauth-&amp;lt;client_id&amp;gt;.json, access_token, and refresh_token, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the OAuth fallback token directory and JSON file are created without explicit owner-only modes. Local users or processes with access through the resulting group or world permission bits can read access and refresh tokens and reuse the associated Atlassian session. The advisory traces the vulnerable input and processing flow through ~/.mcp-atlassian, oauth-&amp;lt;client_id&amp;gt;.json, access_token, and refresh_token, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-77268</guid>
    </item>
    <item>
      <title>GHSA-4596-2p6p-28cv — MCP Atlassian: Insecure File Permissions on OAuth Token Storage</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-4596-2p6p-28cv</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mcp-atlassian&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The OAuth token fallback file storage in `OAuthConfig._save_tokens_to_file()` creates token files containing access tokens, refresh tokens, and cloud IDs with default filesystem permissions (typically `0644` on Linux, world-readable). Any local user on a shared system can read these files to obtain full Atlassian API credentials, enabling unauthorized access to the victim&amp;#39;s Jira and Confluence data.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in `src/mcp_atlassian/utils/oauth.py` in the `_save_tokens_to_file` method.&lt;/p&gt;
&lt;p&gt;**Step 1 -- Directory created without restrictive permissions:**&lt;/p&gt;
&lt;p&gt;At line 402-403, the token directory is created with `mkdir(exist_ok=True)` which uses the default umask (typically creating directories with mode `0755`):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:402-403
token_dir = Path.home() / &amp;#34;.mcp-atlassian&amp;#34;
token_dir.mkdir(exist_ok=True)
```&lt;/p&gt;
&lt;p&gt;**Step 2 -- Token file written with default permissions:**&lt;/p&gt;
&lt;p&gt;At line 417-418, the token file containing sensitive credentials is written using `open()` with no explicit mode, inheriting default umask permissions (typically `0644` on Linux):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:406-418
token_path = token_dir / f&amp;#34;oauth-{self.client_id}.json&amp;#34;&lt;/p&gt;
&lt;p&gt;if token_data is None:
    token_data = {
        &amp;#34;refresh_token&amp;#34;: self.refresh_token,
        &amp;#34;access_token&amp;#34;: self.access_token,
        &amp;#34;expires_at&amp;#34;: self.expires_at,
        &amp;#34;cloud_id&amp;#34;: self.cloud_id,
        &amp;#34;base_url&amp;#34;: self.base_url,
    }&lt;/p&gt;
&lt;p&gt;with open(token_p…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mcp-atlassian&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The OAuth token fallback file storage in `OAuthConfig._save_tokens_to_file()` creates token files containing access tokens, refresh tokens, and cloud IDs with default filesystem permissions (typically `0644` on Linux, world-readable). Any local user on a shared system can read these files to obtain full Atlassian API credentials, enabling unauthorized access to the victim&amp;#39;s Jira and Confluence data.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in `src/mcp_atlassian/utils/oauth.py` in the `_save_tokens_to_file` method.&lt;/p&gt;
&lt;p&gt;**Step 1 -- Directory created without restrictive permissions:**&lt;/p&gt;
&lt;p&gt;At line 402-403, the token directory is created with `mkdir(exist_ok=True)` which uses the default umask (typically creating directories with mode `0755`):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:402-403
token_dir = Path.home() / &amp;#34;.mcp-atlassian&amp;#34;
token_dir.mkdir(exist_ok=True)
```&lt;/p&gt;
&lt;p&gt;**Step 2 -- Token file written with default permissions:**&lt;/p&gt;
&lt;p&gt;At line 417-418, the token file containing sensitive credentials is written using `open()` with no explicit mode, inheriting default umask permissions (typically `0644` on Linux):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:406-418
token_path = token_dir / f&amp;#34;oauth-{self.client_id}.json&amp;#34;&lt;/p&gt;
&lt;p&gt;if token_data is None:
    token_data = {
        &amp;#34;refresh_token&amp;#34;: self.refresh_token,
        &amp;#34;access_token&amp;#34;: self.access_token,
        &amp;#34;expires_at&amp;#34;: self.expires_at,
        &amp;#34;cloud_id&amp;#34;: self.cloud_id,
        &amp;#34;base_url&amp;#34;: self.base_url,
    }&lt;/p&gt;
&lt;p&gt;with open(token_p…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-4596-2p6p-28cv</guid>
    </item>
    <item>
      <title>PYSEC-2026-4082 — MCP Atlassian: Insecure File Permissions on OAuth Token Storage</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-4082</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mcp-atlassian&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The OAuth token fallback file storage in `OAuthConfig._save_tokens_to_file()` creates token files containing access tokens, refresh tokens, and cloud IDs with default filesystem permissions (typically `0644` on Linux, world-readable). Any local user on a shared system can read these files to obtain full Atlassian API credentials, enabling unauthorized access to the victim&amp;#39;s Jira and Confluence data.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in `src/mcp_atlassian/utils/oauth.py` in the `_save_tokens_to_file` method.&lt;/p&gt;
&lt;p&gt;**Step 1 -- Directory created without restrictive permissions:**&lt;/p&gt;
&lt;p&gt;At line 402-403, the token directory is created with `mkdir(exist_ok=True)` which uses the default umask (typically creating directories with mode `0755`):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:402-403
token_dir = Path.home() / &amp;#34;.mcp-atlassian&amp;#34;
token_dir.mkdir(exist_ok=True)
```&lt;/p&gt;
&lt;p&gt;**Step 2 -- Token file written with default permissions:**&lt;/p&gt;
&lt;p&gt;At line 417-418, the token file containing sensitive credentials is written using `open()` with no explicit mode, inheriting default umask permissions (typically `0644` on Linux):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:406-418
token_path = token_dir / f&amp;#34;oauth-{self.client_id}.json&amp;#34;&lt;/p&gt;
&lt;p&gt;if token_data is None:
    token_data = {
        &amp;#34;refresh_token&amp;#34;: self.refresh_token,
        &amp;#34;access_token&amp;#34;: self.access_token,
        &amp;#34;expires_at&amp;#34;: self.expires_at,
        &amp;#34;cloud_id&amp;#34;: self.cloud_id,
        &amp;#34;base_url&amp;#34;: self.base_url,
    }&lt;/p&gt;
&lt;p&gt;with open(token_p…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mcp-atlassian&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The OAuth token fallback file storage in `OAuthConfig._save_tokens_to_file()` creates token files containing access tokens, refresh tokens, and cloud IDs with default filesystem permissions (typically `0644` on Linux, world-readable). Any local user on a shared system can read these files to obtain full Atlassian API credentials, enabling unauthorized access to the victim&amp;#39;s Jira and Confluence data.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in `src/mcp_atlassian/utils/oauth.py` in the `_save_tokens_to_file` method.&lt;/p&gt;
&lt;p&gt;**Step 1 -- Directory created without restrictive permissions:**&lt;/p&gt;
&lt;p&gt;At line 402-403, the token directory is created with `mkdir(exist_ok=True)` which uses the default umask (typically creating directories with mode `0755`):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:402-403
token_dir = Path.home() / &amp;#34;.mcp-atlassian&amp;#34;
token_dir.mkdir(exist_ok=True)
```&lt;/p&gt;
&lt;p&gt;**Step 2 -- Token file written with default permissions:**&lt;/p&gt;
&lt;p&gt;At line 417-418, the token file containing sensitive credentials is written using `open()` with no explicit mode, inheriting default umask permissions (typically `0644` on Linux):&lt;/p&gt;
&lt;p&gt;```python
# src/mcp_atlassian/utils/oauth.py:406-418
token_path = token_dir / f&amp;#34;oauth-{self.client_id}.json&amp;#34;&lt;/p&gt;
&lt;p&gt;if token_data is None:
    token_data = {
        &amp;#34;refresh_token&amp;#34;: self.refresh_token,
        &amp;#34;access_token&amp;#34;: self.access_token,
        &amp;#34;expires_at&amp;#34;: self.expires_at,
        &amp;#34;cloud_id&amp;#34;: self.cloud_id,
        &amp;#34;base_url&amp;#34;: self.base_url,
    }&lt;/p&gt;
&lt;p&gt;with open(token_p…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-4082</guid>
    </item>
  </channel>
</rss>
