🇰🇷 한글 설명
EspoCRM 10.0.4 미만 버전에서 서버 측 요청 위조(SSRF) 취약점이 발견되었습니다. 내부 IP 주소를 차단하는 검증 로직이 NAT64, 6to4, Teredo와 같은 IPv6 전환 주소를 제대로 인식하지 못해 내부 네트워크 서비스로의 요청을 허용할 수 있습니다.
💡 쉬운 설명
해커가 특수한 주소를 이용해 보안 검사를 우회함으로써, 회사의 내부 서버에 몰래 접근하거나 명령을 내릴 수 있는 취약점입니다. 인증된 사용자가 이미지 첨부 기능이나 웹훅 기능을 악용하여 공격할 수 있습니다.
🇺🇸 원문 (English)
EspoCRM before 10.0.4 is vulnerable to server-side request forgery. HostCheck::ipAddressIsNotInternal(), which validates outbound URLs to block requests to internal/private IP addresses, strips ::ffff: (IPv4-mapped IPv6) prefixes but does not recognize IPv6 transition addresses that embed private IPv4 addresses: NAT64 (64:ff9b::), 6to4 (2002::), and Teredo (2001:0000::). An attacker who controls a domain with AAAA records pointing to such transition addresses can bypass both the internal-host validation and the CURLOPT_RESOLVE IP-pinning check, causing EspoCRM to issue outbound requests to internal network services. Affected paths include POST /Attachment/fromImageUrl, reachable by any authenticated user with attachment access, and outbound webhook delivery, which requires an admin or API user.
📍 영향받는 시스템
EspoCRM 10.0.4 미만 버전
⚔️ 공격 벡터
IPv6 전환 주소(NAT64, 6to4, Teredo)를 포함한 AAAA 레코드를 제어하는 도메인을 사용하여 내부 IP 검증 및 IP 핀닝 체크를 우회함
🛡️ 대응 방법
EspoCRM을 최신 보안 패치가 적용된 10.0.4 이상의 버전으로 업데이트하십시오.
🔧 검증 코드
명령어 결과가 VULNERABLE이면 취약한 버전이며, SAFE이면 안전한 버전입니다.
curl -s http://<espocrm-host>/api/v1/version | grep -E '"version": "([0-9]+\.[0-9]+\.[0-9]+)"' | awk -F'"' '{print $4}' | awk -F. '$1 < 10 || ($1 == 10 && $2 < 0 || ($1 == 10 && $2 == 0 && $3 < 4)) {print "VULNERABLE"}; $1 >= 10 && ($1 > 10 || ($1 == 10 && $2 > 0) || ($1 == 10 && $2 == 0 && $3 >= 4)) {print "SAFE"}'