
Reprodutor de prova de conceito executável para CVE-2026-80344 no camel-as2 do Apache Camel, demonstrando SSRF assíncrono via MDN e divulgação de credenciais com builds afetados e corrigidos.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o recetor AS2 entregava a
Message Disposition Notification (MDN) assíncrona a um endereço fornecido pelo remetente (a
Receipt-Delivery-Option), sem qualquer restrição. Um parceiro remoto escolhe, portanto, o host ao qual a instância Camel
se liga ao entregar a MDN — server-side request forgery a partir da posição do recetor AS2, alcançando hosts
apenas encaminháveis a partir do interior da rede da implementação — e, quando a entrega da MDN está configurada com credenciais, essas
credenciais são apresentadas ao destino escolhido pelo atacante.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-as2 4.22.0 (afetado; corrigido em 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-as2 3.29.0 (Camel 4.15.0, afetado; controlo corrigido 3.40.0 / Camel 4.22.1) |
A aplicação executa, numa única JVM:
as2://server/listen, porta 8888) configurado com credenciais de entrega de MDN;as2://client/send) que envia uma mensagem AS2 não assinada (PLAIN) solicitando uma
MDN assíncrona, com receiptDeliveryOption a apontar para um URL apenas interno (127.0.0.1:9099, uma porta
que o Docker não publica — representando um host apenas alcançável a partir do interior da implementação);Na compilação afetada, o recetor liga-se ao URL interno escolhido pelo atacante para entregar a MDN e
apresenta as suas credenciais de entrega de MDN (Authorization: Basic …) ao mesmo. Na compilação corrigida, essas credenciais
são retidas (são anexadas apenas a hosts permitidos), e a nova opção asyncMdnAllowedHosts restringe
totalmente o host de entrega.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Saída esperada na build afetada:
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 ...
(O valor de Authorization decodifica para mdn-partner-user:MDN-DELIVERY-SECRET.) Na build corrigida, a conexão
mostra Authorization=null — as credenciais não são mais apresentadas ao host escolhido pelo remetente.
| Propriedade | Valor |
|---|---|
| Componente | camel-as2 |
| CWE | CWE-918 (Server-Side Request Forgery); divulgação de credenciais (CWE-200) |
| Severidade | ALTA |
| Vetor de ataque | Um remetente AS2 solicitando um MDN assíncrono com um endereço Receipt-Delivery-Option escolhido pelo atacante |
| Impacto | Server-side request forgery a partir do receptor (alcance de hosts internos); divulgação de credenciais de entrega de MDN ao host escolhido pelo atacante |
| Versões Afetadas | A partir de 4.0.0 antes de 4.18.5, a partir de 4.19.0 antes de 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24417 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-80344.html
O destino do MDN assíncrono agora é restringido em vez de ser obtido literalmente da mensagem de entrada. Uma nova
opção asyncMdnAllowedHosts (rótulo security) define uma lista de permissões dos hosts para os quais o MDN pode
ser entregue, e as credenciais de entrega de MDN configuradas são anexadas somente quando o destino está na lista
de permissões — portanto, por padrão (sem lista de permissões), as credenciais nunca são apresentadas a um host
escolhido pelo remetente.
Restrinja a conectividade de saída do receptor AS2 aos endpoints dos parceiros para os quais ele entrega recibos legitimamente, e não anexe à entrega de MDN credenciais que sejam válidas para qualquer host que não seja esses parceiros.
Este repositório é publicado para fins educacionais e defensivos: para ajudar os usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. As "credenciais" e o sink interno são fixtures locais inertes. Não use este material contra sistemas que você não possui ou opera.