🇰🇷 한글 설명
Gotenberg 8.32.0 이전 버전에서 DNS 재바인딩 공격을 통해 내부 IP 주소에 접근 가능한 취약점입니다. FilterOutboundURL은 첫 DNS 조회 시 공개 IP를 확인하지만, Chromium이 재조회할 때 공격자가 제어하는 내부 IP를 반환하도록 조작하면 내부 서비스에 접근할 수 있습니다.
💡 쉬운 설명
Gotenberg의 보안 검사를 우회하는 DNS 트릭 공격입니다. 공격자가 DNS를 조종하여 검사 때는 안전한 IP를 보여주고, 실제 접속할 때는 내부 서버 IP로 연결시켜 내부 정보를 PDF로 탈취할 수 있습니다.
🇺🇸 원문 (English)
Gotenberg is a Docker-powered stateless API for PDF files. Prior to 8.32.0, FilterOutboundURL resolves the hostname, checks the resolved IPs against the private-address deny-list, and returns only the error. It discards the resolved addresses. Chromium later performs its own DNS resolution when it navigates to the URL. An attacker who controls DNS for a hostname with a short TTL returns a public IP on the first query (Gotenberg allows) and a private IP on the second query (Chromium connects to the attacker-chosen internal address). The CDP Fetch.requestPaused handler re-checks the URL but runs its own DNS resolution, leaving a timing window before Chromium's actual TCP connect. The rendered internal service response returns to the caller as a PDF. This vulnerability is fixed in 8.32.0.
📍 영향받는 시스템
Gotenberg < 8.32.0 (Docker 이미지)
⚔️ 공격 벡터
DNS 재바인딩을 통한 TOCTOU 공격으로 내부 IP 접근 및 서비스 응답 탈취
🛡️ 대응 방법
Gotenberg를 8.32.0 이상으로 업그레이드
🔧 검증 코드
표시되는 버전이 8.32.0 이상이면 안전함. 8.31.x 이하이거나 버전 정보가 없으면 취약함.
docker images | grep -i gotenberg | awk '{print $2}'