[분석가] 분석 — CVE-2025-13465
CVE-2025-13465 is a prototype pollution vulnerability in lodash (v4.0.0 - 4.17.22) allowing deletion of global prototype methods via
_.unsetand_.omit, requiring an upgrade to v4.17.23.
📋 요약
- 심각도 medium · CVSS 5.3 · EPSS 0.01535 · 악용난이도 moderate
🔍 공격 기법
(1) 트리거 조건: 공격자가 _.unset 또는 _.omit 함수에 전달되는 경로(path) 인자에 특수하게 조작된 값(예: __proto__ 또는 constructor.prototype)을 주입할 때 발생합니다.
(2) 공격 단계:
- 정찰: 대상 애플리케이션이 사용자 입력을 처리하여
lodash함수에 전달하는 지점을 식별합니다. - 초기 접근: HTTP 요청 파라미터, JSON 바디 등 외부 입력 벡터를 통해 조작된 경로 문자열을 전송합니다.
- 실행: 서버 측에서
_.unset(object, 'constructor.prototype.method')와 같은 형태로 실행되어 전역 프로토타입의 메서드가 삭제됩니다. - 영향: 특정 객체 메서드가 소멸하여 애플리케이션 로직이 오작동하거나 예외가 발생합니다.
(3) 공격 표면: 사용자 입력값이lodash라이브러리의 해당 함수 인자로 직접 또는 간접적으로 전달되는 모든 API 엔드포인트 및 파라미터입니다.
(4) CVSS 벡터 분석:AV:N/AC:L/PR:N/UI:N에 따라 네트워크를 통해 인증 없이 낮은 난이도로 공격이 가능함을 의미합니다.
악용 가능성: 본 취약점은 AV:N/AC:L/PR:N/UI:N 벡터를 가져, 네트워크 상의 인증되지 않은 공격자가 특수하게 조작된 경로(crafted paths)를 전송함으로써 원격에서 트리거할 수 있는 낮은 공격 난이도를 보입니다. 공격 표면은 _.unset 및 _.omit 함수에 입력값으로 전달되는 파라미터이며, 해당 함수들이 외부 사용자 입력값을 직접 처리하는 엔드포인트가 노출되어 있을 때 악용 가능성이 높습니다. 다만, 일반적인 Prototype Pollution과 달리 속성 덮어쓰기가 아닌 '삭제'만 가능하다는 제약이 있어, 임의 코드 실행(RCE)보다는 서비스 거부(DoS)나 애플리케이션 로직 우회로 이어질 확률이 큽니다. EPSS 수치는 0.01535로 낮고 KEV에 등재되지 않아 현재 야생에서의 광범위한 악용 사례는 미관측되었으나, Lodash의 높은 보급률을 고려할 때 잠재적 공격 표면은 매우 넓습니다. 따라서 이론적 심각도는 제한적일 수 있으나, 실제 환경에서는 전제조건이 단순하여 공격자가 타겟 시스템의 가용성을 저해하기 위해 시도할 가능성이 충분합니다.
💥 영향 분석
(1) 기술적 위험: Prototype Pollution의 변종으로, 속성 덮어쓰기가 아닌 '삭제'가 이루어집니다. 전역 프로토타입 메서드가 삭제되면 해당 메서드를 사용하는 모든 객체에서 TypeError 등이 발생하여 서비스 기능이 마비될 수 있습니다. 다만, 기존 동작을 임의의 코드로 변경하는 것은 불가능합니다.
(2) 비즈니스 영향: 특정 기능의 가용성 저하 및 예기치 못한 애플리케이션 크래시로 인한 서비스 중단 리스크가 존재합니다. 영향 범위는 lodash 4.0.0 - 4.17.22 버전을 사용하는 모든 Node.js 기반 환경입니다.
🔗 관련 취약점·체이닝
(1) 체이닝 패턴: 추정: 단독으로는 RCE나 데이터 유출로 이어지기 어려우나, 보안 필터링이나 검증 로직에 사용되는 전역 메서드를 삭제함으로써 다른 취약점의 방어 기제를 무력화하는 '방어 우회' 단계로 활용될 수 있습니다.
(2) 유형: Prototype Pollution (CWE-1321 계열) 패턴을 따릅니다.
🔎 탐지
(1) 로그 지표: HTTP 요청의 Query String이나 Request Body 내에 __proto__, constructor, prototype과 같은 키워드가 포함된 패턴을 모니터링합니다.
(2) 탐지 규칙 예시:
- 로직:
Request_BodyORQuery_StringCONTAINS("__proto__" AND ("unset" OR "omit")) - 정규식:
/(?:__proto__|constructor\.prototype)/i(입력값 검증 로그에서 탐지)
(3) 오탐 시나리오: 정상적인 JSON 데이터 내에 해당 단어가 포함된 경우 오탐이 발생할 수 있습니다. 이를 줄이기 위해 실제lodash함수 호출 스택과 연결된 입력값인지 확인하는 런타임 분석이나 WAF의 컨텍스트 기반 탐지가 필요합니다.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF에서
__proto__,constructor.prototype문자열이 포함된 요청을 차단하도록 규칙을 적용합니다. (난이도: 낮음 / 영향: 매우 낮음 / 검증: 페이로드 전송 시 403 응답 확인) - 단기(완화): 사용자 입력값이
lodash함수로 전달되기 전, 위험 키워드를 필터링하는 입력값 검증 로직을 추가합니다. (난이도: 중간 / 영향: 낮음 / 검증: 단위 테스트를 통한 주입 차단 확인) - 근본(해결):
lodash버전을4.17.23이상으로 업그레이드합니다. 다중 소스 데이터 일관성이 확인되었으며, EPSS 0.01535 및 moderate 등급의 실측 악용 예측과 CVSS 5.3 점수를 근거로 이번 주 내(scheduled) 업데이트를 권고합니다. (난이도: 낮음 / 영향: 낮음 / 검증:npm list lodash또는yarn list lodash로 버전 확인)
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=5.3 · non-KEV · EPSS=0.01535 · exploit=moderate · in_scope=None