
개념 증명(PoC)으로, Matomo의 SiteContentDetector에서 인증된 블라인드 SSRF를 시연하며, 조작된 사이트 URL을 통해 내부 네트워크 정찰 및 내부 서비스에 대한 요청을 가능하게 합니다.
이름: CYBER-SEC
연락처: [email protected]
Matomo는 인증된 사이트 관리자가 사이트의 main_url을 내부 주소로 구성할 수 있게 합니다. 보기 권한이 있는 모든 인증된 사용자는 이후 getTrackingMethodsForSite를 트리거하여 서버가 구성된 URL로 블라인드 HTTP 요청을 수행하도록 만들 수 있습니다.
대상은 호스트 이름 기반 보호로만 검증되며, 해석 후 루프백, RFC1918 또는 링크-로컬 주소를 제대로 거부하지 않습니다. 결과적으로 이 애플리케이션은 내부 서비스에 대한 블라인드 서버 측 요청을 수행하는 데 악용될 수 있습니다.
제품: Matomo
영향을 받는 버전: 5.11.2 확인됨
구성 요소: SiteContentDetector / SitesManager
벡터: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
기본 점수: 5.8 중간
enable_internet_features가 활성화되어 있어야 합니다.main_url을 설정하려면 인증된 사이트 관리자가 필요합니다.이 문제는 다음 흐름을 포함합니다:
소스:
SitesManager.updateSite는 기본 URL 검증 후 main_url을 저장합니다.
트리거:
GET /index.php?module=SitesManager&action=getTrackingMethodsForSite&idSite=<id>
싱크:
SiteContentDetector::requestSiteResponse()
-> Http::sendHttpRequestBy()
구현은 다음과 같은 내부 대상을 제대로 거부하지 않습니다:
127.0.0.0/8
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
169.254.0.0/16
::1
fc00::/7
fe80::/10
리디렉션 대상도 다시 검증해야 합니다. 초기 허용 호스트 이름이 내부 주소로 리디렉션되는 경우 호스트 이름 기반 필터링이 우회될 수 있기 때문입니다.
승인된 실험실 환경에서 제어하는 리스너를 사용하십시오:
python3 -m http.server 8088
인증된 사이트 관리자로서 사이트의 main_url을 제어된 내부 리스너를 가리키도록 구성하십시오:
http://<제어된-내부-리스너>:8088/ssrf-test
해당 환경을 소유하고 테스트할 권한이 없는 한 제3자 시스템이나 클라우드 메타데이터 엔드포인트를 테스트하지 마십시오.
보기 권한이 있는 인증된 사용자로서 다음을 트리거하십시오:
GET /index.php?module=SitesManager&action=getTrackingMethodsForSite&idSite=1
제어된 리스너는 Matomo 서버로부터 서버 측 HTTP 요청을 수신합니다.
리스너 출력 예시:
GET /ssrf-test HTTP/1.1
Host: <제어된-내부-리스너>:8088
User-Agent: Matomo
getTrackingMethodsForSite가 트리거되면 Matomo는 구성된 main_url로 서버 측 GET 요청을 수행합니다.
이는 외부에서 접근할 수 없는 내부 루프백/내부 HTTP 리스너를 사용하여 확인되었으며, 블라인드 SSRF 동작을 입증합니다.
인증된 공격자는 이 동작을 다음과 같은 목적으로 악용할 수 있습니다:
SSRF가 블라인드이므로 공격자는 Matomo를 통해 HTTP 응답 본문을 직접 수신하지 않습니다. 그러나 요청 전달만으로도 내부 네트워크 및 클라우드 환경에서 보안상 중요할 수 있습니다.
권장 수정 사항:
요청을 수행하기 전에 호스트 이름을 IP 주소로 해석하십시오.
DNS 해석 후 사설, 루프백, 링크-로컬, 멀티캐스트 및 기타 안전하지 않은 IP 범위를 거부하십시오.
리디렉션을 따르기 전에 모든 리디렉션 대상을 다시 검증하십시오.
호스트 이름 차단 목록 대신 허용된 아웃바운드 도메인의 엄격한 허용 목록을 선호하십시오.
사이트 URL 구성 중에만이 아니라 최종 HTTP 요청 싱크에서 일관되게 SSRF 보호를 적용하십시오.
getTrackingMethodsForSite 또는 SiteContentDetector 트리거를 더 높은 권한의 사용자로 제한하는 것을 고려하십시오.
사이트 구성에 의해 트리거된 아웃바운드 서버 측 요청에 대한 감사 로깅을 추가하십시오.
소스 코드를 수정하지 않고 공식 Matomo 5.11.2 Docker 이미지에 대해 확인되었습니다.
이 문제는 CYBER-SEC에 의해 보고되었습니다.