Mastra npm 공급망 공격
이 글은 StepSecurity와 Orca Security 분석을 참고하여 작성했습니다.
2026년 6월 17일, JavaScript·TypeScript용 AI 에이전트 프레임워크 Mastra의 npm 패키지들이 공급망 공격으로 백도어됐습니다. 탈취된 컨트리뷰터 계정 하나로 88분 만에 @mastra 스코프 수십 개 패키지가 악성 의존성을 끌어들였습니다. 마이크로소프트는 이 공격을 북한 국가 행위자 Sapphire Sleet(BlueNoroff, APT38로도 추적)에 높은 신뢰도로 귀속했습니다.
흔한 npm 타이포스쿼트 공격이지만, 표적이 AI 에이전트 프레임워크라는 점이 핵심입니다. 훔친 것이 정확히 AI 개발 환경의 자격증명이었습니다.
88분의 타임라인
공격은 네 단계로 정교하게 흘렀습니다.
먼저 6월 16일, 공격자는 easy-day-js@1.11.21을 깨끗한 상태로 올렸습니다. 정상 dayjs 라이브러리를 그대로 복사한, 악성 코드가 전혀 없는 버전입니다. 신뢰를 쌓는 미끼였습니다.
다음 날 6월 17일 01:01 UTC, 같은 패키지의 1.11.22에 악성 코드를 넣었습니다. setup.cjs라는 4,572바이트 드롭퍼가 추가됐습니다. 그리고 01:12부터 02:39까지 88분 동안, 탈취한 자격증명으로 @mastra 스코프 패키지 수십 개를 재배포하면서 easy-day-js를 의존성으로 끼워넣었습니다.
여기서 영리한 부분이 버전 고정 방식입니다. 의존성이 "easy-day-js": "^1.11.21"로 박혀 있어서, npm은 설치 시점에 항상 최신 매칭 버전을 가져옵니다. 패키지 매니페스트를 건드리지 않아도 자동으로 악성 1.11.22가 딸려 들어옵니다.
왜 하필 dayjs를 흉내 냈는가. dayjs는 가장 널리 쓰이는 JavaScript 날짜 라이브러리라, 의존성 목록을 훑는 개발자가 easy-day-js를 보고도 수상하다고 느낄 확률이 낮습니다. 이름값을 노린 위장입니다.
무엇을 훔쳤나
package.json에 "postinstall": "node setup.cjs --no-warnings"가 박혀 있어, 패키지를 설치하는 순간 드롭퍼가 실행됩니다. npm의 install-time 스크립트 실행이라는 구조적 약점을 그대로 이용한 것입니다.
드롭퍼는 흔적을 지우며 움직였습니다. NODE_TLS_REJECT_UNAUTHORIZED=0으로 TLS 검증을 끄고, 공격자 C2에서 2차 페이로드를 받아 보이지 않는 백그라운드 프로세스로 띄운 뒤, fs.rmSync로 자기 자신을 삭제했습니다. 커스텀 알파벳 Base64, 배열 회전, XOR 인코딩까지 세 겹의 난독화를 씌웠습니다.
표적이 된 데이터가 이 공격의 성격을 말해줍니다. Mastra 개발 환경에 흔한 LLM API 키(OpenAI OPENAI_API_KEY, Anthropic ANTHROPIC_API_KEY, Google GOOGLE_API_KEY), 클라우드 자격증명(AWS_ACCESS_KEY_ID, AZURE_TENANT_ID), 데이터베이스 접속 문자열, CI/CD 시크릿과 GITHUB_TOKEN·NPM_TOKEN이 대상이었습니다. 일부 분석은 브라우저 데이터와 166개 크립토 지갑 확장까지 노렸다고 봅니다. 주간 다운로드 합계 110만을 넘는 패키지들이 노출됐습니다.
AI 프레임워크라는 새 표적
이 사건의 의미는 단순 npm 사고를 넘어섭니다. AI 에이전트 프레임워크가 공급망 공격의 매력적인 표적이 됐다는 신호입니다.
이유는 단순합니다. AI 에이전트 개발 환경에는 값나가는 자격증명이 밀집합니다. LLM API 키 하나가 곧바로 돈이고, 에이전트가 붙은 클라우드·DB·VCS 토큰까지 한 환경에 모입니다. 공격자 입장에서 "AI 프레임워크 사용자"는 자격증명 밀도가 높은 표적군입니다.
그런데도 "AI 프레임워크니까 잘 관리되겠지"라는 인식이 방심을 부릅니다. 실제로는 빠르게 크는 오픈소스일수록 컨트리뷰터 계정 관리·발행 권한 회수가 허술하기 쉽습니다. 이번에도 탈취된 계정의 @mastra 발행 권한이 회수되지 않은 채 남아 있던 것이 출발점이었습니다.
MCP 주입으로 코딩 에이전트에 원격 코드 실행을 심은 Agentjacking - MCP 주입으로 AI 코딩 에이전트 원격 코드 실행, 배포 인프라를 노린 Vercel 2026년 4월 보안 사고와 같은 줄기입니다. 공격 표면이 모델에서 에이전트로, 다시 에이전트를 둘러싼 개발·배포 생태계로 번지고 있습니다.
방어는 기본기입니다. @mastra/*를 6월 16일 이후 설치한 워크스테이션·CI 러너·빌드 시스템은 잠재적 침해로 보고, 노출됐을 모든 자격증명을 회전시켜야 합니다. 더 근본적으로는 --ignore-scripts로 install-time 스크립트를 막고, 의존성 핀을 정확 버전으로 고정하고, 발행 권한을 주기적으로 감사하는 것이 이런 공격을 가장 잘 줄입니다.
이 글은 StepSecurity와 Orca Security 분석의 사실관계를 바탕으로 작성되었습니다.