🇰🇷 한글 설명
Mealie의 AsyncSafeTransport SSRF 방어 기제에서 DNS Rebinding 취약점이 발견되었습니다. 검증 시 사용된 IP와 실제 요청 시 사용되는 호스트네임이 일치하지 않아, 공격자가 DNS 응답을 조작하여 내부 네트워크나 클라우드 메타데이터 서비스에 접근할 수 있습니다.
💡 쉬운 설명
웹사이트가 주소를 확인할 때는 안전한 곳인지 확인하지만, 실제 데이터를 가져올 때는 공격자가 조작한 가짜 주소로 연결될 수 있는 허점이 있습니다. 이를 통해 공격자는 내부 네트워크에 숨겨진 중요한 정보에 접근할 수 있습니다.
🇺🇸 원문 (English)
Mealie's AsyncSafeTransport SSRF guard (mealie/pkgs/safehttp/transport.py) resolves a target hostname once, checks the resolved IP against private-range rules, but then issues the actual outbound HTTP request using the original hostname, which the underlying async transport re-resolves independently. Because the validated IP is never pinned to the actual connection, a DNS-rebinding attacker (returning a public IP to the validation lookup and a private/metadata IP to the real connection) defeats the guard. This is reachable by any authenticated user via /api/recipes/create/url, /api/recipes/test-scrape-url, and /api/recipes/{slug}/image, and the scraper reflects fetched content back to the requester, allowing an authenticated user to read internal HTTP services and cloud-metadata endpoints.
📍 영향받는 시스템
Mealie (AsyncSafeTransport SSRF guard가 포함된 버전)
⚔️ 공격 벡터
인증된 사용자가 API를 통해 DNS Rebinding 공격을 수행하여 내부 서비스에 접근
🛡️ 대응 방법
검증된 IP를 실제 연결에 고정(Pinning)하도록 코드를 수정하거나 DNS Rebinding 방지 로직을 적용한 최신 패치 적용
🔧 검증 코드
설치된 Mealie의 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 대조합니다.
pip show mealie 2>/dev/null | grep Version