Security Blog

ไม่ควรมีอะไรให้เก็บเกี่ยว

#145

October 2, 2026 · By Marketing team

← All posts

Bitwarden CLI ที่ถูกโจมตีดึง SSH keys, cloud credentials และ npm tokens จากเครื่องของนักพัฒนา 334 เครื่อง ปัญหาที่แท้จริงไม่ใช่ว่ามัลแวร์เข้ามาได้อย่างไร แต่คือความลับทุกชิ้นวางอยู่ตรงนั้นเป็นไฟล์ธรรมดา รอให้ใครสักคนมาอ่าน

เมื่อวานนี้ Bitwarden CLI เวอร์ชันที่ถูกแก้ไขโดยผู้โจมตี ดึง SSH keys, AWS credentials, npm tokens, environment variables, shell history และ Git secrets จากเครื่องของนักพัฒนา 334 เครื่อง

วันนี้เป็น Bitwarden เดือนที่แล้วเป็น Axios ก่อนหน้านั้นเป็น Checkmarx พรุ่งนี้อาจเป็น VS Code extension, Acrobat, Homebrew formula หรือ Docker image ก็ได้ ช่องทางการโจมตีเปลี่ยนไปทุกสัปดาห์ แต่ผลลัพธ์เหมือนเดิมทุกครั้ง

มัลแวร์เข้ามาถึงเครื่อง มันอ่าน ~/.ssh/ มันอ่าน ~/.aws/credentials มันอ่าน ~/.npmrc มันอ่าน ~/.git-credentials มันอ่าน shell history, environment variables, ที่เก็บ รหัสผ่าน ของเบราว์เซอร์ แล้วรวบรวมทุกอย่างส่งขึ้นไปที่ C2 server

และมันได้ผลทุกครั้ง

การเก็บเกี่ยว

payload ของ Bitwarden ซึ่งเป็นไฟล์ขนาด 10 MB ที่ถูก obfuscate ชื่อ bw1.js ไม่ได้พยายามเจาะการเข้ารหัสใด ๆ เลย และไม่จำเป็นต้องทำด้วย นี่คือสิ่งที่มันเก็บรวบรวม ตามที่ Socket และ Aikido บันทึกไว้:

  • SSH keys และ host fingerprints
  • cloud credentials ของ AWS, GCP และ Azure
  • npm authentication tokens
  • Git credentials และ remote URLs
  • Environment variables
  • Shell history
  • Claude Code authentication และ MCP configurations

จากนั้นมันใช้ npm tokens ที่ขโมยมา เผยแพร่แพ็กเกจอื่น ๆ ที่เหยื่อดูแลอยู่ซ้ำอีกครั้ง เพื่อแพร่กระจายตัวเองต่อไป เหยื่อกลายเป็นช่องทางแพร่กระจาย

ทั้งหมดนี้ไม่ต้องเจาะการเข้ารหัสเลย ความลับเหล่านี้ทุกชิ้นเป็นไฟล์บน filesystem ที่ process ใดก็ตามซึ่งรันด้วยสิทธิ์ของ user นั้นอ่านได้

นี่ไม่ใช่เรื่องของ Bitwarden

การเข้ารหัส vault ของ Bitwarden ไม่ได้ถูกเจาะ สถาปัตยกรรม zero-knowledge ของพวกเขาทนทาน มัลแวร์ไม่ได้แตะ vault เลย

และไม่จำเป็นต้องแตะด้วย

vault ปกป้องสิ่งที่อยู่ข้างใน แต่ SSH keys ไม่เคยอยู่ใน vault AWS credentials ไม่เคยอยู่ใน vault npm tokens, Git credentials, API keys ในไฟล์ .env — ไม่มีชิ้นไหนอยู่ใน password manager เลย สิ่งเหล่านี้อยู่ใน dotfiles เป็น plaintext บนเครื่องของนักพัฒนาทุกคน

ผู้โจมตีเข้าใจจุดนี้ดี vault เป็นเหมือนตู้เซฟที่ล็อกอยู่ในบ้านที่ลิ้นชักทุกบานเปิดอ้าอยู่

พื้นที่โจมตีที่แท้จริง

เปิด terminal ขึ้นมาตอนนี้เลยครับ แล้วดูว่ามีอะไรอยู่บนเครื่องของคุณ

~/.ssh/id_ed25519 — private key ของคุณ เป็นไฟล์ plaintext

~/.aws/credentials — ช่องทางเข้าถึง cloud ของคุณ เป็นไฟล์ plaintext

~/.npmrc — publish token ของคุณ เป็นไฟล์ plaintext

~/.git-credentials — ช่องทางเข้าถึง repo ของคุณ เป็นไฟล์ plaintext

~/.env ใน project directories อีกเป็นสิบ — API keys, รหัสผ่าน ฐานข้อมูล, signing secrets ทั้งหมดเป็นไฟล์ plaintext

process ใดก็ตามที่รันด้วยสิทธิ์ user ของคุณอ่านได้ทั้งหมดนี้ ไม่ต้อง privilege escalation ไม่ต้อง exploit แค่ cat

นี่คือค่าตั้งต้นของนักพัฒนาในปี 2026 เราเก็บ รหัสผ่าน ไว้ใน vault ที่เข้ารหัส แล้วปล่อยอย่างอื่นทิ้งไว้กลางแจ้ง

คำถามที่ผิด

หลังการโจมตี supply chain ทุกครั้ง อุตสาหกรรมจะถามคำถามเดิม: จะป้องกันไม่ให้มัลแวร์เข้ามาได้อย่างไร

CI/CD security ที่ดีขึ้น, code signing, dependency scanning, runtime ที่ทำงานใน sandbox — ทั้งหมดนี้ดีทั้งนั้น แต่ไม่มีอันไหนเพียงพอ พื้นที่โจมตีกว้างเกินไป ช่องทางมีมากเกินไป ทั้ง package managers, browser extensions, IDE plugins, OAuth apps, เครื่องมือ build ที่ถูกโจมตี คุณปิดทุกจุดเข้าไม่ได้หรอกครับ

คำถามที่ถูกต้องคือ: เมื่อมัลแวร์เข้ามารันบนเครื่องของนักพัฒนาได้ในที่สุด ซึ่งหลีกเลี่ยงไม่ได้ มันจะเจออะไร

ถ้าคำตอบคือ "credentials แบบ plaintext หลายร้อยรายการในตำแหน่ง filesystem ที่เดาได้" ต่อให้เสริม supply chain ให้แข็งแค่ไหนก็ไม่มีความหมาย คุณกำลังตั้งรับในสนามที่ประตูเปิดโล่งอยู่ข้างหลัง

ไม่ควรมีอะไรให้เก็บเกี่ยว

วิธีแก้ไม่ใช่การตรวจจับมัลแวร์ที่ดีขึ้น ไม่ใช่การรัน npm install ใน sandbox และไม่ใช่การตอบสนอง incident ให้เร็วขึ้น

วิธีแก้คือ: ความลับไม่ควรอยู่ในรูปไฟล์บนดิสก์

SSH keys ที่ derive จากฮาร์ดแวร์ ณ ขณะยืนยันตัวตน — ไม่ใช่เก็บไว้ใน ~/.ssh/ Cloud credentials ที่ออกให้แบบ per-session จาก identity ที่ผูกกับฮาร์ดแวร์ — ไม่ใช่เขียนลง ~/.aws/ API tokens ที่จำกัดขอบเขต ชั่วคราว และต้องผ่านฮาร์ดแวร์ — ไม่ใช่วางทิ้งไว้ในไฟล์ .env

เมื่อ credential มีอยู่แค่ใน hardware security module และในหน่วยความจำชั่วคราวของ process ระหว่างใช้งาน มัลแวร์ก็ไม่มีอะไรให้อ่าน ไม่มีไฟล์ให้ขโมยออกไป ไม่มี dotfile ให้กวาด Process รันขึ้นมา เจอความว่างเปล่า แล้วก็ผ่านไป

นี่ไม่ใช่เรื่องทฤษฎี Hardware-bound credentials มีอยู่จริงแล้ววันนี้ WebAuthn PRF สามารถ derive cryptographic keys จากการแตะ authenticator ทางกายภาพ — คีย์ที่ไม่เคยแตะ filesystem เทคโนโลยีพร้อมแล้ว แค่อุตสาหกรรมยังไม่ได้นำมาใช้เป็นค่าตั้งต้น

ควรทำอะไรตอนนี้

ถ้าคุณได้รับผลกระทบจากกรณี Bitwarden CLI ถูกโจมตี:

  • เปลี่ยน credential ทุกตัวบนเครื่อง — SSH keys, cloud tokens, npm tokens, API keys และทุกอย่างใน dotfiles กับ env vars
  • ตรวจว่ามี npm packages ที่คุณดูแลอยู่ถูกเผยแพร่ซ้ำหรือไม่
  • ตรวจ GitHub activity และ CI/CD workflows ว่ามีการแก้ไขที่ไม่ได้รับอนุญาตหรือไม่

ถ้าคุณไม่ได้รับผลกระทบ สิ่งที่ต้องทำก็เหมือนกัน ดูที่เครื่องของคุณ นับดูว่ามีความลับแบบ plaintext อยู่เท่าไร แล้วถามตัวเองว่าจะเกิดอะไรขึ้น เมื่อ — ไม่ใช่ถ้า — มีอะไรที่เป็นอันตรายรันขึ้นมาด้วยสิทธิ์ user ของคุณ

คำตอบควรเป็น: ไม่มีอะไร ไม่ควรมีอะไรให้เก็บเกี่ยว