Mastra npm 패키지 공급망 침해


요약
2026-06-17 공개된 보도에 따르면 Mastra 네임스페이스의 npm 패키지 144개가 탈취된 contributor account를 통해 침해됐다. 영향 지점은 애플리케이션 런타임보다 앞선 dependency 해석, CI/CD 설치, 빌드 환경이다.
제공된 공개 자료에서는 패키지별 악성 코드 경로, lifecycle script, exfiltration endpoint, 토큰 유출 여부가 확인되지 않는다. 따라서 분석의 출발점은 “어떤 저장소와 빌드가 2026-06-17 전후 Mastra 패키지를 설치했는가”다.
| 항목 | 내용 |
|---|---|
| 유형 | npm 공급망 침해 |
| 공개일 | 2026-06-17 |
| 영향 범위 | Mastra 네임스페이스 npm 패키지 144개 |
| 침해 경로 | 탈취된 contributor account를 통한 패키지 변조 |
| 우선 확인 대상 | lockfile, CI install 로그, package manager cache, 빌드 산출물 |
| 주요 노출 자산 | npm token, CI/CD secret, cloud credential, model provider API key |
설치 시점 확인
Mastra 패키지를 직접 import하지 않아도 transitive dependency로 설치될 수 있다. package manifest보다 lockfile과 CI install 로그를 먼저 확인한다.
타임라인
| 날짜 | 이벤트 |
|---|---|
| 2026-06-17 | Mastra npm 패키지 144개 침해 사실 공개 |
공개 자료에서 확인되는 날짜는 2026-06-17이다. 패키지별 악성 버전 게시 시각, 제거 시각, maintainer 조치 시각은 제공된 자료에서 확인되지 않는다.
영향 범위
npm 패키지는 개발자 로컬 환경, CI runner, container build stage, serverless bundle 단계에서 설치된다. 이 구간에는 저장소 토큰, npm publishing token, cloud credential, model provider API key가 함께 존재하는 경우가 많다.
확인된 침해 단위는 Mastra 네임스페이스의 144개 npm 패키지다. 특정 애플리케이션 런타임 침해, 내부 이동, 운영 서버 장악은 공개 자료에서 확인되지 않는다. 변조된 패키지가 설치 단계에서 실행되는 script나 import 시점의 top-level code를 포함했다면 secret 접근과 산출물 오염으로 이어질 수 있으므로, 설치 기록과 빌드 산출물을 함께 본다.
공격 흐름
공개 자료로 확인되는 핵심 흐름은 contributor account 탈취와 npm 패키지 변조다. npm 공급망에서는 이 단계만으로도 downstream 프로젝트가 영향을 받을 수 있다.
| 단계 | 설명 |
|---|---|
| contributor account 탈취 | 탈취된 기여자 계정이 침해 경로로 언급됨 |
| Mastra 패키지 변조 | Mastra 네임스페이스 npm 패키지 144개가 영향을 받은 것으로 공개됨 |
| downstream install | semver range 또는 lockfile 상태에 따라 변조 버전이 설치될 수 있음 |
| secret 접근 가능성 | 설치 단계와 빌드 단계에 노출된 환경 변수가 주요 확인 대상 |
| 배포 산출물 오염 가능성 | 영향 빌드에서 생성된 container image, serverless bundle, npm package를 추적해야 함 |
npm 패키지 침해에서 우선 관측할 primitive는 preinstall, install, postinstall, prepare 같은 lifecycle script, 빌드 타임 네트워크 호출, 패키지 import 시 실행되는 top-level code다. 제공된 자료에는 악성 함수나 요청 흐름이 포함되어 있지 않으므로 코드 레벨 단정은 하지 않는다.
탐지 포인트
네트워크
CI runner와 빌드 서버의 outbound connection을 확인한다. 공개 자료에서 exfiltration endpoint는 확인되지 않았지만, 패키지 설치 단계의 비정상 DNS, HTTP 요청, 짧은 수명의 외부 호스트 접속은 우선 조사 대상이다.
rg -n '@mastra|npm install|pnpm install|yarn install' .github .gitlab-ci.yml Jenkinsfile buildkite.yml
보관할 증거는 install job 로그, runner outbound network 로그, DNS 로그, package manager cache, 동일 시점의 lockfile이다.
엔드포인트
개발자 로컬 환경과 CI 작업 디렉터리에서 Mastra 의존성을 식별한다. node_modules는 현재 상태만 보여주므로, 증거로는 lockfile과 CI artifact가 더 중요하다.
rg -n '"(@mastra/[^"]+)"|mastra' package-lock.json pnpm-lock.yaml yarn.lock
현재 설치된 패키지에서 lifecycle script와 네트워크 호출 흔적을 빠르게 훑는다.
rg -n 'preinstall|postinstall|install|prepare|node .*http|curl|wget|process\.env' node_modules/@mastra package.json
확인 항목은 패키지명, version, resolved tarball URL, integrity 값이다. 2026-06-17 전후의 install job에서 동일 버전이 설치됐는지 대조한다.
서버
영향 빌드에서 생성된 산출물을 분리한다. container image, serverless bundle, npm package, 정적 빌드 결과물이 대상이다.
scope:
- npm publishing token
- GitHub Actions token
- cloud provider credentials
- model provider API keys
- package registry credentials
lookback:
start: "2026-06-17"
evidence:
- dependency install logs
- outbound network logs from CI runners
- package-lock.json or pnpm-lock.yaml diffs
- container image build history
변조 패키지 설치가 확인된 빌드에 노출된 secret을 기준으로 회전 범위를 정한다. 애플리케이션 서버 로그만 보는 방식으로는 빌드 단계 노출을 놓칠 수 있다.
대응 포인트
Mastra 관련 dependency를 사용하는 저장소를 먼저 식별한다. lockfile에 @mastra/ 패키지가 있거나 Mastra 패키지를 transitive dependency로 받는 프로젝트를 분리한다.
2026-06-17 전후 생성된 빌드 산출물은 출처를 확인한다. 변조 버전 설치가 확인된 빌드에서 나온 container image, serverless bundle, npm package, 배포 artifact는 신뢰하지 말고 깨끗한 dependency 상태에서 다시 생성한다.
CI runner의 outbound connection 기록을 확인한다. 설치 단계에서 외부로 나간 HTTP 요청, DNS 질의, 비정상 User-Agent, 일회성 호스트 접속이 있으면 해당 빌드의 secret 노출 범위를 좁힌다.
npm token과 배포 관련 secret은 영향 빌드에 노출됐을 때 회전한다. 전체 secret을 무조건 교체하기보다 설치 로그, runner 범위, 배포 산출물의 출처를 기준으로 추적 가능한 회전 단위를 잡는다.