TL;DR

Ngày 22/04/2026, từ 5:57 PM đến 7:30 PM ET (khoảng 93 phút), một bản @bitwarden/cli@2026.4.0 chứa payload bw1.js được đẩy lên npm thông qua một GitHub Action bị chiếm trong pipeline CI/CD của Bitwarden. Payload hút GitHub tokens, npm tokens, AWS/Azure/GCP credentials, SSH keys, .env và shell history về domain giả mạo audit.checkmarx[.]cx. Bitwarden xác nhận vault người dùng, production data và production systems không bị ảnh hưởng. Chỉ 334 người tải bản độc; họ cần update lên 2026.4.1 và rotate toàn bộ secret trong phạm vi máy đã chạy CLI.

Bitwarden CLI backdoored trong chiến dịch Checkmarx

What’s new

Bitwarden công bố chính thức ngày 23/04/2026 rằng nhóm bảo mật đã phát hiện và cô lập một bản npm độc của Bitwarden CLI chỉ khoảng hơn 1 tiếng rưỡi sau khi nó xuất hiện. Đây không phải là một package typosquat — đây là bản chính thức của maintainer thật, được ký và phát hành từ đúng pipeline CI/CD của Bitwarden, nhưng GitHub Action dùng để build đã bị chiếm dụng.

Sự cố này thuộc chiến dịch lớn hơn mang tên Checkmarx supply chain campaign do nhóm TeamPCP đứng sau. Trong vòng 48 giờ từ 21 đến 23/04/2026, cùng hạ tầng đã đập vào Checkmarx KICS (Docker Hub), Trivy, LiteLLM và lan sang ~250 package npm do các nạn nhân phụ làm maintainer.

Why it matters

Điều đáng sợ nhất của vụ Bitwarden không phải là con số 334 lượt tải — mà là kiểu tấn công. Kẻ xấu không cần lừa ai cài sai tên package. Họ không cần chiếm npm account. Họ chiếm một bước trong GitHub Actions workflow, để pipeline hợp pháp tự tay build và publish một release có thêm một file bw1.js. Với người dùng cuối, artifact trông hoàn toàn chính chủ: cùng tên, cùng maintainer, cùng chữ ký npm.

Điều đó có nghĩa là các biện pháp bảo vệ kinh điển — chỉ cài từ maintainer đáng tin, kiểm chữ ký, tránh typosquat — không còn đủ. Nếu bạn npm install -g @bitwarden/cli trong 93 phút đó trên một CI runner có quyền AWS/GCP/GitHub, bạn đã cho phép TeamPCP đọc mọi thứ đó.

Technical facts

Các chỉ số kỹ thuật chính từ phân tích của Socket Research Team và CyberInsider:

Thuộc tínhGiá trị
Package@bitwarden/cli
Version độc2026.4.0
Version sạch2026.4.1
Cửa sổ phân phối22/04/2026, 5:57–7:30 PM ET (~93 phút)
Lượt tải độc334
File payloadbw1.js
C2 endpointaudit.checkmarx[.]cx/v1/telemetry
C2 IP94.154.172.43
Runtime thả xuốngBun v1.3.13 (tải từ GitHub releases)
Lock file/tmp/tmp.987654321.lock
Mã hoá exfilAES-256-GCM
Obfuscation__decodeScrambled

Danh mục credential bị nhắm: GitHub PATs (kể cả scrape từ bộ nhớ Runner.Worker), npm config, AWS keys, Azure tokens, gcloud credentials, ~/.ssh, .env, shell history, GitHub Actions secrets, và cả file cấu hình Claude/MCP.

Hành vi giống worm

Điểm tệ hơn là payload có logic tự nhân bản: dùng GitHub token đánh cắp để chèn workflow GitHub Actions trái phép vào repo của nạn nhân, và dùng npm token để republish các package khác mà nạn nhân đang maintain với cùng postinstall hook. Đó là cách cùng một chiến dịch nở ra thành 250+ package bị nhiễm trong 48 giờ.

Secrets exfil không chỉ gửi về C2 — chúng còn được commit vào các repo public mới tạo dưới account nạn nhân, đặt tên theo chủ đề Dune (gesserit-melange, mentat-fedaykin, prescient-ghola, atreides-ghola…). Mục đích: tạo kênh lấy dữ liệu bền vững ngay cả khi C2 bị takedown.

Các repo GitHub public do kẻ tấn công tạo để chứa secret, đặt tên theo chủ đề Dune

Comparison — Chiến dịch TeamPCP trong 48 giờ

Chiến dịchMục tiêuEcosystemPayload
Checkmarx KICSDocker image + VS Code extensionDocker HubOverwrite tag alpine, latest, v2.1.20
Bitwarden CLI@bitwarden/cli@2026.4.0npmbw1.js
Trivy / LiteLLMDev CI toolsnpm / PyPICùng C2, cùng AES-GCM
CanisterSprawlpgserve + 250+ republishnpm & PyPIWorm postinstall, C2 trên ICP canister
xinference3 bản liên tiếpPyPISSH + ví crypto

Khác biệt với sự cố Nx s1ngularity tháng 9/2025: lần này kẻ tấn công không chiếm npm account — họ chiếm GitHub Actions runner, để bản độc được ký bằng chính danh tính maintainer thật. Đó là kiểu tấn công khó phát hiện hơn nhiều.

Use cases — Ai cần lo, ai không

  • End user của password manager Bitwarden (desktop / browser / mobile / app cloud): không bị ảnh hưởng. Không cần đổi master password.
  • Developer & DevOps đã chạy npm install -g @bitwarden/cli trong khung giờ 5:57–7:30 PM ET ngày 22/04/2026: coi như mọi secret trong shell/CI runner đó đã lộ. Rotate GitHub PAT, npm token, AWS/Azure/GCP keys, SSH keys, và bất kỳ biến nào trong .env.
  • Security / blue team: truy outbound traffic tới audit.checkmarx[.]cx hoặc 94.154.172.43; grep file bw1.js, /tmp/tmp.987654321.lock, binary bun bất ngờ. Audit repo cho workflow mới và repo public lạ có tên kiểu Dune dưới account đã bị ảnh hưởng.

Limitations & pricing

Bitwarden là open-source và miễn phí; không có tác động về giá hay gói dịch vụ. Chi phí thực sự là lao động remediation ở 334 máy đã tải cộng với các pipeline CI downstream. Giới hạn phân tích hiện tại: chưa có con số chính thức về số repo/secret bị đánh cắp — researcher cho rằng hành vi worm-like có thể còn đang phơi bày nạn nhân mới.

What’s next

Nếu bạn vận hành một open-source project có pipeline npm/PyPI/Docker, bài học lặp lại: GitHub Actions là supply chain. Gắn OIDC thay cho PAT dài hạn, pin action bằng commit SHA thay vì tag, chia quyền runner theo job, và bật protection cho môi trường publish. Mong đợi TeamPCP tiếp tục đập vào các maintainer khác trong vài tuần tới — Socket và GitGuardian đều cảnh báo đây là làn sóng chứ không phải sự cố đơn lẻ.

Nguồn: Bitwarden official statement, Socket Research Team, CyberInsider, The Hacker News, GitGuardian.