
NPM VSCode 확장 프로그램의 RCE
2021년 2월 10일 수정됨 (https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07)
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
eg2.vscode-npm-script (버전 0.3.13에서 테스트됨) VSCode 확장 프로그램의 원격 코드 실행 취약점은 프로젝트 내 악성 .vscode/settings.json이 package.json 파일을 볼 때 원격 코드 실행을 유발할 수 있음을 의미합니다.
이 취약점은 활성 Microsoft 버그 바운티 프로그램에 해당하지 않았지만 MSRC에 보고되어 처리되었습니다.
리포지토리에 악성 .vscode/settings.json 파일이 없으면 eg2.vscode-npm-script 확장 프로그램이 설치된 상태에서 package.json 파일을 볼 때 npm ls --depth 0 --json 명령이 실행됩니다.
프로젝트의 settings.json에 npm.bin 키를 예를 들어 ./payload.sh로 설정하면 package.json을 볼 때 대신 package.json이 포함된 디렉토리에서 ./payload.sh ls --depth 0 --json이 실행됩니다.
이 취약점은 소스 코드를 안전하게 읽을 수 있다는 가정을 깨뜨립니다.
공격자가 이를 사용할 수 있는 예는 다음과 같습니다:
package.json을 봅니다.payload.sh가 실행됩니다.악성 VSCode 작업 영역 settings.json을 완화하는 두 가지 방법을 보았습니다.
작업 영역별로 설정이 설정되는 것을 금지합니다. 이는 이미 VSCode에서 git.path, terminal.integrated.shell.linux 및 기타 몇 가지 설정에 사용되고 있습니다.
일부 사용자의 호환성을 깨뜨릴 수 있지만 전례가 있습니다.
참조: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
이 설정이 작업 영역에서 설정된 경우 바이너리를 실행하기 전에 사용자에게 설정을 확인하도록 요청합니다.
이 방법은 기존 호환성을 깨뜨리지 않으며, 버전 2.1.7부터 ESLint 확장 프로그램이 채택한 방법입니다.
eg2.vscode-npm-script의 취약한 버전(0.3.13 또는 이전)을 설치합니다.linux-poc 디렉토리를 폴더로 엽니다.package.json 파일을 클릭하여 봅니다./tmp/output.txt 파일이 생성됩니다.eg2.vscode-npm-script의 취약한 버전(0.3.13 또는 이전)을 설치합니다.windows-poc 디렉토리를 폴더로 엽니다.package.json 파일을 클릭하여 봅니다.calc.exe가 실행됩니다.참고: Windows에서 바이너리에 상대 경로를 사용할 수 없었지만, 이는 Windows에 대한 익숙하지 않음 때문일 수 있습니다.