🇰🇷 한글 설명
Deno는 JavaScript, TypeScript, WebAssembly 런타임입니다. 2.7.10 이전 버전의 node:child_process 구현에서 shell: true 옵션 사용 시 호출되는 escapeShellArg() 헬퍼가 Windows에서 cmd.exe 메타문자를 올바르게 이스케이프하지 못하고 % 문자를 무력화하지 않아, 공격자가 인자에 임의의 추가 명령어를 주입할 수 있습니다. 이 취약점은 2.7.10 버전에서 수정되었습니다.
💡 쉬운 설명
Windows에서 Deno 프로그램이 다른 프로그램을 실행할 때 입력값을 제대로 검사하지 않아, 악의적인 사용자가 몰래 명령어를 끼워 넣을 수 있습니다. 최신 버전으로 업데이트하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
Deno is a JavaScript, TypeScript, and WebAssembly runtime. Prior to 2.7.10, Deno's node:child_process implementation provided an escapeShellArg() helper used when callers passed shell: true to spawn / spawnSync / exec and friends. On Windows, the helper failed to quote arguments that contained cmd.exe metacharacters and did not neutralize % (which cmd.exe expands even inside double-quoted strings). An attacker who controlled any portion of an argument passed to such a call could inject arbitrary additional commands into the spawned cmd.exe invocation. This vulnerability is fixed in 2.7.10.
📍 영향받는 시스템
Windows에서 실행되는 Deno 2.7.10 미만 버전 (shell: true 옵션으로 child_process를 사용하는 환경)
⚔️ 공격 벡터
외부에서 입력받은 값이 shell: true 옵션의 child_process 호출 인자로 전달될 때, cmd.exe 메타문자와 % 문자를 이용해 추가 명령어를 주입
🛡️ 대응 방법
Deno를 2.7.10 이상 버전으로 업데이트하고, 외부 입력을 셸 명령 인자로 직접 사용하지 않도록 코드를 수정
🔧 검증 코드
출력된 deno 버전이 2.7.10 미만이면 취약하므로 업데이트가 필요하고, 2.7.10 이상이면 수정된 버전입니다.
deno --version 2>/dev/null | head -n 1