🇰🇷 한글 설명
Node.js용 샌드박스 라이브러리 vm2의 3.11.4 이전 버전에서 Proxy의 set 트랩 구현 오류로 인해 호스트 대상 객체에 대한 권한 없는 속성 쓰기가 발생합니다. 이는 상속된 객체에서의 속성 할당이 호스트 객체로 누설되게 하여, 위험한 크로스 리alm 심볼 키를 우회하여 삽입할 수 있는 공격 경로를 제공합니다.
💡 쉬운 설명
vm2 라이브러리의 보안 결함으로 인해 격리된 환경에서 호스트 시스템의 데이터가 무단으로 수정될 수 있습니다. 공격자는 이 취약점을 이용해 시스템의 중요한 설정이나 데이터를 손상시킬 수 있습니다.
🇺🇸 원문 (English)
vm2 is an open source vm/sandbox for Node.js. Prior to version 3.11.4, the BaseHandler.set trap in bridge.js (line 1231) ignores the receiver parameter and unconditionally writes to the host target object. Per the Proxy set trap specification, when receiver !== proxy (e.g., when a child object inherits from the proxy via Object.create), the property assignment should create an own property on the receiver, not on the proxy target. The current implementation always calls otherReflectSet(object, key, value) against the host target, causing all inherited property writes to leak through to the host object. This bug provides an alternative attack vector for writing dangerous cross-realm Symbol keys (e.g., nodejs.util.promisify.custom) to host objects, bypassing any future per-trap isDangerousCrossRealmSymbol guard on the direct set path. This issue has been patched in version 3.11.4.
⚔️ 공격 벡터
위험한 심볼 키를 사용하여 호스트 대상 객체에 대한 속성 할당을 유도하는 코드 실행
🛡️ 대응 방법
vm2 라이브러리를 버전 3.11.4 이상으로 즉시 업그레이드하십시오.
🔧 검증 코드
출력된 버전 번호가 3.11.4보다 낮으면 취약한 버전이 설치된 것입니다.
npm list vm2 2>/dev/null | grep -E 'vm2@'