공지사항

Security Insights & Trends

Shai-Hulud Miasma의 귀환: Leo Platform 침해 사례, 개발자 자격증명을 노리는 npm 공급망 공격

Raoul16 2026. 7. 1. 13:26

Shai-Hulud Miasma의 귀환: Leo Platform 침해 사례, 개발자 자격증명을 노리는 npm 공급망 공격

 

안녕하세요,

그로메트릭 입니다. 🐸

 

npm 생태계를 대상으로 한 공급망 공격이 다시 한번 새로운 국면을 맞이했습니다.

지난 2026년 6월 25일, 보안 연구팀들이 Shai-Hulud Miasma 캠페인의 최신 변종을 포착했습니다.

이번 공격의 핵심은 타이포스쿼팅이나 신규 악성 패키지 배포가 아닙니다.

수년간 개발자들이 신뢰해온 기존 패키지 그 자체를 감염시켰다는 점에서 이전 공격과 본질적으로 다릅니다.

 

공격자는 Leo Platform 오픈소스 생태계의 패키지 관리자 계정(czirker)을 탈취한 뒤, 정상 패키지의 새 버전에 악성 코드를 심어 배포했습니다. 특히 npm 설치 시 native 애드온 빌드를 위해 사용되는 binding.gyp 파일을 악용해, package.json의 lifecycle 스크립트(preinstall/postinstall)를 확인하는 기존 탐지 방식을 교묘하게 우회했습니다.

Sonatype 심층 분석 결과, Leo Platform 및 RStreams 에코시스템에서 23개의 악성 패키지 버전이 확인되었으며, 공개 보고에는 제외된 hexo-deployer-wrangler, prism-silq 등의 추가 패키지도 새롭게 식별되었습니다.

 

이번 침해가 특히 위험한 이유는, 피해 범위가 개발자 로컬 환경에 그치지 않기 때문입니다.

CI/CD 파이프라인, 빌드 에이전트, 컨테이너 이미지까지 침투하여 GitHub 토큰, npm 배포 토큰, 클라우드 자격증명, SSH 키 등 운영 인프라 전반에 영향을 미칠 수 있는 민감한 정보를 탈취하도록 설계되어 있습니다.

단순히 악성 패키지를 제거하는 것으로는 충분하지 않으며, 감염된 환경의 철저한 조사와 체계적인 자격증명 로테이션이 필수적입니다.

 

*아래 글은 소나타입(Sonatype)의 공식 블로그 글을 번역하여 작성되었습니다.


Leo Platform npm 침해: 신뢰가 실행으로 바뀐 순간

공격자들은 이제 의심스러운 신규 패키지를 배포하고 누군가 실수로 설치해 주기를 기다리는 단순한 방식에 머물지 않습니다. 갈수록 개발자들이 이미 신뢰하는 패키지, 관리자 계정, 배포 워크플로우 자체를 침해하는 방향으로 진화하고 있습니다.

 

2026년 6월 25일, 업계 연구자들이 Shai-Hulud Miasma 악성 패키지 캠페인과 연결된 또 다른 npm 공급망 침해를 보고하기 시작했습니다. 초기 보고에 따르면, 침해된 패키지 관리자 계정이 Leo Platform 에코시스템 관련 패키지의 악성 버전을 배포하는 데 사용된 것으로 밝혀졌습니다.

 

이 패턴은 이미 목격된 바 있습니다. 신뢰받는 관리자 계정 또는 배포 워크플로우를 침해하고, 정상 패키지를 수정한 뒤, 하위 자동화 시스템이 나머지를 처리하도록 내버려 두는 방식입니다.

 

이번 웨이브에서 특히 주목해야 할 점은 악성 코드가 실행되는 지점입니다. 이 악성코드는 binding.gyp 파일을 계속해서 악용하고 있습니다. binding.gyp는 원래 Node.js native 애드온과 관련된 파일로, 공격자들은 package.json의 lifecycle 스크립트에 의존하는 대신 node-gyp를 통한 설치 중 실행을 활용합니다.

 

패키지 메타데이터만 확인하는 방식으로는 이런 유형의 공격을 잡아낼 수 없습니다. 패키지는 겉으로 보기에 정상처럼 보이고, 원래의 정상적인 이름을 유지하면서도, 애플리케이션이 해당 패키지를 import하기도 전에 악성 코드를 실행할 수 있습니다.

이것이 이번 캠페인이 전달하는 더 큰 교훈입니다. 신뢰받는 패키지는 그 최신 릴리스만큼만 신뢰할 수 있습니다.

 

Sonatype이 확인한 Leo Platform 침해 현황 🦠

 

Leo 에코시스템 악성 패키지의 정확한 수에 대해서는 공개 보고마다 차이가 있습니다.

일부 초기 보고는 23개 패키지를 목록으로 제시했고, 다른 기술 분석 보고서는 20개 확인된 악성 패키지만 나열하며 3개의 pre-release 또는 릴리스 후보(RC) 패키지를 제외했습니다.

보안팀이 불필요한 오탐을 추적하지 않고 교정 워크플로우를 효율적으로 유지할 수 있도록, Sonatype의 심층 분석은 초기 메타데이터 플래그를 넘어서는 수준으로 진행되었습니다. 분석 결과, 일부 초기 공개 보고에 포함된 세 패키지는 악성 코드를 포함하지 않는 것으로 확인되었습니다.

  • leo-connector-common@4.0.11-rc
  • leo-connector-postgres@4.0.19-beta
  • leo-connector-entity-table@3.0.22-rc

이 패키지들은 주변 인시던트 활동의 일부이기 때문에 영향을 받은 팀이 여전히 검토해야 합니다. 다만 Sonatype의 현재 분석 기준으로는, 확인된 Leo 및 RStreams 패키지에서 관측된 악성 페이로드가 포함되어 있지 않은 것으로 보입니다.

또한 Sonatype은 공개 보고에는 포함되지 않았지만, 동일한 난독화 페이로드를 포함하고, binding.gyp 실행 방식을 사용하며, 침해된 것으로 추정되는 계정(@llxlr)에 의해 모두 게시된 추가 패키지를 식별했습니다.

  • hexo-deployer-wrangler@1.0.4
  • hexo-shoka-swiper@0.1.10
  • prism-silq@1.0.1

Sonatype Security Research는 이 캠페인을 지속적으로 추적하고 있으며, 새로운 발견이 있을 경우 업데이트할 예정입니다.

 

Miasma가 노리는 것: 탈취 대상 자격증명

Sonatype의 현재 분석과 이전 Miasma 보고를 바탕으로, 영향을 받은 조직은 다음 정보의 노출 여부를 반드시 검토해야 합니다.

  • GitHub 토큰 및 GitHub Actions 시크릿
  • npm 배포 토큰
  • 클라우드 자격증명
  • CI/CD 환경 변수
  • 패키지 레지스트리 자격증명
  • SSH 키
  • 셸 히스토리 및 개발자 구성 파일
  • 레포지토리 설정
  • IDE 및 AI 코딩 어시스턴트 구성 파일
  • 빌드 에이전트 및 러너 시크릿

이것은 단순한 개발자 워크스테이션 문제가 아닙니다. 의존성 설치는 대부분 시크릿, 배포 키, 레지스트리 토큰, 클라우드 자격증명에 접근할 수 있는 CI/CD 시스템 내부에서 이루어집니다.

 

Shai-Hulud Miasma npm 공격 대응 방법 🛡️

 

이번 Miasma 캠페인의 영향을 받았을 수 있는 조직은 개발자 워크스테이션, CI/CD 러너, 빌드 에이전트, 내부 패키지 미러, 의존성 캐시, 컨테이너 이미지, 락파일, 프로덕션 인접 시스템 등에서 확인된 악성 버전이 설치되었는지 여부를 조사해야 합니다.

우선 다음 파일들을 검토하는 것으로 시작합니다.

  • package.json 및 package-lock.json
  • yarn.lock
  • pnpm-lock.yaml
  • CI/CD 의존성 설치 및 컨테이너 빌드 로그
  • 패키지 매니저 캐시
  • 내부 레포지토리 매니저 로그
  • SBOM 및 의존성 매니페스트
  • npm 프록시 또는 방화벽 텔레메트리

확인된 악성 패키지 버전이 설치된 경우, 단순히 패키지를 제거하고 넘어가지 마십시오. 로그를 보존하고, 영향을 받은 시스템을 격리하고, 악성 버전을 매니페스트와 캐시에서 제거하고, 정상으로 확인된 버전에서 락파일을 재생성하고, 설치 로그에서 다음 항목을 검사해야 합니다.

  • node-gyp 및 binding.gyp 실행 흔적
  • 난독화된 JavaScript 실행
  • 예상치 못한 임시 파일
  • 아웃바운드 네트워크 활동

자격증명 로테이션은 필수적이지만, 타이밍이 중요합니다. GitHub, npm, 클라우드, CI/CD, 패키지 레지스트리, SSH 등 노출된 자격증명은 영향을 받은 환경이 완전히 조사되고 정리된 이후에만 로테이션하십시오. 지속성(persistence)이 남아 있는 상태에서 새로 로테이션한 자격증명은 다시 노출될 수 있습니다.

 

npm 공급망 리스크가 보여주는 것

 

이번 사건는 Sonatype이 npm 공격 전반에서 지속적으로 추적해온 패턴을 다시 한번 확인시켜 줍니다.

공격자들은 단순히 의심스러운 신규 패키지를 배포하는 것을 넘어, 신뢰받는 패키지, 신뢰받는 관리자, 신뢰받는 워크플로우 자체를 침해하고 있습니다.

 

패키지 이름은 정상일 수 있지만 특정 버전은 악성일 수 있습니다. 관리자 계정은 토큰이 탈취되기 전까지는 신뢰할 수 있습니다. 패키지는 수년간의 정상 이력을 갖고 있다가 단 하나의 릴리스만으로도 위험해질 수 있습니다.

 

Leo Platform 침해는 또한 캠페인이 보안 커뮤니티의 대응을 얼마나 빠르게 학습하며 진화하는지를 보여줍니다. 방어자가 하나의 탐지 지표를 파악하면, 공격자는 문자열을 바꿉니다. 방어자가 postinstall을 검사하기 시작하면, 공격자는 실행 지점을 binding.gyp으로 옮깁니다. 연구자들이 탐지 로직을 공개하면, 노이즈성 디코이 패키지와 벤더를 참조하는 패키지들이 등장할 수 있습니다.

 

보안팀은 Branding이 아닌 Behavior(행위)를 추적해야 합니다.

 

 

신뢰 자체가 공격 벡터다: 개발자를 겨냥한 위협 🔫

Leo Platform 침해는 오픈소스 리스크가 더 이상 의심스러운 신규 패키지나 명백한 타이포스쿼트에만 국한되지 않는다는 사실을 다시 한번 상기시켜 줍니다. 공격자들은 개발자들이 이미 신뢰하는 패키지, 관리자, 배포 워크플로우를 점점 더 적극적으로 표적으로 삼고 있습니다.

이것은 조직이 의존성 보안을 바라보는 방식을 바꿔야 한다는 것을 의미합니다. 정상적인 이름, 깔끔한 이력, 확립된 사용자 기반을 가진 패키지라도 침해된 단 하나의 릴리스만으로 악성이 될 수 있습니다. 보안팀은 패키지가 이전에 신뢰받았는지 여부뿐 아니라, 각 버전이 설치 시 무엇을 실행하는지에 대한 가시성을 확보해야 합니다.

 

Sonatype Security Research는 Leo Platform 침해, 관련 Shai-Hulud Miasma 활동, 그리고 초기 공개 보고에서 누락되거나 잘못 분류되었을 수 있는 패키지들에 대한 분석을 지속하고 있습니다.

확인된 설치 내역이 있는 조직은 해당 설치를 잠재적 침해 이벤트로 취급하고, 의존성 및 빌드 텔레메트리를 검토하며, 영향을 받은 환경이 완전히 조사·정리된 이후에만 자격증명을 로테이션해야 합니다.

 


출처

소나타입 블로그 : Miasma Returns: Leo Platform Compromise Shows Why Package Detection Needs Context