하데스 PyPI 공격: 19개 패키지에 악성 코드 삽입·Bun 자격증명 탈취기 자동 실행
Source: The Hacker News
Miasma 공급망 캠페인이 Hades라는 새로운 공격 파도를 일으켰으며, 이번에는 Python Package Index(PyPI) 레지스트리에서 19개의 패키지에 걸쳐 37개의 악성 wheel 아티팩트가 포함되었습니다. Mini Shai‑Hulud 스타일 공격이 계속해서 정교화되고 분화되어 특정 생태계를 겨냥하고 있습니다.
Socket은 새로운 분석에서 “손상된 릴리스는 *‑setup.pth 파일을 포함하고 있으며, 이 파일은 Python 시작 시 자동으로 실행되어 Bun JavaScript 런타임을 다운로드하고, _index.js라는 난독화된 JavaScript 페이로드를 실행한다”고 said[https://socket.dev/blog/shai-hulud-descends-to-hades-miasma-pypi-wave]했습니다.
아래는 확인된 패키지 목록입니다.
- bramin 0.0.2, 0.0.3, 0.0.4
- cmd2func 0.2.2, 0.2.3
- coolbox 0.4.1, 0.4.2
- dynamo-release 1.5.4
- executor-engine 0.3.4, 0.3.5
- executor-http 0.1.3, 0.1.4
- funcdesc 0.2.2, 0.2.3
- magique 0.6.8, 0.6.9
- magique‑ai 0.4.4, 0.4.5
- mrbios 0.1.1, 0.1.2
- napari‑ufish 0.0.2, 0.0.3
- nucbox 0.1.2, 0.1.3
- okite 0.0.7, 0.0.8
- pantheon‑agents 0.6.1, 0.6.2
- pantheon‑toolsets 0.5.5, 0.5.6
- spateo‑release 1.1.2
- synago 0.1.1, 0.1.2
- ufish 0.1.2, 0.1.3
- uprobe 0.1.3, 0.1.4
이전 Shai‑Hulud와 Miasma 캠페인과 마찬가지로, 악성 페이로드는 Bun JavaScript 런타임을 다운로드하고 설치한 뒤, 이를 이용해 개발자 시스템에서 다양한 데이터를 수집할 수 있는 고도로 난독화된 JavaScript 스틸러를 실행합니다.
이 페이로드는 GitHub, npm, PyPI, RubyGems, JFrog, CircleCI, Anthropic, AWS, GCP, Azure, Kubernetes와 같은 서비스와 연관된 비밀 정보는 물론 Docker 설정, Vault 토큰, SSH 키, 쉘 히스토리, .env 파일, .npmrc 파일, .pypirc 파일, Claude/MCP 설정 및 기타 로컬·런너 접근 가능한 자격 증명을 탈취합니다.
이번에 바뀐 점은 캠페인 마커입니다. 이전 버전은 수집된 데이터를 “Miasma: The Spreading Blight”, “Miasma: The Spreading Blight”, “Miasma - The Spreading Blight”라는 설명을 가진 공개 GitHub 저장소에 내보냈지만, 최신 파도는 다음과 같은 저장소 설명을 포함하고 있습니다[https://github.com/search?q=%22Hades+The+End+for+the+Damned%22&type=repositories] :
- Hades - The End for the Damned
- Hades * The End for the Damned
“따라서 Hades는 동일한 Mini Shai‑Hulud / Miasma 계통의 PyPI 분파로 보는 것이 맞으며, 독립적인 Python 악성코드 사건은 아니다”고 해당 애플리케이션 보안 업체는 말했습니다. “핵심 전술은 변함없다: 신뢰된 패키지 채널을 악용하고, 정상 패키지 사용 전에 실행시키며, Bun 기반 JavaScript 페이로드를 배포하고, 개발자·CI/CD 자격 증명을 탈취한 뒤, GitHub 중심의 유출·전파 로직을 사용한다.”
이번에 바뀐 또 다른 점은 *‑setup.pth 파일을 이용한다는 것입니다. 이 파일은 Python 인터프리터 시작 시 “site” 모듈에 의해 처리되어, 사용자가 오염된 패키지를 import하지 않아도 설치 직후 악성 페이로드가 실행됩니다. 페이로드는 GitHub에서 Bun을 다운로드·실행하고 스틸러를 구동하지만, 먼저 시스템 로케일이 러시아어인지 확인합니다.
Socket은 “이는 Shai‑Hulud와 Miasma가 반복적으로 악용해 온 npm install‑hook 문제와 동일한 Python 버전이다. 문법은 다르지만 보안상의 결과는 같다: 의존성 설치 단계에서 애플리케이션 코드가 검토·호출되기 전에 실행 지점을 만든다”고 설명했습니다.
Hades Cluster Attempts to Mislead AI Security Scanners
Hades 캠페인에 포함된 또 다른 손상된 패키지는 계산생물학·생물정보학·유전체‑표현형 분석 생태계와 관련된 다음 패키지들입니다.
- embiggen 0.11.97
- ensmallen 0.8.101
- gpsea 0.9.14
- mflux‑streamlit 0.0.3, 0.0.4
- nhmpy 2.4.7
- ppkt2synergy 0.1.1
- pyphetools 0.9.120
흥미롭게도 이 클러스터는 진입점을 패키지의 __init__.py 파일에 삽입된 난독화된 단일 라인 import hook 형태로 구현했습니다. 결과는 동일합니다: Bun 런타임을 다운로드·실행하고, 이어서 JavaScript 페이로드를 실행합니다.
StepSecurity는 “Bun 런타임 사용은 일관된 테마다”며[https://www.stepsecurity.io/blog/the-hades-campaign-pypi-packages] “Bun을 독립적인 ZIP 파일로 다운로드하면 Node.js가 설치되지 않은 환경에서도 복잡한 JavaScript 작업을 수행할 수 있어, 전통적인 패키지 매니저 제어와 네트워크 프록시 로그를 우회한다”고 밝혔습니다.
새로운 인공지능(AI) 방어 회피 기법으로, 이 악성코드는 평문 형태의 프롬프트 인젝션을 포함해 LLM 기반 패키지 분석 도구를 속여 해당 패키지를 안전하다고 판단하도록 유도합니다.
또한 악성코드는 GitHub 커밋에서 “TheBeautifulSnadsOfTime”이라는 키워드를 검색해 Base64‑인코딩된 JavaScript 페이로드를 추출하고, “firedalazer” 키워드가 포함된 커밋을 찾아 Python 기반 드롭퍼를 다운로드·실행합니다.
Hades 악성코드에 포함된 주요 기능은 다음과 같습니다.
- SSH 또는 SCP를 이용해 개발자 네트워크 내에서 횡방향으로 복제·전파하고, 개발자의 OpenID Connect(OIDC) 신뢰 설정을 악용해 손상된 시스템에서 PyPI 패키지의 트로이 목마 버전을 푸시한다.
- GitHub 토큰에 쓰기 권한이 있는 경우, GitHub Actions 러너를 통해 조직 비밀을 추출한다.
- Anthropic Claude, OpenAI Codex, Google Gemini, Microsoft Copilot, Cline, Aider, Tabby, Amazon Q, Cody, Bolt, Continue 등 AI 어시스턴트나 IDE에서 분석·열릴 때 코드 실행을 트리거하도록 로컬 워크스페이스 폴더에 백도어를 설치한다.
- “gh‑token‑monitor”라는 백그라운드 서비스를 설치해,

