티스토리 뷰
[nginx] Path Traversal via misconfiguration in location alias(off-by-slash)
알 수 없는 사용자 2022. 2. 25. 16:57
취약점 설명
nginx는 가볍고 높은 성능을 목표로하는 웹서버이다. 웹서버, 리버스 프록시, 로드 밸런서, 메일 프록시, HTTP 캐시 등의 기능을 가진다.
nginx 설정 시 location 경로를 지정할 때 root 나 alias 를 설정할 수 있는데, alias 는 특정 URL이 서빙할 파일 경로를 변경하는 역할을 한다.
location /posts/ {
alias /data/blogs/;
}
만약 클라이언트 사용자가 /posts/domdom.png 파일을 요청했다고 했을 때, /data/blogs/domdom.png 경로에 있는 파일을 클라이언트에게 응답할 것이다.
여기서 만약 location 이 디렉터리 구분자인 / 로 끝나지 않게 되면,
location /posts {
alias /data/blogs/;
}
클라이언트 사용자가 /posts../app/config.ini 로 요청했을 때, /data/app/config.ini 경로에 있는 파일을 클라이언트에게 응답하게 된다.
이런 alias에 대한 잘못된 설정으로 인해 공격자에게 대상 디렉토리를 벗어나서 파일을 읽을 수 있게 하는 취약점이다.
참고로 alias 뿐만 아니라 proxy_pass 에도 동일하게 적용된다고 한다. 그리고 한 단계 상위 경로까지만 올라갈 수 있다.
해당 취약점은 nginx misconfiguration, nginx off-by-slash fail, nginx path traversal, nginx alias traversal 등 다양한 이름으로 불린다.
해결법
모든 nginx alias 디렉티브들을 아래와 같이 반드시 디렉토리 구분자인 / 로 끝나게 하면 된다.
location /posts/ {
alias /data/blogs/;
}
취약점 원인 분석
만약 아래와 같은 location 설정이 있다고 가정하면,
location /api {
proxy_pass http://domdomserver/api/v1/;
}
클라이언트 사용자가 서버에 /api/user 로 요청했을 때, nginx 서버에서는 먼저 URL에서 /api 와 일치하는 것이 있는지 확인하고 일치하는 부분을 제거한다. 그러면 /api/user에서 남은 것으로는 /user 만 남는다. 그런 다음에 이제 proxy_pass 에 정의되어 있는 값을 추가시켜 최종적으로 http://domdomserver/api/v1//user 가 되도록 한다. 주목해야할 점으로는 /(슬래시)가 2개인 점이다. proxy_pass 에서 location 디렉티브를 / 로 끝내지 않았기 때문에 생긴 문제이다.
그리고 일반적으로 대부분의 웹 서버에서는 /(슬래시)가 2개면 한 개로 변환해주는 로직을 가지고 있기 때문에 nginx 를 거치고 최종적으로 웹서버를 거치면 http://domdomserver/api/v1/user 의 URL형태가 된다.
그러면 당연히 위에서도 언급한 ../ (double-dot and slash)를 사용해서 /api../v2/user 형태로 보냈다고 가정하면, 최종적으로 URL은 http://domdomserver/api/v2/user 와 같은 형태가 될 수 있다.
nginx 서버에 이런 잘못된 설정이 존재하는지 확인하는 통상적인 방법으로는 아래의 서로 다른 요청들이 동일한 응답을 보내오는지 확인하면 된다.
/api/user -> http://domdomserver/v1//user -> http://domdomserver/v1/user
/apiuser -> http://domdomserver/v1/user
마무리
nginx 측에서는 해당 사항을 취약점이라고 판단하지 않았기 때문에 취약점으로 분류되지 않고 단순히 잘못된 설정으로 취급되는 것 같다. 2016년도부터 알려지기 시작한 취약점이라고 한다. 해당 취약점에 대해서 발표한 PPT가 있는데 참고하기 좋은 것 같다.
참고자료
https://portswigger.net/bappstore/a5fdd2cdffa6410eb530de5a4c294d3a
https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/
https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/
'보안 > Research' 카테고리의 다른 글
[악성코드] 파이썬 악성 패키지(Malicious Package) 분석(Analysis) - beautifulsup4 (0) | 2022.11.12 |
---|---|
[Research] Blind XXE - XXE OOB(Out-of-band) 공격 기법 (2) | 2022.04.16 |
[Research] 문제풀이를 통한 javascript 동적 로딩 이해하기 (0) | 2022.03.25 |
[Research] Crack Flask Cookies (Secret Key) (8) | 2021.12.12 |
[Research] Unicode Case Mapping Collisions (0) | 2021.12.08 |