TL;DR

Tối 22/04/2026, package @bitwarden/cli@2026.4.0 (~78K weekly downloads) bị publish lên npm kèm payload độc hại trong khoảng 5:57 PM – 7:30 PM ET — cửa sổ 93 phút. Payload bw1.js chạy qua preinstall hook, quét GitHub/npm token, SSH key, .env, shell history, GitHub Actions secrets và AWS/GCP/Azure credentials, rồi exfil về audit.checkmarx[.]cx (AES-256-GCM + RSA-OAEP wrap). Đây là mắt xích npm đầu tiên của campaign TeamPCP đã tấn công Trivy, Checkmarx KICS Docker images và VS Code extensions từ tháng 3/2026. Bitwarden xác nhận không có vault data end-user bị ảnh hưởng.

Socket.dev flag bản @bitwarden/cli 2026.4.0 là malware known

What's new

JFrog Security và Socket phát hiện bản 2026.4.0 trên npm không trỏ vào CLI bundle gốc của Bitwarden. Thay vào đó, preinstall hook và binary bw đều bị rewire sang một loader tên bw_setup.js. Loader này làm 3 việc:

  • Check máy có Bun runtime chưa — nếu chưa thì curl Bun binary từ GitHub.
  • Chạy payload obfuscated bw1.js qua Bun (không dùng Node để né EDR/log quen).
  • Kích hoạt 3 collector song song quét credentials trên máy dev.

Điểm đặc biệt: package này mang đúng branding, đúng repo metadata, đúng publisher của Bitwarden — vì kẻ tấn công compromise một GitHub Action bên trong pipeline CI/CD của chính Bitwarden, không phải dependency confusion hay typosquat.

Why it matters

Đây không phải một package vô danh. @bitwarden/cli là tool chính chủ của một password manager tier-1, với ~78K lượt tải mỗi tuần, thường chạy trong CI/CD để fetch secrets — đúng môi trường mà payload thèm nhất. Nếu bạn cài bản 2026.4.0 trên một runner GitHub Actions hoặc máy dev có gh auth login, payload có sẵn mọi thứ nó cần để nhân bản sang repo khác.

Quan trọng hơn: TeamPCP đang chứng minh họ có thể chain cùng một infrastructure (C2 audit.checkmarx[.]cx, cùng crypto stack) qua 3 kênh phân phối khác nhau (Docker Hub, VS Code Marketplace, npm) chỉ trong 24–48 giờ. Mỗi kênh lại nhắm vào một pipeline khác nhau trong workflow dev.

Technical facts

Thuộc tínhGiá trị
Package@bitwarden/cli@2026.4.0
XRAY-IDXRAY-969808
Cửa sổ tấn công22/04/2026, 5:57 PM – 7:30 PM ET (~93 phút)
Entrypreinstall hook + rewired bw binary
Runtime payloadBun (tự download nếu thiếu)
Payload SHA-2568605e365edf11160aad517c7d79a3b26b62290e5072ef97b102a01ddbb343f14
Loader SHA-25618f784b3bc9a0bcdcb1a8d7f51bc5f54323fc40cbd874119354ab609bef6e4cb
C2audit.checkmarx[.]cx (IP 94.154.172.43)
Fallbackpush/query GitHub commits cho route phụ
Encryptiongzip → AES-256-GCM (32B key, 12B IV) → RSA-OAEP-SHA256 wrap

Credentials được nhắm: GitHub/npm tokens (pattern match + gh auth token), SSH keys, .git-credentials, AWS/GCP/Azure keys (bao gồm Azure Key Vault), .env, shell history (bash/zsh/fish), GitHub Actions secrets, và đáng chú ý — AI tooling configs như .claude.json và MCP settings.

Comparison

TeamPCP tái sử dụng cùng playbook qua 4 incident chỉ trong vài tuần:

Sự cốNgàyKênhPayloadC2
Trivy tamperingTháng 3/2026GitHub releaseGo binaryShared infra
Checkmarx KICS21/04/2026Docker HubmcpAddon.jsaudit.checkmarx[.]cx
Checkmarx VSCode21/04/2026VS Code MarketplacemcpAddon.jsaudit.checkmarx[.]cx
@bitwarden/cli22/04/2026npmbw1.jsaudit.checkmarx[.]cx

Một số researcher gọi variant này là canisterworm hoặc liên hệ với họ Shai-Hulud do cơ chế tự nhân bản qua GitHub commits.

Ai bị ảnh hưởng

  • Dev chạy npm install -g @bitwarden/cli trong khung 5:57–7:30 PM ET ngày 22/04.
  • CI/CD runners pin version floating hoặc refresh dependency trong khung đó — rủi ro cao nhất vì secrets có sẵn trong env.
  • Crypto user giữ seed trong .env, shell history hoặc AI config — payload có path cụ thể cho những file này.
  • Ngoài phạm vi: vault data end-user trên Bitwarden cloud không bị ảnh hưởng — Bitwarden đã xác nhận trong issue #20353.

Limitations & remediation

Cửa sổ tấn công hẹp (~93 phút) giới hạn blast radius, nhưng nếu bạn có cài bản 2026.4.0, hãy làm ngay:

  1. npm uninstall -g @bitwarden/cli && npm cache clean --force
  2. Rotate GitHub PAT, npm token, AWS/GCP/Azure keys, SSH keys, và bất kỳ secret nào từng có trong env/shell history.
  3. Audit GitHub cho repo lạ theo pattern {word}-{word}-{3digits} và workflow file bị inject trái phép.
  4. Block audit.checkmarx[.]cx và IP 94.154.172.43 ở firewall/egress proxy.
  5. Grep shell history + .claude.json / MCP config cho dấu vết truy cập hoặc API call bất thường.

What's next

GitGuardian, Phoenix Security và Socket đều cảnh báo campaign chưa dừng: cùng một nhóm TeamPCP có thể tiếp tục nhắm các developer-tool package có weekly download cao, đặc biệt những package nằm sâu trong build pipeline như scanner, linter, password manager. Cộng đồng npm/GitHub đang tăng tốc push cho short-lived tokens, provenance attestations mạnh hơn, và audit trên OIDC trust relationships của GitHub Actions.

Bài học cụ thể cho team: pin phiên bản bằng lockfile + checksum, tách CI runner khỏi production secrets, và assume compromise với mọi tool chạy preinstall/postinstall hook.

Nguồn: JFrog Security, Socket, The Hacker News, GitHub Issue #20353.