어제 개발자 커뮤니티 타임라인이 좀 시끄러웠는데요, npm 생태계에서 또 공급망 공격이 터졌더라고요. 이번 표적은 하필이면 keyv였어요. Node.js 좀 만져본 분이라면 캐싱이나 키-값 저장할 때 한 번쯤은 써봤을 그 라이브러리 맞습니다. 주간 다운로드가 1억 2700만 회나 되는 물건이라, 소식 듣자마자 저도 좀 뜨끔하더라고요.

정리하자면 이렇습니다. 8월 4일에 스스로 퍼지는 웜이 keyv랑 cacheable, 그리고 이들이 물고 있는 의존성 패키지들의 악성 버전을 npm에 올리기 시작했고, 8월 6일에 보안 연구자들이 이걸 공식적으로 확인했어요. 공격 방식은 요즘 흔한 패턴인데, 유지관리자의 GitHub 계정이 먼저 털렸고 그 권한으로 'Mini Shai-Hulud'라는 악성코드를 keyv와 관련 패키지 여덟 개에 심었다고 하네요. 피해 규모가 좀 큽니다. 지금까지 확인된 것만 1,300개가 넘는 패키지 버전이 오염됐고, 이걸 다 합치면 월 다운로드가 20억 회에 달한다고 해요. cacheable, flat-cache, file-entry-cache 같이 우리가 무심코 끌어다 쓰는 캐싱 라이브러리들이 줄줄이 엮여 있었습니다.

개인적으로 제일 섬뜩했던 건 악성코드 숨기는 수법이었어요. 페이로드를 스캐너가 잘 안 읽는 AI 에이전트 설정 파일 안에 숨겨놨고, 명령 서버 주소를 이더리움 스마트 컨트랙트로 라우팅했다고 하더라고요. 심지어 방어하는 쪽에서 탈취된 토큰을 폐기하려고 하면 그걸 감시하다가 공격자 코드를 실행시키는 장치까지 있었대요. 이 Shai-Hulud라는 이름의 웜이 전에도 한 번 npm을 휩쓴 적이 있었는데, 이번엔 수법이 더 교묘해진 느낌이라 좀 무섭네요.

그래서 결론은, Node.js 프로젝트 굴리고 계신 분들은 지금 당장 의존성 트리 한 번 훑어보시는 게 좋을 것 같아요. 오염된 버전이 딸려 들어왔을 수 있으니까요. 영향받은 시스템에 있던 자격증명은 이미 새어 나갔다고 가정하고 싹 갈아엎는 걸 권장하고 있습니다. 저도 이 글 쓰고 나서 제 사이드 프로젝트 package-lock.json부터 열어봐야겠어요. 남 일이 아닌 것 같아서요.

출처

Cyber Security Agency of Singapore: https://www.csa.gov.sg/alerts-and-advisories/advisories/ad-2026-009/

 

Ongoing npm Supply Chain Attack Affecting Keyv and Related Packages ("Shai-Hulud" Worm)

 

www.csa.gov.sg

Aikido Security: https://www.aikido.dev/blog/keyv-and-friends-compromised-in-npm-supply-chain-attack

 

Keyv and friends compromised in npm supply chain attack

Mini Shai-Hulud malware was injected into keyv and eight related npm packages on August 4, 2026 after an attacker compromised the maintainer's GitHub account

www.aikido.dev

Datadog Security Labs: https://securitylabs.datadoghq.com/articles/npm-worm-compromises-popular-npm-packages/

+ Recent posts