이 웜의 가장 기발하면서도 무서운 점은 AI 코딩 도구를 집요하게 파고든다는 것이다. 미아즈마의 변종들은 Claude Code, Cursor, Gemini CLI, GitHub Copilot을 겨냥한 악성 규칙 파일을 심어 놓았다. 이 파일들은 개발자가 감염된 저장소를 자신의 IDE에 클론하고 열기만 해도 자동으로 실행되도록 설계되었다 [2, 10]. 코드를 설치하지 않고 읽기만 해도 감염될 수 있다는 뜻이다.
2026년 6월 5일, 이 웜은 마침내 마이크로소프트에 도달했다. 커밋 날짜가 2020년 3월 9일로 조작된 “Switched DataConverter to OrchestrationContext [skip ci]”라는 제목의 악성 커밋이 Azure/durabletask 저장소에 심어졌다 . 이것이 교두보였다. 이후 웜은 애저(Azure), 애저-샘플(Azure-Samples), 마이크로소프트(Microsoft), MS문서(MicrosoftDocs) 등 마이크로소프트의 4개 깃허브 조직에 걸쳐 73개의 저장소로 확산되었다 [1, 6].
azure-functions-host 같은 핵심 인프라와 닷넷(.NET), Go, 자바, 자바스크립트 등 다양한 언어로 된 Durable Task 제품군 전체가 피해를 입었다 .
미아즈마를 이해하려면, 왜 이 공격이 가능했는지를 먼저 알아야 한다. TeamPCP는 2025년부터 2026년 초까지 자기 복제형 공급망 웜을 완성해왔다. 이들의 작전은 2026년 5월 11일 정점을 찍었는데, 이때 npm과 PyPI에 걸쳐 172개의 패키지에서 373개의 악성 버전을 배포했으며, 총 다운로드 수는 5억 1,800만 건을 넘어섰다 .
바로 다음 날인 5월 12일, TeamPCP는 미니 샤이훌루드의 전체 소스 코드를 MIT 라이선스로 깃허브에 공개해 버렸다 [25, 29]. 더 나아가 BreachForums에서 자신들의 프레임워크를 이용한 최대 규모의 공급망 공격을 펼치는 사람에게 모네로(Monero) 1,000달러 상당의 상금을 주는 대회를 열겠다고 공표했다 . 이 툴킷이 이제 공공 재산이 되었음을 선언한 것이다.
공개된 지 5일 만에, 한 npm 사용자가 샤이훌루드 웜을 거의 그대로 복제한 악성 패키지 4개를 업로드했다. OX Security가 분석한 결과, 명령 및 제어 서버 주소와 개인 키만 바뀌었을 뿐 “거의 아무런 변경 없이” 그대로 가져다 쓴 것으로 드러났다 . 공급망 공격의 산업화가 시작된 것이다.
오픈소스화 17일 후, 미아즈마가 레드햇을 강타했다. 이 악성코드는 미니 샤이훌루드의 구조적 변종으로, 원본의 '듄(Dune)' 관련 명칭이 그리스 신화 테마로 바뀌었을 뿐 핵심적인 공격 기법은 완전히 동일했다 [23, 27, 53].
중요한 점은, 연구자들이 미아즈마 공격을 TeamPCP 자체의 소행이라고 단정할 수 없다는 사실이다. 클라우드보안연합(CSA)은 “공개된 코드를 이용한 모방 범죄자의 가능성을 배제할 수 없다” 고 명시했으며 , 팔로알토 네트웍스의 Unit 42도 소스 코드 공개로 인해 유능한 공격자라면 누구든 동일한 공격을 재현할 수 있어 “귀속이 불확실하다” 고 밝혔다
. 이러한 모호함은 단순한 우연이 아니라, 생태계를 혼란에 빠뜨리고 추적을 어렵게 만들기 위한 의도된 전략이다
.
공개된 프레임워크는 미아즈마만 가능하게 한 것이 아니었다. 즉각적인 모방 공격이 연쇄적으로 발생했다.
2026년 6월 3일, 팬텀 집(Phantom Gyp) 이라는 새 변종이 등장해 @vapi-ai/server-sdk와 ai-sdk-ollama를 포함한 57개의 npm 패키지에 추가로 침투했다 [10, 20]. 이 변종은 패키지 설치 시 binding.gyp 파일을 악용해 악성 코드를 실행함으로써, 이미 주목받고 있던 postinstall 실행 경로를 회피했다 [10, 52]. 오픈소스멀웨어의 연구원들은 이 캠페인이 TeamPCP 프레임워크를 실제 환경에서 활용한 첫 사례로 확인했다 .
6월 8일, SANS 인터넷 스톰 센터는 이 툴킷이 이제 여러 독립적인 위협 행위자들에 의해 다양한 캠페인에 활발히 사용되고 있다고 보고했다 . 악성코드는 npm을 넘어, LLM으로 번역된 듯한 루비(Ruby) 변종까지 등장하며 여러 생태계로 빠르게 확산되었다
.
이처럼 민감한 사안에 대한 대응은 이례적으로 신속하고 공개적으로 이루어졌다.
깃허브는 2026년 6월 5일 탐지 약 105분 만에 마이크로소프트 소유의 저장소 70여 개를 비활성화했다 [2, 3, 12]. 이후 모든 저장소는 복구되어 안전한 상태로 선언되었지만, 이 과정에서 일부 MS의 CI/CD 파이프라인이 중단되는 혼란이 발생했다 .
마이크로소프트는 위협 인텔리전스 팀을 통해 전체 공격 체인에 대한 상세 기술 분석을 6월 2일에 발표했다 . 또한 자사의 저장소 73곳을 스스로 비활성화하는 초강수를 두었는데, 이는 해당 저장소가 “잠재적 악성 콘텐츠”를 유포하고 있다고 판단했기 때문이다
.
레드햇은 6월 1일 보안 권고문 RHSB-2026-006을 발표하고 침해 사실을 인정했으며, 레드햇 엔터프라이즈 리눅스(RHEL)나 오픈시프트(OpenShift) 같은 핵심 제품에는 영향이 없다고 밝혔다 [9, 16]. 영향을 받은 모든 npm 패키지 버전을 취소했다.
영국 국가사이버보안센터(NCSC) 의 움직임도 빨랐다. 6월 4일, NCSC는 미아즈마 캠페인을 계기로 조직들이 오픈소스 의존성을 검토하고 공급망 공격에 대한 노출을 줄일 것을 촉구하는 블로그 게시물을 올렸다 [38, 40]. 6월 9일에는 '사이버 필수 공급망 플레이북(Cyber Essentials Supply Chain Playbook)' 개정판을 발표하며, 영국 기업들에 '사이버 필수(Cyber Essentials)' 인증을 공급업체의 기본 요건으로 삼아야 한다고 강조했다 .
이 지침은 가시성(패키지 업데이트 감사, 예상치 못한 의존성 식별, 소프트웨어 자재 명세서 유지), 평가(공급업체 보안 관행 평가), 실행(공급망 보안을 이사회 차원의 최우선 과제로 설정)이라는 세 가지 범주에 초점을 맞추고 있다 [31, 40]. 이제 오픈소스 의존성 보안은 더 이상 개발자 개인의 몫이 아닌, 국가 사이버 보안 정책의 문제로 다뤄지고 있다.
미아즈마는 역사상 가장 크거나 가장 정교한 공급망 공격은 아니다. 하지만 앞으로 닥칠 일을 예측하는 데 가장 유용한 사건일 수 있다.
첫째, 오픈소스 공격 프레임워크가 생태계 자체를 무기화시켰다. TeamPCP의 전략은 성공했다. 수많은 모방범을 양산하고, 혼란을 야기해 방어자들이 동일한 플레이북을 가진 불특정 다수의 공격자를 상대하게 만든 것이다 [1, 9, 54].
둘째, npm의 preinstall 훅은 구조적 취약점이다. 이 기능은 빌드 스크립트를 위해 존재하지만, 공격자들에게 지속적으로 악용되고 있다. 레지스트리 수준의 라이프사이클 스크립트 제한이 시급하다 [4, 8, 9].
셋째, AI 코딩 도우미가 새로운 공격 표면이 되었다. 미아즈마는 Claude Code, Copilot, Gemini CLI 등을 감염 경로로 삼은 최초의 사례 중 하나로, 이 경로는 AI 기반 개발이 보편화될수록 더욱 확장될 것이다 [2, 10].
넷째, CI/CD 파이프라인은 이제 핵심 표적이다. OIDC 토큰을 러너 메모리에서 추출하여 유효한 SLSA 인증서를 가진 악성 패키지를 만들 수 있다는 사실은, 표준 암호화 검증이 무력화될 수 있음을 의미한다 [18, 55].
마지막으로, 이 사건은 오픈소스 의존성 관리를 더 이상 '1회성 감사'로 끝내서는 안 된다는 점을 보여준다. 지속적인 모니터링만이 미아즈마 이후 시대의 기본적인 보안 자세가 될 것이다.
Comments
0 comments