flawopen.com/Incidents/shai-hulud-npm-worm-september-2025
●
npm ecosystem · CWE-506 / CWE-829 · September 2025 · 심각
보안 연구 · FlawOpen
Shai-Hulud: 2025년 9월 npm 웜과 설치 시점의 신뢰
2025년 9월 Shai-Hulud는 침해된 npm 유지관리자 계정과 악성 postinstall 훅을 이용해 자격 증명을 훔치고 감염된 패키지를 추가로 게시했습니다.[1]
💡 알기 쉬운 설명 (ELI5)
공장이 부품 상자를 받았는데 개봉 지침이 자동으로 실행된다고 생각해 보세요. 그 지침은 공장의 배송 출입증을 복사해 다른 공장으로 조작된 상자를 보냅니다. 자동 지침을 막으면 그 진입로는 닫히지만, 부품도 사용 전에 살펴야 합니다.[1]
핵심 개념 및 용어
Lifecycle hook- 9월에는 npm postinstall이 설치 중 악성 코드를 실행했습니다. 이는 패키지가 제공한 동작이며 CVE가 붙은 npm 메모리 오류가 아닙니다.
Publishing credential- npm 토큰에는 계정이나 패키지에 설정된 권한이 있습니다. 도난당한 게시 권한이 확산에 쓰였으며 기간, 범위, MFA 요구는 정책에 달려 있습니다.
Trusted publishing / OIDC- OIDC는 승인된 CI 작업이 저장된 npm 토큰 없이 짧은 수명의 게시 자격을 얻게 합니다. 침해된 승인 작업은 여전히 위험합니다.
프레임워크 매핑
사고 타임라인
2025-09-14
GitHub는 Shai-Hulud 통지를 받았다고 밝혔습니다.[1]
2025-09-22
GitHub는 침해된 패키지 500개 이상을 제거하고 악성 지표에 맞는 업로드를 차단했다고 보고했습니다.[1]
단계별 공격 실행 흐름
소스 코드 비교: 취약한 구현 vs 보안 패치
안전한 Python 설치 계획 비교입니다. 어느 함수도 npm을 실행하거나 자격 증명을 읽거나 레지스트리에 접속하지 않습니다. npm v10 문서를 기준으로 합니다. 강화 계획은 검토된 잠금 파일을 요구하고 수명주기 스크립트를 막으며 기존 환경을 넘기지 않습니다. 실제 실행기는 신뢰할 수 있는 npm 프로그램과 격리된 홈 및 설정을 준비하고 비밀 파일이나 민감한 마운트를 두지 않아야 합니다. --ignore-scripts는 이후 가져온 코드나 명시적으로 실행한 스크립트를 안전하게 만들지 않으며 잠금 파일도 무해함을 증명하지 않습니다.
취약한 구현
def install_plan(reviewed_lockfile, inherited_env):
# 계획만 반환하며 패키지를 설치하거나 명령을 실행하지 않습니다.
return {"argv": ["npm", "ci"],
"env": dict(inherited_env)}
보안 강화 패치
def install_plan(reviewed_lockfile, inherited_env):
# 계획만 반환하며 패키지를 설치하거나 명령을 실행하지 않습니다.
if reviewed_lockfile is not True:
raise ValueError("Review the lockfile before installation")
return {"argv": ["npm", "ci", "--ignore-scripts"],
"env": {}}
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓설치 작업에서 검토된 잠금 파일과 npm ci --ignore-scripts를 요구하고 CI 정책 시험으로 명령과 자격 증명 없는 환경을 확인하세요. 필요한 빌드 훅은 검토 후 별도의 격리 작업에서 실행하세요.[3]
- ✓게시 및 클라우드 자격 증명을 의존성 설치 작업에서 빼세요. 홈 파일, 마운트, 실행기 신원도 포함합니다. 게시 자격을 얻을 수 없는지 시험하세요.[1], [2]
- ✓가능하면 신뢰할 수 있는 게시 방식을 쓰고 승인 작업, 브랜치, 환경을 제한하며 변경을 검토하세요. 피싱에 강한 MFA를 요구하고 쓰지 않는 토큰을 제거하세요.[1]
- ✓노출이 확인되면 실행기를 격리하고 다시 만들며 노출된 자격 증명을 폐기하고 패키지 버전과 작업 변경을 감사하세요. 의존성 코드를 검토하세요. 잠금 파일이나 새 버전 채택 지연만으로 안전이 증명되지는 않습니다.[1], [2]