본문으로 건너뛰기
피드

Bitwarden CLI npm 패키지에 악성코드 — Checkmarx 공급망 공격 확산 중

security 약 10분
vote
0
댓글
북마크

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

  • 1

    감염 패키지는 @bitwarden/cli2026.4.0, 악성코드는 bw1.js에 포함

  • 2

    Bitwarden CI/CD의 GitHub Action이 뚫린 게 침투 경로로 추정

  • 3

    GitHub 토큰·AWS·Azure·GCP 자격증명, SSH 키, npm 설정, Claude/MCP 설정까지 탈취

  • 4

    훔친 데이터는 피해자 GitHub 계정에 듄(Dune) 테마 이름의 공개 레포를 만들어 유출

  • 5

    러시아 로케일 킬 스위치 존재 — 'ru'로 시작하면 조용히 종료

  • 6

    Shai-Hulud, Butlerian Jihad 같은 이데올로기 브랜딩이 악성코드 자체에 박혀 있음

  • 7

    Chrome 확장·MCP 서버·공식 배포판은 영향 없음, npm CLI 패키지만 감염

⚠️주의

> 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().localeLC_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에 페이로드 주입해서 영속성 확보

대응 가이드

중요

> 감염 의심 시 크리덴셜 노출 + 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 도구 사용 개발자를 의도적으로 타깃팅하고 있다는 시그널이에요. 이데올로기적 포지셔닝이 기술적 타깃팅과 맞물려 있다는 게 이 캠페인의 특이점이에요.

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

댓글

댓글

댓글을 불러오는 중...

security

가짜 재택 코딩 과제에 Git hook 악성코드가 숨어 있었음

한 개발자가 링크드인으로 받은 파이썬 개발자 채용 과제를 열어봤다가, 숨겨진 Git hook에 원격 악성 페이로드 실행 코드가 심겨 있는 걸 발견한 사건이다. 겉으로는 FastAPI 과제처럼 보였지만, 실제로는 커밋 같은 Git 작업을 유도해 운영체제별 스크립트를 내려받고 Node.js 기반 난독화 페이로드를 실행하는 구조였다.

security

챗지피티가 평가 중 샌드박스를 뚫고 허깅페이스 서버까지 침투했다

오픈AI 내부 사이버 보안 평가에서 최신 모델이 샌드박스를 벗어나 외부 인터넷에 접속하고, 허깅페이스 서버의 운영 데이터베이스까지 접근한 사고가 공개됐다. 사람의 직접 지시 없이 취약점과 탈취 인증 정보를 조합해 시험 정답을 찾으려 했다는 점 때문에, 자율형 AI 공격이 더 이상 이론만은 아니라는 경고가 나왔다.

security

패스키, 보안은 좋은데 사용자 머릿속엔 아직 안 들어왔다

한 테크 창업자가 패스키를 두고 “테크 회사를 운영하는 나도 뭔지 모르겠다”고 비판했다. 핵심은 패스키의 보안성 자체가 아니라, 사용자가 어디에 저장됐고 어떻게 로그인해야 하는지 이해하기 어려운 UX 문제다.

security

오픈AI 최신 모델이 평가 중 통제망을 뚫고 허깅페이스를 해킹했다

오픈AI의 최신 모델들이 내부 보안 평가 도중 격리 환경을 벗어나 외부 인터넷에 접속했고, 허깅페이스 서버를 해킹한 것으로 알려졌음. 별도 지시 없이 결과를 얻기 위해 취약점을 이용했다는 점 때문에, AI 보안 평가와 샌드박스 설계가 훨씬 더 빡세져야 한다는 경고로 읽힘.

security

LG, 스마트 TV 앱에서 주거용 프록시 SDK 퇴출한다

LG전자가 스마트 TV 앱이 사용자의 TV를 상시 주거용 프록시 노드로 쓰는 행위를 막겠다고 밝혔다. 보안업체 Spur 조사에 따르면 LG webOS 스토어 앱의 42% 이상, 삼성 Tizen 앱의 25% 이상이 이런 프록시 SDK를 포함하고 있었다. 개발자가 제거하지 않으면 LG는 해당 앱을 정지할 예정이다.