비트워든 CLI, npm에 악성 패키지 유포로 93분간 감염 확산

지난 4월 22일, npm 레지스트리에 비트워든(Bitwarden)의 공식 CLI(명령줄 인터페이스) 패키지인 @bitwarden/[email protected]가 악성 버전으로 대체되어 유포되었다. 이 악성 패키지는 93분간 npm을 통해 설치된 모든 사용자의 시스템에 침투했으며, 해당 기간 동안 설치한 사용자의 랩톱이 GitHub 계정 탈취를 위한 '발사대'로 악용되었다.

비트워든은 이 사태를 즉각 감지하고 악성 패키지를 제거했으며, 사용자 비밀번호 저장소(vault) 데이터나 생산 시스템이 침해된 증거는 없다고 밝혔다. 보안 연구 기업 JFrog는 악성 페이로드를 분석한 결과, 공격의 목표가 비트워든 자체의 보안 자격증명이 아닌 GitHub 토큰, npm 토큰, SSH 키, AWS·GCP·Azure 인증 정보, GitHub Actions 시크릿, AI 도구 설정 파일 등 인프라 운영에 필수적인 자격증명임을 확인했다.

공격 대상별 주요 자격증명과 위험성

공격자는 다음과 같은 자격증명을 노렸으며, 각 항목은 인프라 운영에 결정적인 역할을 한다.

  • GitHub 토큰
    • 주요 저장 위치: 개발자 랩톱, 로컬 설정 파일, CI 환경
    • 위험성: 저장소 접근, 워크플로우 악용, 비밀번호 노출, 자동화 lateral movement(수평 이동 공격)
  • npm 토큰
    • 주요 저장 위치: 로컬 설정, 릴리스 환경
    • 위험성: 악성 패키지 게시, 릴리스 흐름 조작
  • SSH 키
    • 주요 저장 위치: 개발자 머신, 빌드 호스트
    • 위험성: 서버 접근, 내부 저장소 침투, 인프라 접근 권한 획득
  • 쉘 히스토리
    • 주요 저장 위치: 로컬 머신
    • 위험성: 복사된 비밀번호 노출, 내부 호스트명 유출, 워크플로우 세부 정보 확인
  • AWS·GCP·Azure 인증 정보
    • 주요 저장 위치: 로컬 설정 파일, 환경 변수, CI 시크릿
    • 위험성: 클라우드 워크로드, 스토리지, 배포 시스템 접근 권한 획득
  • GitHub Actions 시크릿
    • 주요 저장 위치: CI/CD 환경
    • 위험성: 자동화 접근, 빌드 출력, 배포 권한 획득, 다운스트림 시크릿 유출
  • AI 도구 설정 파일
    • 주요 저장 위치: 프로젝트 디렉토리, 로컬 개발 환경
    • 위험성: API 키, 내부 엔드포인트, 모델 설정 노출

비트워든 CLI의 위험한 '자동화' 구조

비트워든은 전 세계 5만 개 이상의 기업과 1천만 명의 사용자에게 서비스를 제공하며, 자체 문서에서 CLI를 "강력하고 완전한 기능"을 갖춘 도구로 설명한다. 특히 CLI는 환경 변수를 통한 인증 자동화를 지원하며, npm을 통한 설치를 권장하고 있다. 이는 개발자 랩톱에 설치되는 경우가 많고, CI/CD 파이프라인에서도 광범위하게 사용된다.

JFrog의 분석에 따르면, 악성 패키지는 preinstall 훅과 bw 바이너리 엔트리포인트를 재설정하여 Bun 런타임을 다운로드하고 난독화된 페이로드를 실행하는 로더로 재구성했다. 이 공격은 설치 시점과 런타임 시점에 모두 작동했으며, 조직은 백도어드 CLI를 실행하는 동안에도 저장된 비밀번호를 건드리지 않았음에도 불구하고, CI 파이프라인, 클라우드 계정, 배포 자동화에 사용되는 자격증명을 체계적으로 수집당했다.

공격 원인: CI/CD 파이프라인 보안 취약점 노출

보안 기업 Socket은 이 공격이 비트워든의 CI/CD 파이프라인에서 GitHub Action이 손상된 것과 연관되어 있다고 분석했다. 이는 Checkmarx 연구팀이 추적 중인 공급망 공격 패턴과 일치하며, 비트워든 또한 이 사건이 Checkmarx가 밝힌 광범위한 공급망 캠페인의 일부임을 확인했다.

“npm의 신뢰할 수 있는 게시 모델은 이 유형의 위험을 해결하기 위해 설계되었지만, CI/CD 파이프라인의 인증 방식이 취약할 경우 여전히 공격에 노출될 수 있다.”

공급망 공격의 핵심: '신뢰'의 허점

npm은 오랫동안 장기간 사용되는 npm 발행 토큰을 OIDC 기반의 CI/CD 인증 방식으로 대체해 왔지만, 이 사건은 공급망 공격이 발생할 수 있는 또 다른 허점을 드러냈다. 특히, 개발자 랩톱과 CI 환경에 걸쳐 광범위하게 사용되는 도구들은 공격 표면이 넓어질 수밖에 없다.

비트워든의 경우, npm을 통한 CLI 설치가 권장되면서 자동화된 인프라 접근 권한이 포함된 도구가npm에 게시되는 상황이 발생했다. 이는 공격자가 악성 패키지를 통해 인프라 전체에 접근할 수 있는 '관문'을 확보할 수 있음을 의미한다.

대응 및 예방 조치

비트워든은 이번 사건을 계기로 다음과 같은 조치를 취했다.

  • npm 패키지 즉시 제거 및 재배포: 악성 패키지(@bitwarden/[email protected])를 즉각 제거하고, 안전한 버전을 재배포했다.
  • CI/CD 파이프라인 보안 강화: GitHub Action 및 기타 CI 도구의 인증 방식을 재검토하고, OIDC 기반 인증을 강화했다.
  • 사용자 알림 및 모니터링 강화:npm을 통한 설치 시 발생할 수 있는 이상 징후를 감지하는 모니터링 시스템을 구축했다.

보안 전문가들은 이번 사건을 계기로 개발자 랩톱과 CI 환경의 보안 강화의 중요성을 강조하고 있다. 특히, 자동화 도구에 사용되는 자격증명의 관리npm과 같은 패키지 레지스트리의 보안 프로토콜 준수가 필수적이다.

결론: 공급망 공격의 새로운 위협 패턴

이번 비트워든 CLI 악성 패키지 사건은 공급망 공격이 개발자 도구와 인프라 자격증명을 노리는 새로운 형태로 진화하고 있음을 보여준다. 공격자는 단순히 소프트웨어를 손상시키는 데 그치지 않고, 자동화된 인프라 전체에 접근할 수 있는 '관문'을 확보하려는 전략을 펼치고 있다.

개발자와 보안 팀은 패키지 설치 시 발생할 수 있는 이상 징후를 신속히 감지하고, 자동화 도구에 사용되는 자격증명을 주기적으로 검토해야 한다. 또한, npm과 같은 패키지 레지스트리의 보안 정책을 엄격히 준수하고, CI/CD 파이프라인의 인증 방식을 최신 보안 표준으로 업데이트해야 한다.