핵심 요약
2026년 4월 17일 밤, npm 레지스트리에 배포된 여러 인기 패키지에 악성 코드가 섞여 들어가는 공격 시도가 포착됐다. 24시간 내 차단됐고 누적 다운로드 피해는 3만 건 이하로 추정된다.
- 타깃: 주간 다운로드 100만+ 패키지 5종 (이름 비공개 중)
- 수법: 메인테이너 토큰 탈취 → 마이너 버전에 난독화 스크립트 삽입
- 목적:
.env파일·SSH 키 수집 후 텔레그램 봇으로 전송 - 발견: Socket.dev 자동 스캐너 + 한 개발자의 신고
그런데 진짜 화제는 마지막 한 줄
난독화 해제된 악성 페이로드의 마지막 주석에 이런 문장이 남아 있었다.
// 죄송합니다 돈이 필요했어요
공격자가 테스트 중 지우지 않고 배포한 것으로 보인다. 한 시간 만에 X(트위터)와 Hacker News에서 수만 번 공유됐고, "가장 예의 바른 해커"라는 반응이 쏟아졌다. 조롱보다는 "사이버 범죄의 현실이 보인다"는 씁쓸한 논조가 많았다.
공격 플로우
- 메인테이너의 GitHub 계정을 피싱 이메일로 탈취 (Dependabot 안내 위장)
- npm 토큰을 2FA 우회 세션으로 갈취
- 패키지 postinstall 스크립트에 난독화 코드 삽입
- 버전 번호는 patch 단위(1.4.7 → 1.4.8)만 올려 의심 회피
- 24시간 내 Socket.dev 이상 탐지 → 메인테이너와 npm 보안팀 동시 연락 → 차단
발견한 개발자의 제보
최초 신고자는 한국 시간 새벽 3시 자동화 빌드가 실패한 것을 보고 로그를 뒤지다가 "본 적 없는 문자열이 HTTP 요청에 실려 있는 것"을 발견했다. "내 로컬 .env를 185.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