CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-32245

CVE-2026-32245: OIDC Authorization Code Grant Client Impersonation in Tinyauth

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 13, 2026·6 min read·29 visits

Executive Summary (TL;DR)

An authentication flaw in Tinyauth (< 5.0.3) allows a malicious OIDC client to exchange a stolen authorization code intended for another client, leading to unauthorized token generation and user impersonation.

Tinyauth versions prior to 5.0.3 contain an incorrect authorization vulnerability in the OpenID Connect (OIDC) token endpoint. The server fails to verify that the client attempting to exchange an authorization code matches the client to which the code was originally issued, violating RFC 6749 Section 4.1.3.

Vulnerability Overview

Tinyauth serves as an authentication and authorization server, implementing the OpenID Connect (OIDC) protocol over OAuth 2.0. The software processes user authentication and issues authorization codes, which downstream applications exchange for access, identity, and refresh tokens. This component acts as the central identity provider for relying parties within its deployment environment.

The vulnerability, tracked as CVE-2026-32245, exists within the /api/oidc/token endpoint. This endpoint processes requests using the authorization_code grant type. The core issue is classified as CWE-863 (Incorrect Authorization), specifically manifesting as an OIDC Authorization Code Grant Client Impersonation flaw.

When a relying party attempts to exchange an authorization code for tokens, the server fails to validate the binding between the submitted code and the authenticated client. This violates the security requirements defined in RFC 6749 Section 4.1.3. Consequently, an attacker possessing a valid client account can misuse an authorization code issued to a different client, bypassing the intended authorization boundaries.

Root Cause Analysis

The OAuth 2.0 Authorization Code grant mandates a tight cryptographic and logical binding between the client requesting the authorization code and the client subsequently exchanging it. When the authorization server issues a code, it must record the client identifier associated with the initial authorization request. During the token exchange phase, the server must verify that the client authenticating to the token endpoint matches this recorded identifier.

In vulnerable versions of Tinyauth, the implementation successfully stores the ClientID alongside the authorization code in the backend database. The StoreCode function correctly captures this metadata during the user consent phase. However, the logical flaw occurs during the retrieval and validation phase within the token exchange handler.

The internal/controller/oidc_controller.go application logic processes the token exchange request by verifying the client credentials and fetching the code entry from the database using a cryptographic hash of the provided code. The controller fails to cross-reference the ClientID of the authenticated client with the ClientID stored in the database record. If the code hash is valid and has not expired, the system proceeds to generate and issue tokens, regardless of whether the requesting client is the rightful owner of the authorization code.

Code Analysis

The vulnerability stems from an omission in the service layer where the authorization code is fetched and validated. Prior to version 5.0.3, the GetCodeEntry function retrieved the database record but returned it to the caller without enforcing client binding. The controller then consumed this record to issue tokens without performing the necessary ownership check.

The patch introduced in commit b2a1bfb1f532e87f205fa3afa3fc9f148c53ab89 resolves this by modifying both the service and controller layers. The GetCodeEntry function signature in internal/service/oidc_service.go was updated to require the clientId as a parameter. This ensures the service layer has the context needed to perform the validation.

// Patched implementation in internal/service/oidc_service.go
func (service *OIDCService) GetCodeEntry(c *gin.Context, codeHash string, clientId string) (repository.OidcCode, error) {
    oidcCode, err := service.queries.GetOidcCode(c, codeHash)
    if err != nil {
        return repository.OidcCode{}, err
    }
 
    // The critical validation check added in the patch
    if oidcCode.ClientID != clientId {
        return repository.OidcCode{}, ErrInvalidClient
    }
 
    return oidcCode, nil
}

Correspondingly, the token exchange handler in internal/controller/oidc_controller.go was updated to pass the authenticated client.ClientID to the service layer. If the client identifiers do not match, the service returns an ErrInvalidClient error. The controller catches this specific error and returns an HTTP 400 Bad Request response with the standard invalid_client OAuth 2.0 error code, neutralizing the vulnerability.

Exploitation Methodology

Exploitation requires the attacker to fulfill specific preconditions. First, the attacker must have a registered and valid OIDC client on the target Tinyauth instance. This satisfies the requirement to authenticate against the token endpoint. Second, the attacker must intercept an authorization code generated for a victim user interacting with a different, legitimate client.

Authorization code interception typically occurs through secondary channels or misconfigurations in the target client application. Attackers achieve this via referer header leakage, open redirects on the callback URL, interception of unencrypted network traffic, or extraction from browser history on shared workstations. The complexity of acquiring this code elevates the CVSS Attack Complexity metric to High.

Once the attacker obtains a valid authorization code, they initiate a POST request to the /api/oidc/token endpoint. The attacker authenticates using their own client ID and client secret while submitting the stolen authorization code. The vulnerable server processes the request, validates the attacker's client credentials, validates the stolen code, and issues access, identity, and refresh tokens.

POST /api/oidc/token HTTP/1.1
Host: tinyauth.example.com
Content-Type: application/x-www-form-urlencoded
 
grant_type=authorization_code&code=STOLEN_CODE_FOR_CLIENT_A&client_id=ATTACKER_CLIENT_B&client_secret=ATTACKER_SECRET_B

Security Impact Assessment

Successful exploitation results in unauthorized user impersonation. The attacker receives an identity token (ID Token) and an access token scoped to the victim user. These tokens allow the attacker to authenticate to downstream services or access protected APIs acting as the victim.

The impact is highly context-dependent, relying on the permissions granted to the legitimate client and the data accessible via the generated tokens. The attacker gains the ability to read or modify any resources that the compromised access token permits. This leads to a High impact on Integrity and a Low impact on Confidentiality within the CVSS v3.1 scoring framework.

The vulnerability primarily affects multi-tenant environments or deployments where third-party developers can register custom OIDC clients. In isolated environments where the server operator strictly controls all registered clients, the risk is significantly reduced. The CVSS vector CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:N accurately reflects the required prerequisites and the resulting security implications.

Remediation and Mitigation

The primary remediation strategy requires upgrading the Tinyauth server software. System administrators must deploy Tinyauth version 5.0.3 or later. This release incorporates the mandatory client binding checks within the OIDC token exchange lifecycle.

For environments where immediate patching is not feasible, operators should implement rigorous monitoring of the /api/oidc/token endpoint. Security teams should analyze application logs for high volumes of 400 Bad Request responses. Following the application of the patch, log entries containing the warning message "Invalid client ID" indicate active attempts to exchange mismatched authorization codes.

Operators should also audit all registered OIDC clients on the Tinyauth instance. Revoking credentials for unrecognized or inactive clients reduces the available attack surface. Ensuring that legitimate client applications employ strict redirect URI validation and utilize Proof Key for Code Exchange (PKCE) provides defense-in-depth against authorization code interception attacks.

Official Patches

steveiliop56Tinyauth v5.0.3 Release

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:N

Affected Systems

Tinyauth OIDC Server

Affected Versions Detail

Product
Affected Versions
Fixed Version
tinyauth
steveiliop56
< 5.0.35.0.3
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS Score6.5
ImpactClient Impersonation / Privilege Escalation
Exploit StatusUnexploited
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check, allowing unauthorized actors to gain access.

Vulnerability Timeline

Preliminary documentation updates
2026-03-10
Official fix commit b2a1bfb1f532e87f205fa3afa3fc9f148c53ab89 merged
2026-03-11
Version 5.0.3 released
2026-03-11
Public disclosure and CVE/GHSA publication
2026-03-12

References & Sources

  • [1]GHSA-xg2q-62g2-cvcm Advisory
  • [2]Fix Commit b2a1bfb1f532e87f205fa3afa3fc9f148c53ab89
  • [3]RFC 6749 Section 4.1.3 (OAuth 2.0)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•3 days ago•CVE-2026-115895
8.8

CVE-2026-115895: Code Injection via Unsanitized Import Alias in Happy DOM ECMAScript Module Compiler

CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.

Amit Schendel
Amit Schendel
8 views•10 min read
•3 days ago•CVE-2026-115883
6.0

CVE-2026-115883: Cross-Namespace Access via Dot-Delimited Labels in LangGraph Postgres and SQLite Stores

An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.

Amit Schendel
Amit Schendel
9 views•9 min read
•3 days ago•CVE-2026-115886
6.5

CVE-2026-115886: Unauthenticated Server-Side Request Forgery and Unsafe Reflection in MLflow Scorer Evaluation Endpoints

CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.

Alon Barad
Alon Barad
13 views•10 min read
•3 days ago•CVE-2026-113872
7.5

CVE-2026-113872: Unauthenticated Process Crash in Express Multer via Late Busboy Stream Resumption

CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.

Amit Schendel
Amit Schendel
10 views•12 min read
•3 days ago•CVE-2026-115897
2.1

CVE-2026-115897: Cross-Site Scripting via Function Body Boundary Bypass in serialize-javascript

CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.

Amit Schendel
Amit Schendel
7 views•13 min read
•3 days ago•CVE-2026-109841
5.9

CVE-2026-109841: Subresource Integrity Verification Bypass in Node.js Undici

CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.

Alon Barad
Alon Barad
17 views•9 min read