wikiline.dev
·
Wikiline › 소프트웨어 공급망 보안 (Software Supply Chain Security) › 오픈소스 패키지 공급망 공격 (Open Source Package Supply Chain Attacks)

오픈소스 패키지 공급망 공격 (Open Source Package Supply Chain Attacks)

타임라인 9건업데이트 0건갱신 2026-09-27별칭: dependency confusion, 패키지 공급망 공격, npm 공급망 공격, 타이포스쿼팅, protestware, Shai-Hulud

한 줄 정의

개발자가 매일 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을 원천 차단합니다.
  • 관리자 2FA·provenance 표시가 있는 패키지를 우선 신뢰하되, "2FA가 있다"가 "피싱에 안 뚫린다"를 보장하진 않는다는 것을 chalk/debug 사고(2025-09)로 확인해 둡니다.
  • lockfile(package-lock.json, poetry.lock 등)로 버전을 고정하고, CI에서 신규 버전 자동 업데이트 전 검토 단계를 둡니다.
  • CI/CD 시크릿은 최소 권한으로 스코프를 좁혀, 웜형 공격(Shai-Hulud)이 자격증명을 훔쳐도 확산 범위가 제한되게 합니다.
  • 다운로드 수가 많다는 사실 자체를 신뢰 근거로 삼지 않습니다 — ua-parser-js·chalk·debug 모두 주간 다운로드 수백만~수십억 회 규모였습니다.

타임라인

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 의무화 시작

2022-03-15 · node-ipc "protestware" 확산

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 웜

출처