
Proof-of-concept eseguibile che riproduce CVE-2026-80344 in Apache Camel camel-as2, dimostrando SSRF asincrono tramite MDN e divulgazione di credenziali con build vulnerabili e corrette.
Reproduttore proof-of-concept eseguibile per la vulnerabilità di Apache Camel in cui il ricevitore AS2 consegnava la
Message Disposition Notification (MDN) asincrona a un indirizzo fornito dal mittente (la
Receipt-Delivery-Option), senza alcun vincolo. Un partner remoto sceglie quindi l'host a cui l'istanza Camel
si connette al momento della consegna della MDN — server-side request forgery dalla posizione del ricevitore AS2, che raggiunge host
instradabili solo dall'interno della rete del deployment — e, quando la consegna della MDN è configurata con credenziali, tali
credenziali vengono presentate alla destinazione scelta dall'attaccante.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-as2 4.22.0 (affetto; corretto in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-as2 3.29.0 (Camel 4.15.0, affetto; controllo corretto 3.40.0 / Camel 4.22.1) |
L'applicazione esegue, in un'unica JVM:
as2://server/listen, porta 8888) configurato con le credenziali per la consegna della MDN;as2://client/send) che invia un messaggio AS2 non firmato (PLAIN) richiedendo una
MDN asincrona, con receiptDeliveryOption che punta a un URL solo interno (127.0.0.1:9099, una porta
che Docker non pubblica — a rappresentare un host raggiungibile solo dall'interno del deployment);Sulla build affetta il ricevitore si connette all'URL interno scelto dall'attaccante per consegnare la MDN e
presenta ad esso le proprie credenziali di consegna della MDN (Authorization: Basic …). Sulla build corretta tali credenziali
vengono omesse (sono allegate solo agli host presenti nella allow-list), e la nuova opzione asyncMdnAllowedHosts limita
del tutto l'host di consegna.
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:
Internal host connections observed:
POST /internal-mdn-sink (Authorization=Basic bWRuLXBhcnRuZXItdXNlcjpNRE4tREVMSVZFUlktU0VDUkVU)
>>> PROVEN: the AS2 receiver connected to the sender-chosen internal URL to deliver the async MDN
>>> (server-side request forgery) AND presented its configured MDN-delivery credentials ...
(Il valore Authorization si decodifica in mdn-partner-user:MDN-DELIVERY-SECRET.) Nella build corretta la connessione
mostra Authorization=null — le credenziali non vengono più presentate all'host scelto dal mittente.
| Proprietà | Valore |
|---|---|
| Componente | camel-as2 |
| CWE | CWE-918 (Server-Side Request Forgery); divulgazione di credenziali (CWE-200) |
| Gravità | ALTA |
| Vettore di attacco | Un mittente AS2 che richiede un MDN asincrono con un indirizzo Receipt-Delivery-Option scelto dall'attaccante |
| Impatto | Server-side request forgery dal ricevitore (raggiungimento di host interni); divulgazione delle credenziali di consegna MDN all'host scelto dall'attaccante |
| Versioni interessate | Dalla 4.0.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-24417 |
| Riconoscimento | Claude Security Scan Tool |
Avviso: https://camel.apache.org/security/CVE-2026-80344.html
La destinazione MDN asincrona è ora vincolata anziché essere presa letteralmente dal messaggio in ingresso. Una nuova
opzione asyncMdnAllowedHosts (etichetta security) consente di inserire in una allow-list gli host a cui il MDN può
essere consegnato, e le credenziali di consegna MDN configurate vengono allegate solo quando la destinazione è
presente nella allow-list — quindi per impostazione predefinita (nessuna allow-list) le credenziali non vengono mai
presentate a un host scelto dal mittente.
Limitare la connettività in uscita dal ricevitore AS2 agli endpoint dei partner a cui consegna legittimamente le ricevute, e non allegare alla consegna MDN credenziali valide per host diversi da tali partner.
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. Le "credenziali" e il sink interno sono fixture locali inerti. Non utilizzare questo materiale contro sistemi di cui non si è proprietari o gestori.