Bitwarden CLI, 진행 중인 Checkmarx 공급망 캠페인에서 손상됨

3 days ago 5
  • npm용 Bitwarden CLI 패키지가 진행 중인 Checkmarx 공급망 공격의 일부로 손상됐고, 현재 확인된 영향 범위는 @bitwarden/cli 2026.4.0 빌드에 한정됨
  • 패키지에 포함된 bw1.js 악성 코드는 audit.checkmarx[.]cx/v1/telemetry 같은 동일한 인프라와 난독화 방식을 사용하며, 손상된 GitHub Action을 이용한 CI/CD 침해 정황과도 맞물림
  • 수집 대상은 GitHub 토큰뿐 아니라 AWS, Azure, GCP 자격 증명, .npmrc, SSH 키, 환경 변수, Claude/MCP 설정 파일까지 넓게 퍼져 있음
  • 탈취한 정보는 공개 GitHub 저장소 생성과 커밋, npm 토큰을 이용한 재배포 확산, workflow 주입으로 이어지며, ~/.bashrc와 ~/.zshrc 수정 같은 지속성 확보 기능도 포함됨
  • Bitwarden CLI를 사용한 조직은 이번 사건을 자격 증명 노출CI/CD 침해로 다뤄야 하며, CI 로그 검토와 노출 가능 비밀정보 교체가 중요함

개요

  • Bitwarden CLI npm 패키지가 진행 중인 Checkmarx 공급망 공격의 일부로 손상되었고, 확인된 대상 버전은 @bitwarden/cli2026.4.0
    • 악성 코드는 패키지에 포함된 bw1.js에 들어 있었음
    • 공격 경로는 Bitwarden의 CI/CD 파이프라인 안에서 손상된 GitHub Action을 활용한 정황과 맞물리며, 다른 저장소들에서 확인된 캠페인 패턴과 일치함
  • 현재까지 확인된 범위는 Bitwarden CLI 빌드에 한정되어 있고, 손상은 더 넓은 Checkmarx campaign에서 식별된 GitHub Actions 공급망 벡터를 따름
    • npm용 CLI 패키지만 관련되어 있음
    • Chrome 확장, MCP 서버, 그 밖의 정식 배포물은 현재까지 영향이 확인되지 않았음
  • 조사는 계속 진행 중이며, 전체 기술 분석과 영향 버전, 침해 지표, 대응 지침은 추가 공개될 예정임
  • Bitwarden CLI를 사용하는 경우 CI 로그 검토와 노출 가능성이 있는 비밀정보 교체가 필요함

기술 분석

  • 악성 페이로드 bw1.js 는 전날 분석된 Checkmarx의 mcpAddon.js와 핵심 인프라를 공유함
    • 동일한 C2 엔드포인트 audit.checkmarx[.]cx/v1/telemetry 를 사용하고, __decodeScrambled와 시드 0x3039로 난독화되어 있음
    • GitHub API를 통한 커밋 기반 유출과 npm 레지스트리를 통한 토큰 탈취 및 재배포도 함께 수행함
  • 내장된 페이로드 구조도 같은 계열임
    • gzip+base64 구조 안에 GitHub Actions Runner.Worker 메모리를 긁어 GitHub 토큰을 노리는 Python 스크립트가 포함됨
    • 재배포 npm 패키지를 위한 setup.mjs 로더, GitHub Actions workflow YAML, 하드코딩된 RSA 공개키, 이념적 선언문 문자열이 함께 들어 있음
  • 자격 증명 수집 범위가 매우 넓음
    • GitHub 토큰은 Runner.Worker 메모리 스크래핑과 환경 변수에서 수집함
    • AWS 자격 증명은 ~/.aws/ 파일과 환경 변수에서 찾음
    • Azure 토큰은 azd를, GCP 자격 증명은 gcloud config config-helper를 통해 수집함
    • .npmrc, SSH 키, 환경 변수, Claude/MCP 설정 파일도 대상에 포함됨
  • GitHub를 통한 유출 방식도 구체적으로 확인됨
    • 피해자 계정 아래에 Dune 테마 이름 규칙 {word}-{word}-{3digits} 를 따르는 공개 저장소를 생성함
    • 암호화된 결과물을 커밋하고, 커밋 메시지에는 LongLiveTheResistanceAgainstMachines 마커와 함께 토큰을 삽입함
  • 공급망 확산 메커니즘까지 포함됨
    • 탈취한 npm 토큰으로 쓰기 가능한 패키지를 찾아 preinstall hook가 삽입된 상태로 재배포함
    • GitHub Actions workflow를 주입해 저장소 비밀정보를 추가로 수집함
  • 러시아 로캘 킬 스위치가 존재함
    • 시스템 로캘이 "ru"로 시작하면 조용히 종료함
    • Intl.DateTimeFormat().resolvedOptions().locale와 LC_ALL, LC_MESSAGES, LANGUAGE, LANG 환경 변수를 확인함
  • 런타임은 Bun v1.3.13이며 GitHub Releases에서 내려받음

Checkmarx 사고와 다른 지점

  • bw1.js에는 Checkmarx 사고 문서에 없던 추가 침해 지표가 들어 있음
    • 하드코딩된 잠금 파일 /tmp/tmp.987654321.lock 으로 동시 실행을 막음
    • ~/.bashrc와 ~/.zshrc에 페이로드를 주입해 셸 프로필 지속성을 확보함
    • 저장소 설명을 Shai-Hulud: The Third Coming으로 설정하고, 디버그 문자열에 "Would be executing butlerian jihad!"를 포함하는 등 명시적 브랜딩을 사용함
  • 공유 도구가 동일한 악성코드 생태계 연결성을 강하게 시사하지만, 운영 서명은 귀속 판단을 더 어렵게 만듦
    • Checkmarx 공격은 발견 뒤 TeamPCP가 @pcpcats 소셜 계정을 통해 자신들의 소행이라고 주장했음
    • 해당 악성코드는 정상처럼 보이는 설명으로 위장하려 했음
  • 이번 페이로드는 공개적 태도가 다름
    • Shai-Hulud 저장소 이름, "Butlerian Jihad" 선언문, 기계에 대한 저항을 내세운 커밋 메시지처럼 이념적 표식이 악성코드 안에 직접 들어 있음
    • 공유 인프라를 쓰는 다른 운영자, 더 강한 이념성을 가진 분파, 또는 캠페인의 공개적 태도 변화라는 여러 가능성이 함께 남아 있음

권고 사항

  • 악성 Bitwarden npm 패키지를 설치한 조직은 이번 사건을 자격 증명 노출CI/CD 침해 사건으로 취급해야 함
  • 개발자 시스템과 빌드 환경에서 영향 패키지를 즉시 제거하고, 해당 환경에 노출됐을 수 있는 자격 증명을 모두 교체해야 함
    • GitHub 토큰, npm 토큰, 클라우드 자격 증명, SSH 키, CI/CD 비밀정보가 포함됨
  • GitHub에서는 비인가 저장소 생성과 비정상 workflow를 점검해야 함
    • .github/workflows/ 아래의 예상치 못한 파일, 의심스러운 workflow 실행, artifact 다운로드, Dune 테마 이름 패턴 {word}-{word}-{3digits} 를 따르는 공개 저장소를 확인해야 함
    • 영향 가능성이 있으면 새로 게시된 저장소에서 아래 키워드를 점검해야 함
      • atreides
      • cogitor
      • fedaykin
      • fremen
      • futar
      • gesserit
      • ghola
      • harkonnen
      • heighliner
      • kanly
      • kralizec
      • lasgun
      • laza
      • melange
      • mentat
      • navigator
      • ornithopter
      • phibian
      • powindah
      • prana
      • prescient
      • sandworm
      • sardaukar
      • sayyadina
      • sietch
      • siridar
      • slig
      • stillsuit
      • thumper
      • tleilaxu
  • npm에서는 비인가 배포 여부를 감사해야 함
    • 승인되지 않은 publish, 버전 변경, 새로 추가된 설치 훅을 확인해야 함
  • 클라우드 환경에서는 접근 로그를 재검토해야 함
    • 비정상적인 비밀정보 접근, 토큰 사용, 새로 발급된 자격 증명을 추적할 필요가 있음
  • 엔드포인트와 러너에서는 관측된 유출 인프라와 파일 접근 흔적을 추적해야 함
    • audit[.]checkmarx[.]cx 로의 외부 연결을 찾을 필요가 있음
    • 평소 사용하지 않는 환경에서 Bun 실행이 있었는지 확인해야 함
    • .npmrc, .git-credentials, .env, 클라우드 자격 증명 저장소, gcloud, az, azd 접근 흔적을 살펴봐야 함
    • /tmp/tmp.987654321.lock 존재 여부와 ~/.bashrc, ~/.zshrc 수정 여부도 확인해야 함
  • GitHub Actions에서는 승인되지 않은 workflow 생성 여부를 검토해야 함
    • 임시 브랜치에서 workflow가 만들어졌는지 확인이 필요함
    • format-results.txt 같은 artifact가 생성되거나 다운로드되었는지도 점검해야 함
  • 장기적으로는 향후 공급망 사고의 피해 반경 축소가 필요함
    • 토큰 권한 범위를 줄이고 가능하면 단기 수명 자격 증명을 사용해야 함
    • 패키지 생성 및 배포 권한을 제한하고 GitHub Actions 권한을 강화해야 함
    • 불필요한 artifact 접근을 비활성화하고, 정상 릴리스 절차 밖에서 생긴 공개 저장소나 workflow 변경을 모니터링해야 함

침해 지표

Read Entire Article