🇰🇷 한글 설명
vm2 3.11.4부터 3.11.6 버전에서 샌드박스 경계를 넘는 Node.js 내부 심볼 필터링이 불완전하게 이루어지는 취약점이 발견되었습니다. 공격자는 누락된 특정 심볼을 사용하여 호스트의 스트림 상태를 조작함으로써 스트림 소비 규칙을 우회할 수 있습니다.
💡 쉬운 설명
가상 환경(샌드박스) 내의 코드가 원래는 접근할 수 없는 시스템의 중요한 정보를 몰래 수정할 수 있는 문제입니다. 이를 통해 데이터 흐름을 조작하여 보안 검사를 무력화할 수 있습니다.
🇺🇸 원문 (English)
vm2 versions 3.11.4 through 3.11.6 incompletely filter Node.js registered internal symbols across the sandbox boundary. The extraction filters in lib/setup-sandbox.js and the cross-realm symbol checks and write traps in lib/bridge.js use a fixed list of known dangerous registered symbols that omits nodejs.stream.disturbed and nodejs.stream.errored, which are exposed on host WebStream prototypes on newer Node.js releases (validated on Node.js v25.8.0). When the embedder exposes a host WebStream object and the host stream/web module to the sandbox, sandbox code can obtain the real host symbols via Object.getOwnPropertySymbols(streamWeb.ReadableStream.prototype) and use them as write keys on host stream objects, corrupting host-visible stream state — for example making stream.Readable.isDisturbed() return false for an already-consumed stream. This can bypass host logic that relies on Node's public stream-state helpers to enforce one-shot body consumption, reject errored streams, or decide whether a stream is safe to hand to another component. It is not a host code-execution primitive in the reported proof of vulnerability. This is an incomplete fix for the earlier nodejs.* symbol filtering issue. Fixed in vm2 3.11.7.
📍 영향받는 시스템
vm2 versions 3.11.4 through 3.11.6
⚔️ 공격 벡터
샌드박스 내에서 Object.getOwnPropertySymbols를 통해 노출된 호스트 심볼을 획득한 후, 호스트 스트림 객체의 상태를 조작함
🛡️ 대응 방법
vm2 버전을 3.11.7 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 vm2의 버전이 3.11.7보다 낮으면 취약한 상태입니다.