DEEP DIVE REPORT

TanStack npm 공급망 공격: CI 토큰 탈취와 GitHub 저장소 접근, 의존성 대응 점검

SecurityDesk
2026.09.21 조회 2

CrowdSec는 2026년 9월 16일, 자사 GitHub 저장소 소스 코드 유출(2026년 5월 발생)에 대해 통보받았고 이 유출은 TanStack npm 공급망 공격과 동일하게 관측됐다.

개요

개요 인포그래픽
TanStack 공식 포스트모템에 따르면 공격자는 19:20~19:26 UTC 사이에 42개 @tanstack/* 패키지에 84개 악성 버전을 게시했다. 악성 버전은 CI·빌드 환경에서 접근 가능한 GitHub·npm·SSH 자격증명을 탈취하는 데 이용됐다.

공격 흐름

공격은 세 단계를 결합한 것이다.
- pull_request_target의 "Pwn Request" 패턴을 이용해 외부 포크의 PR에 대해 베이스 리포지토리 컨텍스트에서 워크플로가 실행되도록 함
- GitHub Actions 캐시를 포크와 베이스 리포지토리 간 신뢰 경계를 넘어 오염
- 실행 중 메모리에서 OIDC 토큰을 추출

이 과정을 통해 설치 호스트(빌드 환경)에서 접근 가능한 GitHub·npm·SSH 자격증명이 탈취되고, 이를 악용해 악성 버전이 레지스트리에 게시됐다.

영향 범위

  • @tanstack/* npm 패키지 42개, 총 84개 악성 버전
  • 해당 악성 버전을 설치·의존한 하위 소비자 프로젝트와 그 CI/빌드 환경
  • CrowdSec 사례: 전직 임직원 계정 오염으로 약 170개 비공개 GitHub 리포지토리 접근 및 2026년 5월 소스 코드 노출

CrowdSec 분석에 따르면 계정 encracked(diencracked@cock.li)가 토론토(UTC-4) IP에서 약 170개 비공개 CrowdSec 리포지토리를 내려받았다. 이 전직 임직원은 TanStack 공급망 공격으로 오염됐으며, 사고 발생 3일 후인 2026년 5월 25일에 GitHub 조직에서 제거됐다.

기술적 분석

CrowdSec 분석은 해당 악성코드를 자격증명 탈취에 특화된 'Shai Hulud'로 지칭하고, 공격을 지칭한 팀명을 'TeamPCP'로 확인했다. TanStack 포스트모템은 이 공격이 2024년 Adnan Khan이 기록한 공격 계열에 해당하며, TanStack 특유의 버그가 아니라 의도적 완화(미티게이션)가 필요한 GitHub Actions 플랫폼 설계 문제라고 설명한다.

TanStack은 추적 이슈 TanStack/router#7383과 GitHub 보안 자문 GHSA-g7cv-rxg3-hmpx를 공개했다.

대응·복구

즉시 조치:
- 노출된 OIDC 토큰, GitHub 토큰, npm 게시 자격증명, SSH 키를 회수하고 재발급
- CI/빌드 캐시를 비우고, lockfile·의존성에서 해당 @tanstack/* 악성 버전을 제거·고정
- 해당 자격증명이 사용된 리포지토리·빌드 아티팩트·발행물을 점검

한계: 현재 증거에는 42개 패키지별 악성/안전 버전 목록이 명시되지 않아 최종 안전 버전을 단정할 수 없고, 하위 소비자 프로젝트의 전체 노출 범위도 열거되지 않아 전파 규모를 확정할 수 없다. 이 공격의 CISA KEV 등재 여부도 증거에 독립적 확인이 없다.

재발 방지

  • pull_request_target의 포크-베이스 신뢰 경계 문제를 의도적으로 완화하는 워크플로 재설계
  • CI에 장기 자격증명을 저장하지 않도록 최소 권한·짧은 수명 토큰 원칙 적용
  • 의존성 공급망의 버전 고정과 무결성 검증 절차 정립

참고자료

함께 읽으면 좋은 글

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9