유효한 인증서와 탈취된 계정: 공격자들이 npm의 마지막 신뢰 신호를 무너뜨린 방법

발행: (2026년 5월 23일 AM 07:21 GMT+9)
13 분 소요

Source: VentureBeat

2023년 5월 19일, 633개의 악성 npm 패키지 버전이 Sigstore provenance 검증을 통과했습니다. 공격자는 손상된 유지관리자 계정으로부터 유효한 서명 인증서를 생성했기 때문에 시스템에서 이를 정상으로 처리했습니다.
Sigstore는 설계대로 작동했습니다: 패키지가 CI 환경에서 빌드되었는지 확인하고, 유효한 인증서가 발급되었는지 검증하며, 모든 정보를 투명성 로그에 기록했습니다. 하지만 인증서를 보유한 사람이 실제로 배포를 승인했는지는 판단할 수 없으며, 이 격차가 npm의 마지막 자동 신뢰 신호를 위장으로 만들었습니다.

하루 전, StepSecurity는 220만 건 이상의 평생 설치 수를 가진 널리 사용되는 개발자 도구인 Nx Console VS Code 확장에 대한 공격을 문서화했습니다. 5월 18일에 도난당한 자격 증명을 사용해 버전 18.95.0이 배포되었고, 40분 미만 동안만 살아 있었지만 Nx 내부 텔레메트리는 그 기간 동안 약 6,000건의 활성화가 있었으며, 대부분이 자동 업데이트를 통해 이루어졌고 공식 다운로드는 28건에 불과했습니다. 페이로드는 Claude Code 설정 파일, AWS 키, GitHub 토큰, npm 토큰, 1Password 금고 내용, Kubernetes 서비스 계정 토큰 등을 수집했습니다.

여러 연구자들이 재정적 동기를 가진 위협 행위자 TeamPCP로 식별한 Mini Shai‑Hulud 캠페인은 5월 19일 01:39 UTC에 npm 레지스트리를 공격했습니다. Endor Labs는 두 개의 휴면 패키지인 jest‑canvas‑mocksize‑sensor가 새로운 버전을 공개하면서 498KB 규모의 난독화된 Bun 스크립트를 포함한 것을 최초 파악했습니다—이 두 패키지는 3년 넘게 업데이트된 적이 없었으며, 갑작스러운 버전 업데이트와 원시 GitHub 커밋 해시 의존성은 감지 신호가 되었지만, 해당 도구가 감시하고 있을 때만 의미가 있었습니다.

02:06 UTC까지, 이 웜은 @antv 데이터 시각화 생태계와 수십 개의 비스코프 패키지(예: 주간 다운로드 110만 건 규모의 echarts‑for‑react)에 전파되었습니다. Socket은 이번 파동에서 323개의 고유 패키지에 걸쳐 639개의 손상된 버전을 기록했습니다. 전체 캠페인 기간 동안 Socket은 npm, PyPI, Composer 전반에 걸쳐 502개의 패키지에 속한 1,055개의 악성 버전을 추적했습니다.

StepSecurity는 페이로드에 Sigstore 통합이 완전하게 포함되어 있음을 확인했습니다. 공격자는 단순히 자격 증명을 훔친 것이 아니라, 유효한 provenance 증명을 가진 하위 npm 패키지를 서명하고 배포할 수 있었습니다.

이 두 사건은 고립된 사례가 아닙니다. Endor Labs, Socket, StepSecurity, Adversa AI, Johns Hopkins, Microsoft MSRC, LayerX의 연구팀은 개발자 도구 검증 모델이 깨졌으며, 어느 공급업체 프레임워크도 실패한 모든 공격 표면을 전부 감사하지 못한다는 것을 독립적으로 입증했습니다.

5월 18일~19일 48시간 동안 일곱 개의 공격 표면이 실패했습니다—npm provenance 위조, VS Code 확장 자격 증명 탈취, MCP 서버 자동 실행, CI/CD 에이전트 프롬프트 인젝션, 에이전트 프레임워크 코드 실행, IDE 자격 증명 저장 노출, 그리고 그림자 AI 데이터 노출—아래 감사 그리드가 각각을 매핑합니다.

검증 모델은 네 가지 주요 AI 코딩 CLI 전반에 걸쳐 깨졌습니다

Adversa AI는 5월 7일 TrustFall을 공개하며 Claude Code, Gemini CLI, Cursor CLI, Copilot CLI가 모두 개발자가 폴더 신뢰 프롬프트를 수락하는 즉시 프로젝트 정의 MCP 서버를 자동 실행한다는 점을 보여주었습니다. 네 가지 모두 기본값이 “Yes” 또는 “Trust”이며, 한 번의 키 입력으로 개발자의 전체 권한을 가진 샌드박스되지 않은 프로세스가 생성됩니다.

MCP 서버는 저장된 비밀과 다른 프로젝트의 소스 코드를 읽을 수 있는 충분한 권한으로 실행됩니다. Claude Code의 GitHub Action을 헤드리스 모드에서 사용하는 CI 러너에서는 신뢰 대화 상자가 전혀 표시되지 않으며, 공격은 인간 개입 없이 실행됩니다.

Johns Hopkins 연구원 Aonan Guan, Zhengyu Liu, Gavin Zhong은 “Comment and Control”을 발표하며 GitHub 풀 리퀘스트 제목에 삽입된 악의적인 명령이 Claude Code Security Review가 자체 API 키를 댓글로 게시하도록 만든 사례를 입증했습니다. 동일한 공격이 Google Gemini CLI Action과 GitHub Copilot Agent에서도 작동했습니다. Anthropic은 이 취약점을 HackerOne 프로그램을 통해 CVSS 9.4 Critical 등급으로 평가했습니다.

Microsoft MSRC는 5월 7일 두 개의 치명적인 Semantic Kernel 취약점을 공개했습니다. 하나는 공격자가 제어하는 벡터 스토어 필드를 Python eval() 호출로 전달하고, 다른 하나는 호스트 측 파일 다운로드 메서드를 호출 가능한 커널 함수로 노출합니다—즉, 벡터 스토어에 하나의 오염된 문서만으로도 호스트에서 프로세스가 실행됩니다.

LayerX 보안 연구원은 Cursor가 API 키와 세션 토큰을 보호되지 않은 저장소에 보관한다는 점을 별도로 시연했으며, 이는 브라우저 확장 프로그램이 권한 상승 없이도 개발자 자격 증명에 접근할 수 있음을 의미합니다.

자격 증명을 사냥하던 위협 행위자들의 활동 속도가 두 배로 증가했습니다

Verizon 2026 Data Breach Investigations Report(5월 19일 발표)에 따르면, 직원의 67%가 기업 기기에서 비기업 계정을 사용해 AI 서비스를 이용하고 있습니다. 그림자 AI는 이제 DLP 데이터셋에서 비악의적 내부자 행동 중 세 번째로 흔한 사례가 되었습니다. 소스 코드는 무단 AI 플랫폼에 제출되는 모든 데이터 유형 중 가장 많이 나타나며, 이는 npm 웜 캠페인이 목표로 삼은 자산군과 동일합니다.

CrowdStrike 2026 Financial Services Threat Landscape Report(5월 14일 발표)는 이러한 공격이 수집하는 자격 증명 유형을 적극적으로 사냥하는 적대자를 문서화했습니다.

STARDUST CHOLLIMA는 2025년 4분기에 금융 기관을 대상으로 하는 작전 속도를 세 배로 늘렸습니다. CrowdStrike는 이 그룹이 LinkedIn과 Telegram에서 AI 생성 리크루터 페르소나를 활용해 기술 평가처럼 보이는 악성 코딩 챌린지를 보내고, 가짜 비디오 콜을 합성 환경과 함께 진행한다는 점을 기록했습니다. 목표는 GitHub PAT, npm 토큰, AWS 키, CI/CD 비밀이며, 그리드 7행에 있는 그림자 AI 노출이 바로 그들이 통과하는 문입니다.

개발자 도구 도난 신원 감사 그리드

현재 어느 공급업체 프레임워크도 일곱 개 표면을 모두 포괄하지 못합니다. 아래 그리드는 각 표면을 폭로한 연구, 여러분의 스택이 볼 수 없는 부분, 그리고 다음 공급업체 갱신 전에 수행해야 할 감사 조치를 매핑합니다.

Attack SurfaceDisclosed ByWhat Verification FailedWhat Your Stack Cannot SeeAudit Action
1. npm provenance forgeryEndor Labs, Socket (May 19)도난당한 OIDC 토큰으로 생성된 Sigstore 인증서가 자동 검증을 통과함EDR 및 SAST는 패키지를 서명한 CI 아이덴티티가 배포를 승인했는지 검증하지 않음주간 다운로드 10,000건 이상 패키지에 대해 배포 시 2인 승인 절차를 요구하고, 녹색 Sigstore 배지는 합법성 증명으로 간주하지 말 것
2. VS Code extension credential theftStepSecurity (May 18)VS Code Marketplace가 도난된 기여자 토큰으로 게시된 악성 확장 버전을 수락함확장 자동 업데이트가 엔드포인트 탐지를 우회함. Marketplace 노출 시간: 12:30‑12:48 UTC, 전체(오픈 VSX 포함) 노출: 12:30‑13:09 UTC확장 업데이트에 최소 연령 정책을 적용하고, 핵심 확장 버전을 고정(pin)하며, 터미널·파일 시스템 API에 접근하는 모든 확장을 감사할 것
3. MCP server auto‑executionAdversa AI, TrustFall (May 7)네 CLI 모두 신뢰 대화 상자의 기본값이 “Yes/Trust”이며, 어떤 실행 파일이 생성될지 명시하지 않음EDR는 프로세스 행동만 모니터링하고 LLM이 MCP 서버에 지시하는 내용을 파악하지 못함. WAF는 HTTP 페이로드만 검사하고 도구 호출 의도를 보지 못함Claude Code, Gemini CLI, Cursor CLI, Copilot CLI에서 프로젝트‑스코프 MCP 서버 자동 승인을 비활성화하고, CI 파이프라인에서 .mcp.json 파일을 명시적으로 허용 목록에 포함시키지 않는 한 차단
4. CI/CD agent prompt injectionJohns Hopkins, Comment and Control (Apr 2026)pull_request_target 워크플로가 비밀을
0 조회
Back to Blog

관련 글

더 보기 »