Cline CLI 공급망 공격 — AI 코딩 도구를 통한 npm 토큰 탈취

사건 개요

2026년 2월 17일 오전 3시 26분(PT 기준), 공격자가 탈취한 npm 퍼블리시 토큰을 이용해 AI 코딩 어시스턴트 Cline CLI의 패키지를 npm 레지스트리에 무단으로 배포했다. 배포된 버전은 cline@2.3.0이며, 설치 시 자율 AI 에이전트 플랫폼 OpenClaw를 사용자 동의 없이 자동으로 설치하도록 조작되어 있었다. 약 8시간 후인 오전 11시 30분(PT)에 패키지가 삭제되었으며, 그 사이 약 4,000건의 다운로드가 발생했다. 해당 버전은 즉시 Deprecated 처리되었고 2.4.0 버전이 긴급 배포됐다.

기술적 세부사항

공격 체인 분석

이 사건의 핵심은 세 가지 취약점의 연쇄적 결합이다.

1단계: 간접 프롬프트 인젝션 취약점 (Clinejection) 보안 연구자 Adnan Khan이 2025년 12월부터 2026년 2월 사이 Cline의 GitHub 이슈 트리아지(자동 분류) 워크플로에서 취약점을 발견했다. 공격자가 GitHub 이슈를 열기만 해도 AI 에이전트가 이슈 내용을 처리하는 과정에서 악성 지시를 실행하는 구조였다. Khan이 2026년 2월 9일 이 취약점을 공개하자 Cline은 30분 만에 워크플로를 제거했다.

2단계: GitHub Actions 캐시 포이즈닝 트리아지 워크플로는 릴리스 파이프라인의 인증 시크릿에 직접 접근할 수 없었으나, GitHub Actions의 특성상 기본 브랜치에서 실행되는 모든 워크플로가 공유 캐시를 읽고 쓸 수 있다. 공격자는 이 캐시를 조작하여 퍼블리시 자격증명에 접근하는 경로를 확보했다.

3단계: 장기 유효 npm 토큰 미폐기 Cline은 2월 9일 패치 시 자격증명을 교체했으나, 잘못된 토큰이 폐기되었다. 실제 악용에 사용된 npm 장기 유효 토큰은 여전히 활성 상태였고, 이 토큰이 2월 17일 공격에 직접 사용됐다.

악성 페이로드 구조

공격자는 cline@2.3.0에 단 한 줄의 변경을 가했다.

{ "postinstall": "npm install -g openclaw@latest" }

CLI 바이너리 자체는 정상 버전(2.2.3)과 동일했으며, post-install 훅을 통해 OpenClaw를 전역 설치하도록 조작됐다. OpenClaw는 정상적인 오픈소스 AI 에이전트 플랫폼이나, 전체 디스크 접근 권한과 광범위한 도구 권한을 보유하며 백그라운드에서 WebSocket 서버로 작동하는 게이트웨이 데몬을 실행한다. 이번 공격에서는 게이트웨이 데몬이 자동 실행되지 않았기 때문에 직접적인 데이터 탈취나 원격 제어 피해는 확인되지 않았다.

근본 원인 분석

기술적 원인

Trusted Publishing(OIDC) 설정 이후에도 기존 장기 유효 토큰 방식을 병행 허용한 것이 핵심 원인이다. npm 공식 문서에서도 Trusted Publisher 설정 후 전통 토큰 방식을 비활성화할 것을 권고하고 있으나, Cline은 이를 이행하지 않았다. OIDC 방식은 단기 토큰을 사용하여 탈취 시 영향이 제한되는 반면, 장기 유효 토큰은 한 번 탈취되면 폐기 전까지 지속적으로 악용 가능하다.

관리적 원인

자격증명 로테이션 절차의 불완전성이 직접적 원인이다. 2월 9일 취약점 공개 후 패치 과정에서 잘못된 토큰이 폐기되었고, 실제 공격에 사용된 토큰이 활성 상태로 남았다. 자격증명 재고 목록(inventory)이 관리되지 않았음을 시사한다.

인적 원인

보안 연구자 Khan이 Cline 레지스트리 미러에서만 PoC 테스트를 수행했으나, 별도의 공격자가 Khan의 PoC를 발견하고 실제 저장소에 적용해 퍼블리시 자격증명을 탈취했다. PoC 공개와 실제 공격 간의 시간 간격이 8일에 불과했으며, 이는 보안 연구 공개 이후 악용 속도가 매우 빠름을 보여준다.

영향 분석

직접적 피해

이번 공격의 실제 피해는 제한적이었다. OpenClaw 자체가 악성 소프트웨어가 아니었고, 게이트웨이 데몬도 자동 시작되지 않았기 때문에 데이터 탈취나 원격 제어 피해는 확인되지 않았다. 약 4,000건의 다운로드가 발생했으며, Microsoft 위협 인텔리전스 팀도 2월 17일 OpenClaw 설치 건수의 눈에 띄는 증가를 독자적으로 감지했다.

구조적 위험성

5백만 이상의 사용자를 보유한 AI 코딩 도구의 공급망이 장기 유효 토큰 하나로 무력화될 수 있다는 점이 확인됐다. 만약 OpenClaw 대신 실제 악성 페이로드가 삽입되었다면, 4,000대의 개발자 머신에 대한 지속적 접근이 가능한 상황이었다. 개발자 환경은 소스코드, API 키, 내부 자격증명 등 고가치 자산에 접근 가능하므로 공급망 공격의 주요 표적이 된다.

예방 및 대응 방안

패키지 유지관리자 관점

Trusted Publishing 설정 이후 전통 토큰 방식의 완전 비활성화가 핵심이다. 단순히 OIDC 방식을 켜두는 것만으로는 부족하고, 기존 토큰 경로를 명시적으로 차단해야 한다. 취약점 공개 시 자격증명 로테이션을 수행할 때는 모든 유형의 토큰(npm 토큰, 배포 키 등)에 대한 완전한 재고 목록을 확인한 후 전수 교체해야 한다.

패키지 소비자 관점

버전 업데이트 후 예상치 못한 전역 패키지가 생성됐는지 점검하는 습관이 필요하다. attestations(패키지 서명 검증) 유무를 확인하고, post-install 훅을 경계해야 한다. 이번 사건의 경우 cline –version으로 2.3.0 여부를 확인하고, 해당되면 npm uninstall -g openclaw 명령으로 제거가 가능했다.

컨설팅 관점

고객사 커뮤니케이션 전략

기술팀 대상

개발자 환경의 소프트웨어 공급망 보안 정책 수립을 권고할 수 있다. 구체적으로는 npm/PyPI 패키지 attestation 검증 자동화, post-install 훅 모니터링, 전역 패키지 변경 감지 시스템 구축이 실효성 있는 통제 수단이다.

경영진 대상

AI 코딩 도구처럼 광범위한 시스템 권한을 요구하는 소프트웨어가 CI/CD 파이프라인에 통합될수록, 단일 자격증명 탈취로 인한 피해 범위가 극대화된다는 점을 강조해야 한다. 개발 환경의 보안이 곧 제품 보안이라는 관점으로 접근해야 한다.

예상 질문 및 답변

Q: 오픈소스 패키지를 사용하면 항상 이런 위험이 있는 것인가?

A: 오픈소스 생태계 자체가 위험한 것이 아니라, 패키지 배포 자격증명 관리 방식이 위험 수준을 결정한다. OIDC 기반 Trusted Publishing, 장기 토큰 비활성화, SBOM 관리 등의 통제를 적용하면 위험을 크게 낮출 수 있다.

Q: AI 코딩 도구가 특별히 더 위험한 이유는 무엇인가?

A: AI 에이전트는 특성상 파일 시스템, 터미널, 네트워크에 대한 광범위한 권한을 요구하는 경우가 많다. 이로 인해 동일한 공급망 공격이 발생했을 때 일반 라이브러리보다 훨씬 넓은 피해 범위가 발생할 수 있다.

Q: 이번에 피해가 없었다고 하는데 대응이 필요한가?

A: 이번 공격은 실질적 피해가 없었지만, 동일한 공격 벡터에 악성 페이로드가 삽입되었을 경우를 가정하면 매우 심각한 상황이었다. 공격 가능성이 확인된 이상 예방적 통제를 강화해야 한다.

학습 내용 및 시사점

이 사건에서 도출할 수 있는 핵심 학습은 공격 경로가 항상 단일하지 않다는 점이다. 프롬프트 인젝션, GitHub Actions 캐시 포이즈닝, 자격증명 미폐기라는 세 가지 요소가 결합되어 공격이 완성됐다. 각각의 통제가 독립적으로 작동했다면 공격 체인은 중단되었을 것이다. 또한 보안 연구 공개와 실제 악용 간격이 8일에 불과했다는 점은, 취약점 공개 후 자격증명 재고 관리와 신속한 완전 로테이션이 얼마나 중요한지를 보여준다.