Der HTTP-Garten
Der HTTP Garden ist eine Sammlung von HTTP-Servern und Proxys, die so konfiguriert sind, dass sie zusammensetzbar sind, zusammen mit Skripten, die mit ihnen auf eine Weise interagieren, die das Auffinden von Schwachstellen erheblich erleichtert. Einige coole Demos der Schwachstellen, die Sie im HTTP Garden finden können, finden Sie in unserem ShmooCon 2024-Talk.
Danksagungen
Wir möchten unseren Freunden bei Galois, Trail of Bits, Narf Industries und Dartmouth College dafür danken, dass sie dieses Projekt ermöglicht haben.
Dieses Material basiert auf Arbeiten, die von der Defense Advanced Research Projects Agency (DARPA) unter der Vertragsnummer HR0011-19-C-0076 unterstützt werden.
Erste Schritte
Abhängigkeiten
- Der HTTP Garden läuft auf x86_64 Linux und wurde auf anderen Plattformen nicht getestet.
- Die Zielserver werden in Docker-Containern erstellt und ausgeführt, daher benötigen Sie Docker.
- Sie benötigen außerdem die folgenden Python-Pakete, die Sie von PyPI (z. B. mit
pip
) oder von Ihrem Systempaketmanager erhalten können:
-
docker
- Für die Interaktion mit Docker
-
pyyaml
-
tqdm
Wenn Sie Python-Pakete mit dem Paketmanager Ihres Systems installieren, beachten Sie, dass den Paketnamen je nach System möglicherweise py3-
, python3-
oder python-
vorangestellt werden muss.
- Ich empfehle außerdem dringend, rlwrap über Ihren Paketmanager zu installieren, da die Garden-Ersetzung dadurch viel mehr Spaß macht.
Gebäude
- Erstellen Sie das Basis-Image:
docker build ./images/http-garden-soil -t http-garden-soil
Dieses Image enthält einige grundlegende Dienstprogramme sowie ein gespaltenes AFL++, das das Sammeln von Abdeckung von Prozessen erleichtert, ohne diese zu beenden.
- Erstellen Sie einige HTTP-Server und Proxys:
docker compose build gunicorn hyper nginx haproxy nginx_proxy
Natürlich gibt es im HTTP-Garten viel mehr Ziele als die, die wir gerade erstellt haben. Es dauert nur sehr lange, sie alle aufzubauen. Selbst der Bau dieser wenigen wird ein paar Minuten dauern!
Läuft
- Starten Sie einige Server und Proxys:
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- Filtern Sie eine einfache GET-Anfrage über HAProxy und dann über einen Nginx-Reverse-Proxy, senden Sie das Ergebnis dann an Gunicorn-, Hyper- und Nginx-Ursprungsserver und zeigen Sie an, ob ihre Interpretationen übereinstimmen:
garden> payload 'GET / HTTP/1.1rnHost: whateverrnrn' # Set the payload
garden> transduce haproxy nginx_proxy # Run the payload through the reverse proxies
[1]: 'GET / HTTP/1.1rnHost: whateverrnrn'
haproxy
[2]: 'GET / HTTP/1.1rnhost: whateverrnrn'
nginx_proxy
[3]: 'GET / HTTP/1.1rnHost: echornConnection: closernrn'
garden> servers gunicorn hyper nginx # Select the servers
garden> grid # Show their interpretations
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ ✓
hyper | ✓ ✓
nginx | ✓
Scheint, als wären sie sich alle einig. Versuchen wir es mit einer interessanteren Nutzlast:
garden> payload 'POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0nrn'
garden> grid
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ X
hyper | ✓ X
nginx | ✓
Es gibt eine Diskrepanz! Dies liegt daran, dass Nginx n
als eine Zeile unterstützt, die in Blockzeilen endet, Hyper und Gunicorn jedoch nicht. Nginx verstößt hier technisch gegen RFC 9112, die Auswirkungen sind jedoch wahrscheinlich minimal.
Verzeichnislayout
images
Das images
enthält ein Unterverzeichnis für jeden HTTP-Server und -Transducer im Garden. Jedes Ziel erhält sein eigenes Docker-Image. Alle Programme werden nach Möglichkeit aus dem Quellcode erstellt. Damit wir problemlos mehrere Versionen jedes Ziels erstellen können, werden alle Ziele mit einer Repository-URL ( APP_REPO
), einem Zweignamen ( APP_BRANCH
) und einem Commit-Hash ( APP_VERSION
) parametrisiert.
tools
Das tools
-Verzeichnis enthält die Skripts, die für die Interaktion mit den Servern verwendet werden. Darin finden Sie
-
diagnose_anomalies.py
: Ein Skript zum Aufzählen harmloser HTTP-Parsing-Macken in den getesteten Systemen, die beim Fuzzing ignoriert werden sollen. -
repl.py
: Die primäre Benutzeroberfläche zum HTTP Garden, -
update.py
: Ein Skript, das die Commit-Hashes in docker-compose.yml
aktualisiert. - ...und ein paar weitere Skripte, die nicht benutzerorientiert sind.
Ziele
HTTP-Server
Name | Läuft lokal? | Deckungssumme erhoben? |
---|
aiohttp | Ja | Ja |
apache_httpd | Ja | Ja |
apache_tomcat | Ja | NEIN |
Stumpen | Ja | Ja |
cpp_httplib | Ja | NEIN |
dart_stdlib | Ja | NEIN |
eclipse_grizzly | Ja | NEIN |
eclipse_jetty | Ja | NEIN |
fasthttp | Ja | NEIN |
go_stdlib | Ja | NEIN |
Gunicorn | Ja | Ja |
Wasser | Ja | Ja |
haproxy_fcgi | Ja | NEIN |
hyper | Ja | NEIN |
Hypercorn | Ja | Ja |
ktor | Ja | NEIN |
libevent | Ja | NEIN |
libmicrohttpd | Ja | NEIN |
libsoup | Ja | NEIN |
lighttpd | Ja | Ja |
Mungo | Ja | Ja |
netty | Ja | NEIN |
Nginx | Ja | Ja |
node_stdlib | Ja | NEIN |
openlitespeed | Ja | NEIN |
openwrt_uhttpd | Ja | Ja |
php_stdlib | Ja | NEIN |
phusion_passenger | Ja | NEIN |
Protokoll_http1 | Ja | NEIN |
Puma | Ja | NEIN |
servicetalk | Ja | NEIN |
Tornado | Ja | NEIN |
verdreht | Ja | NEIN |
Einhorn | Ja | NEIN |
Uvicorn | Ja | Ja |
Kellnerin | Ja | Ja |
werick | Ja | NEIN |
iis | NEIN | NEIN |
openbsd_httpd | NEIN | NEIN |
HTTP-Wandler
Name | Läuft lokal? |
---|
apache_httpd_proxy | Ja |
apache_traffic_server | Ja |
go_stdlib_proxy | Ja |
h2o_proxy | Ja |
haproxy | Ja |
haproxy_invalid | Ja |
lighttpd_proxy | Ja |
nghttpx | Ja |
nginx_proxy | Ja |
openlitespeed_proxy | Ja |
Pingora | Ja |
Pfund | Ja |
Tintenfisch | Ja |
Lack | Ja |
akamai | NEIN |
awselb_classic | NEIN |
awselb_application | NEIN |
aws_cloudfront | NEIN |
Wolkenflare | NEIN |
schnell | NEIN |
google_classic | NEIN |
google_global | NEIN |
iis_proxy | NEIN |
openbsd_relayd | NEIN |
Käfer
Dies sind die Fehler, die wir bei der Verwendung des HTTP Garden gefunden haben. Wenn Sie einige davon finden, senden Sie bitte eine PR, um sie dieser Liste hinzuzufügen! Jeder Fehler wird mit den folgenden Feldern beschrieben:
- Anwendungsfall: Die Art des Angriffs, den ein Angreifer mit diesem Fehler ausführen kann
- Anforderungen: Erforderliche Konfigurationsoptionen oder andere Server, damit dieser Fehler ausgenutzt werden kann.
- Risiko: Keines|Niedrig|Mittel|Hoch, gefolgt von einer kurzen Erklärung.
- Keine: Der Fehler ist wahrscheinlich nicht ausnutzbar.
- Niedrig: Der Fehler könnte ausgenutzt werden, aber er erfordert eine wirklich seltsame Konfiguration oder würde darauf beruhen, dass sich ein Proxy auf eine Weise verhält, die ich noch nie gesehen habe.
- Mittel: Der Fehler ist wahrscheinlich ausnutzbar, hat jedoch nur mäßige Auswirkungen oder erfordert eine unwahrscheinliche Kombination aus Server und Wandler.
- Hoch: Der Fehler ist in gängigen Konfigurationen und Server-/Wandlerkombinationen ausnutzbar.
- Nutzlast: Eine Beispielnutzlast, die den Fehler auslöst
- Betroffene Programme: Eine Liste der Server, auf denen dieser Fehler auftritt, zusammen mit Berichten und Patch-Zeitplänen. Da einige Implementierungsfehler häufig vorkommen, wird dadurch verhindert, dass sie die Liste überladen :)
Serverfehler
Dabei handelt es sich um Fehler in der Art und Weise, wie Server Anfragen annehmen und interpretieren.
- Der Python-
int
Konstruktor wird zum Parsen von Blockgrößen verwendet, daher werden 0x
, _
, +
und -
falsch interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Chunk-Größen als ihr längstes gültiges Präfix interpretiert, sie aber unverändert weiterleitet.
- Risiko: Mittel. Siehe Wandlerfehler 7.
- Nutzlast:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- AIOHTTP:
- 1. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 7. Oktober 2023: In Version 3.8.6 behoben.
- Gunicorn:
- 1. August 2023: Über GH-Ausgabe gemeldet.
- 25. Dezember 2023: Im Commit behoben.
- Tornado:
- 2. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 10. August 2023: Im Commit behoben.
-
x00
, r
oder n
sind in Headerwerten fälschlicherweise zulässig.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der diese Bytes in Header-Werten weiterleitet oder
n
als Header-Zeilenabschlusszeichen akzeptiert und weiterleitet. - Risiko: Hoch. Siehe Wandlerfehler 10, 12 und 16.
- Nutzlast:
GET / HTTP/1.1rnHost: arnHeader: vnx00raluernrn
- Betroffene Programme:
- AIOHTTP:
- 1. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 7. Oktober 2023: In Version 3.8.6 behoben.
- Gunicorn:
- 31. Januar 2024: Über GH Issue gemeldet.
- 31. Januar 2024: Bleibt unbehoben.
- Tornado:
- 11. August 2023: Über GH-Ausgabe gemeldet.
- 31. Januar 2024: Bleibt unbehoben.
- Leerzeichen werden fälschlicherweise am Ende von Header-Namen entfernt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Leerzeichen vor dem
:
als Teil des Headernamens betrachtet. - Risiko: Gering. Mir sind keine anfälligen Wandler bekannt, aber James Kettle sagt, dass es mindestens einen gibt.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnContent-Length : 34rnrnGET / HTTP/1.1rnHost: whateverrnrn
- Betroffene Programme:
- AIOHTTP:
- 2. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 7. Oktober 2023: In Version 3.8.6 behoben.
- Stumpen:
- 4. Februar 2024: Über GH Issue gemeldet.
- 4. Februar 2024: Bleibt unbehoben.
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- 14. August 2023: CVE-2023-40518 zugewiesen.
- Leerzeichen werden fälschlicherweise am Anfang des ersten Headernamens entfernt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Leerzeichen am Anfang des ersten Header-Namens als Teil des Header-Namens betrachtet.
- Risiko: Gering. Mir sind keine anfälligen Wandler bekannt.
- Nutzlast:
GET / HTTP/1.1rntContent-Length: 1rnrnX
- Betroffene Programme:
- AIOHTTP:
- 20. August 2023: Meldung über GH-Sicherheitshinweiskommentar.
- 7. Oktober 2023: In Version 3.8.6 behoben.
- HTTP-Versionen werden als ihr längstes gültiges Präfix interpretiert.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET /test HTTP/1.32rnrn
- Betroffene Programme:
- AIOHTTP:
- 14. Oktober 2023: Gemeldet über GH Issue und PR.
- 15. Oktober 2023: Im Commit behoben.
- HTTP-Methoden werden als ihr längstes gültiges Präfix interpretiert.
- Anwendungsfall: ACL-Bypass
- Anforderungen: Ein Wandler, der ungültige Methodennamen unverändert weiterleitet.
- Risiko: Mittel. Erläuterung entfällt, da die entsprechenden Fehler noch nicht gemeldet wurden.
- Nutzlast:
G=":<>(e),[T];?" /get HTTP/1.1rnrn
- Betroffene Programme:
- AIOHTTP:
- 14. Oktober 2023: Gemeldet über GH Issue und PR.
- 15. Oktober 2023: Im Commit behoben.
- URIs werden überhaupt nicht validiert.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET ! HTTP/1.1rnrn
- Betroffene Programme:
- AIOHTTP:
- 16. Oktober 2023: Über GH-Ausgabe gemeldet.
- 16. Oktober 2023: In PR behoben.
- Einige Nicht-ASCII-Bytes sind in Headernamen fälschlicherweise zulässig.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET / HTTP/1.1rnxefoo: barrnrn
- Betroffene Programme:
- AIOHTTP:
- 17. Oktober 2023: Über PR berichtet.
- 18. Oktober 2023: Behoben durch Zusammenführung der oben genannten PR.
- Seidelbast:
- 4. Februar 2024: Über GH Issue gemeldet.
- 10. Februar 2024: Im Commit behoben.
- Mungo:
- 13. Oktober 2023: Über GH-Ausgabe gemeldet.
- 5. Dezember 2023: Im Commit behoben.
-
n
ist als trennendes Leerzeichen in einer Anforderungszeile zulässig.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Transducer, der HTTP/0.9-Anfragen mit nacktem
n
unverändert weiterleitet und die zugrunde liegende Verbindung wiederverwendet. - Risiko: Gering. Mir sind keine anfälligen Wandler bekannt.
- Nutzlast:
GET /nHTTP/1.1rnrn
- Betroffene Programme:
- AIOHTTP:
- 17. Oktober 2023: Über PR berichtet.
- 18. Oktober 2023: Durch Zusammenführung behoben.
- Der Python-
int
Konstruktor wird zum Parsen von Content-Length
Werten verwendet, daher werden _
, +
und -
falsch interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der
Content-Length
-Werte als ihr längstes gültiges Präfix interpretiert, sie aber unverändert weiterleitet. - Risiko: Gering. Mir sind keine anfälligen Wandler bekannt, aber Matt Grenfeldt sagt, dass es mindestens einen gibt.
- Nutzlast:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789
- Betroffene Programme:
- AIOHTTP:
- 1. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 7. Oktober 2023: In Version 3.8.6 behoben.
- CPython http.server:
- 2. April 2023: Über GH-Ausgabe gemeldet.
- 2. April 2023: Im Commit behoben.
- Tornado:
- 2. August 2023: Gemeldet über GH-Sicherheitshinweis.
- 10. August 2023: Im Commit behoben.
- Werkzeug:
- 1. Juni 2023: Über GH-Ausgabe gemeldet.
- 7. Juni 2023: Im Commit 88c5c78 behoben.
- Anfragen, die mehrere
Transfer-Encoding: chunked
-Header enthalten, werden akzeptiert und so behandelt, als ob sie keinen Nachrichtentext hätten.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Anfragen weiterleitet, die mehrere
Transfer-Encoding
Header enthalten. - Risiko: Hoch. Siehe Wandlerfehler 28.
- Nutzlast:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn
- Betroffene Programme:
- Tornado:
- 7. Oktober 2023: Gemeldet über GH-Sicherheitshinweis.
- 6. Juni 2024: In der Veröffentlichung der Sicherheitsempfehlung behoben.
-
xa0
und x85
werden von den Anfängen und Enden der Headerwerte entfernt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der unbekannte
Transfer-Encoding
-Werte weiterleitet und sie anders als chunked
behandelt. - Risiko: Mittel. Siehe Wandlerfehler 18.
- Nutzlast:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: xa0chunkedxa0rnrn0rnrn
- Betroffene Programme:
- Tornado:
- 4. Februar 2024: Meldung über GH-Sicherheitshinweiskommentar.
- 4. Februar 2024: Bleibt unbehoben.
-
r
wird in Header-Feldzeilen als Zeilenabschlusszeichen behandelt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der
r
in Header-Namen weiterleitet. - Risiko: Hoch. Siehe Wandlerfehler 10.
- Nutzlast:
GET / HTTP/1.1rnVisible: :/rSmuggled: :)rnrn
- Betroffene Programme:
- CPython http.server:
- 31. Januar 2024: Über GH Issue gemeldet.
- 31. Januar 2024: Bleibt unbehoben.
- Mungo:
- 7. Juli 2023: Über GH Issue gemeldet.
- 9. Juli 2023: Im Commit 6957c37 behoben.
- Unzulässige ASCII-Zeichen sind fälschlicherweise in Header-Namen zulässig.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET / HTTP/1.1rnx00x01x02x03x04x05x06x07x08tx0bx0cx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f "(),/;<=>?@[/]{}: whateverrnrn
- Betroffene Programme:
- Seidelbast:
- 4. Februar 2024: Über GH Issue gemeldet.
- 10. Februar 2024: Im Commit behoben.
- Mungo:
- 13. Oktober 2023: Über GH-Ausgabe gemeldet.
- 5. Dezember 2023: Im Commit behoben.
- Tornado:
- 11. August 2023: Über GH-Ausgabe gemeldet.
- 31. Januar 2024: Bleibt unbehoben. OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- HTTP-Versionen werden nicht validiert.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET / HTTP/rr1.1rnrn
- Betroffene Programme:
- FastHTTP:
- 4. Februar 2024: Über GH Issue gemeldet.
- 11. Februar 2024: Im Commit behoben.
- Leere
Content-Length
Werte werden so behandelt, als wären sie 0
.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der leere
Content-Length
Werte als etwas anderes als 0 interpretiert. - Risiko: Gering. Mir ist kein solcher Wandler bekannt.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnContent-Length: rnrn
- Betroffene Programme:
- Gehen Sie zu net/http:
- 31. Juli 2023: Über GH-Ausgabe gemeldet
- 11. August 2023: Im Commit behoben.
- Lighttpd:
- 1. August 2023: Über den Issue-Tracker gemeldet.
- 3. August 2023: Im Commit behoben.
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- Leere Blockgrößen werden so behandelt, als ob sie
0
wären.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der zusätzliche
rn
s zwischen Chunks akzeptiert und weiterleitet. - Risiko: Gering. Mir ist kein solcher Wandler bekannt.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnrnrn
- Betroffene Programme:
- Gehen Sie zu net/http:
- 2. Dezember 2023: Über GH Issue gemeldet.
- 4. Januar 2024: Im Commit behoben.
- Hyper:
- 1. Dezember 2023: Per E-Mail gemeldet.
- 18. Dezember 2023: Im Commit behoben.
- Mungo:
- 3. Januar 2024: Über GH Issue gemeldet.
- 3. Januar 2024: In PR behoben.
- Leere Header-Namen werden fälschlicherweise akzeptiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der
rn:rn
akzeptiert und weiterleitet und ihn als Ende des Header-Blocks behandelt. - Risiko: Gering. Mir ist kein solcher Wandler bekannt.
- Nutzlast:
GET / HTTP/1.1rn: ignoredrnHost: whateverrnrn
- Betroffene Programme:
- Gehen Sie zu net/http:
- 24. Januar 2024: Über GH Issue gemeldet.
- 30. Januar 2024: Im Commit behoben.
- Gunicorn:
- 4. Dezember 2023: Über GH Issue gemeldet.
- 25. Dezember 2023: Im Commit behoben.
- Node.js:
- 13. Oktober 2023: Über GH-Ausgabe gemeldet.
- 17. Oktober 2023: Im Commit behoben.
- Tornado:
- 13. Oktober 2023: Über einen GH-Problemkommentar gemeldet.
- 15. Oktober 2023: Bleibt unbehoben.
- Alle Nicht-
rn
-Leerzeichensequenzen werden von den Anfängen der Headerwerte entfernt (nach dem :
).
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der blanke
n
Leitungsenden in Feldlinien akzeptiert und weiterleitet. - Risiko: Mittel. Siehe Wandlerfehler 16.
- Nutzlast:
GET / HTTP/1.1rnHost: arnUseless:nnGET / HTTP/1.1rnrn
- Betroffene Programme:
- Gunicorn:
- 2. Juni 2023: Per E-Mail gemeldet.
- 31. Januar 2024: Über GH Issue gemeldet.
- 31. Januar 2024: Bleibt unbehoben.
-
xa0
und x85
-Bytes werden von den Enden der Header-Namen vor dem :
entfernt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der
xa0
oder x85
in Header-Namen akzeptiert und weiterleitet. - Risiko: Mittel. Siehe Wandlerfehler 6.
- Nutzlast:
GET / HTTP/1.1rnHost: arnContent-Lengthx85: 10rnrn0123456789
- Betroffene Programme:
- Gunicorn:
- 27. Juni 2023: Per E-Mail gemeldet.
- 25. Dezember 2023: Im Commit behoben.
-
,chunked
wird als eine von chunked
verschiedene Codierung behandelt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der den
Transfer-Encoding
Wert in ,chunked
unverändert weiterleitet und ihn als äquivalent zu chunked
interpretiert. - Risiko: Hoch. Siehe Wandlerfehler 9.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- Gunicorn:
- 6. November 2023: Über GH-Ausgabe gemeldet.
- 25. Dezember 2023: Im Commit behoben.
- Mungo:
- 6. November 2023: Über GH-Ausgabe gemeldet.
- 1. Dezember 2023: Im Commit behoben.
- Passagier:
- 6. November 2023: Per E-Mail gemeldet.
- 22. Januar 2024: In der Veröffentlichung behoben.
- Ungültige Blockgrößen werden als ihr längstes gültiges Präfix interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der ungültige Chunk-Größen (z. B. mit
0x
Präfix) akzeptiert und weiterleitet. - Risiko: Hoch. Siehe Wandlerfehler 2 und 19.
- Nutzlast:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- H2O:
- 1. August 2023: Per E-Mail gemeldet.
- 12. Dezember 2023: In PR behoben.
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- WEBrick:
- 9. November 2023: Über GH-Ausgabe gemeldet.
- 3. Februar 2024: In PR behoben.
- Anfragen mit mehreren widersprüchlichen
Content-Length
Headern werden akzeptiert, wobei der erste priorisiert wird.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Anfragen mit zwei
Content-Length
-Headern akzeptiert und weiterleitet, wobei der letzte Header priorisiert wird. - Risiko: Mittel. Siehe Wandlerfehler 22.
- Nutzlast:
GET / HTTP/1.1rnHost: arnContent-Length: 1rnContent-Length: 0rnrnZ
- Betroffene Programme:
- H2O:
- 30. November 2023: Per E-Mail gemeldet.
- 10. Juli 2024: Über GH Issue gemeldet.
- 10. Juli 2024: Bleibt unbehoben.
- OpenLiteSpeed:
- 26. Juni 2024: Über GH-Ausgabe gemeldet.
- 10. Juli 2024: Bleibt unbehoben.
- 8-Bit-Ganzzahlüberlauf in HTTP-Versionsnummern.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines
- Nutzlast:
GET / HTTP/4294967295.255rnrn
- Betroffene Programme:
- Lebensereignis:
- 17. Januar 2024: Eingereichte PR.
- 18. Januar 2024: Beim Zusammenführen behoben.
- Chunk-Größen werden mit
strtoll(,,16)
analysiert, sodass die Präfixe 0x
, +
und -
fälschlicherweise akzeptiert werden.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Chunk-Größen als ihr längstes gültiges Präfix interpretiert, sie aber unverändert weiterleitet.
- Risiko: Mittel. Siehe Wandlerfehler 2.
- Nutzlast:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn
- Betroffene Programme:
- Lebensereignis:
- 18. Januar 2024: Eingereichte PR.
- 18. Februar 2024: Beim Zusammenführen behoben.
- OpenLiteSpeed:
- 2. August 2023: Per E-Mail gemeldet.
- 11. August 2023: In OLS 1.7.18 behoben.
- Negative
Content-Length
Header können verwendet werden, um den Server in eine Endlosschleife zu zwingen.
- Anwendungsfall: DoS
- Anforderungen: Keine.
- Risiko: Hoch. Dieser Fehler lässt sich leicht ausnutzen.
- Nutzlast:
GET / HTTP/1.1rnHost: arnContent-Length: -48rnrn
- Betroffene Programme:
- Mungo:
- 27. April 2023: Per E-Mail gemeldet.
- 16.–18. Mai 2023: In den Commits 4663090, 926959a und 2669991 behoben.
- CVE-2023-34188 zugewiesen.
- Der HTTP-Headerblock wird beim Empfang eines Headers ohne Namen oder Wert abgeschnitten.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der leere Header-Namen weiterleitet.
- Risiko: Mittel. Siehe Bonus-Bonus-Bug 2.
- Payload:
GET / HTTP/1.1rn:rnI: am chopped offrnrn
- Betroffene Programme:
- Mungo:
- 26. Juni 2023: Über GH-Ausgabe gemeldet.
- 29. Juni 2023: In Commit 415bbf2 behoben.
- Header-Namen können allein durch Leerzeichen von Werten getrennt werden; nein
:
erforderlich.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Kopfzeilen weiterleitet, die kein
:
enthalten. - Risiko: Mittel. Siehe Wandlerfehler 14.
- Nutzlast:
GET / HTTP/1.1rnContent-Length 10rnrn0123456789
- Betroffene Programme:
- Mungo:
- 7. Juli 2023: Über GH Issue gemeldet.
- 7. Juli 2023: Im Commit 5dff282 behoben.
- Ungültige
Content-Length
Header werden als Äquivalent zu ihrem längsten gültigen Präfix interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der
Content-Length
-Werte mit ungültigen Präfixen (z. B. 0x
oder +
) weiterleitet. - Risiko: Hoch. Siehe Wandlerfehler 1.
- Nutzlast:
GET / HTTP/1.1rnContent-Length: 1ZrnrnZ
- Betroffene Programme:
- Mungo:
- 31. Juli 2023: Über GH Issue gemeldet
- 17. August 2023: Im Commit behoben.
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- Der Headerblock kann fälschlicherweise auf
rnrX
abgeschlossen werden, wobei X
ein beliebiges Byte sein kann.
- Anwendungsfall: ???
- Anforderungen: Ein Wandler, der Header-Namen weiterleitet, die mit
r
beginnen, oder r
als zeilenfaltendes Leerzeichen am Zeilenanfang zulässt. - Risiko: Gering. Mir ist ein solcher Wandler nicht bekannt.
- Nutzlast:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn
- Betroffene Programme:
- Node.js:
- 7. Juli 2023: Gemeldet über HackerOne-Bericht.
- 31. Juli 2023: Im llhttp-Commit behoben.
- 16. September 2023: Beim Node-Commit behoben.
- Chunk-Zeilen werden fälschlicherweise auf
rX
abgeschlossen, wobei X
ein beliebiges Byte sein kann.
- Anwendungsfall: Schmuggel beantragen.
- Anforderungen: Ein Transducer, der
r
innerhalb des optionalen Leerraums in einem Chunk-Ext weiterleitet. - Risiko: Hoch. Siehe Wandlerfehler 3.
- Nutzlast:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- Node.js:
- 9. Juli 2023: Gemeldet über HackerOne-Kommentar.
- 31. Juli 2023: Im llhttp-Commit behoben.
- 16. September 2023: Beim Node-Commit behoben.
-
Content-Length
Header werden mit strtoll(,,0)
interpretiert, daher werden führende 0
, +
, -
und 0x
falsch interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der führende
0
in Content-Length
weiterleitet, was vom Standard zulässig ist. - Risiko: Hoch. Dies ist gegen standardkonforme Wandler ausnutzbar.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnContent-Length: 010rnrn01234567
- Betroffene Programme:
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- Anfragen mit mehreren widersprüchlichen
Content-Length
Headern werden akzeptiert, wobei der letzte priorisiert wird.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Transducer, der Anfragen mit zwei
Content-Length
-Headern akzeptiert und weiterleitet, wobei der erste Header priorisiert wird. - Risiko: Gering. Mir ist kein solcher Wandler bekannt, aber die Existenz eines solchen erscheint äußerst wahrscheinlich.
- Nutzlast:
GET / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 1rnrnZ
- Betroffene Programme:
- FastHTTP:
- 4. Februar 2024: Per E-Mail gemeldet.
- 11. Februar 2024: Im Commit behoben.
-
r
ist in Header-Werten zulässig.
- Anwendungsfall: ???
- Anforderungen: Ein Wandler, der
r
in Header-Werten falsch interpretiert und weiterleitet. - Risiko: Gering. Mir ist kein solcher Wandler bekannt.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnHeader: varluernrn
- Betroffene Programme:
- OpenLiteSpeed:
- 31. Juli 2023: Per E-Mail gemeldet.
- 10. August 2023: In OLS 1.7.18 behoben.
- Header-Werte werden bei
x00
abgeschnitten.
- Anwendungsfall: ACL-Bypass
- Anforderungen: Ein Wandler, der
x00
in Header-Werten weiterleitet. - Risiko: Mittel. Siehe Wandlerfehler 12.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn
- Betroffene Programme:
- OpenLiteSpeed:
- 3. November 2023: Per E-Mail gemeldet.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
- Lebensereignis:
- 29. Januar 2024: Gemeldet über GH-Sicherheitshinweis.
- 31. Januar 2024: Bleibt unbehoben.
- Wagenrückläufe werden innerhalb des optionalen Leerraums nach dem Semikolon in einer Chunk-Erweiterung weitergeleitet.
- Anwendungsfall: Schmuggel anfordern
- Anforderungen: Ein Server, der
rr
an diesem Standort als gleichwertig mit rn
behandelt. - Risiko: Hoch. Siehe Serverfehler 31.
- Nutzlast:
POST /abc HTTP/1.1rnTransfer-Encoding: chunkedrnHost: h2o.http-garden.usrnrn41;a=brrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 412rnrn0rnrnGET /def HTTP/1.1rnHost: h2o.http-garden.usrnrn
- Betroffene Programme:
- Akamai-CDN:
- 3. Dezember 2023: Per E-Mail gemeldet.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
- Überschriftennamen können zeilenübergreifend fortgeführt werden.
- Anwendungsfall: Schmuggel anfordern.
- Anforderungen: Ein Wandler, der Kopfzeilen weiterleitet, die kein
:
enthalten. - Risiko: Mittel. Siehe Wandlerfehler 14.
- Nutzlast:
POST / HTTP/1.1rnHost: whateverrnTransfer-rnEncoding: chunkedrnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- Passagier:
- 6. November 2023: Per E-Mail gemeldet.
- 22. Januar 2024: In der Veröffentlichung behoben.
- Leere
Content-Length
in Anfragen werden als „Lesen, bis eine Zeitüberschreitung auftritt“ interpretiert.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der leere
Content-Length
-Header-Werte akzeptiert und weiterleitet und sie als äquivalent zu 0 behandelt. - Risiko: Mittel. Siehe Wandlerfehler 5 und 11.
- Nutzlast:
GET / HTTP/1.1rnHost: localhostrnContent-Length: rnrnGET / HTTP/1.1rnHost: localhostrnrn
- Betroffene Programme:
- Puma:
- 16. Juni 2023: Per E-Mail gemeldet.
- 17. August 2023: In Puma 6.3.1 und 5.6.7 behoben. Siehe Hinweis.
- Geklumpte Nachrichtentexte enden am
rnXX
, wobei XX
zwei beliebige Bytes sein können.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der Trailer-Felder beibehält und keine Leerzeichen zwischen
:
und dem Wert in Trailer-Feldern hinzufügt. (ATS ist ein solcher Server) - Risiko: Hoch. Die Anforderungen zur Ausnutzung dieses Fehlers erfordern nicht, dass der Wandler gegen die Standards verstößt.
- Nutzlast:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn0rnX:POST / HTTP/1.1rnrn
- Betroffene Programme:
- Puma:
- 31. Juli 2023: Per E-Mail gemeldet.
- 17. August 2023: In Puma 6.3.1 und 5.6.7 behoben. Siehe Hinweis.
- CVE-2023-40175 zugewiesen.
- HTTP-Methoden und -Versionen werden nicht validiert.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines.
- Nutzlast:
x00 / HTTP/............0596.7407.rnrn
- Betroffene Programme:
- Kellnerin:
- 17. Oktober 2023: Eingereichte PR.
- 4. Februar 2024: Beim Zusammenführen von PR behoben.
-
xa0
und x85
werden von den Anfängen und Enden der Headerwerte entfernt, mit Ausnahme des Transfer-Encoding
Headers.
- Anwendungsfall: Header-Wert-ACL-Umgehung
- Anforderungen: Ein Wandler, der
xa0
und x85
an Ort und Stelle akzeptiert und weiterleitet. - Risiko: Mittel. Der Standard ermöglicht es Wandlern, Obs-Text in Header-Werten weiterzuleiten.
- Nutzlast:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn
- Betroffene Programme:
- Kellnerin:
- 4. Februar 2024: Über GH Issue gemeldet.
- 4. Februar 2024: Im Commit behoben.
- Leere
Content-Length
-Werte werden als äquivalent zu 0
interpretiert und haben Vorrang vor allen nachfolgenden Content-Length
Werten.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der leere
Content-Length
-Werte vor nichtleeren weiterleitet und die nichtleeren Werte interpretiert. - Risiko: Hoch. Siehe Wandlerfehler 11.
- Nutzlast:
GET / HTTP/1.1rnContent-Length: rnContent-Length: 43rnrnPOST /evil HTTP/1.1rnContent-Length: 18rnrnGET / HTTP/1.1rnrn
- Betroffene Programme:
- WEBrick:
- 14. August 2023: Über GH-Ausgabe gemeldet.
- 15. August 2023: In PR behoben.
-
x00
wird von den Enden der Headerwerte entfernt.
- Anwendungsfall: ACL-Bypass
- Anforderungen: Ein Wandler, der
x00
in Header-Werten weiterleitet. - Risiko: Mittel. Siehe Wandlerfehler 12.
- Nutzlast:
GET / HTTP/1.1rnEvil: evilx00rnrn
- Betroffene Programme:
- WEBrick:
- 30. November 2023: Über GH-Ausgabe gemeldet.
- 3. Februar 2024: In PR behoben.
- Alle unbekannten Übertragungscodierungen werden als gleichwertig mit
chunked
behandelt.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der andere Transfer-Codierungen als
identity
und chunked
weiterleitet. Dies ist laut Norm zulässig. - Risiko: Hoch. Dies ermöglicht den Schmuggel von Anfragen gegen einige standardkonforme Wandler.
- Nutzlast:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: bleghrnrn1rnZrn0rnrn
- Betroffene Programme:
- FastHTTP:
- 4. Februar 2024: Per E-Mail gemeldet.
- 11. Februar 2024: Im Commit behoben.
- Verbindungen werden vorzeitig geschlossen, wenn eine ungültige Anfrage nach einer gültigen Anfrage weitergeleitet wird.
- Anwendungsfall: ???
- Anforderungen: Keine.
- Risiko: Keines.
- Nutzlast:
GET / HTTP/1.1rnConnection: closernrnInvalidrnrn
- Betroffene Programme:
- Mungo:
- 29. Januar 2024: Über GH Issue gemeldet.
- 13. Februar 2024: Im Commit behoben.
- Uvicorn:
- 29. Januar 2024: Über einen GH-Diskussionskommentar gemeldet.
- 6. Februar 2024: Versehentlich im Commit behoben.
- Bytes, die größer als
x80
sind, werden vom Anfang und Ende der Headerwerte entfernt.
- Anwendungsfall: Eine Vielzahl von Problemen.
- Anforderungen: Ein Wandler, der Host-Header weiterleitet, die Bytes größer als
x80
enthalten. - Risiko: Mittel.
- Nutzlast:
POST / HTTP/1.1rnHost: xffaxffrnTransfer-Encoding: xffchunkedxffrnrn1rnZrn0rnrn
- Betroffene Programme:
- Brötchen:
- 13. Februar 2024: Über GH Issue gemeldet.
- 13. Februar 2024: Bleibt unbehoben.
- Wenn ein ungültiger Block empfangen wird, wird die Verbindung nicht geschlossen und der Anfang der nächsten Nachricht wird nach dem ersten
rn
nach dem ungültigen Block platziert.
- Anwendungsfall: Vergiftung der Antwortwarteschlange.
- Anforderungen: Ein Wandler, der ungültige Chunks weiterleitet.
- Risiko: Mittel.
- Nutzlast:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnINVALID!!!rnGET / HTTP/1.1rnHost: whateverrnrn
- Betroffene Programme:
- Stumpen:
- 14. Februar 2024: Über GH Issue gemeldet.
- 14. Februar 2024: Bleibt unbehoben.
- Pipeline-Anfragen im anfänglichen Anfragepuffer werden als Nachrichtentext der ersten Anfrage im Puffer interpretiert, auch wenn sie einen
Content-Length: 0
-Header hat.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Wandler, der die Grenzen eingehender Stream-Elemente nicht verändert.
- Risiko: Gering. Mir ist kein solcher Wandler bekannt
- Nutzlast:
POST / HTTP/1.1rnContent-Length: 0rnConnection:keep-alivernHost: arnid: 0rnrnPOST / HTTP/1.1rnHost: arnid: 1rnContent-Length: 34rnrn
GET / HTTP/1.1rnHost: arnid: 2rnrn
- Betroffene Programme:
- Puma:
- 2. Februar 2024: Per E-Mail gemeldet.
- 2. Februar 2024: Im Commit behoben.
Fehler im Wandler
Hierbei handelt es sich um Fehler in der Art und Weise, wie Wandler Anfragen interpretieren, normalisieren und weiterleiten.
-
0x
-präfixierte Content-Length
Werte werden fälschlicherweise akzeptiert und weitergeleitet, ohne dass der Nachrichtentext validiert wird.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Server, der entweder
Content-Length
als sein längstes gültiges Präfix interpretiert oder 0x
-prefixed Content-Length
interpretiert. - Risiko: Mittel. Siehe Serverfehler 10, 29 und 32.
- Nutzlast:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnContent-Length: 0x10rnrnZ
- Betroffene Programme:
- Akamai-CDN:
- 7. September 2023: Per E-Mail gemeldet.
- 27. November 2023: Benachrichtigung über die Behebung per E-Mail.
- Ungültige Chunk-Size-Werte werden fälschlicherweise akzeptiert und weitergeleitet.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein HTTP/1.1-Backend-Server
- Risiko: Hoch. Dieser Fehler konnte zum Schmuggel von Anfragen gegen beliebige Backends ausgenutzt werden.
- Nutzlast:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnTransfer-Encoding: chunkedrnrnZrnZZrnZZZrnrn
- Betroffene Programme:
- Akamai-CDN:
- 7. September 2023: Per E-Mail gemeldet.
- 27. November 2023: Benachrichtigung über die Behebung per E-Mail.
-
r
ist fälschlicherweise in chunk-ext-Leerzeichen vor dem ;
zulässig. .
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Server, der
r
an diesem Standort falsch interpretiert. - Risiko: Hoch. Siehe Serverfehler 31.
- Nutzlast:
POST / HTTP/1.1rnHost: server.my-domain.coolrnTransfer-Encoding: chunkedrnrn2rr;arn02rn41rn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 430rnrn0rnrnGET / HTTP/1.1rnHost: server.my-domain.coolrnrn
- Betroffene Programme:
- Akamai-CDN:
- 7. September 2023: Per E-Mail gemeldet.
- 27. November 2023: Benachrichtigung über die Behebung per E-Mail.
- Apache-Verkehrsserver:
- 20. September 2023: Über GH-Ausgabe gemeldet.
- 13. Februar 2024: In PR behoben.
- Google Cloud Classic-Anwendungs-Load-Balancer:
- 13. September 2023: Gemeldet über Google IssueTracker.
- 30. Januar 2024: An oder vor diesem Datum behoben.
- Nachrichten, die ungültige Blöcke enthalten, werden ohne ihren Nachrichtentext weitergeleitet.
- Anwendungsfall: ???
- Anforderungen: N/A
- Risiko: Keines.
- Nutzlast:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1r0n
- Betroffene Programme:
- Pfund:
- 13. Juni 2024: Über GH-Ausgabe gemeldet.
- 14. Juni 2024: Im Commit behoben.
- Leere
Content-Length
Header werden fälschlicherweise weitergeleitet.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Server, der leere
Content-Length
-Werte als etwas anderes als 0 interpretiert - Risiko: Mittel. Siehe Serverfehler 38.
- Nutzlast:
GET / HTTP/1.1rnhost: whateverrncontent-length: rnrn
- Betroffene Programme:
- Apache-Verkehrsserver:
- 2. August 2023: Über GH-Ausgabe gemeldet.
- 6. August 2023: Über PR behoben.
- Unzulässige Bytes werden akzeptiert und innerhalb von Header-Namen weitergeleitet.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Server, der diese ungültigen Bytes in Header-Namen falsch interpretiert.
- Risiko: Mittel. Siehe Serverfehler 41.
- Nutzlast:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn
- Betroffene Programme:
- Apache-Verkehrsserver:
- 29. Juni 2023: Per E-Mail gemeldet.
- 18. September 2023: Über GH-Ausgabe gemeldet.
- 31. Januar 2024: Bleibt unbehoben.
- OpenBSD weitergeleitet:
- 10. November 2023: Per E-Mail gemeldet.
- 28. November 2023: Im Commit gepatcht.
- Chunk-Größen werden als ihr längstes gültiges Präfix interpretiert und erneut ausgegeben.
- Anwendungsfall: Schmuggel beantragen
- Anforderungen: Ein Server, der
0_
oder 0x
-Präfixe für Chunk-Größen interpretiert. - Risiko: Hoch. Siehe Server-Bugs 1 und 25 sowie Transducer-Bug 19.
- Nutzlast:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1these-bytes-never-get-validatedrnZrn0rnrn
- Betroffene Programme:
- Apache Traffic Server:
- 10. Oktober 2023: über GH -Ausgabe gemeldet.
- 13. Februar 2024: Fix in PR.
- Platzhalter :)
-
Transfer-Encoding: ,chunked
Header werden intakt weitergeleitet und als gleichwertig mit chunked
interpretiert.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, auf dem beide unbekannte
Transfer-Encoding
und Leckereien ignoriert werden ,chunked
im Unterschied von chunked
. - Risiko: Hoch. Siehe Server -Fehler 21.
- Nutzlast:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn
- Betroffene Programme:
- Azure CDN:
- 15. Oktober 2023: Bericht über den MSRC -Schwachstellenbericht.
- 29. November 2023: festgelegt an oder vor diesem Datum.
- 12. Dezember 2023: "Dieser Fall erfüllt die Messlatte nicht für die Wartung durch MSRC, da der HTTP -Schmuggel keine Anfälligkeit berücksichtigt und wir diesen Fall schließen werden."
- nghttpx:
- 14. Oktober 2023: gemeldet per E -Mail.
- 17. Oktober 2023: In pr.
-
r
wird fälschlicherweise in Header -Werten weitergeleitet.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, der
r
als gleichwertig zu rn
in den Headerfeldern behandelt. - Risiko: Medium. Siehe Server -Fehler 13.
- Nutzlast:
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn
- Google Cloud Classic Application Load Balancer:
- 7. September 2023: gemeldet über Google IssuETracker.
- 30. Januar 2024: festgelegt an oder vor diesem Datum.
- Leere Header
Content-Length
werden fälschlicherweise weitergeleitet, selbst in Gegenwart anderer Header Content-Length
, solange der Header mit leerem Content-Length
an erster Stelle steht.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, der
Content-Length
inhaltlich als 0 interpretiert und mehrere Header Content-Length
in eingehenden Anforderungen akzeptiert, wodurch die erste Priorisierung. - Risiko: Medium. Siehe Server -Fehler 42.
- Nutzlast:
GET / HTTP/1.1rnhost: whateverrncontent-length: rncontent-length: 59rnrnPOST /evil HTTP/1.1rnhost: whateverrncontent-length: 34rnrnGET / HTTP/1.1rnhost: whateverrnrn
- Betroffene Programme:
- Haproxy:
- 2. August 2023: über GH -Ausgabe gemeldet.
- 9. August 2023: festgelegt in Commit.
- 10. August 2023: Zugewiesen CVE-2023-40225.
-
x00
wird in Header -Werten weitergeleitet.
- Anwendungsfall: ACL -Bypass
- Anforderungen: Ein Server, der Header -Werte bei
x00
abschneidet. - Risiko: Medium. Siehe Server -Fehler 35 und 43 sowie der Transducer -Fehler 20.
- Nutzlast:
GET / HTTP/1.1rnHost: google.comx00.kallus.orgrnrn
- Betroffene Programme:
- Haproxy:
- 19. September 2023: gemeldet per E -Mail.
- 31. Januar 2024: festgelegt in Commit.
- OpenLiteSespeed:
- 3. November 2023: gemeldet per E -Mail.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
- Bare
n
wird als Techer -Terminator akzeptiert.
- Anwendungsfall: ???
- Anforderungen: n/a
- Risiko: Keine
- Nutzlast:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- Betroffene Programme:
- Haproxy:
- 25. Januar 2024: gemeldet per E -Mail.
- 30. Januar 2024: In commMits 7B737DA und 4837E99 festgelegt.
- Feldlinien mit Nr
:
Werden as-is weitergeleitet.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Backend -Server, der Fehlinterpretation von Feldzeilen mit Nr
:
. - Risiko: Medium. Siehe Transducer Bugs 28 und 37.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- Betroffene Programme:
- OpenLiteSespeed:
- 3. November 2023: gemeldet per E -Mail.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
- Anfragen, die sowohl
Content-Length
als auch Transfer-Encoding
Header enthalten, werden als IS weitergeleitet, wenn der Transfer-Encoding
nicht erkannt wird.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Backend-Server, der sich behandelt
,chunked
chunked
priorisiert Transfer-Encoding
gegenüber Content-Length
. Diese Verhaltensweisen sind nach den Standards zulässig. - Risiko: Hoch. Dies ermöglicht den Anforderungsschmuggel auf Standards-konforme Server.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn
- Betroffene Programme:
- OpenLiteSespeed:
- 3. November 2023: gemeldet per E -Mail.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
- Pfund:
- 4. Februar 2024: über GH -Ausgabe gemeldet.
- 29. März 2024: festgelegt in Commit.
-
n
wird in weitergeleiteten Nachrichten nicht auf rn
normalisiert.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Backend -Server, der
n
nicht als eine Zeile interpretiert, die in Kopfzeilen endet. Mit dem Standard können Server n
zu übersetzen
. - Risiko: Hoch. Dieser Fehler ist gegen Standards für Standards ausnutzbar.
- Nutzlast:
GET / HTTP/1.1nHost: whatevernConnection: closenn
- Betroffene Programme:
- OpenLiteSespeed:
- 3. November 2023: gemeldet per E -Mail.
- 31. Januar 2024: bleibt unfixiert.
- Chunked Message-Körper, die vor dem Terminator-Stück zusätzliche
rn
enthalten, sind nicht verändert, ohne den Transfer-Encoding
Header durch Content-Length
zu ersetzen.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Keine.
- Risiko: Hoch. Dieser Fehler kann gegen willkürliche Backend -Server ausbeuten.
- Payload:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn17rn0rnrnGET / HTTP/1.1rnrnrnrn0rnrn
- Betroffene Programme:
- OpenLiteSpeed
- 30. November 2023: gemeldet per E -Mail.
- 10. Juli 2024: Behoben an oder vor diesem Datum.
-
Transfer-Encoding: ,chunked
Header werden intakt weitergeleitet und nicht als chunked
interpretiert.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server
,chunked
der als gleichwertig chunked
ist, was der Standard entspricht. - Risiko: Hoch. Dies ist ein Antragsschmuggelschmuggel, der für Standards-konforme Backends verwendet werden kann.
- Nutzlast:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- Betroffene Programme:
- OpenBSD Relayd:
- 10. November 2023: gemeldet per E -Mail.
- 28. November 2023: Patch in Commit.
- Chunk -Größe mit
+
, -
und 0x
Präfixen werden interpretiert und weitergeleitet.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, der die Chunk -Größen als das am längsten gültige Präfix interpretiert.
- Risiko: Hoch. Siehe Server -Fehler 22.
- Nutzlast:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- Betroffene Programme:
- OpenBSD Relayd:
- 10. November 2023: gemeldet per E -Mail.
- 28. November 2023: Patch in Commit.
- Pfund:
- 10. Oktober 2023: über GH -Ausgabe gemeldet.
- 11. Oktober 2023: Behoben über Commits 60A4F42 und F70DB92.
- Header, die
x00
oder n
enthalten, werden in den Wert des vorherigen Headers verkettet.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Alle Standards-konformen Backend-Server.
- Risiko: Hoch. Dies ist eine generische Anfrageschmuggelschmuggelverfälligkeit.
- Nutzlast:
GET / HTTP/1.1rna:brncx00rnrn
- Betroffene Programme:
- OpenBSD Relayd:
- 10. November 2023: gemeldet per E -Mail.
- 29. November 2023: Patch in Commit.
- Nachrichtenkörper werden von
GET
-Anfragen entzogen, ohne ihre Header Content-Length
zu entfernen.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Jeder Backend -Server, der Pipelining unterstützt.
- Risiko: Hoch. Dies ist eine generische Anfrageschmuggelschmuggelverfälligkeit.
- Nutzlast:
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- Betroffene Programme:
- OpenBSD Relayd:
- 28. November 2023: gemeldet per E -Mail.
- 1. Dezember 2023: Patch in Commit.
- Anfragen, die mehrere Header mit mehreren
Content-Length
enthalten, werden weitergeleitet, wodurch die letzten Prioritäten vorgenommen werden.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, der Anfragen annimmt, die mehrere Header mit mehreren
Content-Length
enthält und die erste Priorität priorisieren. - Risiko: Hoch. Siehe Server -Fehler 23.
- Nutzlast:
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn
- Betroffene Programme:
- OpenBSD Relayd:
- 30. November 2023: gemeldet per E -Mail.
- 10. Juli 2024: bleibt unfixiert.
- Anfragen, die sowohl
Content-Length
als auch Transfer-Encoding
enthalten, werden weitergeleitet.
- Anwendungsfall: Anfragenschmuggel anfordern
- Anforderungen: Ein Server, der
Content-Length
gegenüber Transfer-Encoding
priorisiert oder keine Transfer-Encoding: chunked
. - Risiko: Hoch. Dies ist der klassische Anfrage -Schmuggelvektor.
- Nutzlast:
POST / HTTP/1.1rnHost: arnCon