새 Shai‑Hulud 공격, 과학용 PyPI 패키지 19개에 트로이 목마 삽입

해커들이 PyPI에서 19개의 패키지를 탈취했으며, 이 패키지들은 총 수십만 번 다운로드되었습니다. 이는 개발자 비밀을 탈취하도록 설계된 악성코드를 전달하는 새로운 Shai‑Hulud 공급망 공격입니다.
감염된 패키지 중 다수는 Dynamo, Spateo, CoolBox, U‑FISH, Napari‑UFISH와 같은 인기 있는 생물정보학 도구입니다.
이번 새로운 캠페인은 애플리케이션 보안 기업 Socket에 의해 발견되었으며, 단일 유지관리자로 보이는 19개 패키지에 대해 37개의 악성 릴리스가 확장되었습니다.
연구원들은 악성 아티팩트에 ‘*-setup.pth’ 파일과 ‘_index.js’라는 난독화된 JavaScript 페이로드가 포함되어 있다고 밝혔습니다.
사용자는 Python을 실행하기만 하면 PTH 파일이 실행되고, 이 파일은 GitHub에서 Bun JavaScript 런타임을 다운로드해 번들된 스크립트를 실행하려 시도합니다.
“이는 손상된 wheel이 원래 수동적인 의존성 설치를 지연된 실행 트리거로 바꿀 수 있음을 의미합니다. 다음 Python, pip, 테스트 실행, 노트북 커널, CI 작업 또는 Python을 시작하는 패키지 관리 명령이 악성 .pth 파일을 처리할 수 있습니다.” — Socket 설명
연구진은 이 공격이 여러 기술적 유사성을 보이는 점에서 더 넓은 “Shai‑Hulud” 캠페인의 일부라고 보고 있습니다.
이에 따라 Socket은 이전 공격과 함께 이를 추적하고 있으며, Shai‑Hulud 활동에 기인한 악성 아티팩트 목록이 현재 453개 항목으로 늘어났습니다.
JavaScript 페이로드 분석 결과, 다음과 같은 다양한 개발자 비밀을 목표로 하고 있었습니다:
- GitHub 토큰 및 GitHub Actions 비밀
- npm, PyPI, RubyGems, JFrog 퍼블리싱 토큰
- AWS, GCP, Azure, Kubernetes, Vault 자격 증명
- SSH 키
- Docker 자격 증명
.env,.npmrc,.pypirc- 쉘 히스토리
- Claude/MCP 설정 파일
- 기타 개발 워크스테이션 및 CI/CD 비밀
다른 Shai‑Hulud 공격과 마찬가지로, 이번 공격의 목표는 소프트웨어 개발 워크플로우를 장악해 악성코드를 더욱 전파하는 것으로 보입니다.
주된 데이터 유출 방식은 과거 Shai‑Hulud 작전과 유사하게, GitHub Actions를 통해 작성된 비밀을 호스팅하기 위해 자동으로 생성된 GitHub 저장소를 이용하는 것입니다.
직접 HTTPS 기반의 두 번째 유출 방식도 존재하는데, 이는 합법적이지만 유효하지 않은 Anthropic API 엔드포인트(api[.]anthropic[.]com/v1/api)를 가리키며, Socket은 이를 위장용으로 사용했을 가능성이 높다고 판단합니다.
악성코드에는 러시아 로케일/환경을 확인하거나 StepSecurity Harden‑Runner와 같은 보안 도구를 탐지하는 회피 메커니즘도 포함되어 있습니다.
지속성은 Linux에서는 systemd 서비스, macOS에서는 LaunchAgents를 통해 구축되며, GitHub 워크플로우와 Claude/MCP 설정 파일도 활용됩니다.
Socket 보고서는 영향을 받은 모든 패키지와 버전을 열거하고, 해당 패키지를 설치한 조직에 비밀을 모두 교체하고 안전한 백업에서 환경을 복원할 것을 권고합니다.
방어자는 실행 가능한 .pth 시작 훅을 포함한 Python 패키지, GitHub에서 Bun JavaScript 런타임을 예상치 못하게 다운로드하는 행위, 그리고 Python이 Bun을 실행해 _index.js를 실행하는 프로세스 체인을 찾아야 합니다.

보안 팀은 성공적인 공격의 54%를 기록하고 경보는 14%에 불과합니다. 나머지는 환경을 눈치채지 못
