Twenty는 NestJS(Node.js)로 구축된 오픈 소스 CRM입니다. 버전 1.18.0 이하에서는 URL IP 리터럴의 IPv4 매핑 IPv6 주소를 사용하여 20서버 SecureHttpClientService의 SSRF 보호를 우회할 수 있습니다. Node.js의 URL 파서는 IPv4 매핑된 IPv6 주소를 압축된 16진수 형식으로 정규화하지만(예: ::ffff:169.254.169.254는 ::ffff:a9fe:a9fe가 됨) isPrivateIp 유틸리티는 점으로 구분된 십진수 표기법만 인식합니다. 결과적으로 16진수 형식은 선택되지 않은 SSRF 검사를 통과합니다. 추가
Twenty는 NestJS(Node.js)로 구축된 오픈 소스 CRM입니다. 버전 1.18.0 이하에서는 URL IP 리터럴의 IPv4 매핑 IPv6 주소를 사용하여 20서버 SecureHttpClientService의 SSRF 보호를 우회할 수 있습니다. Node.js의 URL 파서는 IPv4 매핑된 IPv6 주소를 압축된 16진수 형식으로 정규화하지만(예: ::ffff:169.254.169.254는 ::ffff:a9fe:a9fe가 됨) isPrivateIp 유틸리티는 점으로 구분된 십진수 표기법만 인식합니다. 결과적으로 16진수 형식은 선택되지 않은 SSRF 검사를 통과합니다. 또한 소켓 조회 유효성 검사 이벤트는 두 번째 유효성 검사 계층을 우회하여 IP 리터럴 주소에 대해 실행되지 않습니다. 인증된 사용자는 클라우드 메타데이터 엔드포인트를 포함한 모든 내부 IP에 접근하여 IAM 키와 같은 자격 증명을 유출할 수 있습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 83.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 83.00 |
VPI 공식 vpi-v1 기준