침해의 근원은 2026년 5월 11일 npm과 PyPI 생태계를 대상으로 시작된 대규모 공급망 공격이었다. 공격은 TeamPCP라는 위협 그룹이 수행한 것으로 분석되며, 이들은 @tanstack 네임스페이스의 여러 패키지를 변조해 악성 버전을 배포했다.
이 패키지에는 Mini Shai‑Hulud라는 자격 증명 탈취 악성코드가 포함돼 있었다. 이 악성코드는 개발 환경을 탐색하고 GitHub Actions 같은 CI 시스템에서 토큰과 인증 정보를 수집하도록 설계됐다.
보안 연구자들에 따르면 이 공격은 빠르게 확산되었고 npm과 PyPI에서 160개 이상의 패키지가 영향을 받았다. 주로 개발자 도구와 자동화 환경을 겨냥한 공격이었다.
Grafana의 내부 조사에 따르면 문제의 TanStack 패키지 중 하나가 회사 개발 환경에서 실행되었다. 패키지 안에 숨겨진 정보 탈취 모듈이 Grafana CI/CD 파이프라인에서 사용되던 GitHub 워크플로 토큰을 공격자에게 전송했다.
이후 TanStack 공급망 공격 사실이 알려지자 Grafana는 자격 증명 교체(credential rotation)를 진행했다. 그러나 GitHub 워크플로 토큰 하나가 교체 과정에서 누락됐고, 이 토큰은 여전히 유효한 상태였다.
공격자는 바로 이 토큰을 사용해 Grafana의 GitHub 환경과 저장소에 접근할 수 있었다.
Grafana의 공개 자료와 외부 보도에 따르면 공격자는 다음 데이터에 접근했다.
추가 보도에서는 다운로드된 데이터에 내부 협업 저장소, 비즈니스 연락처, 이메일 주소 등이 포함됐을 가능성이 있다고 전했다.
하지만 Grafana는 조사 결과 고객 데이터나 개인 정보가 접근된 증거는 없다고 밝혔다.
저장소 데이터를 다운로드한 뒤 공격자는 **데이터를 공개하겠다며 금전을 요구하는 협박(extortion)**을 시도했다.
공개된 사건 타임라인은 다음과 같다.
Grafana는 요구에 응하지 않았으며, 침해가 확인된 직후 해당 토큰을 무효화하고 포렌식 조사를 시작했다.
Grafana는 이번 사건의 범위가 GitHub 환경으로 제한됐다고 강조했다.
조사 결과에 따르면:
즉 공격자는 운영 인프라가 아닌 코드 저장소 영역에만 접근했다는 설명이다.
Grafana는 공격자의 활동이 저장소 접근과 다운로드 중심이었다고 밝혔다.
조사 결과에서는 다음과 같은 점이 확인됐다.
다만 외부 독립 포렌식 보고서는 공개되지 않았기 때문에, 코드 변경이 없었다는 결론은 현재까지는 Grafana 내부 조사 결과에 기반한 것이다.
Grafana 사건은 현대 공급망 공격에서 흔히 나타나는 공격 경로를 보여준다.
Mini Shai‑Hulud 캠페인은 오픈소스 패키지를 악용해 개발자 환경과 CI 시스템을 노렸다.
일반적인 공격 흐름은 다음과 같다.
Grafana 사례는 단 하나의 누락된 토큰 교체가 공격자에게 저장소 접근 권한을 제공할 수 있음을 보여준다.
또한 이번 사건은 공급망 공격이 단순히 소프트웨어 패키지에 그치지 않고 개발 파이프라인 자체를 주요 공격 표면으로 삼고 있다는 점을 다시 한번 보여준 사례로 평가된다.