
Lauffähiger Proof-of-Concept-Reproducer für CVE-2026-84178, eine Login-CSRF-Schwachstelle im Authorization-Code-Callback von Apache Camel camel-oauth, der Codes ohne Prüfung des State-Parameters einlöst.
state)Lauffähiger Proof-of-Concept-Reproducer für die Apache-Camel-Schwachstelle, bei der der OAuth-Authorization-Code-Callback
keinen state-Parameter mitführte, der ihn an die Authorization-Anfrage band, die den Flow gestartet hatte, und auch keinen
verifizierte. Ein Authorization-Code, der in irgendeinem Browser erlangt wurde, konnte daher am Callback eingelöst und
derjenigen Session zugeordnet werden, die ihn präsentierte — Login-Cross-Site-Request-Forgery: Ein Opfer wird stillschweigend
als eine vom Angreifer kontrollierte Identität angemeldet, sodass die nachfolgenden Aktionen und Daten des Opfers im Konto des
Angreifers landen. (Derselbe unvalidierte Callback erlaubte es zudem, das Ziel des Redirects nach der Authentifizierung zu
beeinflussen — ein Open Redirect.) Wie der Advisory anmerkt, läuft die State-Prüfung vor der Einlösung des Codes, sodass die
Differenz ohne jegliche Interaktion mit dem Identity Provider erreichbar ist.
| Runtime | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (betroffen; behoben in 4.22.1), Callback über camel-undertow |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-oauth 3.39.0 (Camel 4.22.0, betroffen; behobene Kontrolle 3.40.0 / Camel 4.22.1), Callback über camel-quarkus-platform-http |
Beide Module demonstrieren das betroffene und das behobene Verhalten.
Der echte, unveränderte OAuthCodeFlowCallback-Processor verarbeitet den Callback-Endpunkt. Ein winziger Stub-OAuth wird
in der Camel-Registry registriert, damit der Callback ohne einen laufenden Identity Provider ausgeführt werden kann — er steht
nur für den IdP ein und zeichnet auf, wann ein Authorization-Code eingelöst wird (was im echten Flow die resultierende Identität
an die präsentierende Session bindet). Der Angreifer ruft den Callback einfach mit einem code und ohne passenden state auf:
state,
der zur Authorization-Anfrage passt, die diese Session gestartet hat) — der Code wird nie eingelöst.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Erwartete Ausgabe beim betroffenen Build:
Request: GET /callback?code=ATTACKER-SUPPLIED-AUTH-CODE (no 'state' parameter)
Callback HTTP status: 302
>>> PROVEN: the callback redeemed the authorization code ... WITHOUT verifying a state parameter ... login CSRF.
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-oauth (Authorization-Code-Callback, OAuthCodeFlowCallback) |
| CWE | CWE-352 (Cross-Site Request Forgery) |
| Schweregrad | MITTEL |
| Angriffsvektor | Eine Callback-Anfrage, die einen Autorisierungscode ohne state überträgt, der an die Autorisierungsanfrage der Sitzung gebunden ist |
| Auswirkung | Login-CSRF (Opfer wird unter einer vom Angreifer kontrollierten Identität angemeldet); offene Weiterleitung von einer vertrauenswürdigen Origin |
| Betroffene Versionen | Ab 4.11.0 vor 4.18.5, ab 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24437 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-84178.html
Der Callback überträgt nun einen einmalig verwendbaren state-Parameter, der an die von der Sitzung gestartete
Autorisierungsanfrage gebunden ist, und verifiziert diesen: expectedState = session.removeValue(OAUTH_STATE), verglichen (in konstanter Zeit) mit dem
state-Abfrageparameter. Wenn kein Flow im Gange ist oder der State nicht übereinstimmt, lehnt der Callback die Anfrage vor
der Einlösung des Codes ab.
Platzieren Sie den Callback hinter einer Komponente, die eine CSRF-state-Bindung erzwingt, oder verlassen Sie sich
nicht auf den OAuth-Code-Flow-Callback zur Sitzungseinrichtung, bis Sie aktualisieren können.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu prüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Der Stub-Identity-Provider und der „Angreifer-Code“ sind inerte lokale Fixtures. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.