한 줄 정의
개발자가 매일 npm install·pip install로 내려받는 오픈소스 패키지 자체나 그 배포 계정에 악성 코드를 심어, 그 패키지를 의존성으로 쓰는 모든 프로젝트에 자동으로 퍼지게 만드는 공격.
지금 상태 (2026-09 기준)
2021년 Alex Birsan의 "dependency confusion" 공개 이후 매년 형태를 바꾼 사건이 반복되고 있습니다. 초기(2021~2022)에는 계정 탈취(ua-parser-js)나 관리자 스스로의 사보타주(colors/faker, node-ipc)가 많았다면, 2024년 xz-utils 백도어는 수년에 걸친 사회공학으로 리눅스 핵심 유틸리티의 관리자 권한을 얻어낸 국가급 정교함을 보였습니다. 2025년에는 2FA를 우회하는 피싱(chalk/debug)과, 사람 개입 없이 스스로 다른 패키지로 옮겨 다니는 웜(Shai-Hulud)까지 등장해 공격 자동화 수준이 한 단계 올라갔습니다.
개념
- Dependency confusion(의존성 혼동): 회사 내부용 사설 패키지와 이름이 같은 패키지를 공개 레지스트리에 더 높은 버전으로 올려두면, 설정에 따라 빌드 시스템이 공개 버전을 우선 설치하는 결함을 이용한 공격. 특정 회사를 노린 표적형 공격에 쓰입니다.
- 계정 탈취(account takeover): 인기 패키지 관리자의 npm/PyPI 로그인 정보를 피싱·크리덴셜 스터핑으로 훔쳐, 정상 패키지의 새 버전에 악성 코드를 얹어 배포하는 방식(ua-parser-js, chalk/debug).
- Protestware / 자체 사보타주: 외부 침입이 아니라 패키지 유지관리자 본인이 정치적 항의나 처우 불만으로 자기 패키지를 고의로 망가뜨리는 경우(colors/faker, node-ipc).
- 자기 복제형 웜(self-propagating worm): 한 패키지를 감염시키는 데 그치지 않고, 훔친 CI/CD 자격증명으로 스스로를 다른 패키지에 재배포해 감염 범위를 자동으로 넓히는 방식(Shai-Hulud).
벤더별 비교
| 구분 | npm (GitHub) | PyPI | Linux 배포판 소스 tarball |
|---|---|---|---|
| 이 글에서 확인된 대표 사건 | ua-parser-js(2021), colors/faker(2022), node-ipc(2022), chalk/debug(2025), Shai-Hulud(2025) | torchtriton dependency confusion(2022) | xz-utils 백도어(2024) |
| 확인된 대응 조치 | 2022-02부터 상위 패키지 관리자 2FA 의무화, 2023-05부터 provenance(빌드 출처) 첨부 지원 | PyPI의 시기별 대응 정책은 1차 출처로 확인하지 못해 적지 않음 | 배포판 안정판에는 반영 전 발견돼 다운스트림 배포는 대부분 면함 |
잘 쓰는 법
- 회사 내부 패키지와 이름이 겹치는 공개 패키지가 없는지 확인하고, 스코프(
@company/pkg)나 사설 레지스트리 우선순위 설정으로 dependency confusion을 원천 차단합니다.- 예: 사내에서 internal-auth라는 이름으로 쓰는 사설 패키지가 있다면, Alex Birsan이 시연했던 것처럼 같은 이름의 공개 패키지를 더 높은 버전으로 올려 빌드 시스템이 그걸 대신 설치하게 만드는 공격을 막기 위해 @company/internal-auth처럼 스코프를 지정합니다.
- 관리자 2FA·provenance 표시가 있는 패키지를 우선 신뢰하되, "2FA가 있다"가 "피싱에 안 뚫린다"를 보장하진 않는다는 것을 chalk/debug 사고(2025-09)로 확인해 둡니다.
- 예: chalk·debug의 관리자는 2FA를 쓰고 있었음에도 가짜 npm 지원 도메인(npmjs.help)에 속아 인증 정보를 직접 넘겨준 탓에 계정이 탈취됐으므로, 2FA가 있다고 피싱 공격까지 막아주는 건 아닙니다.
- lockfile(
package-lock.json,poetry.lock등)로 버전을 고정하고, CI에서 신규 버전 자동 업데이트 전 검토 단계를 둡니다.- 예: lockfile 없이 ^ 범위로 의존성을 선언해두면, chalk의 새 버전이 몇 시간 만에 악성 코드를 포함한 채 배포됐을 때 CI가 자동으로 그 버전을 받아 설치할 수 있습니다.
- CI/CD 시크릿은 최소 권한으로 스코프를 좁혀, 웜형 공격(Shai-Hulud)이 자격증명을 훔쳐도 확산 범위가 제한되게 합니다.
- 예: 모든 패키지 배포 권한을 가진 단일 npm 토큰을 CI에 저장해두면, Shai-Hulud 같은 웜이 그 토큰 하나만 훔쳐도 회사가 관리하는 모든 패키지로 번질 수 있으니 패키지별로 배포 권한을 쪼개두는 편이 안전합니다.
- 다운로드 수가 많다는 사실 자체를 신뢰 근거로 삼지 않습니다 — ua-parser-js·chalk·debug 모두 주간 다운로드 수백만~수십억 회 규모였습니다.
- 예: chalk·debug는 주간 다운로드 26억 회에 달하는 "모두가 쓰는" 패키지였지만 그런 인기와 무관하게 피싱 한 번으로 계정이 탈취돼 악성 코드가 배포됐습니다 — "다들 쓰니까 안전하겠지"라는 가정은 근거가 없습니다.
타임라인
2021-02-09 · Dependency Confusion 공격 기법 공개
- 이전 대비: 최초 — 이 공격 기법 자체가 처음 이름을 얻고 공개됨
- Alex Birsan이 사설 패키지와 이름이 같은 패키지를 공개 레지스트리에 올려 빌드 시스템이 이를 대신 설치하게 만드는 방식으로 Apple·Microsoft·Tesla 등 35개 이상 기업 내부망에서 코드를 실행시켰다고 공개. 버그바운티로 13만 달러를 받음
- 출처: Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies
2021-10-22 · ua-parser-js 계정 탈취, 악성코드 유포
- 이전 대비: 설계 결함이 아니라 유지관리자 계정 탈취로 악성 코드가 직접 심긴 사례
- 주간 다운로드 700만 회가 넘는 ua-parser-js의 npm 계정이 탈취돼, 크립토마이너와 정보 탈취 트로이목마가 담긴 0.7.29/0.8.0/1.0.0 버전이 약 4시간 동안 배포됨
- 출처: Malware Discovered in Popular NPM Package, ua-parser-js
2022-01-08 · colors/faker 관리자의 자체 사보타주
- 이전 대비: 외부 침입이 아니라 관리자 본인이 코드를 심어 자기 패키지를 망가뜨린 대규모 사례
- Marak Squires가 자신이 관리하던 colors.js·faker.js에 무한 루프/깨진 코드를 올려, 두 패키지에 의존하는 수많은 프로젝트가 한꺼번에 장애를 겪음. 기업 후원 없는 오픈소스 유지보수에 대한 항의였다고 밝힘
- 출처: Dev corrupts NPM libs 'colors' and 'faker' breaking thousands of apps
2022-02-01 · npm, 인기 패키지 관리자 2FA 의무화 시작
- 이전 대비: 연이은 계정 탈취·사보타주 사고 이후 생태계 차원의 첫 강제 방어 조치
- 2021-11-15 예고된 정책에 따라 의존성 수 기준 상위 100개 패키지 관리자부터 2단계 인증(2FA)을 의무화. 이후 상위 500개로 확대
- 출처: Top-100 npm package maintainers now require 2FA, and additional security-focused improvements to npm
2022-03-15 · node-ipc "protestware" 확산
- 이전 대비: 사보타주가 특정 국가(러시아·벨라루스) IP 사용자만 겨냥하는 정치적 목적의 파일 삭제로 진화
- node-ipc 관리자가 peacenotwar 의존성을 심어, 러시아·벨라루스로 추정되는 IP에서는 파일을 하트 이모지로 덮어쓰는 코드를 배포. Vue.js 등 하위 프로젝트까지 영향받음
- 출처: Alert: peacenotwar module sabotages npm developers in the node-ipc package to protest the invasion of Ukraine
2022-12-25 · PyPI torchtriton 의존성 혼동 공격
- 이전 대비: npm 중심이던 사고 패턴이 PyPI 생태계로 확장되고, 2021-02 dependency confusion 기법이 실전 공격으로 재현됨
- 공격자가 PyPI에 PyTorch-nightly의 내부 의존성과 같은 이름의 가짜 torchtriton 패키지를 올려, 12/25~12/30 사이 설치한 사용자의 시스템 정보를 DNS로 빼돌림. PyTorch 팀이 연휴 기간 긴급 공지, 약 2,700회 다운로드로 파악
- 출처: Compromised PyTorch-nightly dependency chain between December 25th and December 30th, 2022
2024-03-29 · xz-utils 백도어 발견
- 이전 대비: 계정 탈취·즉흥적 사보타주 수준을 넘어, 수년간 신뢰를 쌓은 뒤 리눅스 핵심 유틸리티에 SSH 백도어를 심은 지금까지 가장 정교한 사례
- PostgreSQL 벤치마크 중 SSH 로그인 지연을 이상하게 여긴 Andres Freund가 xz-utils 5.6.0/5.6.1에서 백도어(CVE-2024-3094, CVSS 10.0)를 발견. 수년에 걸쳐 신뢰를 쌓은 계정이 심은 것으로 파악됐고, 다행히 주요 배포판 안정 버전에는 반영되지 않음
- 출처: CVE-2024-3094: XZ Utils SSHd Backdoor Vulnerability in Linux, xz-utils backdoor situation (CVE-2024-3094)
2025-09-08 · chalk·debug 등 npm 18개 패키지 피싱 탈취
- 이전 대비: 2FA가 보편화된 이후에도, 계정을 직접 뚫는 대신 관리자를 속이는 피싱으로 인증 자체를 우회
- 가짜 npm 지원 도메인(npmjs.help)으로 관리자 'qix'를 피싱해 계정을 탈취, 주간 다운로드 26억 회에 달하는 chalk·debug 등 18개 패키지에 브라우저 암호화폐 거래를 가로채는 코드를 심음. 몇 시간 만에 발견·제거됨
- 출처: Critical npm supply chain attack response – September 8, 2025
2025-09-16 · Shai-Hulud 자기 복제형 npm 웜
- 이전 대비: 한 패키지만 감염시키던 이전 사고들과 달리, 스스로 다른 패키지로 옮겨 다니며 확산하는 웜 형태로는 처음
- CI/CD 파이프라인과 클라우드 메타데이터 엔드포인트에서 훔친 자격증명으로 자신을 다른 패키지에 자동 재배포하는 웜이 확산돼 약 500개 npm 패키지가 감염(CrowdStrike 소유 패키지 일부 포함). CISA가 경보를 발령했고, 11월에는 "Shai-Hulud 2.0" 재확산이 이어짐
- 출처: Widespread Supply Chain Compromise Impacting npm Ecosystem, Shai-Hulud 2.0: Guidance for detecting, investigating, and defending against the supply chain attack
2026-10-06 · GitLab Dependency Firewall 얼리 액세스 공개
- 이전 대비: 지금까지의 방어는 대부분 "악성 패키지가 빌드에 들어온 뒤 SCA 스캔으로 적발"하는 사후 대응이었는데, 이건 설치 전에 정책 기반으로 아예 차단하는 사전 대응입니다.
- 2026-06 GitLab 연구팀이 발견한 Flask·Requests·NumPy 타이포스쿼팅 PyPI 악성 패키지 5건(설치 시 CI/CD 자격증명 탈취)이 직접적 계기입니다. 악성 여부·취약점 심각도·라이선스·패키지 발표 후 최소 경과 기간 등 정책으로 설치 전 패키지를 필터링합니다. GitLab은 AI 코딩 에이전트가 검토 없이 의존성을 자동 추가하는 게 근본 원인이라고 짚었습니다.
- 출처: GitLab, "Dependency Firewall: Block risky packages before the build" (2026-10-06)
2026-10-08 · npm 패키지 "tensorlake", Shai-Hulud(ChainDrop) 웜에 감염 (원문 접근 불가, 발췌 기반)
- 이전 대비: 2025-09 Shai-Hulud 웜이 2026년에도 "ChainDrop" 변종으로 계속 번지고 있다는 사례.
- Tensorlake 서비스용 TypeScript SDK인 npm 패키지 "tensorlake"의 0.5.144 버전이 ChainDrop/Shai-Hulud 공급망 공격으로 변조돼, 난독화된 자격증명 탈취 악성코드가 심겼습니다. 원문(The Hacker News)이 403으로 막혀 수집된 발췌문 기준으로만 작성했습니다 — 감염 경로·대응 조치 등 세부는 확인하지 못했습니다.
- 출처: Tensorlake npm Package Compromised to Deliver Shai-Hulud Credential-Stealing Worm, The Hacker News (2026-10-08, 원문 403 — 수집 발췌로만 확인)
2026-10-20 · GitHub package firewall 퍼블릭 프리뷰
- 이전 대비: 10-06 GitLab Dependency Firewall(얼리 액세스)에 이어 GitHub도 레지스트리 앞단에서 설치 시점 공격을 막는 방화벽을 내놨다.
- 공개 레지스트리와 내 시스템 사이에 놓여 패키지 메타데이터 요청·다운로드를 검사한다. 관리자가 신규 버전 대기(cooldown), GitHub Advisory Database의 악성/취약 여부, attestation 다운그레이드 같은 정책을 정하고, 개발자 PC·CI 호스트·코딩 에이전트가 이 방화벽을 거치도록 설정한다. 오탐은 예외 요청이 가능하다.
- GitHub Enterprise Cloud 대상, 프리뷰 중 무료(정식 출시 후 종량제 예정), 현재 npm만 지원.
- 출처: GitHub package firewall in public preview
2026-10-21 · LiteLLM 릴리스 파이프라인 침해, 악성 1.107.0 배포 (원문 접근 불가, 발췌 기반)
- 이전 대비: 직전 GitHub package firewall(10-20) 발표 직후, AI 게이트웨이 패키지의 릴리스 파이프라인 자체가 표적이 된 사례.
- LiteLLM은 여러 보안 통제가 뚫려 자격증명 탈취기·백도어가 든 1.107.0이 Docker Hub 등에 배포됐다고 공개했다. GitHub 토큰이 AI 게이트웨이 로그로 유출됐을 가능성을 의심한다. 원문이 403으로 막혀 수집 발췌 기준으로만 작성했다.
- 출처: LiteLLM Suspects GitHub Token Leak in AI Gateway Logs Behind Malicious Package Release
2026-10-30 · Claude Code 공식 확장 2.1.313, Cursor Marketplace에서 SSH 백도어 배포
- 이전 대비: 이전 사건들이 오픈소스 패키지·빌드 파이프라인 침해였다면, 이번에는 AI 코딩 에이전트의 공식 IDE 확장이 마켓플레이스 업데이트로 변조되어 개발자 PC에 퍼진 사례.
- 보안 업체 Phorion은 Cursor Marketplace의 공식 Claude Code for VS Code 확장 2.1.313에 지속형 SSH 백도어가 들어 있다고 공개했다. macOS·Linux·Windows가 대상이며, Cursor가 해당 버전을 내렸고 NPM·VS Code 레지스트리의 같은 버전도 내려졌다고 한다. 설치했다면 터널·지속성 항목 제거와 자격 증명 교체가 필요하다.
- 출처: Phorion, Backdoor in Claude Code for VS Code extension, The Hacker News
출처
- DoublePulsar, "Anthropic hacked to deliver remote access trojan to Claude developer laptops worldwide" (2026-10-30, 원문 403 — 제목 기준) — https://doublepulsar.com/anthropic-hacked-to-deliver-remote-access-trojan-to-claude-developer-laptops-worldwide-1148a92baae2
- Alex Birsan, "Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies" (2021-02-09) — https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
- CISA, "Malware Discovered in Popular NPM Package, ua-parser-js" (2021-10-22) — https://www.cisa.gov/news-events/alerts/2021/10/22/malware-discovered-popular-npm-package-ua-parser-js
- BleepingComputer, "Dev corrupts NPM libs 'colors' and 'faker' breaking thousands of apps" (2022-01-09) — https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/
- GitHub Blog, "Top-100 npm package maintainers now require 2FA, and additional security-focused improvements to npm" (2022-02) — https://github.blog/security/supply-chain-security/top-100-npm-package-maintainers-require-2fa-additional-security/
- Snyk, "Alert: peacenotwar module sabotages npm developers in the node-ipc package" (2022-03-17) — https://snyk.io/blog/peacenotwar-malicious-npm-node-ipc-package-vulnerability/
- PyTorch, "Compromised PyTorch-nightly dependency chain between December 25th and December 30th, 2022" (2022-12-31) — https://pytorch.org/blog/compromised-nightly-dependency/
- Qualys, "CVE-2024-3094: XZ Utils SSHd Backdoor Vulnerability in Linux" (2024-03-29) — https://blog.qualys.com/vulnerabilities-threat-research/2024/03/29/xz-utils-sshd-backdoor
- thesamesam, "xz-utils backdoor situation (CVE-2024-3094)" (2024-03-30, GitHub Gist) — https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27
- Vercel, "Critical npm supply chain attack response – September 8, 2025" (2025-09-08) — https://vercel.com/blog/critical-npm-supply-chain-attack-response-september-8-2025
- CISA, "Widespread Supply Chain Compromise Impacting npm Ecosystem" (2025-09-23) — https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem
- The Hacker News, "Leaked LiteLLM Master Key Let Attackers Steal GitHub Tokens and Hijack Release Pipeline" (2026-10-24, 원문 403 — 발췌 기준: 5-27 마스터 키 유출이 원인) — https://thehackernews.com/2026/10/leaked-litellm-master-key-let-attackers.html
- Microsoft Security Blog, "Shai-Hulud 2.0: Guidance for detecting, investigating, and defending against the supply chain attack" (2025-12-09) — https://www.microsoft.com/en-us/security/blog/2025/12/09/shai-hulud-2-0-guidance-for-detecting-investigating-and-defending-against-the-supply-chain-attack/