<?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 11:48:56 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-44681 — Authlib: Open Redirect in Authlib OIDC Implicit/Hybrid Authorization</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-44681</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. Prior to 1.6.12 and 1.7.1, an unauthenticated open redirect in Authlib&amp;#39;s OpenIDImplicitGrant and OpenIDHybridGrant authorization endpoint lets a remote attacker cause the authorization server to issue an HTTP 302 to an attacker-chosen URL by submitting an authorization request that omits the openid scope. This vulnerability is fixed in 1.6.12 and 1.7.1.&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. Prior to 1.6.12 and 1.7.1, an unauthenticated open redirect in Authlib&amp;#39;s OpenIDImplicitGrant and OpenIDHybridGrant authorization endpoint lets a remote attacker cause the authorization server to issue an HTTP 302 to an attacker-chosen URL by submitting an authorization request that omits the openid scope. This vulnerability is fixed in 1.6.12 and 1.7.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-44681</guid>
    </item>
    <item>
      <title>GHSA-r95x-qfjj-fjj2 — Authlib OIDC Implicit/Hybrid Authorization Vulnerable to Open Redirect</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-r95x-qfjj-fjj2</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;An unauthenticated open redirect in Authlib&amp;#39;s `OpenIDImplicitGrant` and `OpenIDHybridGrant` authorization endpoint lets a remote attacker cause the authorization server to issue an HTTP 302 to an attacker-chosen URL by submitting an authorization request that omits the `openid` scope.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;#### Vulnerable code&lt;/p&gt;
&lt;p&gt;`OpenIDImplicitGrant.validate_authorization_request` in `authlib/oidc/core/grants/implicit.py`:&lt;/p&gt;
&lt;p&gt;```python
def validate_authorization_request(self):
    if not is_openid_scope(self.request.payload.scope):
        raise InvalidScopeError(
            &amp;#34;Missing &amp;#39;openid&amp;#39; scope&amp;#34;,
            redirect_uri=self.request.payload.redirect_uri,  # ← raw, unvalidated
            redirect_fragment=True,
        )
    redirect_uri = super().validate_authorization_request()
    ...
```&lt;/p&gt;
&lt;p&gt;`OpenIDHybridGrant.validate_authorization_request` in `authlib/oidc/core/grants/hybrid.py` shares the same pattern.&lt;/p&gt;
&lt;p&gt;#### Root cause&lt;/p&gt;
&lt;p&gt;Both methods perform the `openid` scope presence check before delegating to `super().validate_authorization_request()`, which is where `AuthorizationEndpointMixin.validate_authorization_redirect_uri` validates the requested `redirect_uri` against the client&amp;#39;s `check_redirect_uri(...)`. The `InvalidScopeError` thrown by the scope check therefore carries attacker-controlled `self.request.payload.redirect_uri`.&lt;/p&gt;
&lt;p&gt;`OAuth2Error.__call__` in `authlib/oauth2/base.py` renders any error with a non-empty `redirect_uri` as an HTTP 302:&lt;/p&gt;
&lt;p&gt;```python
def __call__…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;An unauthenticated open redirect in Authlib&amp;#39;s `OpenIDImplicitGrant` and `OpenIDHybridGrant` authorization endpoint lets a remote attacker cause the authorization server to issue an HTTP 302 to an attacker-chosen URL by submitting an authorization request that omits the `openid` scope.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;#### Vulnerable code&lt;/p&gt;
&lt;p&gt;`OpenIDImplicitGrant.validate_authorization_request` in `authlib/oidc/core/grants/implicit.py`:&lt;/p&gt;
&lt;p&gt;```python
def validate_authorization_request(self):
    if not is_openid_scope(self.request.payload.scope):
        raise InvalidScopeError(
            &amp;#34;Missing &amp;#39;openid&amp;#39; scope&amp;#34;,
            redirect_uri=self.request.payload.redirect_uri,  # ← raw, unvalidated
            redirect_fragment=True,
        )
    redirect_uri = super().validate_authorization_request()
    ...
```&lt;/p&gt;
&lt;p&gt;`OpenIDHybridGrant.validate_authorization_request` in `authlib/oidc/core/grants/hybrid.py` shares the same pattern.&lt;/p&gt;
&lt;p&gt;#### Root cause&lt;/p&gt;
&lt;p&gt;Both methods perform the `openid` scope presence check before delegating to `super().validate_authorization_request()`, which is where `AuthorizationEndpointMixin.validate_authorization_redirect_uri` validates the requested `redirect_uri` against the client&amp;#39;s `check_redirect_uri(...)`. The `InvalidScopeError` thrown by the scope check therefore carries attacker-controlled `self.request.payload.redirect_uri`.&lt;/p&gt;
&lt;p&gt;`OAuth2Error.__call__` in `authlib/oauth2/base.py` renders any error with a non-empty `redirect_uri` as an HTTP 302:&lt;/p&gt;
&lt;p&gt;```python
def __call__…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-r95x-qfjj-fjj2</guid>
    </item>
  </channel>
</rss>
