<?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>Tue, 29 Sep 2026 03:12:43 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-68158 — Authlib: 1-click Account Takeover</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-68158</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; authlib&lt;/p&gt;
&lt;p&gt;Authlib is a Python library which builds OAuth and OpenID Connect servers. In versions 1.0.0 through 1.6.5, cache-backed state/request-token storage is not tied to the initiating user session, so CSRF is possible for any attacker that has a valid state (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, FrameworkIntegration.set_state_data writes the entire state blob under _state_{app}_{state}, and get_state_data ignores the caller’s session altogether. This issue has been patched in version 1.6.6.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; authlib&lt;/p&gt;
&lt;p&gt;Authlib is a Python library which builds OAuth and OpenID Connect servers. In versions 1.0.0 through 1.6.5, cache-backed state/request-token storage is not tied to the initiating user session, so CSRF is possible for any attacker that has a valid state (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, FrameworkIntegration.set_state_data writes the entire state blob under _state_{app}_{state}, and get_state_data ignores the caller’s session altogether. This issue has been patched in version 1.6.6.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-68158</guid>
    </item>
    <item>
      <title>GHSA-fg6f-75jq-6523 — Authlib has 1-click Account Takeover vulnerability</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-fg6f-75jq-6523</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;# Security Advisory: Cache-Backed State Storage CSRF in Authlib&lt;/p&gt;
&lt;p&gt;The Security Labs team at Snyk has reported a security issue affecting Authlib, identified during a recent research project.&lt;/p&gt;
&lt;p&gt;The Snyk Security Labs team has identified a vulnerability that can result in a one-click account takeover in applications that utilize the Authlib library.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;Cache-backed state/request-token storage is not tied to the initiating user session, making CSRF possible for any attacker that possesses a valid state value (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, `FrameworkIntegration.set_state_data` writes the entire state blob under `_state_{app}_{state}`, and `get_state_data` disregards the caller&amp;#39;s session entirely. [1][2]&lt;/p&gt;
&lt;p&gt;```py
    def _get_cache_data(self, key):
        value = self.cache.get(key)
        if not value:
            return None
        try:
            return json.loads(value)
        except (TypeError, ValueError):
            return None
[snip]
    def get_state_data(self, session, state):
        key = f&amp;#34;_state_{self.name}_{state}&amp;#34;
        if self.cache:
            value = self._get_cache_data(key)
        else:
            value = session.get(key)
        if value:
            return value.get(&amp;#34;data&amp;#34;)
        return None
```&lt;/p&gt;
&lt;p&gt;*authlib/integrations/base_client/framework_integration.py:12-41*&lt;/p&gt;
&lt;p&gt;Retrieval in `authorize_access_token` therefore succeeds for whichever browser prese…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;# Security Advisory: Cache-Backed State Storage CSRF in Authlib&lt;/p&gt;
&lt;p&gt;The Security Labs team at Snyk has reported a security issue affecting Authlib, identified during a recent research project.&lt;/p&gt;
&lt;p&gt;The Snyk Security Labs team has identified a vulnerability that can result in a one-click account takeover in applications that utilize the Authlib library.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;Cache-backed state/request-token storage is not tied to the initiating user session, making CSRF possible for any attacker that possesses a valid state value (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, `FrameworkIntegration.set_state_data` writes the entire state blob under `_state_{app}_{state}`, and `get_state_data` disregards the caller&amp;#39;s session entirely. [1][2]&lt;/p&gt;
&lt;p&gt;```py
    def _get_cache_data(self, key):
        value = self.cache.get(key)
        if not value:
            return None
        try:
            return json.loads(value)
        except (TypeError, ValueError):
            return None
[snip]
    def get_state_data(self, session, state):
        key = f&amp;#34;_state_{self.name}_{state}&amp;#34;
        if self.cache:
            value = self._get_cache_data(key)
        else:
            value = session.get(key)
        if value:
            return value.get(&amp;#34;data&amp;#34;)
        return None
```&lt;/p&gt;
&lt;p&gt;*authlib/integrations/base_client/framework_integration.py:12-41*&lt;/p&gt;
&lt;p&gt;Retrieval in `authorize_access_token` therefore succeeds for whichever browser prese…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-fg6f-75jq-6523</guid>
    </item>
    <item>
      <title>PYSEC-2026-1201 — Authlib has 1-click Account Takeover vulnerability</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-1201</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;# Security Advisory: Cache-Backed State Storage CSRF in Authlib&lt;/p&gt;
&lt;p&gt;The Security Labs team at Snyk has reported a security issue affecting Authlib, identified during a recent research project.&lt;/p&gt;
&lt;p&gt;The Snyk Security Labs team has identified a vulnerability that can result in a one-click account takeover in applications that utilize the Authlib library.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;Cache-backed state/request-token storage is not tied to the initiating user session, making CSRF possible for any attacker that possesses a valid state value (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, `FrameworkIntegration.set_state_data` writes the entire state blob under `_state_{app}_{state}`, and `get_state_data` disregards the caller&amp;#39;s session entirely. [1][2]&lt;/p&gt;
&lt;p&gt;```py
    def _get_cache_data(self, key):
        value = self.cache.get(key)
        if not value:
            return None
        try:
            return json.loads(value)
        except (TypeError, ValueError):
            return None
[snip]
    def get_state_data(self, session, state):
        key = f&amp;#34;_state_{self.name}_{state}&amp;#34;
        if self.cache:
            value = self._get_cache_data(key)
        else:
            value = session.get(key)
        if value:
            return value.get(&amp;#34;data&amp;#34;)
        return None
```&lt;/p&gt;
&lt;p&gt;*authlib/integrations/base_client/framework_integration.py:12-41*&lt;/p&gt;
&lt;p&gt;Retrieval in `authorize_access_token` therefore succeeds for whichever browser prese…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;# Security Advisory: Cache-Backed State Storage CSRF in Authlib&lt;/p&gt;
&lt;p&gt;The Security Labs team at Snyk has reported a security issue affecting Authlib, identified during a recent research project.&lt;/p&gt;
&lt;p&gt;The Snyk Security Labs team has identified a vulnerability that can result in a one-click account takeover in applications that utilize the Authlib library.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;Cache-backed state/request-token storage is not tied to the initiating user session, making CSRF possible for any attacker that possesses a valid state value (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, `FrameworkIntegration.set_state_data` writes the entire state blob under `_state_{app}_{state}`, and `get_state_data` disregards the caller&amp;#39;s session entirely. [1][2]&lt;/p&gt;
&lt;p&gt;```py
    def _get_cache_data(self, key):
        value = self.cache.get(key)
        if not value:
            return None
        try:
            return json.loads(value)
        except (TypeError, ValueError):
            return None
[snip]
    def get_state_data(self, session, state):
        key = f&amp;#34;_state_{self.name}_{state}&amp;#34;
        if self.cache:
            value = self._get_cache_data(key)
        else:
            value = session.get(key)
        if value:
            return value.get(&amp;#34;data&amp;#34;)
        return None
```&lt;/p&gt;
&lt;p&gt;*authlib/integrations/base_client/framework_integration.py:12-41*&lt;/p&gt;
&lt;p&gt;Retrieval in `authorize_access_token` therefore succeeds for whichever browser prese…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-1201</guid>
    </item>
  </channel>
</rss>
