영향을 받은 패키지들의 주간 총 다운로드 수는 110만 건을 초과합니다 . 이 공격은 AI 개발자 생태계에 큰 충격을 주었고, 마이크로소프트가 즉각적인 정책 변화를 단행하는 계기가 되었습니다. 마이크로소프트는 2026년 6월 19일, 이번 작전을 높은 확신을 가지고 Sapphire Sleet의 소행으로 공식 발표했습니다 .
공격 체인은 보안 연구원들이 수년간 경고해 온 패턴을 따랐으며, 패키지 레지스트리들이 지금 제거에 열을 올리고 있는 정확한 유형의 자격 증명 취약점을 악용했습니다.
공격자들은 먼저 합법적인 Mastra 관리자를 사회 공학 기법으로 표적으로 삼아 npm 계정 자격 증명을 탈취하는 데 성공했습니다 . 탈취된 계정('ehindero'로 식별됨)은 전체 @mastra 범위에 대한 게시 권한을 가지고 있었습니다 .
탈취된 계정을 사용해 공격자는 88분이라는 짧은 시간 안에 @mastra/* 네임스페이스의 모든 패키지를 다시 게시했습니다. 일부 보고서에 따르면 대량 게시 돌입은 단 19분 만에 이루어졌습니다 . 이 속도는 수동 업로드가 아닌 자동화된 게시 스크립트를 사용했음을 강력히 시사합니다.
각 손상된 패키지 버전에는 'easy-day-js'라는 악성 의존성이 포함되었습니다. 이는 널리 사용되는 합법적인 날짜 라이브러리 'dayjs'의 오타를 이용한 typosquat 공격입니다 . 보안 연구원들은 이 캠페인을 'easy-day-js'로 명명했습니다 .
악성 코드는 npm의 postinstall 스크립트를 통해 자동으로 실행되도록 설계되었습니다. 영향을 받은 패키지에 대해 npm install을 실행한 개발자는 애플리케이션 코드를 실행하지 않더라도 즉시 페이로드가 트리거되었습니다 .
실행되면 페이로드는 영향을 받은 개발자의 워크스테이션 및 빌드 시스템에서 암호화폐 지갑 키, 클라우드 자격 증명, CI/CD 시크릿을 수집했습니다 . 또한 페이로드는 TLS 검증을 비활성화하고 공격자가 제어하는 인프라에서 2차 탈취 프로그램을 다운로드했습니다 .
2026년 6월 19일, 마이크로소프트는 이번 공격이 주로 금융 및 암호화폐 부문을 표적으로 삼는 북한 국가 행위자 Sapphire Sleet의 소행이라고 높은 확신을 가지고 평가했습니다. 마이크로소프트는 이전에 문서화된 Sapphire Sleet 작전과 일관된 인프라 및 전술, 기법, 절차(TTP)를 근거로 제시했습니다 . Amazon Threat Intelligence는 또한 Sapphire Sleet을 axios, debug, chalk, typo-crypto를 포함한 NPM 패키지에 대한 이전 캠페인과 연결했습니다 .
Mastra 공격은 마이크로소프트가 이미 개발 중이던 여러 보안 변경을 가속화했습니다. 회사는 Sapphire Sleet이 악용한 정확한 자격 증명 벡터를 제거하는 것을 목표로 하는 두 가지 주요 정책 변화를 발표했습니다.
2026년 8월 17일부로, 마이크로소프트는 새로 생성되는 NuGet.org API 키의 최대 유효 기간을 기존 365일에서 30일로 단축합니다 . 해당 날짜 이전에 생성된 모든 API 키는 2026년 11월 1일에 강제 만료됩니다 .
그 이유는 명확합니다. 수명이 긴 API 키는 '분실되기 쉬운 느슨한 끈'과 같아 공급망 공격의 주요 경로가 되어 왔습니다 . 도용된 키는 공격자에게 트로이 목마화된 패키지를 게시할 수 있는 긴 시간 창을 제공합니다. 이는 Mastra 사건과 최근 NX Console npm 침해 사고에서 정확히 발생한 일입니다 .
마이크로소프트는 모든 패키지 관리자가 2025년 9월에 출시된 최신 워크플로우인 Trusted Publishing으로 전환할 것을 강력히 권장합니다. 이 방식은 장기 API 키를 단기 OpenID Connect(OIDC) 인증으로 대체합니다 .
Trusted Publishing의 주요 장점 :
Trusted Publishing을 사용하는 CI/CD 워크플로우가 실행되면, 공급자(예: GitHub Actions)에게 암호화된 OIDC 토큰을 요청합니다. NuGet.org는 등록된 게시자 정책에 대해 해당 토큰의 유효성을 검증하고, 해당 게시 세션에만 유효한 일회용 임시 API 키를 발급합니다 .
npm 및 패키지 관리 생태계 전반의 여러 보완 조치가 마이크로소프트의 대응을 뒷받침합니다:
npm login 명령은 2시간 세션 토큰만 발급합니다 .이러한 조치들은 종합적으로 Sapphire Sleet이 악용한 바로 그 취약점, 즉 단일 장기 유효 npm 관리자 토큰이 전체 패키지 범위에 대한 게시 권한을 가지고 있던 문제를 제거하는 것을 목표로 합니다.
기존 NuGet API 키를 지금 교체하세요: 2026년 8월 17일 이전에 생성된 키가 있다면 2026년 11월 1일에 만료됩니다. 그 전에 새 키를 생성하거나 Trusted Publishing으로 전환하세요 .
가능한 한 빨리 Trusted Publishing을 채택하세요: OIDC 기반 인증은 CI/CD 파이프라인에 장기 시크릿을 저장할 필요를 없애줍니다. NuGet.org, npm, PyPI에서 지원됩니다 .
npm 게시 워크플로우를 검토하세요: npm은 이제 단기 세션 토큰, 제한된 수명의 세분화된 토큰, 단계별 게시를 사용합니다. CI/CD 파이프라인이 이러한 지원되는 인증 방법 중 하나를 사용하도록 업데이트되었는지 확인하세요 .
패키지 버전을 고정하고 자동 의존성 업그레이드를 피하세요: 특히 중요한 인프라의 경우, 알려진 양호한 버전을 고정하면 손상된 패키지가 우발적으로 포함되는 것을 방지할 수 있습니다 .
패키지 설치 시 자동 스크립트 실행을 비활성화하세요: npm install --ignore-scripts를 실행하거나 전역적으로 ignore-scripts = true를 설정하면 악의적인 postinstall 스크립트가 실행되는 것을 막을 수 있습니다 .