Proxy / WAF Protections Bypass
경로 이름 조작을 통한 Nginx ACL 규칙 우회
이 연구에서 기술된 기법들.
Nginx 규칙 예시:
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는 /admin.php
에 대한 액세스를 차단하도록 구성되어 있지만, /admin.php/index.php
에 액세스하여 이를 우회할 수 있습니다.
방지 방법
Mod Security 규칙 우회
경로 혼란
이 게시물에서는 ModSecurity v3 (3.0.12 버전까지)이 REQUEST_FILENAME
변수를 부적절하게 구현하여 액세스된 경로를 포함해야 했지만 (매개변수의 시작까지), 실제로는 경로를 얻기 위해 URL 디코딩을 수행했기 때문에 설명되었습니다.
따라서 Mod Security에서 http://example.com/foo%3f';alert(1);foo=
와 같은 요청은 %3f
가 URL 경로를 끝내는 ?
로 변환되어 경로가 /foo
일 것으로 가정하지만, 실제로 서버가 받게 될 경로는 /foo%3f';alert(1);foo=
가 됩니다.
변수 REQUEST_BASENAME
및 PATH_INFO
도 이 버그의 영향을 받았습니다.
Mod Security의 버전 2에서도 비슷한 일이 발생했는데, 백업 파일과 관련된 특정 확장자를 가진 파일에 액세스를 방지하는 보호 기능을 우회할 수 있었습니다 (예: .bak
) 단순히 점을 URL 인코딩된 %2e
로 보내는 것으로, 예를 들어: https://example.com/backup%2ebak
.
AWS WAF ACL 우회
형식이 잘못된 헤더
이 연구는 AWS WAF 규칙을 우회할 수 있었던 것으로 언급했습니다. 이는 AWS가 제대로 구문 분석하지 못한 "형식이 잘못된" 헤더를 보내어 우회할 수 있었지만 백엔드 서버에서는 제대로 구문 분석되었습니다.
예를 들어, 다음 요청을 SQL 인젝션을 포함한 헤더 X-Query로 보내는 것:
AWS WAF 우회가 가능했던 이유는 헤더 값의 다음 줄이 값의 일부라는 것을 이해하지 못했기 때문이었습니다. NODEJS 서버는 이를 이해했지만 (이는 수정되었습니다).
참고 자료
Last updated