
실전 취약점 관리 사례 연구: Wazuh가 WeasyPrint에서 실제 SSRF(CVE-2025-68616)를 플래그한 방법과 제가 이를 재현하고 패치한 방법
Kali Linux 머신에서 Wazuh(오픈 소스 SIEM/XDR)를 사용한 개인 연습 중 취약점 탐지 모듈이 WeasyPrint 패키지에서 높음(CVSS 7.5) 심각도의 취약점(SSRF 보호 우회, CVE-2025-68616)을 식별했습니다. 이 발견을 조사하고, 로컬 개념 증명(PoC)으로 문제를 재현한 후, 프로젝트의 패치된 버전을 적용하고 익스플로잇이 더 이상 작동하지 않음을 확인했습니다. 이 저장소는 탐지, 분석, PoC 및 조치에 이르는 전체 과정을 문서화합니다.
Wazuh는 로그 수집, 파일 무결성 모니터링(FIM), 이상 탐지, 그리고 모니터링 대상 호스트에 설치된 소프트웨어에 대한 취약점 탐지(패키지 인벤토리를 CVE 데이터베이스(NVD 등)와 교차 참조)를 결합한 오픈 소스 보안 플랫폼(SIEM + XDR)입니다.
이 연습에서 Wazuh 에이전트는 Kali GNU/Linux 2025.4 머신에서 실행되었으며, 매니저, 인덱서, 대시보드도 로컬에서 실행되었습니다. 발견에 도달하기 전에 환경은 이미 PAM 로그인 세션, sudo 실행, 수신 포트 변경, rootcheck 이상 이벤트가 Threat Hunting 모듈에서 모두 표시되는 등 활성 모니터링이 올바르게 작동하고 있었습니다.
Wazuh의 취약점 탐지 모듈이 Kali 에이전트에서 weasyprint 패키지와 관련된 1개의 심각도 취약점을 보고했습니다.
WeasyPrint는 HTML/CSS를 PDF 문서로 변환하는 Python 라이브러리로, 웹 애플리케이션에서 보고서, 송장 및 동적 문서를 생성하는 데 널리 사용됩니다.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:Ncpe:2.3:a:kozea:weasyprint:*:*:*:*:*:*:*:*, 68.0 제외)설명: 버전 68.0 미만에서 WeasyPrint의 default_url_fetcher에 SSRF 보호 우회가 존재합니다. 이 취약점으로 인해 공격자가 개발자가 사용자 정의 url_fetcher를 구현하여 해당 접근을 차단한 경우에도 내부 네트워크 리소스(예: localhost 서비스 또는 클라우드 메타데이터 엔드포인트)에 접근할 수 있습니다. 이는 기본 urllib 라이브러리가 개발자의 보안 정책에 대해 새 대상을 재검증하지 않고 HTTP 리디렉션을 자동으로 따르기 때문에 발생합니다. 버전 68.0에는 이 문제에 대한 패치가 포함되어 있습니다.
참고 자료:
패치 적용 전 실제 영향을 확인하기 위해 시스템에 설치된 취약한 버전을 대상으로 로컬 익스플로잇 시나리오를 구성했습니다.
1. 패치가 적용된 저장소를 클론 (메인 브랜치로, 이미 버전 68.0의 수정 사항 포함):
git clone https://github.com/Kozea/WeasyPrint.git
2. 수정된 코드를 검토 - 특히 weasyprint/urls.py에서 default_url_fetcher 로직과 리디렉션 처리가 있는 부분:
3. 악성 HTML 파일을 생성 - iframe을 통해 로컬 시스템 파일을 유출하려고 시도하며, CVE에 설명된 SSRF/무단 리소스 접근 벡터를 시뮬레이션합니다 (참고: 아래 파일 이름과 파일 내용은 스크린샷의 터미널 출력과 일치하도록 실행된 그대로 유지됨):
cat << 'EOF' > ataque.html
<!DOCTYPE html>
<html>
<head>
<title>PoC SSRF - WeasyPrint</title>
</head>
<body>
<h1>Prueba de Exfiltración de Archivos Locales</h1>
<p>Si el parche no está aplicado, el contenido de abajo debería mostrar el archivo /etc/passwd:</p>
</body>
</html>
EOF
python3 -m weasyprint ataque.html resultado_vulnerable.pdf
xdg-open resultado_vulnerable.pdf
4. 결과: 생성된 PDF를 열면 file:///etc/passwd를 가리키는 iframe이 비어 있으며 시스템 파일의 내용이 없습니다. 이는 패치된 버전에서 승인되지 않은 리소스에 접근하려는 시도가 올바르게 차단됨을 확인합니다.
git clone하여 수정된 코드 획득 (패치 커밋 b6a14f0... 포함 브랜치).iframe을 통한 file:///etc/passwd 리소스 접근을 더 이상 허용하지 않음을 검증.url_fetcher 우회를 통한 SSRF)를 이해하는 데 핵심적이었습니다.교육 목적으로 개인 격리 환경(Kali Linux + Wazuh 로컬 실행)에서 수행된 연습입니다. 제3자 시스템에는 접근하지 않았습니다.