authentik: Reflected XSS im Simple Flow Executor
Reflected XSS im Simple Flow Executor von authentik: Ein präparierter OAuth-Link übernimmt eine eingeloggte SSO-Session.
Advisory-ID: TP-2026-001
Produkt: authentik (Identity Provider / Single Sign-On)
Schwachstellentyp: Reflected Cross-Site-Scripting (CWE-79)
CVE: CVE-2026-42849
CVSS 3.1: 9.3 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
Betroffene Versionen: 2026.2.2 und älter, 2025.12.4 und älter
Gepatcht in: 2026.2.3, 2025.12.5
Hersteller-Advisory: GHSA-pgff-5mx8-fqj3
Gemeldet: 24. April 2026
Zusammenfassung
Der Simple Flow Executor (SFE) ist eine schlanke Rendering-Variante der authentik-Login-Flows für Browser ohne modernes JavaScript-Bundle. Die AutosubmitStage des SFE baut ein HTML-Formular per Template-Literal zusammen und schreibt es ohne Sanitierung in den DOM. Über die OAuth2-Parameter state und redirect_uri lässt sich beliebiges HTML und JavaScript in die SSO-Origin injizieren. Der injizierte Code läuft im Vertrauenskontext der authentik-Domain (mit Zugriff auf Session-Cookies, Tokens und Backend-APIs) und übernimmt so die Session des Opfers.
Ursache
Der SFE schreibt Formular- und Challenge-Felder per Template-Literal direkt in innerHTML, in der AutosubmitStage als value="${value}" ohne HTML-Encoding (web/packages/sfe/src/index.ts:154-174,189,225). Der Query-Parameter ?sfe erzwingt den Simple Flow Executor, und to_redirect() kopiert alle request.GET-Parameter inklusive sfe auf den Redirect, sodass der SFE über den gesamten OAuth2-Flow aktiv bleibt. Bei response_mode=form_post legt der OAuthFulfillmentStage den rohen, angreiferkontrollierten state-Wert in die Auto-Submit-post_params. Die moderne Flow-Executor-Webkomponente escaped ihre Eingaben, der Legacy-SFE-Pfad jedoch nicht. Eine beliebige konfigurierte OAuth2-Anwendung genügt, eine Authentifizierung ist nicht erforderlich.
Proof of Concept
Eine präparierte OAuth2-Authorize-URL mit dem Schalter &sfe (erzwingt den Simple Flow Executor) und einem ausbrechenden state-Wert wird an ein eingeloggtes Opfer geschickt:
GET /application/o/authorize/?client_id=<id>&redirect_uri=<uri>&response_type=code&response_mode=form_post&sfe&state="><img src=https://attacker.example/xss>
Der state-Payload "><img src=https://attacker.example/xss> bricht aus dem value="..."-Attribut des Hidden-Inputs aus und wird beim innerHTML-Aufruf des SFE als HTML geparst. Der Browser des Opfers lädt das <img> von der Angreifer-Domain (mit Origin: https://authentik.example.com) und beweist damit Skriptausführung im SSO-Origin-Kontext. Der zweite Vektor nutzt analog die redirect_uri (im action-Attribut), sofern der OAuth2-Provider matching_mode: regex mit permissivem Pattern verwendet.
Auswirkung
- Skriptausführung im SSO-Origin von authentik, mit Zugriff auf Session-Cookies, Tokens und Backend-APIs.
- Übernahme der Session des Opfers; im Flow ausgestellte OAuth2-Codes und Tokens werden abgegriffen.
- Vorauthentifizierter Vektor über eine präparierte Authorize-URL; jede konfigurierte OAuth2-Anwendung genügt.
Referenzen
Steckt so etwas in Ihrer Software?
Diese Schwachstelle hat unser Team im Rahmen eines Penetrationstests gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.
