IronWorm과 신형 Miasma 웜 변종, npm을 공급망 공격에 노렸다.

발행: (2026년 6월 6일 AM 03:05 GMT+9)
8 분 소요

출처: The Hacker News

npm 생태계가 여러 차례 소프트웨어 공급망 공격을 받았으며, 위협 행위자는 50개가 넘는 정상 패키지의 악성 및 오염된 버전을 이용해 Rust 기반 정보 탈취기와 자체 확산 웜을 각각 배포했습니다.

JFrog에 따르면, 이 정보 탈취기는 “개발자 머신에서 찾을 수 있는 모든 비밀을 스크랩하고, eBPF 커널 루트킷 뒤에 숨으며, Tor를 통해 운영자와 통신한다”고 합니다.

이 탈취기는 도난된 자격 증명을 전파 메커니즘으로도 사용해 악명 높은 Shai‑Hulud 웜과 유사점을 보입니다. 이 새로운 악성코드는 소프트웨어 공급망 보안 업체에 의해 IronWorm이라는 코드명으로 불립니다. 트로이 목마 형태의 패키지를 npm 레지스트리에 배포함으로써 자체 복제 공격이 이루어집니다.

악성 활동은 “asteroiddao”라는 손상된 npm 계정에서 시작된 것으로 추적되었습니다. 이 계정은 사전 설치(preinstall) 훅을 통해 실행되는 Rust ELF 바이너리를 포함한 패키지 버전을 배포했습니다.

이 악성코드는 86개의 환경 변수와 OpenAI Codex, Anthropic, Claude, Google Gemini, Cursor, Amazon Web Services(AWS), Docker, Kubernetes, npm, Vault 설정, 그리고 Exodus 암호화폐 지갑 파일 등 자격 증명을 포함할 수 있는 다양한 파일을 목표로 합니다.

특이하게도, 탈취기에는 위협 행위자의 자체 지갑을 건너뛰는 로직이 포함되어 있습니다. 현재 암호화폐 지갑은 비어 있으며, 거래 기록도 없습니다.

JFrog는 IronWorm을 “비밀을 찾고, 프로젝트를 변조하며, 악성 코드를 삽입해 GitHub 전역에 자체 전파되는 공급망 무기”라고 설명했습니다. 9개의 GitHub 조직에 걸친 악성 커밋은 “claude”(claude@users.noreply.github.com)라는 저자명으로 추가되어 Anthropic의 AI 챗봇을 흉내냈습니다.

“악성 npm 패키지는 asteroiddao에 의해 게시되었습니다; asteroiddao는 asteroid-dao GitHub 조직에 해당하며, ocrybit은 그 조직 및 관련 Arweave 조직의 멤버입니다.”라고 회사는 설명했습니다.

“악성코드는 ocrybit의 자격 증명을 탈취해 접근 가능한 저장소에 커밋을 푸시했습니다. 그 커밋은 다른 패키지에 악성코드를 심었고, 이후 해당 패키지가 배포돼 다음 개발자를 감염시켰습니다. 그리고 사라졌습니다.”

게다가 악성 페이로드는 기존 GitHub Actions 워크플로를 비밀을 수집하고 무해해 보이는 파일에 기록한 뒤 빌드 아티팩트로 업로드하는 워크플로로 교체해 외부 C2 서버 없이도 비밀을 탈취할 수 있게 합니다.

이 악성코드의 기능은 여기서 끝나지 않습니다. CI 환경에서는 npm의 Trusted Publishing 흐름을 악용해 단시간 토큰을 획득하고, 오염된 버전을 레지스트리에 푸시합니다.

또한 eBPF 페이로드를 포함해 커널 수준 루트킷으로 동작, 프로세스를 숨기고 분석을 방해합니다. 다만 커널 락다운이 활성화된 시스템에서는 프로세스 은폐가 실패해 해당 프로세스와 소켓이 다시 보이게 됩니다.

Miasma 웜이 다시 등장

이번 공개는 Endor LabsStepSecurity가 57개의 npm 패키지를 286개가 넘는 악성 버전으로 오염시킨 별도의 공급망 공격 캠페인을 밝히면서 이루어졌습니다. 이 캠페인은 이전 주에 72초 만에 @redhat-cloud-services npm 네임스페이스 아래 32개의 패키지를 90개가 넘는 버전으로 감염시킨 Miasma 웜의 새로운 변종을 배포했습니다.

영향을 받은 패키지 중 일부는 다음과 같습니다.

  • ai-sdk-ollama
  • autotel
  • awaitly
  • effect-analyzer
  • eslint-plugin-awaitly
  • executable-stories-cypress
  • http-uploader-dev
  • mountly
  • node-env-resolver
  • node-env-resolver-aws

악성코드가 탈취한 데이터는 현재 접근할 수 없는 GitHub 계정 “liuende501”으로 exfiltration되었습니다. 이 계정에는 236개의 저장소가 있었으며, GitHub가 계정을 삭제했는지, 위협 행위자가 직접 삭제했는지는 아직 확인되지 않았습니다.

StepSecurity 연구원 Sai Likhith는 “이번 공격은 ‘Phantom Gyp’라 부르는 기법을 사용합니다. 보안 도구가 일반적으로 감시하는 preinstall 혹은 postinstall 스크립트 대신, 157바이트짜리 binding.gyp 파일을 악용해 npm install 중 코드를 실행함으로써 대부분의 설치‑스크립트 보안 검사를 우회합니다.”라고 설명했습니다.

Miasma 사례와 마찬가지로, 공격 체인은 Bun JavaScript 런타임을 다운로드·설치하고 이를 이용해 AWS, Google Cloud, Microsoft Azure, HashiCorp Vault, Docker, Kubernetes, GitHub Actions, npm, RubyGems, PyPI, SSH, 비밀번호 관리자, AI 어시스턴트 등에서 비밀을 추출하도록 설계된 종합적인 자격 증명 수집기를 로드합니다.

“이번 변종의 가장 새롭고 우려되는 기능은 AI 코딩 어시스턴트 설정을 표적한다는 점입니다.”라고 회사는 말했습니다. “악성코드는 프로젝트 저장소에 지속적인 백도어 파일을 삽입해 개발자가 AI 지원 IDE에서 프로젝트를 열 때마다 실행됩니다.”

영향을 받은 버전을 설치한 개발자는 자격 증명을 교체하고, 기본적으로 설치 스크립트와 네이티브 재빌드를 비활성화하며, 패키지를 무결성 해시로 고정할 것을 권고합니다.

[![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFlTC7RrRZGiFAgASS0

0 조회
Back to Blog

관련 글

더 보기 »

가장 어려운 갈림길

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRnMnAqwiH7Dgv_dmF2bugYLlu8uMyFQkl7DseYkwwzl5MzUP-KeplSbGg_aNt_OqIDtT5rLyDO_Ea96Hf_uti0eKVIseQTxtS7z...