
Proof-of-concept eseguibile per CVE-2026-80312, una guardia OAuth fail-open in Apache Camel camel-oauth, con riproduttori Spring Boot e Quarkus affetti e corretti.
Riproduttore proof-of-concept eseguibile per la vulnerabilità di Apache Camel in cui i processori camel-oauth che proteggono
una route non interrompevano lo scambio quando l'autenticazione non poteva essere completata. Laddove un fallimento nello stabilire una
sessione autenticata avrebbe dovuto terminare il routing e restituire un errore, il processore impostava un codice di risposta ma
restituiva il controllo alla route — così la richiesta proseguiva verso l'endpoint protetto come se l'autenticazione fosse
riuscita. Il risultato è una guardia di autenticazione fail-open: un chiamante non autenticato raggiunge qualunque cosa faccia la route
successivamente, sul normale percorso della richiesta, senza alcuna configurazione speciale.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (affetto; corretto in 4.22.1), HTTP tramite camel-undertow |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-oauth 3.39.0 (Camel 4.22.0, affetto; controllo corretto 3.40.0 / Camel 4.22.1), HTTP tramite camel-quarkus-platform-http |
Entrambi i moduli dimostrano il comportamento affetto e quello corretto. (Il modulo Spring Boot utilizza camel-undertow come
trasporto HTTP — la guardia è indipendente dal trasporto, e camel-platform-http-starter 4.22.0 è compilato contro una
linea di Spring Boot diversa dalla 3.5.x.)
Una route espone /protected, protetta da OAuthBearerTokenProcessor; solo una richiesta autenticata dovrebbe raggiungere i
passaggi protetti che seguono. L'attaccante invia GET /protected senza header Authorization.
exchange.setRouteStop(true), quindi la route
proseguiva verso i passaggi protetti → HTTP 200 e il corpo protetto.rejectUnauthorized(...), che risponde 401 e interrompe la route → i passaggi protetti
non vengono mai eseguiti.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Output previsto sulla build interessata:
Sent: GET /protected (NO Authorization header)
Response status: 200
Response body : PROTECTED-DATA: reached the protected endpoint WITHOUT authenticating
>>> PROVEN: the OAuth guard failed open ...
Sulla build corretta: Response status: 401, body Authorization header, i passaggi protetti non sono mai stati eseguiti.
| Proprietà | Valore |
|---|---|
| Componente | camel-oauth (processori di protezione delle route, ad es. OAuthBearerTokenProcessor) |
| CWE | CWE-287 (Autenticazione impropria) |
| Gravità | ALTA |
| Vettore di attacco | Una normale richiesta a una route protetta da OAuth in cui l'autenticazione non può essere completata (qui: nessun header Authorization) |
| Impatto | Accesso non autenticato all'endpoint protetto (bypass dell'autenticazione) |
| Versioni interessate | Dalla 4.11.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.1 |
| Versioni corrette | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24411 |
| Credito | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-80312.html
I processori di protezione ora chiamano rejectUnauthorized(...) / reject(...) su ogni percorso in cui l'autenticazione non può essere
completata, il che imposta lo stato HTTP (401) e chiama exchange.setRouteStop(true) in modo che nessun passaggio successivo venga eseguito
per una richiesta che il processore non ha autenticato. "L'assenza di credenziali deve essere rifiutata almeno con la stessa forza delle
credenziali non valide."
Inserire un controllo di autorizzazione esplicito dopo la protezione, oppure assicurarsi che la route termini quando
la proprietà di exchange CamelOAuthUserProfile è assente, finché non sarà possibile aggiornare.
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Non utilizzare questo materiale contro sistemi di cui non si è proprietari o gestori.