Bitwarden CLI npm 패키지 하이재킹 – 개발자 인증정보 대규모 탈취 공격 발견
(research.jfrog.com)JFrog 보안 연구팀이 npm의 @bitwarden/cli 2026.4.0 버전이 하이재킹된 것을 발견했다. 정상적인 Bitwarden 메타데이터와 브랜딩을 그대로 유지하면서, preinstall 스크립트와 bw 바이너리 진입점만 악성 로더(bw_setup.js)로 교체한 형태다.
동작 방식
설치 시 로더가 먼저 Bun 런타임을 GitHub에서 다운로드한 뒤, 난독화된 JavaScript 페이로드(bw1.js)를 실행한다. Node.js 대신 Bun을 사용하는 것 자체가 탐지 우회 전략이다.
페이로드는 세 가지 수집기를 통해 개발자 워크스테이션과 CI 환경의 인증정보를 광범위하게 수집한다.
- 파일시스템 수집기: SSH 키(
~/.ssh/), Git 자격증명(.git-credentials), npm 토큰(~/.npmrc),.env, AWS 자격증명(~/.aws/credentials), GCP 크리덴셜(~/.config/gcloud/credentials.db) 등 - 셸/환경 수집기:
gh auth token명령 실행,process.env스캔을 통한 GitHub·npm 토큰 패턴 매칭 - GitHub Actions 수집기: 토큰 권한이 있는 레포에 워크플로우를 주입해 Actions 시크릿까지 추출
특히 주목할 점은 ~/.claude.json, ~/.claude/mcp.json, ~/.kiro/settings/mcp.json 등 AI 도구 및 MCP 설정 파일까지 수집 대상에 포함되어 있다는 것이다.
이중 유출 경로
탈취한 데이터는 gzip 압축 후 AES-256-GCM + RSA-OAEP 하이브리드 암호화를 거쳐 전송된다.
- 1차 경로:
audit.checkmarx.cx/v1/telemetry로 HTTPS POST (정상 보안 서비스처럼 위장) - 2차 경로 (GitHub 악용): 1차 실패 시 GitHub 커밋 메시지에서
LongLiveTheResistanceAgainstMachines라는 마커로 이중 Base64 인코딩된 PAT를 검색하여 추출.beautifulcastle이라는 마커와 RSA 서명 검증을 통해 대체 유출 도메인도 동적으로 복구한다. 최종적으로 피해자의 GitHub 계정에 새 레포를 생성하고 암호화된 JSON을results/디렉토리에 업로드한다.
감염 판별
내장된 정상 Bitwarden CLI 메타데이터는 2026.3.0인데 패키지 루트는 2026.4.0으로 되어 있어, 정상 빌드 파이프라인이 아닌 외부에서 악성 레이어를 씌운 것으로 분석된다.
대응 방법
해당 버전 설치 이력이 있다면 해당 호스트의 모든 인증정보가 유출되었다고 간주해야 한다.
npm uninstall -g @bitwarden/cli및 캐시 정리- GitHub PAT, npm 토큰, AWS 액세스 키 전체 로테이션
- Azure Key Vault / GCP Secret Manager 감사 로그 확인
- GitHub Actions 워크플로우에서 비인가 실행 이력 점검
audit.checkmarx.cx및94.154.172.43네트워크 차단- AI 도구 설정 파일(Claude, Kiro 등)의 민감 정보 노출 여부 확인
일반적인 npm 크리덴셜 스틸러를 넘어, 공급망 침해 + 다단계 시크릿 탈취 + GitHub 인프라 무기화를 결합한 정교한 공격이다.