---
title: "Bitwarden CLI npm 패키지에 악성코드 — Checkmarx 공급망 공격 확산 중"
published: 2026-04-23T14:17:08.000Z
canonical: https://jeff.news/article/1899
---
# Bitwarden CLI npm 패키지에 악성코드 — Checkmarx 공급망 공격 확산 중

Socket 보안팀이 Bitwarden CLI npm 패키지(@bitwarden/cli2026.4.0)가 악성코드에 감염된 채로 배포된 사실을 발견했다. Bitwarden의 CI/CD에 쓰이던 GitHub Action이 뚫려 공식 빌드 라인에 bw1.js 페이로드가 심어졌고, GitHub·AWS·Azure·GCP 자격증명부터 Claude/MCP 설정까지 광범위하게 탈취한다. 최근 번지고 있는 Checkmarx 공급망 캠페인의 일부로 확인됐다.

> [!WARNING]
> Bitwarden CLI npm 패키지(`@bitwarden/cli2026.4.0`)에 악성코드가 심어져서 배포됨. 쓰고 있었다면 **지금 당장** CI/CD 시크릿, GitHub 토큰, 클라우드 자격증명 싹 다 로테이션해야 함.

- Socket 보안팀이 Bitwarden CLI npm 패키지가 털린 걸 발견 — 요즘 번지고 있는 Checkmarx 공급망 공격 캠페인의 일부
  - 피해 대상인 Bitwarden은 1천만 명 넘는 사용자 + 5만 개 넘는 기업 고객을 가진 오픈소스 패스워드 매니저. 엔터프라이즈 채택률 기준 Top 3 안에 듦
  - 문제의 패키지는 `@bitwarden/cli2026.4.0`, 악성코드는 패키지 안의 `bw1.js` 파일에 박혀 있었음
- 침투 경로는 Bitwarden의 CI/CD 파이프라인에서 쓰던 **GitHub Action이 털린 것**으로 추정 — 다른 피해 레포들과 동일한 패턴
  - 지금 단계에선 CLI npm 패키지만 영향받음. Chrome 확장, MCP 서버, 공식 배포판은 아직 안전

### 악성 페이로드(`bw1.js`)가 하는 짓

- 어제 분석된 Checkmarx `mcpAddon.js`와 **핵심 인프라를 공유함** — 같은 공격자 생태계로 보임
  - C2 엔드포인트 동일 (`audit.checkmarx[.]cx/v1/telemetry`, `__decodeScrambled` 함수에 시드 `0x3039`로 난독화)
  - 유출 경로도 동일 — GitHub API 커밋 기반 + npm 레지스트리 토큰 탈취/재배포
- 자격증명 수집 범위가 살벌함
  - GitHub Actions의 `Runner.Worker` 메모리를 스크래핑해서 GitHub 토큰 탈취
  - AWS 자격증명 (`~/.aws/` 파일, 환경변수), Azure 토큰 (`azd`), GCP 자격증명 (`gcloud config config-helper`)
  - npm 설정(`.npmrc`), SSH 키, 환경변수, **Claude/MCP 설정 파일**까지 가져감
- 훔친 데이터 유출 방식이 기발함 — 피해자 GitHub 계정에 **공개 레포**를 만들어서 암호화된 결과를 커밋
  - 레포 이름은 `{단어}-{단어}-{3자리숫자}` 포맷, 단어는 전부 **듄(Dune)** 소설 용어 (atreides, fremen, harkonnen, melange, sandworm 등)
  - 커밋 메시지에 `LongLiveTheResistanceAgainstMachines` 마커와 함께 토큰을 박아서 유출
- 공급망 확산도 자동화됨 — 훔친 npm 토큰으로 쓰기 가능한 패키지를 찾아서 `preinstall` 훅을 심은 버전을 재배포
  - GitHub Actions 워크플로우도 주입해서 레포 시크릿을 캡처
- Bun v1.3.13 인터프리터를 GitHub 릴리스에서 받아와 런타임으로 씀
- **러시아 로케일 킬 스위치** — 시스템 로케일이 `ru`로 시작하면 조용히 종료. `Intl.DateTimeFormat().resolvedOptions().locale`과 `LC_ALL`, `LC_MESSAGES`, `LANGUAGE`, `LANG` 환경변수를 체크함

### Checkmarx 건과 다른 이데올로기적 시그니처

- 같은 툴을 쓰지만 **브랜딩이 대놓고 이데올로기적**이어서 분파 그룹이거나 캠페인의 태도 진화로 보임
  - Checkmarx 악성코드는 "Checkmarx Configuration Storage" 같은 위장명으로 블렌딩 시도
  - 이번 페이로드는 레포 설명에 `Shai-Hulud: The Third Coming` (듄의 샌드웜)을 박음
  - 디버그 문자열에 `"Would be executing butlerian jihad!"` (듄의 기계 반란 이벤트) 같은 메시지 탑재
- Checkmarx 건은 @pcpcats 트위터 계정의 TeamPCP가 사후에 주장했는데, 이번엔 악성코드 자체에 선언문이 박혀 있음
- 이번 페이로드에만 있는 추가 지표
  - 락 파일 `/tmp/tmp.987654321.lock`로 중복 실행 방지
  - `~/.bashrc`, `~/.zshrc`에 페이로드 주입해서 영속성 확보

### 대응 가이드

> [!IMPORTANT]
> 감염 의심 시 **크리덴셜 노출 + CI/CD 침해 사건**으로 취급해야 함. 패키지 제거만 하고 끝내면 안 됨.

- 당장 해야 할 일
  - 감염 패키지를 개발 머신과 빌드 환경에서 제거
  - GitHub 토큰, npm 토큰, 클라우드 자격증명, SSH 키, CI/CD 시크릿 **전부 로테이션**
  - 위의 듄 키워드(`atreides`, `fremen`, `harkonnen`, `melange`, `sandworm` 등)로 새로 만들어진 레포가 있는지 GitHub 뒤져보기
  - `.github/workflows/` 밑에 수상한 워크플로우 파일, 정체불명 워크플로우 실행, 아티팩트 다운로드 체크
- 헌팅용 IOC
  - 네트워크 — `94[.]154[.]172[.]43`, `https://audit.checkmarx[.]cx/v1/telemetry` 아웃바운드
  - 파일 — `/tmp/tmp.987654321.lock`, `~/.bashrc`·`~/.zshrc` 내 주입 흔적
  - 평소 Bun 안 쓰는 환경에서 Bun 실행, `.npmrc`·`.git-credentials`·`.env`·`gcloud`·`az`·`azd` 접근 흔적
- 중장기적으로는 **블래스트 레이디어스 축소**에 집중 — 토큰 스코프 최소화, 단명 자격증명 강제, 패키지 배포 권한 제한, GitHub Actions 권한 하드닝, 비정상 레포/워크플로우 생성 모니터링

---

## 기술 맥락

이번 사건의 핵심은 **"npm 패키지 하나 감염"이 아니라 "CI/CD 파이프라인 자체가 뚫리는 구조"**예요. 공격자는 Bitwarden의 GitHub Action을 털어서 공식 빌드 라인에 악성코드를 끼워넣었거든요. 이게 무서운 건, 피해자가 공식 배포 채널에서 정식 버전을 받아도 이미 감염된 상태라는 점이에요. 이름만 들어도 아는 Bitwarden급 프로젝트도 이렇게 당했다는 게 포인트예요.

**prompt injection이 아니라 "빌드 타임 주입"이 유행이 된 배경이 있어요.** 요즘 npm 생태계에선 개별 패키지를 직접 타이포스쿼팅하는 것보다, 인기 패키지의 배포 자동화 파이프라인을 뚫는 게 훨씬 효율적이거든요. Checkmarx, Bitwarden이 연달아 당한 이유가 이거예요. 한 번 뚫리면 **해당 패키지를 쓰는 모든 CI 환경**으로 크리덴셜이 새어나가요. GitHub Actions의 `Runner.Worker` 프로세스 메모리에서 토큰을 긁어가는 기술은 이미 검증된 공격 벡터가 됐어요.

**러시아 로케일 킬 스위치는 공격자 출신 추정 힌트**예요. 러시아권 사이버범죄 그룹은 전통적으로 CIS 국가 내부 타깃을 피하는 관행이 있거든요. 이걸 코드에 박아두면 자국 내 법 집행을 피할 수 있어요. 반대로 이 특징이 있으면 "러시아어권 행위자"로 프로파일링되기 쉬운데, 최근엔 이걸 역이용해서 false flag로 쓰기도 해서 절대적인 단서는 아니에요.

**Shai-Hulud, Butlerian Jihad 같은 듄 레퍼런스**는 단순한 드립이 아니에요. 듄의 "버틀레리안 지하드"는 인류가 사고하는 기계(AI)에 반란을 일으킨 사건이에요. 악성코드가 Claude/MCP 설정 파일까지 긁어가는 걸 보면, 공격자가 **AI 도구 사용 개발자를 의도적으로 타깃팅**하고 있다는 시그널이에요. 이데올로기적 포지셔닝이 기술적 타깃팅과 맞물려 있다는 게 이 캠페인의 특이점이에요.

## 핵심 포인트

- 감염 패키지는 @bitwarden/cli2026.4.0, 악성코드는 bw1.js에 포함
- Bitwarden CI/CD의 GitHub Action이 뚫린 게 침투 경로로 추정
- GitHub 토큰·AWS·Azure·GCP 자격증명, SSH 키, npm 설정, Claude/MCP 설정까지 탈취
- 훔친 데이터는 피해자 GitHub 계정에 듄(Dune) 테마 이름의 공개 레포를 만들어 유출
- 러시아 로케일 킬 스위치 존재 — 'ru'로 시작하면 조용히 종료
- Shai-Hulud, Butlerian Jihad 같은 이데올로기 브랜딩이 악성코드 자체에 박혀 있음
- Chrome 확장·MCP 서버·공식 배포판은 영향 없음, npm CLI 패키지만 감염

## 인사이트

'인기 패키지 하나 직접 감염' 시대에서 'CI/CD 파이프라인 자체를 뚫어 공식 빌드 라인에 주입하는' 시대로 넘어왔다는 명백한 증거. Claude/MCP 설정 파일까지 수집 대상에 넣은 건 AI 도구 쓰는 개발자를 의도적으로 타깃팅한다는 시그널이다.
