본문 바로가기
보안2026년 9월 17일7분 읽기

크라우드섹, 비공개 저장소 170개 유출 확인 — 출발점은 5월 TanStack npm 공급망 공격

YS
김영삼
조회 233
크라우드섹, 비공개 저장소 170개 유출 확인 — 출발점은 5월 TanStack npm 공급망 공격

보안 업체 크라우드섹(CrowdSec)이 자사 비공개 깃허브 저장소 약 170개가 복제됐다고 확인했다. 침해 경로는 2026년 5월 TanStack npm 패키지 공급망 공격으로, 백도어가 심긴 구성요소가 비공개 코드를 읽을 수 있는 API 키를 탈취한 것으로 파악됐다.

가장 뼈아픈 대목은 탐지 시점이다. 실제 복제는 5월에 일어났지만, 회사가 이를 알게 된 건 9월 16일 도난 코드가 사이버범죄 포럼에 게시된 뒤였다. 넉 달 동안 아무도 몰랐다.

보안 제품을 만드는 회사가 공급망 공격으로 뚫렸다는 사실 자체를 조롱하기는 쉽다. 하지만 이 사건의 경로를 따라가 보면 조롱할 마음이 사라진다. 개발 머신에 설치된 패키지 하나가 백도어였고, 그 패키지가 환경에서 API 키를 훔쳤고, 그 키로 저장소가 복제됐다. 이 경로를 완전히 차단하고 있다고 자신할 수 있는 조직은 많지 않다.

사건 경로

2026년 5월
TanStack 관련 npm 패키지가 공급망 공격으로 오염. 크라우드섹 내부에서 사용되던 구성요소가 백도어된 것으로 파악.
같은 시기
백도어가 비공개 코드를 읽을 수 있는 API 키를 탈취. 전 직원 계정을 통해 약 170개 비공개 저장소가 복제됨.
5월~9월
탐지되지 않음. 감사 결과 해당 계정은 클론에만 사용됐고 커밋·코드 변경·CI 시스템 변경은 없었던 것으로 확인.
2026-09-16
도난 소스코드가 사이버범죄 포럼에 등장. 크라우드섹이 통보받고 사실 확인 및 공개 성명 발표.

크라우드섹 설명에 따르면 코드베이스는 공개(FOSS) 부분과 비공개 부분으로 나뉘며, 유출된 비공개 영역에는 SaaS 콘솔 소스, 일부 AWS 클라우드 루틴, 커넥터와 자동화 코드가 포함된다. 아카이브에서 식별된 시크릿 대부분은 유출이 공개된 시점에 이미 회전됐거나 인터넷에서 사용할 수 없는 상태였다고 밝혔다.

이 사건이 드러낸 세 가지 구조적 문제

1
개발 환경은 프로덕션만큼 보호받지 못한다
프로덕션에는 네트워크 분리·감사·최소권한을 적용하면서, 개발자 노트북에는 임의의 npm 패키지가 postinstall 훅과 함께 설치된다. 권한 밀도는 개발 환경이 더 높은 경우도 많다.
2
장기 자격증명은 시한폭탄이다
만료되지 않는 토큰 하나가 넉 달 동안 조용히 사용됐다. 단기 토큰이었다면 피해 창이 시간 단위로 줄었을 것이다.
3
읽기 전용 접근은 탐지되지 않는다
쓰기 작업은 감사 로그에서 눈에 띄지만, 클론은 정상 개발 행위와 구분하기 어렵다. 대량 클론 패턴에 대한 이상 탐지가 없으면 넉 달이 아니라 더 오래 갈 수도 있었다.
퇴사자 계정 문제 이번 사건에서 침해된 건 전 직원의 계정이었다. 퇴사 처리에서 조직 멤버십은 제거했더라도, 개인 액세스 토큰이나 OAuth 앱 승인, SSH 키가 남아 있으면 접근이 유지될 수 있다. 오프보딩 체크리스트에 "이 사람이 발급한 모든 토큰"이 들어 있는지 지금 확인해 보길 권한다.

우리 조직에서 당장 점검할 것

공급망·자격증명 점검
CI와 개발 환경에서 장기 토큰 제거 — OIDC 기반 단기 자격증명으로 전환
저장소 접근 토큰의 스코프 축소 (전체 조직 읽기 권한을 가진 토큰이 있는지 확인)
npm 설치 시 스크립트 실행 제한 검토 — npm ci --ignore-scripts를 기본으로 할 수 있는지
락파일 고정과 의존성 변경 리뷰 강제
대량 클론·비정상 시간대 접근에 대한 알림 규칙 추가
오프보딩 체크리스트에 PAT·OAuth 승인·SSH 키·배포 키 회수 포함
시크릿 스캐닝을 커밋 훅과 CI 양쪽에 배치
# 설치 훅 없이 설치 (가능한 프로젝트부터 적용)
npm ci --ignore-scripts
# 꼭 필요한 패키지만 예외 허용하는 방식으로 관리

# 깃허브 조직에서 개인 액세스 토큰 정책 확인 (관리자)
#  Settings > Personal access tokens > 조직 승인 필수로 설정
#  기존 토큰 목록에서 만료 없는 토큰을 색출해 회전

# 시크릿이 이미 코드에 섞였는지 과거 커밋까지 훑기
gitleaks detect --source . --redact

교훈 — 탐지가 방어보다 약했다

이 사건에서 방어는 부분적으로 작동했다. 시크릿 회전이 이뤄져 있었고, 계정은 클론 외의 행위에 쓰이지 않았다. 반면 탐지는 작동하지 않았다. 넉 달간 아무 신호도 잡히지 않았고, 외부 포럼 게시가 최초 경보가 됐다. 침해를 100% 막을 수 없다면, 최소한 빨리 알아야 한다. 이 사건의 교훈은 그 우선순위를 다시 세우라는 것이다.

출처

자주 묻는 질문

크라우드섹에서 무엇이 유출됐나요?

비공개 깃허브 저장소 약 170개가 복제됐습니다. SaaS 콘솔 소스, 일부 AWS 클라우드 루틴, 커넥터와 자동화 코드 등 비공개 영역이 포함되며, 공개된 오픈소스 부분과는 별개입니다.

어떻게 침해됐나요?

2026년 5월 TanStack 관련 npm 패키지 공급망 공격이 출발점입니다. 백도어된 구성요소가 비공개 코드를 읽을 수 있는 API 키를 탈취했고, 전 직원 계정을 통해 저장소가 복제됐습니다. 감사 결과 커밋이나 CI 변경은 없었습니다.

왜 넉 달 동안 몰랐나요?

클론은 정상적인 개발 행위와 구분하기 어려워 감사 로그에서 눈에 띄지 않습니다. 쓰기 작업이 없었기 때문에 더욱 그렇습니다. 결국 도난 코드가 범죄 포럼에 게시되면서 외부 통보로 인지하게 됐습니다.

같은 공격을 어떻게 예방하나요?

개발·CI 환경에서 장기 토큰을 없애고 단기 OIDC 자격증명으로 바꾸는 것이 가장 효과가 큽니다. 여기에 설치 스크립트 실행 제한, 락파일 고정, 토큰 스코프 축소, 대량 클론 이상 탐지를 더하면 피해 창을 크게 줄일 수 있습니다.

소스코드가 유출되면 실제로 얼마나 위험한가요?

코드 자체보다 코드 안에 남아 있을 수 있는 시크릿과 내부 구조 정보가 위험합니다. 공격자는 인증 흐름·검증 로직·인프라 구성을 파악해 후속 공격을 설계합니다. 유출이 확인되면 시크릿 전수 회전과 함께 인증·권한 경로의 재검토가 필요합니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록