본문 바로가기
오픈소스2026년 4월 18일4분 읽기

npm 레지스트리 공급망 공격 시도 — 공격자가 실수로 남긴 "죄송합니다" 메시지가 밈이 됐다

YS
김영삼
조회 1851

핵심 요약

2026년 4월 17일 밤, npm 레지스트리에 배포된 여러 인기 패키지에 악성 코드가 섞여 들어가는 공격 시도가 포착됐다. 24시간 내 차단됐고 누적 다운로드 피해는 3만 건 이하로 추정된다.

  • 타깃: 주간 다운로드 100만+ 패키지 5종 (이름 비공개 중)
  • 수법: 메인테이너 토큰 탈취 → 마이너 버전에 난독화 스크립트 삽입
  • 목적: .env 파일·SSH 키 수집 후 텔레그램 봇으로 전송
  • 발견: Socket.dev 자동 스캐너 + 한 개발자의 신고

그런데 진짜 화제는 마지막 한 줄

난독화 해제된 악성 페이로드의 마지막 주석에 이런 문장이 남아 있었다.

// 죄송합니다 돈이 필요했어요

공격자가 테스트 중 지우지 않고 배포한 것으로 보인다. 한 시간 만에 X(트위터)와 Hacker News에서 수만 번 공유됐고, "가장 예의 바른 해커"라는 반응이 쏟아졌다. 조롱보다는 "사이버 범죄의 현실이 보인다"는 씁쓸한 논조가 많았다.

공격 플로우

  1. 메인테이너의 GitHub 계정을 피싱 이메일로 탈취 (Dependabot 안내 위장)
  2. npm 토큰을 2FA 우회 세션으로 갈취
  3. 패키지 postinstall 스크립트에 난독화 코드 삽입
  4. 버전 번호는 patch 단위(1.4.7 → 1.4.8)만 올려 의심 회피
  5. 24시간 내 Socket.dev 이상 탐지 → 메인테이너와 npm 보안팀 동시 연락 → 차단

발견한 개발자의 제보

최초 신고자는 한국 시간 새벽 3시 자동화 빌드가 실패한 것을 보고 로그를 뒤지다가 "본 적 없는 문자열이 HTTP 요청에 실려 있는 것"을 발견했다. "내 로컬 .env185.xxx.xxx.xxx로 보내려는 거라는 걸 알고 등골이 서늘했다"고 썼다.

개발자가 지금 해야 할 일

  • postinstall 스크립트 차단: npm ci --ignore-scripts 기본값화 검토
  • lockfile 리뷰: 마이너·패치 버전 업그레이드 시에도 diff 확인
  • Socket.dev·Snyk 같은 공급망 스캐너를 CI에 도입
  • npm 2FA를 보안 키(하드웨어) 방식으로 강화
  • 빌드 머신에 민감 정보 최소화: .env는 CI 시크릿으로만

왜 공급망 공격이 늘어나는가

단일 악성 패키지 하나가 수천 개 서비스에 전파될 수 있기 때문이다. 2024년 xz 백도어 사건, 2025년 event-stream 재림 시도, 2026년 초 PyPI crypto 패키지 오염 등 매 분기마다 대형 사건이 터지고 있다. 이번 건은 다행히 조기 차단됐다.

자주 묻는 질문

피해를 본 것 같은데 확인 방법은?

npm audit으로는 부족하다. npm ls --all로 설치된 버전 범위를 확인하고, Socket.dev의 "installed packages" 스캔을 한 번 돌려보는 것을 권장한다.

공격자가 잡혔나?

현재 수사 중이다. 텔레그램 봇 주소와 Bitcoin 지갑 추적이 시작됐다. 결제된 자금은 아직 0원이다.

postinstall 전면 차단해도 되나?

일부 정당한 패키지(canvas, sharp 등)가 동작하지 않을 수 있다. allow list 방식이 현실적이다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록