SSRF

SSRF란 서버의 요청을 변조할 수 있는 취약점입니다.
웹 서버는 일반 사용자가 접근할 수 없는 자신이나 연결되어 있는 다른 백엔드 서비스에 접근이 가능합니다.
이런 서버의 요청을 조작한다면 해당 권한으로 일반 사용자에게 인가되지 않은 파일을 열람하거나 수정하는 행위를
가능하게 합니다. 대부분의 경우 http(s) 프로토콜만을 허용하지만 필터가 적용되지 않은 경우
data:// , ftp:// 와 같이 여러 프로토콜을 사용해 공격에 응용할 수 있어 광범위한 영향을 미칠 수 있는 취약점이라 할
수 있습니다.

출처 : https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html#case-1-application-can-send-request-only-to-identified-and-trusted-applications%2034

서버가 웹 앱과 같이 다른 어플리케이션에서 이미지, API 통신과 같이 정보를 받아오기 위해 GET 또는 POST 방식을 통해 파라미터를 전송한다면 해당 파라미터에서 SSRF가 일어날 수 있습니다. 특히 링크 또는 도메인 이름, FQDN을 포함하는 모든 URL 매개변수가 Injection Point로 접근하면 될 것 같습니다.

stockApi는 SSRF를 터트릴 수 있는 Point로 유추해볼 수 있습니다.

Burp Suite의 Intruder 기능을 사용하여 Brute Force를 통해 내부 사설 IP를 찾아볼 수도 있습니다. 이를 통해 내부망
내의 다른 어플리케이션에 직접적으로 접근이 가능하고, 공격을 수행할 수 있게 됩니다.

다음은 SSRF에 대한 보안 대책입니다. Filtering 혹은 Least Privilege Policy를 적용하여 SSRF에 대비해야 합니다.

SSRF 보안

  • 되도록 내부 애플리케이션과 통신하는 입력에 대해 사용자가 개입할 수 없도록 구성
  • 시스템은 HTTP 및 HTTPS와 같은 극소수의 포로토콜만으로 제한
  • White List 기반으로 필터를 사용

다만 이러한 보안조치 이후에도 이를 무력화하는 방법들도 존재하는데요. 이는 다음과 같습니다.

SSRF bypass

  • localhost 와 같이 URL 필터링이 적용되는지 확인
  • 내부 사설 IP를 brute force를 통해 찾을 수 있음
  • IP 난독화를 사용하여 필터 우회
  • URL 표현방법 중 @ (host), # (fragment) 를 사용해서 White List 우회

참고 자료 : https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass

 

실제 버그바운티 분야에서 발견되는 SSRF에 대한 보고서를 살펴보겠습니다.

https://hack-ed.net/2017/11/07/a-nifty-ssrf-bug-bounty-write-up/

 

A Nifty SSRF Bug Bounty Write Up

Due to the positive response I got on my previous write up, I figured I’d keep the ball rolling and do another. Thank you to everyone who shared the last post, and I hope that you find this w…

hack-ed.net

SSRF가 터질 수 있는 Url 파라미터를 필자도 인지하고 익스를 시도했습니다.

실제로 SSRF가 터지는 포인트는 맞으나 어플리케이션에서는 Output 데이터에 대한 타입을 검증해서 JSON 형식이 아니라면 오류를 반환하도록 만들었습니다.
때문에, 직접적으로는 파일을 열람할 수 없어 X-Forwarded-For 헤더를 사용하여 SSRF를 응용하게 됩니다.

  • X-Forwarded-For : HTTP Server에 요청한 Client의 IP를 식별하기 위한 표준으로 사용
    • Proxy & cashing Server가 존재할 경우 웹 서버는 Proxy에 접속한 것으로 인식함
    • 그렇기 때문에 웹 서버는 실제 클라이언트의 IP가 아닌 앞단에 있는 Proxy Server IP를 Request IP로 인식
    • Client IP -> Proxy IP -> Web Server

XFF 헤더에는 내부 IP가 노출되어 있어 해당 IP에 대한 포트 스캔을 시도했습니다. 

Open Port와의 응답시간을 비교하여 판단

이는 내부 IP에 대해 방화벽을 우회하여 포트 스캔이 가능함을 의미하게 됩니다.

SSRF를 통해 Port Scan이 가능하다는 점. SSRF의 광범위한 영향을 보여주는 보고서가 아닌가 싶습니다.
외에도 Redirect를 활용하여 SSRF Point에서 XSS를 터트린다거나 CRLF를 같이 사용하여 Exploit을 하는 보고서 등
다양한 기술과 더불어 창의적인 익스 방식을 엿볼 수 있었습니다. 현재 버그바운티 분야에서도 종종 발견되고 있는 취약점이니 여러 기술과 응용하여 SSRF를 알아둔다면 도움이 될 것 같습니다.

'WEB' 카테고리의 다른 글

Data URIs  (1) 2022.02.16

+ Recent posts