
Lauffähiger Spring-Boot- und Quarkus-Proof-of-Concept für CVE-2026-85243, der das Downgrade der Integritätsprüfung in Apache Camel camel-crypto-pgp und dessen Behebung demonstriert.
Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der das PGP-Datenformat in unmarshal()
den Änderungserkennungscode nur dann verifizierte, wenn die Nachricht das symmetrisch verschlüsselte, integritätsgeschützte
OpenPGP-Datenpaket verwendete. Das ältere symmetrisch verschlüsselte Datenpaket enthält keinen solchen Code, und der CFB-Modus
von OpenPGP ist ohne einen solchen manipulierbar, sodass eine Nachricht, die dieses Legacy-Paket verwendete, die Integritätsprüfung
vollständig übersprang. Da der Pakettyp von demjenigen gewählt wird, der die Nachricht erzeugt, entschied der Absender — oder jeder,
der die Nachricht auf dem Transportweg umschreiben konnte —, ob die Integritätsprüfung überhaupt angewendet wurde. Die bestehende
Option integrity steuert nur das Marshalling und hatte kein Gegenstück auf der Entschlüsselungsseite, sodass eine Bereitstellung
keinen Integritätsschutz für die von ihr akzeptierten Nachrichten erzwingen konnte.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-crypto-pgp 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-crypto-pgp (Camel 4.15.0, betroffen; behoben mit Kontrolle CQ 3.40.0 / Camel 4.22.1) |
Beide Module demonstrieren das betroffene und das behobene Verhalten.
Der Exploit-Treiber spielt einen Absender (oder einen Vermittler), der eine PGP-Nachricht mit dem Legacy-Paket erzeugt, indem
er mit integrity=false verschlüsselt — der resultierende Chiffretext enthält keinen Änderungserkennungscode. Anschließend speist
er diese Nachricht in eine Route ein, die sie mit dem geheimen Schlüssel entschlüsselt.
BENIGN-PGP-PAYLOAD-MARKER-5E1F) zurückgegeben — die Integritätsprüfung
wurde vollständig übersprungen, weil der Absender das Legacy-Paket gewählt hat. Die Bereitstellung akzeptierte Chiffretext, den sie nicht
verifizieren konnte.PGPException zurück — „PGP message is not integrity protected…" —
weil die neue Option requireIntegrityProtection standardmäßig auf true steht.Die Schlüsselringe (pubring.gpg, secring.gpg, Benutzer-ID und Passwort beide sdude) sind die öffentlichen RSA-2048-Testfixtures
aus den eigenen camel-crypto-pgp-Tests von Apache Camel — inaktives Material, mitgeliefert, damit der Round-Trip in sich geschlossen ist.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: legacy message decrypts; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85243-crypto-pgp-integrity-downgrade-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rejected "not integrity protected"; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.15.0): legacy message decrypts
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rejected "not integrity protected"
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-crypto-pgp (PGPKeyAccessDataFormat.unmarshal) |
| CWE | CWE-354 (Improper Validation of Integrity Check Value) |
| Schweregrad | MITTEL |
| Angriffsvektor | Eine Nachricht, die mit dem veralteten symmetrisch verschlüsselten Datenpaket erzeugt wurde (ohne Modifikationserkennungscode) |
| Auswirkung | Herabstufung der Integritätsprüfung: Der Absender/Zwischenhändler entscheidet, ob die Integritätsprüfung ausgeführt wird; manipulierbarer Chiffretext wird ohne Prüfung akzeptiert |
| Betroffene Versionen | Ab 4.0.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-24441 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85243.html
PGPKeyAccessDataFormat.unmarshal fügt eine Option requireIntegrityProtection
hinzu (Standard true). Wenn eine Nachricht kein integritätsgeschütztes Paket ist und die Option aktiviert ist, wirft unmarshal
nun PGPException("PGP message is not integrity protected…"), anstatt sie zu entschlüsseln. Beachten Sie, dass
signatureVerificationOption weiterhin standardmäßig auf optional steht, sodass eine Nachricht ohne Signatur weiterhin akzeptiert wird; die
beiden Optionen zusammen verleihen einer entschlüsselten Nachricht Authentizität und nicht nur Vertraulichkeit. Setzen Sie
requireIntegrityProtection=false nur, um mit einem Absender zu interoperieren, der noch das veraltete Paket ausgibt, und behandeln Sie den
entschlüsselten Inhalt als nicht authentifiziert.
Weisen Sie Nachrichten zurück, die nicht das integritätsgeschützte Paket verwenden, bevor sie das Datenformat erreichen (inspizieren Sie beispielsweise
den OpenPGP-Paketkopf in einem Prozessor vor unmarshal).
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache Camel-Benutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Die Schlüsselbunde und Klartexte sind inerte öffentliche Test-Fixtures. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.