🇰🇷 한글 설명
JavaScript용 ip-address 라이브러리 10.1.1부터 10.2.2 버전 사이에서 특수 용도 분류 메서드가 잘못 동작하는 취약점이 발견되었습니다. CIDR 접미사에 /0을 추가하면 내부 주소임에도 불구하고 외부 주소로 오인하게 만들어, SSRF 방어 로직을 우회할 수 있습니다.
💡 쉬운 설명
IP 주소가 내부용인지 외부용인지 판별하는 기능에 오류가 있어, 공격자가 주소 뒤에 특정 숫자를 붙여 내부망 주소를 외부 주소처럼 속일 수 있습니다. 이로 인해 보안 필터를 통과하여 내부 네트워크에 접근하는 공격이 가능해집니다.
🇺🇸 원문 (English)
ip-address is a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript. From 10.1.1 until 10.2.2, every special-use classification method is built on isInSubnet, which short-circuits to false whenever the address's own subnet mask is shorter than the reference range's mask. That mask comes verbatim from the CIDR suffix on the parsed input, so appending a suffix such as /0 suppresses classification entirely: isLoopback(), isPrivate(), isLinkLocal(), isCGNAT(), isMulticast(), isUnspecified(), isBroadcast(), isULA(), and getType() all report an internal address as unremarkable, while correctForm() and address still return the real internal target. An application that builds a network trust-boundary decision on these checks, for example a filter intended to block Server-Side Request Forgery, or SSRF, may therefore treat an internal target as external and allow the request. The underlying bit comparison is correct, and mask(n) already returns the first n bits of the full parsed address independently of subnetMask; the defect is solely that the containment guard sits in the classification path. This issue is fixed in version 10.2.2.
📍 영향받는 시스템
ip-address library versions 10.1.1 to 10.2.2
⚔️ 공격 벡터
IP 주소 뒤에 '/0'과 같은 CIDR 접미사를 추가하여 내부 주소 판별 로직을 무력화함
🛡️ 대응 방법
ip-address 라이브러리를 10.2.2 이상의 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 결과에서 ip-address의 버전이 10.2.2 미만인지 확인하십시오.
💻 영향받는 소프트웨어
IBM WebSphere Application Server