การยึดแพ็กเกจ npm ของ Bitwarden CLI – พบการโจมตีขโมยข้อมูลรับรองนักพัฒนาครั้งใหญ่
(research.jfrog.com)ทีมวิจัยความปลอดภัยของ JFrog พบว่า @bitwarden/cli เวอร์ชัน 2026.4.0 บน npm ถูกยึดไปใช้งานโดยผู้ไม่หวังดี โดยยังคงเก็บเมตาดาตาและการสร้างแบรนด์ของ Bitwarden ไว้เหมือนเดิม แต่สลับเฉพาะสคริปต์ preinstall และจุดเริ่มต้นของไบนารี bw ให้เป็นตัวโหลดอันตราย (bw_setup.js)
วิธีการทำงาน
ระหว่างการติดตั้ง ตัวโหลดจะดาวน์โหลดรันไทม์ Bun จาก GitHub ก่อน แล้วจึงรันเพย์โหลด JavaScript ที่ถูกทำให้อ่านยาก (bw1.js) การใช้ Bun แทน Node.js เองก็เป็นกลยุทธ์เพื่อหลบเลี่ยงการตรวจจับ
เพย์โหลดนี้เก็บข้อมูลรับรองจากเครื่องนักพัฒนาและสภาพแวดล้อม CI อย่างกว้างขวางผ่านตัวเก็บข้อมูล 3 แบบ
- ตัวเก็บข้อมูลระบบไฟล์: คีย์ SSH (
~/.ssh/), ข้อมูลรับรอง Git (.git-credentials), โทเค็น npm (~/.npmrc),.env, ข้อมูลรับรอง AWS (~/.aws/credentials), ข้อมูลรับรอง GCP (~/.config/gcloud/credentials.db) เป็นต้น - ตัวเก็บข้อมูลเชลล์/สภาพแวดล้อม: รันคำสั่ง
gh auth token, สแกนprocess.envเพื่อจับแพตเทิร์นของโทเค็น GitHub และ npm - ตัวเก็บข้อมูล GitHub Actions: ฉีดเวิร์กโฟลว์เข้าไปในรีโปที่โทเค็นมีสิทธิ์เข้าถึง เพื่อดึง Actions secrets ออกมาด้วย
สิ่งที่น่ากังวลเป็นพิเศษคือ มีการรวม ไฟล์ตั้งค่าเครื่องมือ AI และ MCP อย่าง ~/.claude.json, ~/.claude/mcp.json, ~/.kiro/settings/mcp.json ไว้ในเป้าหมายการเก็บข้อมูลด้วย
เส้นทางการรั่วไหลแบบสองชั้น
ข้อมูลที่ขโมยมาได้จะถูกบีบอัดด้วย gzip แล้วส่งออกหลังผ่านการเข้ารหัสแบบไฮบริด AES-256-GCM + RSA-OAEP
- เส้นทางหลัก: HTTPS POST ไปยัง
audit.checkmarx.cx/v1/telemetry(ปลอมตัวเป็นบริการความปลอดภัยที่ดูน่าเชื่อถือ) - เส้นทางสำรอง (การนำ GitHub ไปใช้ในทางที่ผิด): หากเส้นทางหลักล้มเหลว จะค้นหา PAT ที่ถูกเข้ารหัส Base64 สองชั้นจากข้อความคอมมิตบน GitHub โดยใช้มาร์กเกอร์
LongLiveTheResistanceAgainstMachinesจากนั้นกู้คืนโดเมนสำหรับการส่งข้อมูลออกสำรองแบบไดนามิกผ่านมาร์กเกอร์beautifulcastleและการตรวจสอบลายเซ็น RSA สุดท้ายจะสร้างรีโปใหม่ในบัญชี GitHub ของเหยื่อ และอัปโหลด JSON ที่เข้ารหัสแล้วไปยังไดเรกทอรีresults/
การตรวจสอบว่าติดเชื้อหรือไม่
เมตาดาตาของ Bitwarden CLI ปกติที่ฝังมาเป็น 2026.3.0 แต่รูทของแพ็กเกจระบุเป็น 2026.4.0 ทำให้วิเคราะห์ได้ว่าไม่ได้มาจาก build pipeline ปกติ แต่มีการครอบเลเยอร์อันตรายจากภายนอก
วิธีรับมือ
หากมีประวัติการติดตั้งเวอร์ชันดังกล่าว ควรถือว่าข้อมูลรับรองทั้งหมดบนโฮสต์นั้นรั่วไหลแล้ว
npm uninstall -g @bitwarden/cliและล้างแคช- หมุนเปลี่ยน GitHub PAT, โทเค็น npm, AWS access key ทั้งหมด
- ตรวจสอบ audit log ของ Azure Key Vault / GCP Secret Manager
- ตรวจสอบประวัติการรันที่ไม่ได้รับอนุญาตในเวิร์กโฟลว์ GitHub Actions
- บล็อกเครือข่ายไปยัง
audit.checkmarx.cxและ94.154.172.43 - ตรวจสอบว่ามีการเปิดเผยข้อมูลอ่อนไหวในไฟล์ตั้งค่าเครื่องมือ AI (เช่น Claude, Kiro) หรือไม่
นี่เป็นการโจมตีที่ซับซ้อน ซึ่งก้าวไกลกว่ามัลแวร์ขโมยข้อมูลรับรอง npm ทั่วไป โดยผสมผสานการโจมตีซัพพลายเชน + การขโมยซีเคร็ตหลายขั้น + การทำให้โครงสร้างพื้นฐานของ GitHub กลายเป็นอาวุธ
4 ความคิดเห็น
สโลแกนบนหน้าเว็บไซต์บริษัทดูไร้ความหมาย เลยยกเลิกใช้ไปแล้ว
ขนลุกเลย;; ใช้อยู่ทุกวันแท้ๆ โชคดีที่ฝั่ง homebrew ไม่โดนขโมยไปด้วย
เฮ้อ… สงสัยต้องลบ npm global libraries ทั้งหมดออกไปก่อน หรือไม่ก็ปิด pre/postinstall ไปเลย
Homebrew เปลี่ยนมาเป็นปิด
postinstallโดยค่าเริ่มต้นและอนุญาตเป็นข้อยกเว้นแทนแล้ว จะบอกว่าโชคดีก็ได้ เพราะผมอัปเดตตามแท็กของรีโปโดยไม่ได้ดู npm เลย เวอร์ชันนี้ก็เลยรอดไปได้พอดี ช่วงหลังมานี้ npm ก็มีช่วงคูลดาวน์เข้ามาด้วย ดังนั้นถึงจะดูจาก npm ก็น่าจะไม่ได้ถูกเผยแพร่ออกมาอยู่ดีโห อันนี้ช็อกพอสมควรเลยนะ