인증되지 않은 블라인드 SSRF in Oracle EBS
Source: Dev.to

타사 상용 애플리케이션을 테스트할 때, 목표는 종종 공급업체가 충분한 테스트를 수행했으며 배포에 눈에 띄는 문제가 없다는 것을 고객에게 보증하는 것입니다.
Oracle의 상용 소프트웨어를 테스트하던 중 낮은 위험도의 SSRF가 발견되었습니다. 이 취약점은 내부 및 외부 호스트의 포트를 열거할 수 있게 하며, 일부 연구자에게는 흥미로운 대상이 될 수 있습니다.
Exploit
이 문제는 이전에 XXE 취약점에 사용된 엔드포인트를 퍼징하던 중 발견되었습니다. 기본 DOCTYPE 선언을 전송했으며, handy collaborator 페이로드가 서버가 제공된 URL을 해석하려고 시도했음을 보여주었습니다.
불필요한 헤더/파라미터를 제거하고 대상 정보를 가린 요청은 다음과 같습니다:
POST /OA_HTML/lcmServiceController.jsp HTTP/1.1
Host: victim.com
Content-Length: 56
요청은 타임아웃되었지만 Burp 이슈 로그에 DNS 조회가 기록되어 방화벽이 개입했음을 알 수 있었습니다. TCP/443(HTTPS)으로도 동일한 결과가 나오자, 동료가 외부 IP의 다양한 포트에서 요청을 수신하도록 설정해 포트 번호를 열거할 수 있었습니다(예: 위 요청에서 “80”).
관찰된 응답 유형은 다음과 같습니다:
- Timeout – 방화벽이 요청을 차단함.
- HTTP 200 및 “A remote host refused an attempted connect operation.” – 해당 호스트/포트에 도달했지만 열려 있지 않음.
- HTTP 200 및 “Unexpected text in DTD.” – 해당 호스트/포트에 도달했고 열려 있음.

이 정보를 활용하면 응답 유형을 모니터링하여 내부 및 외부 호스트와 포트를 열거할 수 있었습니다. 또한 file:// 프로토콜을 사용해 파일 존재 여부를 확인할 수 있었습니다. 다른 프로토콜을 이용해 해시를 가져오려 시도했지만 이번 경우에는 불가능했습니다.
Disclosure Timeline
- 2018년 4월: 문제를 발견하고 Oracle에 보고.
- 2018년 8월: Oracle이 문제를 확인하고 주요 코드 라인을 수정.
- 2018년 10월: Oracle Critical Patch Update가 발표되었으며, 여기에는 해당 수정이 포함됨 – Oracle CPU 2018년 10월 advisory 참고.
- 2018년 2월: 취약점에 대한 블로그 포스트가 공개.