314개 npm 패키지, 공급망 공격으로 AWS 키, GitHub 토큰 등 탈취

by DD
2주 전
조회수 454

atool 계정 탈취로 314개 npm 패키지에 악성 코드 삽입, 22분 만에 631개 버전 배포

AWS 키, GitHub 토큰, SSH 키, 데이터베이스 연결 문자열 등 광범위한 자격 증명 탈취 시도

Docker 컨테이너 탈출 및 CI/CD 환경에서의 지속적인 감염 시도

semver 범위(range) 사용 시 악성 버전 자동 설치 가능성, 잠재적 피해 규모 큼

공격 방식: 악성 코드 삽입 및 CI/CD 환경 장악

공격자는 탈취한 atool 계정을 이용하여 314개의 npm 패키지에 악성 코드를 삽입했다. 특히, preinstall hook을 활용하여 패키지 설치 시 악성 코드가 실행되도록 했다. 또한, GitHub Actions OIDC 토큰을 악용하여 CI/CD 파이프라인에서 npm publish 토큰을 획득하고, Sigstore를 사용하여 위조된 서명을 생성하는 등, 공격의 지속성을 확보하려 했다. 이러한 공격은 개발 환경뿐만 아니라, CI/CD 환경까지 위협하는 정교함을 보여준다.

피해 규모: 광범위한 자격 증명 탈취 시도

공격의 목표는 AWS 키, GitHub PAT, 데이터베이스 연결 문자열, SSH 키, Vault 토큰, Kubernetes 서비스 계정 토큰 등 다양한 자격 증명을 탈취하는 것이다. 특히, Docker 소켓 접근을 통해 컨테이너 탈출을 시도하고, 호스트 파일 시스템에 접근하려는 시도도 있었다. 탈취된 정보는 GitHub API를 통해 외부로 유출되었으며, 이는 공격의 은밀성을 높이는 전략으로 분석된다. 데이터 미저장 정책(Zero-Retention Policy)을 적용하는 것이 중요해 보인다.

영향받는 패키지 및 잠재적 위험

이번 공격으로 인해 size-sensor, echarts-for-react, timeago.js 등 널리 사용되는 패키지들이 악성 코드에 감염되었다. 특히, semver 범위를 사용하여 패키지를 설치하는 경우, 악성 버전이 자동으로 설치될 수 있다는 점이 문제다. 이는 개발자들이 의도하지 않게 악성 코드에 노출될 수 있음을 의미하며, 잠재적인 피해 규모를 더욱 키운다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 피해를 최소화해야 한다.

대응 방안: 잠재적 위협 탐지 및 예방

피해를 예방하기 위해서는, 먼저 package-lock.json 또는 pnpm-lock.yaml 파일을 확인하여 2026년 5월 19일에 배포된 악성 버전의 패키지 사용 여부를 확인해야 한다. 감염된 패키지를 사용하고 있다면, 해당 환경에서 사용되는 모든 자격 증명을 변경하고, CI/CD 파이프라인에서 Docker 소켓 노출EC2 메타데이터 접근을 제한해야 한다. 또한, lockfile을 사용하여 패키지 종속성을 고정하고, vet과 같은 도구를 사용하여 패키지 업데이트를 모니터링하는 것이 중요하다.

314 npm packages just got compromised, 271 @antv, echarts-for-react, size-sensor, timeago.js