
Lauffähiger Spring Boot- und Quarkus-Reproducer für CVE-2026-85248, ein Nebenläufigkeits-Wettlauf bei Signaturen in camel-pqc, der eine Umgehung der ML-DSA-Signaturverifikation verursacht, mit betroffenen und korrigierten Builds.
Signature (Umgehung der Signaturprüfung)Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der der PQC-Producer eine einzige
java.security.Signature-Instanz hielt und sie für jeden Exchange ohne Synchronisierung verwendete. Signature ist zustandsbehaftet
und nicht threadsicher: update() sammelt die zu signierenden oder zu verifizierenden Daten an, und verify()/sign() verbrauchen diesen
angesammelten Zustand. Bei gleichzeitigen Exchanges, die eine Instanz teilen, verschachteln sich die update- und verify-Aufrufe verschiedener Nachrichten,
sodass eine Verifikation gegen Daten abgeschlossen werden kann, die zu einem anderen Exchange gehören, oder gegen einen teilweise
angesammelten Puffer. Das Ergebnis ist nicht deterministisch und schließt eine Verifikation ein, die Erfolg für eine Nachricht meldet,
deren Signatur nie tatsächlich geprüft wurde, was die Garantie zunichtemacht, die die Komponente eigentlich bieten soll. Um dies zu erreichen,
ist lediglich gleichzeitiger Datenverkehr über denselben Endpoint erforderlich — die gewöhnliche Bedingung für eine Camel-Route unter Last.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc (Camel 4.22.0, betroffen; behobene Kontrolle CQ 3.40.0 / Camel 4.22.1) |
Beide Module demonstrieren das betroffene und das behobene Verhalten.
Eine Route signiert jede Nachricht mit einem Post-Quanten-ML-DSA-Schlüssel und verifiziert anschließend sofort die gerade
erzeugte Signatur, sodass jede legitim signierte Nachricht true ergeben muss. Der Treiber führt 1024 dieser Sign→Verify-
Round-Trips gleichzeitig (16 Threads) über die gemeinsam genutzten pqc:-Producer aus.
true zurück — einige geben false zurück, andere lösen
Fehler der Signatur-Engine aus —, weil die einzelne zustandsbehaftete Signature, die von gleichzeitigen Exchanges geteilt wird, durch
Verschachtelung beschädigt wird. Ein Ergebnis entspricht nicht mehr der Nachricht, für die es berechnet wurde. (Dieselbe Race-Condition
kann in der gefährlichen Richtung bewirken, dass ein verify() für Daten erfolgreich ist, die es nie abgedeckt hat.)Signature-Instanz verwendet.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: many of 1024 broken; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85248-pqc-signature-race-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: 0 broken; >>> 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.22.0): many broken
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: 0 broken
Das Race ist von Natur aus zeitabhängig; der Reproducer erzeugt genügend Nebenläufigkeit (1024 Round-Trips), damit es auf dem betroffenen Build zuverlässig auftritt. Falls ein betroffener Lauf jemals 0 fehlerhafte Ergebnisse zeigt, führen Sie ihn erneut aus.
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-pqc (PQCProducer Signatur/Verifikation) |
| CWE | CWE-362 (Concurrent Execution using Shared Resource with Improper Synchronization) |
| Schweregrad | MEDIUM |
| Angriffsvektor | Nebenläufiger Datenverkehr über denselben pqc:-Endpunkt, der eine zustandsbehaftete java.security.Signature gemeinsam nutzt |
| Auswirkung | Nichtdeterministische Signaturverifikation; eine Verifikation kann Erfolg für eine Nachricht melden, deren Signatur nie geprüft wurde |
| Betroffene Versionen | Von 4.12.0 vor 4.18.5, von 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24445 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85248.html
PQCProducer teilt die Signature nicht mehr über nebenläufige
Exchanges hinweg. Wenn der Producer die Instanz selbst erstellt hat, erstellt er nun eine frische pro Exchange
(signerForExchange()); wenn der Benutzer eine (JVM-weite public static final) Instanz konfiguriert hat, ist der
Zugriff darauf synchronized. In beiden Fällen verschachteln keine zwei Exchanges ihre init/update/verify-Sequenzen
auf einer Instanz.
Beschränken Sie die betroffene Route auf einen einzigen nebenläufigen Consumer, sodass keine zwei Exchanges die
Signature-Instanz gleichzeitig verwenden.
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 Nachrichten und Schlüssel sind inaktive lokale Fixtures. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.