- Package @bitwarden/cli@2026.4.0 đã bị chèn mã độc trong 93 phút tối 22/04/2026, quét sạch GitHub/npm token, SSH key, .env, shell history và cloud secret của dev cài bản này.
- Đây là mắt xích npm đầu tiên của campaign TeamPCP đã tấn công Trivy và Checkmarx Docker/VSCode trước đó.
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.

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ì
curlBun binary từ GitHub. - Chạy payload obfuscated
bw1.jsqua 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ính | Giá trị |
|---|---|
| Package | @bitwarden/cli@2026.4.0 |
| XRAY-ID | XRAY-969808 |
| Cửa sổ tấn công | 22/04/2026, 5:57 PM – 7:30 PM ET (~93 phút) |
| Entry | preinstall hook + rewired bw binary |
| Runtime payload | Bun (tự download nếu thiếu) |
| Payload SHA-256 | 8605e365edf11160aad517c7d79a3b26b62290e5072ef97b102a01ddbb343f14 |
| Loader SHA-256 | 18f784b3bc9a0bcdcb1a8d7f51bc5f54323fc40cbd874119354ab609bef6e4cb |
| C2 | audit.checkmarx[.]cx (IP 94.154.172.43) |
| Fallback | push/query GitHub commits cho route phụ |
| Encryption | gzip → 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ày | Kênh | Payload | C2 |
|---|---|---|---|---|
| Trivy tampering | Tháng 3/2026 | GitHub release | Go binary | Shared infra |
| Checkmarx KICS | 21/04/2026 | Docker Hub | mcpAddon.js | audit.checkmarx[.]cx |
| Checkmarx VSCode | 21/04/2026 | VS Code Marketplace | mcpAddon.js | audit.checkmarx[.]cx |
| @bitwarden/cli | 22/04/2026 | npm | bw1.js | audit.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/clitrong 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:
npm uninstall -g @bitwarden/cli && npm cache clean --force- 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.
- Audit GitHub cho repo lạ theo pattern
{word}-{word}-{3digits}và workflow file bị inject trái phép. - Block
audit.checkmarx[.]cxvà IP94.154.172.43ở firewall/egress proxy. - 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.

