
CVE-2026-2332 e mais 4 CVEs do Jetty de 2026: quais delas a sua build do Jetty (ou Spring Boot) é afetada, e a versão corrigida que o Jetty indica sequer existe no Maven Central? Para as linhas 9.4/10/11 em EOL, a resposta é 'see details for availability' = 404.
Deste seu Jetty (ou o Jetty trazido pelo Spring Boot), quais das cinco CVEs de 2026 você tem — e a versão que a documentação oficial manda você atualizar realmente existe no Maven Central?
O foco é CVE-2026-2332 (GHSA-355h-qmc2-wpwf, high / CVSS v3 7.4): request smuggling em requisições chunked do jetty-http.
O fato mais duro: as versões públicas corrigidas das três linhas EOL 9.4 / 10 / 11 simplesmente não existem — a página oficial de segurança escreve, para cada uma delas,
see details for availability (= suporte comercial), e esses números de versão, quando testados no Maven Central, dão 404 em todos.
java -jar jetty-line-check.jar /path/to/jetty # Jetty descompactado (varre lib/*.jar)
java -jar jetty-line-check.jar app.war # war
java -jar jetty-line-check.jar app.jar # Spring Boot fat jar
java -jar jetty-line-check.jar --table # só a tabela de veredito das cinco CVEs × módulos × linhas de versão
java -jar jetty-line-check.jar --utf8 ... # adicione quando o console do Windows mostrar caracteres chineses corrompidos
O critério do projeto irmão tomcat-line-check é "existe alguma classe de correção no jar?", porque aquela correção do Tomcat adicionou uma classe nova.
As do Jetty não funcionam assim. A CVE-2026-2332, o foco, teve sua correção alterando o corpo do método de HttpParser, sem adicionar nenhuma classe
(confirmado antes da construção com gh api compare + javap). Então o critério só pode ser:
Suas coordenadas completas + linha de versão, quais CVEs atingem; e se a versão corrigida apontada pela documentação oficial realmente existe no Maven Central.
A tabela de veredito é gerada por tools/gen_table.py a partir dos vulnerabilities[] dos cinco GitHub advisories + sondagem HEAD de jars reais no Maven Central,
e se as sete asserções (controle positivo / afirmação central / versão final da linha antiga / sentinela / estrutura do foco / módulos divididos / classificação) não passarem, a tabela é recusada.
| Três estados | Significado |
|---|---|
PUBLIC | o advisory aponta a versão corrigida, e ela realmente está no Maven Central — atualização pública disponível |
404 | o advisory aponta a versão corrigida, mas ela dá 404 no Central — a página oficial de segurança escreve see details for availability (suporte comercial) |
无 | o advisory simplesmente não fornece a versão corrigida dessa linha (first_patched_version vazio) — para corrigir essa linha só migrando de versão maior |
Toda aquela faixa de 404 e 无 nas linhas antigas (9.4 / 10.0 / 11.0) é onde está o valor desta ferramenta. Rode --table para ver o panorama completo.
org.eclipse.jetty, em 2026)| CVE | Módulo | Classificação | Em uma frase |
|---|---|---|---|
| CVE-2026-2332 | jetty-http | high / v3 7.4 | ⭐ Foco: \r\n dentro de quoted-string chunked é tratado como fim de cabeçalho de chunk → request smuggling (CWE-444) |
| CVE-2026-5795 | jaspi (12.x dividido em ee8/9/10/11-jaspi) | high / v3 7.4 | ThreadLocal do JASPI não é limpo → escalação de privilégio |
| CVE-2026-6790 | jetty-server | medium / v3 5.3 | Confusão de Host / :authority em HTTP/2·3 |
| CVE-2026-10050 | jetty-security (12.x adiciona ee8/9-security) | high / v4 8.7 | Tratamento ISO-8859-1 na autenticação Digest |
| CVE-2025-11143 | jetty-http | low / v3 3.7 | Diferença na análise de URI |
🔴 Só a superfície afetada da 2332, o foco, se sustenta (o caminho de smuggling recai sobre o caminho principal de análise padrão ServerConnector / HttpParser,
sem precisar habilitar nenhum recurso específico). As outras quatro são apenas uma linha na tabela de veredito:
CVE-2026-10050 (Digest) é pequena — só é atingida se a autenticação Digest for explicitamente habilitada; não a use como argumento de venda principal.CVE-2026-6790 é medium e CVE-2025-11143 é low — não é permitido chamá-las genericamente de "alta gravidade".see details for availability, e para por aí.GHSA-r7p8-xq5m-436c · GHSA-7p3p-8qv8-m2vh · GHSA-2fvj-hgj9-j2gr · GHSA-wjpw-4j6x-6rwhsee details for availability): https://jetty.org/security.htmlpython tools/gen_table.py --dry # só roda as asserções, não escreve arquivo
python tools/gen_table.py # só escreve CveTable.java se todas as asserções passarem
python tools/recheck_before_publish.py # rode de novo no dia da publicação; se a afirmação caducar, mude o texto, não o critério
mvn package # requer JDK 17; zero dependências em tempo de execução (JUnit apenas em tempo de teste)
| Código | Significado |
|---|---|
0 | varredura concluída, e todos os arquivos foram realmente lidos |
2 | erro de uso (nenhum caminho fornecido) |
4 | há arquivo que não pôde ser lido — não é zip, conteúdo truncado, ou falha de leitura |
🔴 O motivo do 4: o rastro é para humanos verem, CI e scripts olham o código de saída. Sem ele, um jar corrompido / criptografado / baixado incompleto
vira silenciosamente um "nenhum problema encontrado" — "não consigo ler isso" e "você está seguro" precisam ser duas frases distintas.
⚠️ Um jar vazio legítimo (um único registro EOCD de 22 bytes) não conta como ilegível e não dispara o 4.
MIT