
Disclosure pack and PoC for CVE-2026-86350, an unauthenticated HTTP/2 request header mix-up (CWE-444) in Apache Tomcat 9.0.121, with lab reproduction and patch guidance.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-86350
Apache Tomcat 9.0.121 — Apache Software Foundation
Inconsistent interpretation of HTTP/2 requests ('HTTP Request/Response smuggling') vulnerability in Apache Tomcat caused by a regression in fix for CVE-2026-41293 can trigger request header mix-up.
| CVE | CVE-2026-86350 · CVE.org |
| CWE | CWE-444 |
| CVSS | Critical: 9.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Product | Apache Tomcat |
| Affected | all versions through 9.0.121 (inclusive) |
| Patched | 9.0.122 and later |
| Auth | unauthenticated (see source map) |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 only · vendor/client disclosure pack, not a scanner |
java/org/apache/coyote/http2/HpackDecoder.java and HPackHuffman.java. Patch 9.0.122 commit 5adadc4e / 11.0.26 192bc749 reverts early validation.
GET/header.jspHTTP/2 prior-knowledge preface to :8080 UpgradeProtocol Http2ProtocolHEADERS stream 1: invalid field value trailing space then x-lab-witnessHpackDecoder.readHpackString throws IllegalArgumentException mid-blockdynamic table missing the marker; stream 2 indexes the markerdecoder mix-up or COMPRESSION_ERROR / GOAWAYAfter invalid HTTP/2 field on stream 1, stream 2 is not a clean 200 (GOAWAY, RST, or marker mix-up).
Do this first: Update Apache Tomcat to 9.0.122 or newer.
Verify after upgrade
CVE-2026-86350-Abraxas-Labs.py against the patched build: the mapped witness must not appear.If you cannot update immediately
Target only http://127.0.0.1:8088 (or the loopback you bound). Do not point this script at the internet.
python3 CVE-2026-86350-Abraxas-Labs.py
Success is the witness above in the response body. Generic 200 HTML is not it.
Loopback stack used to reproduce. Official images unless a Dockerfile in this folder builds from source.
cd lab
docker compose up --force-recreate
Bind the vulnerable product tree next to Compose if the YAML mounts a local directory (plugin zip / source tag from the version table). Publish nothing except 127.0.0.1.
# CVE-2026-86350
CWE: CWE-444
CVSS: Critical 9.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N (CISA-ADP). Apache: Important.
## Description
A regression in the CVE-2026-41293 HTTP/2 header-validation refactor can mix request headers. Invalid HPACK fields abort decode so later fields never enter the dynamic table; the next stream on the connection then interprets indexes against a desynced table.
## Product
Apache Tomcat 9.0.121 (fixed in 9.0.122; also 10.1.60 and 11.0.26). Lab oracle is HPACK desync, not RCE.
This disclosure pack is licensed under the GNU Affero General Public License v3.0. See LICENSE.
This pack is for the vendor, the site owner, and licensed labs. The script talks to 127.0.0.1. Using it against systems you do not own is not authorized by Abraxas Labs. No warranty.