Proxy / WAF Protections Bypass
Umgehen von Nginx ACL-Regeln durch Pfadmanipulation
Techniken aus dieser Forschung.
Beispiel für eine Nginx-Regel:
NodeJS - Express
Nginx Version | Node.js Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Flask
Nginx Version | Flask Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Spring Boot
Nginx Version | Spring Boot Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
PHP-FPM
Nginx FPM configuration:
Nginx ist so konfiguriert, dass der Zugriff auf /admin.php
blockiert wird, aber es ist möglich, dies zu umgehen, indem man auf /admin.php/index.php
zugreift.
Wie man das verhindert
Umgehen von Mod Security Regeln
Pfadverwirrung
In diesem Beitrag wird erklärt, dass ModSecurity v3 (bis 3.0.12) die Variable REQUEST_FILENAME
fehlerhaft implementiert hat, die den aufgerufenen Pfad enthalten sollte (bis zum Beginn der Parameter). Dies liegt daran, dass es eine URL-Dekodierung durchgeführt hat, um den Pfad zu erhalten.
Daher wird eine Anfrage wie http://example.com/foo%3f';alert(1);foo=
in Mod Security annehmen, dass der Pfad nur /foo
ist, weil %3f
in ?
umgewandelt wird und den URL-Pfad beendet. Tatsächlich wird der Pfad, den ein Server erhalten wird, jedoch /foo%3f';alert(1);foo=
sein.
Die Variablen REQUEST_BASENAME
und PATH_INFO
waren ebenfalls von diesem Fehler betroffen.
In Version 2 von Mod Security trat etwas Ähnliches auf, das es ermöglichte, einen Schutz zu umgehen, der verhinderte, dass Benutzer auf Dateien mit bestimmten Erweiterungen im Zusammenhang mit Sicherungskopien (wie z. B. .bak
) zugreifen konnten, indem einfach der Punkt URL-codiert in %2e
gesendet wurde, zum Beispiel: https://example.com/backup%2ebak
.
Umgehen von AWS WAF ACL
Fehlerhafte Header
Diese Forschung erwähnt, dass es möglich war, AWS WAF-Regeln, die über HTTP-Header angewendet wurden, zu umgehen, indem ein "fehlerhafter" Header gesendet wurde, der von AWS nicht ordnungsgemäß analysiert wurde, aber vom Backend-Server wurde.
Beispielsweise durch das Senden der folgenden Anfrage mit einem SQL-Injection im Header X-Query:
Es war möglich, AWS WAF zu umgehen, weil es nicht verstand, dass die nächste Zeile Teil des Werts des Headers ist, während der NODEJS-Server dies tat (dies wurde behoben).
Referenzen
Last updated