S1ngularity 유출: GitHub 및 NPM에 영향 미쳐
Nx를 겨냥한 "s1ngularity"로 알려진 공급망 공격에 대한 최근 조사 결과, 대규모 인증 정보 유출이 드러났습니다. 수천 개의 계정 토큰과 저장소 비밀 정보가 유출되었으며, 이는 사건의 여러 단계에 걸쳐 영향을 미쳤습니다. Wiz의 사후 보고서는 사건의 범위를 기록하고 유출 과정과 그 영향에 대한 통찰력을 제공합니다. 🚨📊
Wiz 연구원들이 발표한 평가에 따르면, 이 침해로 인해 3단계에 걸쳐 2,180개 계정과 7,200개 저장소가 노출되었으며, 많은 비밀이 여전히 유효합니다. 지속적인 손상의 위험백서에서는 타임라인, 공격자의 기술, 유출된 비밀의 성격에 대한 세부 정보를 제공합니다. 🔍📈
Nx 공급망 공격 ⚠️🚀
Nx는 엔터프라이즈급 JavaScript/TypeScript 생태계에서 널리 사용되는 오픈소스 단일 저장소 빌드 및 관리 시스템입니다. NPM 레지스트리에서 매주 수백만 건의 다운로드가 발생하는 상황에서, 손상된 패키지는 수많은 통합 및 개발 파이프라인에 광범위한 영향을 미칩니다. ⚙️
침해 벡터 및 사고 날짜 📅
2025년 8월 26일, 공격자는 Nx 저장소의 취약한 GitHub Actions 워크플로를 악용하여 NPM에 악성 패키지 버전을 게시했습니다. 이 패키지에는 "telemetry.js"라는 악성 설치 후 스크립트가 포함되어 있었는데, 이 스크립트는 영향을 받는 시스템에서 자격 증명 추출 맬웨어로 작동했습니다. 🔥
telemetry.js 맬웨어의 작동 방식 🕵️♂️
telemetry.js 맬웨어는 Linux와 macOS에서 자격 증명을 훔치는 악성 프로그램으로 활동하여 GitHub 토큰, npm 토큰, SSH 키, .env 파일, 암호화폐 지갑 및 기타 기밀 정보를 훔친 후 "s1ngularity-repository"라는 이름의 공개 GitHub 저장소에 업로드하려고 시도했습니다. 이러한 패턴을 통해 공격자는 훔친 정보를 중앙에서 관리하고 노출할 수 있었습니다. 🔐

출처: Wiz
공격자는 AI 플랫폼용 명령줄 도구(예: Claude, Q, Gemini)를 통합하여 특정 프롬프트를 사용하여 검색 및 수집을 자동화했습니다. Wiz는 공격 과정에서 프롬프트가 어떻게 진화하여 추출을 최적화하고 특정 명령에 대한 모델 거부를 우회했는지를 기록하고 있으며, 이는 공격자가 LLM 기법에 적극적으로 적응하고 있음을 보여줍니다. ✨💡
충격 범위: 데미지 반경 및 단계 📈🔥
이 사건은 세 단계로 진행되었습니다. 첫 번째 단계에서는 8월 26일과 27일 사이에 Nx의 손상된 버전이 1,700명의 사용자에게 직접적인 영향을 미치고 2,000개 이상의 고유 비밀을 유출했으며, 감염된 시스템에서 약 20,000개의 파일이 노출되었습니다. GitHub이 개입했지만, 대부분의 데이터는 이미 복제된 상태였습니다.
- 🔹 1단계(8월 26일~27일): 영향을 받은 사용자는 1,700명, 유출된 비밀은 약 2,000개, 손상된 파일은 20,000개입니다.
- 🔸 2단계(8월 28일~29일): 유출된 토큰을 이용해 개인 저장소를 공개 저장소로 변환했습니다. 480개의 추가 계정이 손상되었고 6,700개의 저장소가 노출되었습니다.
- 🔹 3단계(8월 31일부터): 피해자 조직을 표적으로 삼는 공격 게시하기 위해 손상된 계정 500개 이상의 개인 저장소.
두 번째 단계에서 공격자는 훔친 GitHub 토큰을 사용하여 비공개 저장소를 공개하고 's1ngularity' 문자열로 이름을 변경하여 노출을 증폭시켰습니다. 세 번째 단계에서는 특정 대상을 악용하여 수백 개의 추가 비공개 저장소를 게시함으로써 공격자의 지속성과 공격 확대를 입증했습니다. 🎯

출처: Wiz
Nx 프로젝트 대응 및 완화 🔧✅
Nx 팀은 GitHub에 근본 원인 분석을 게시했는데, 이 분석에서는 풀 리퀘스트 제목에 삽입된 내용과 pull_request_target의 안전하지 않은 사용이 어떻게 상승된 권한으로 임의의 코드를 실행하여 게시 파이프라인을 트리거하고 npm 게시 토큰의 유출을 용이하게 했는지 설명합니다. 🛠️
구현된 조치에는 악성 패키지 제거, 손상된 토큰 취소 및 순환, 모든 게시자 계정에 대한 2단계 인증 의무화 등이 포함되었습니다. 또한, Nx는 NPM의 신뢰할 수 있는 게시자 모델을 채택하고 PR 트리거 워크플로에 대한 수동 승인 기능을 추가했습니다. 🔐📌
간단한 팁과 핵심 포인트 ✏️
- ✅ 침해가 의심되는 경우 즉시 토큰과 비밀번호를 검토하고 교체하세요.
- 📌 pull_request_target의 안전하지 않은 사용을 피하고 민감한 흐름에 대해 수동 승인을 시행하세요.
- 🔧 다중 요소 인증 및 신뢰할 수 있는 게시자 등의 신뢰할 수 있는 게시 모델을 구현합니다.
- ⚡ 공개 저장소를 모니터링하고 조기 감지를 위해 자동화된 비밀 검색을 수행합니다.
스니펫과 FAQ 정의 ✨
telemetry.js란 무엇인가요?
telemetry.js는 손상된 Nx 패키지 버전에 포함된 악성 설치 후 스크립트의 이름입니다. 이 스크립트는 Linux 및 macOS 시스템에서 자격 증명을 훔치는 도구로 작용하여 공격자가 제어하는 공개 저장소의 비밀을 수집하고 유출했습니다. 🔍
얼마나 많은 계정과 저장소가 영향을 받았나요?
Wiz의 보고서에 따르면, 이 공격으로 사건의 문서화된 3단계에 걸쳐 2,180개 계정과 7,200개 저장소가 노출되었으며, 많은 비밀이 여전히 유효하고 지속적인 영향의 위험이 있습니다. 📊