콘텐츠로 이동

Miasma GitHub 공급망 오염

Miasma GitHub 공급망 오염 thumbnail
Miasma 자기 전파 공급망 캠페인이 Microsoft 관련 GitHub 조직의 73개 저장소에 영향을 준 것으로 공개됐다. 공개일은 2026-06-06이다. 핵심 위험은 저장소 쓰기 권한, npm 배포 권한, CI/CD 시크릿 접근 경로가 함께 오염될 수 있다는 점이다.

요약

Miasma 자기 전파 공급망 캠페인이 Microsoft 관련 GitHub 조직의 73개 저장소에 영향을 준 것으로 공개됐다. 공개일은 2026-06-06이다. 핵심 위험은 저장소 쓰기 권한, npm 배포 권한, CI/CD 시크릿 접근 경로가 함께 오염될 수 있다는 점이다.

항목 내용
공개일 2026-06-06
유형 GitHub 및 npm 공급망 오염
확인된 영향 Microsoft 관련 GitHub 저장소 73개
관련 흐름 Miasma 자기 전파 변종, IronWorm 관련 npm 공급망 공격
주요 위험 저장소 오염, 악성 패키지 유입, CI/CD 토큰 악용
코드 수준 근거 공개 GitHub 검색 자료에서는 Miasma The Spreading Blight, Hades The End for the Damned 문자열 기반 탐색 단서가 확인된다. 공개된 취약 함수, 엔드포인트, 패치 차이, PoC는 확인되지 않는다.

조사 범위

저장소 정리만으로 사건이 끝나지 않는다. npm tarball, 내부 미러, 빌드 캐시, artifact registry에 같은 오염이 남아 있는지 함께 확인해야 한다.

공격 흐름

공개 자료는 Miasma를 자기 전파형 공급망 캠페인으로 설명한다. 별도 npm 생태계 분석에서는 IronWorm과 Miasma 변종이 함께 언급됐고, 50개 이상 패키지가 악용된 것으로 정리됐다.

조사 지점은 저장소와 패키지 오염 흐름이다. 비정상 파일 추가, package.json 라이프사이클 스크립트 변경, GitHub Actions workflow의 시크릿 접근과 배포 단계 변경을 먼저 본다.

repository_signals:
  content:
    - unexpected_package_json_scripts
    - minified_or_obfuscated_javascript_added_to_build_paths
    - references_to_miasma_or_hades_strings
  github_activity:
    - unusual_automation_account_commits
    - similar_commits_across_many_repositories
    - workflow_changes_touching_secrets_or_publish_steps
  package_release:
    - npm_publish_from_new_or_unusual_token
    - version_bump_without_linked_review
    - tarball_content_mismatch_with_repository_source

영향 범위

Microsoft 관련 저장소 73개 영향은 downstream 복제를 포함해 봐야 한다. 공개 저장소의 커밋은 fork, dependency pin, 내부 미러, 자동 빌드 파이프라인, artifact registry로 이동할 수 있다. 최초 저장소를 정리해도 npm tarball, 빌드 캐시, 내부 레지스트리에 오염된 산출물이 남을 수 있다.

npm 관련 Miasma 변종과 IronWorm 흐름은 개발자 단말과 CI/CD 시크릿을 노리는 공급망 공격으로 분류된다. eBPF rootkit 은닉은 별도 분석 흐름에서 언급됐지만, Microsoft 관련 73개 저장소 건에 같은 은닉 기법이 쓰였다고 볼 근거는 공개 자료만으로는 부족하다.

탐지 포인트

네트워크

CI runner, 개발자 단말, 패키지 설치 환경에서 외부 전송 흔적을 본다. 설치 스크립트 실행 직후의 outbound 요청, 신규 도메인 접속, 시크릿 형태 문자열이 포함된 POST 요청을 우선 확인한다.

rg -n "curl|wget|Invoke-WebRequest|fetch\(|axios|http.request|https.request" .

엔드포인트

개발자 단말과 CI runner에서는 npm 라이프사이클 스크립트 실행 흔적을 확인한다. postinstall, prepare, prepublishOnly는 패키지 설치와 배포 과정에서 자동 실행될 수 있다.

rg -n '"(preinstall|install|postinstall|prepare|prepublishOnly)"\s*:' --glob package.json .
rg -n "Miasma The Spreading Blight|Miasma : The Spreading Blight|Hades The End for the Damned" .

서버

GitHub Enterprise, 내부 미러, artifact registry, npm 프록시에서 저장소 변경과 패키지 배포 이벤트를 맞춰 본다. 같은 시간대에 여러 저장소로 유사 커밋이 들어갔거나 새 토큰으로 npm publish가 발생했다면 같은 incident 범위로 묶는다.

rg -n "secrets\.|npm publish|NODE_AUTH_TOKEN|GITHUB_TOKEN|permissions:" .github/workflows
우선순위 확인 대상 이유
1 조직 전체 쓰기 권한 토큰 자기 전파형 공격은 저장소 쓰기 권한을 전파 지점으로 쓴다
2 .github/workflows 변경 시크릿 접근과 배포 단계가 workflow에 집중된다
3 package.json 라이프사이클 스크립트 npm 공급망 공격의 실행 지점으로 자주 쓰인다
4 npm 배포 이력 오염된 소스가 패키지로 배포됐는지 확인해야 한다
5 fork와 내부 미러 upstream 정리 이후에도 오염된 복제본이 남을 수 있다

대응

영향 저장소와 연결된 GitHub App, fine-grained PAT, classic PAT, npm 토큰을 분리해서 회전한다. 커밋만 되돌리고 토큰을 유지하면 같은 권한으로 다시 쓰기 작업이 가능하다.

저장소는 오염 시점 전후의 commit, tag, release artifact, npm tarball을 함께 비교한다. 소스 트리가 정상이어도 배포된 tarball에만 악성 파일이 들어갈 수 있으므로 npm pack 결과와 저장소 파일 트리를 대조한다.

npm pack --dry-run

CI/CD는 GITHUB_TOKEN 기본 권한을 read-only로 낮추고, 배포 job은 승인된 branch와 protected environment에서만 실행되게 제한한다. Actions workflow 수정 권한과 npm 배포 권한은 별도 그룹으로 나눈다.

permissions:
  contents: read

참고 자료