สรุปสั้น
เวิร์มที่แพร่กระจายตัวเองกำลังกระจายอย่างเงียบ ๆ ทั่ว npm registry ด้วยวิธีที่ทีมความปลอดภัยส่วนใหญ่ไม่ได้เฝ้าระวัง แทนที่จะซ่อนในสคริปต์ของ package.json ผู้โจมตีกลับใช้ไฟล์ตั้งค่าเล็ก ๆ ชื่อ binding.gyp เป็นอาวุธในการกระตุ้นโค้ดอันตรายทันทีที่นักพัฒนารัน npm install โดยแคมเปญนี้เจาะหลายสิบแพ็กเกจข้ามหลายบัญชี maintainer ในคลื่นต่อเนื่องที่กินเวลาไม่ถึงสองชั่วโมง ทำให้เป็นการโจมตี supply chain ที่เร็วและมีประสิทธิภาพสูง
การโจมตีเจาะ 57 แพ็กเกจ npm ข้ามกว่า 286 เวอร์ชันอันตรายเมื่อวันที่ 3 มิถุนายน 2569 โดยเป้าหมายที่ใหญ่ที่สุดคือ @vapi-ai/server-sdk ซึ่งเป็น Vapi.ai voice AI server SDK อย่างเป็นทางการที่มียอดดาวน์โหลดกว่า 408,000 ครั้งต่อเดือน ถูกโจมตีก่อนเมื่อเวลา 23:30 UTC และภายในหนึ่งชั่วโมง แพ็กเกจอีกกว่า 50 รายการของ maintainer ชื่อ jagreehal ก็ถูกฝังพิษ รวมถึง ai-sdk-ollama ที่มีกว่า 120,000 ดาวน์โหลดต่อเดือน
นักวิจัยจากบริษัท StepSecurity ระบุและวิเคราะห์ห่วงโซ่การโจมตีทั้งหมด ตั้งชื่อเทคนิคนี้ว่า “Phantom Gyp” โดยอธิบายว่าผู้โจมตีใช้ไฟล์ binding.gyp ขนาด 157 ไบต์กระตุ้นการรันโค้ดระหว่างการติดตั้ง เลี่ยงการตรวจ lifecycle แบบ preinstall และ postinstall ที่ scanner ส่วนใหญ่สร้างมาเพื่อจับ payload นี้เป็น Miasma สายพันธุ์ใหม่ ซึ่งเป็นมัลแวร์ supply chain แบบแพร่ตัวเองที่เคยเจาะ 32 แพ็กเกจใน namespace @redhat-cloud-services เมื่อสองวันก่อนหน้า
รายละเอียดข่าว
เว็บไซต์ Cyber Security News รายงานเมื่อวันที่ 4 มิถุนายน 2569 ว่าบริษัท StepSecurity พบเวิร์ม Phantom Gyp ที่ใช้ไฟล์ binding.gyp เจาะ 57 แพ็กเกจ npm ข้ามหลายบัญชี maintainer ในเวลาไม่ถึงสองชั่วโมง
ผู้โจมตีทิ้งข้อความเย้ยใน 195 คำอธิบาย repository บน GitHub เป็นสตริงที่กลับด้านซึ่งถอดได้ว่า “Shai-Hulud: Here We Go Again” อ้างอิงโดยตรงถึงการวิเคราะห์ Red Hat ก่อนหน้าของ StepSecurity ชี้ว่าการโจมตีนี้ไม่ใช่เรื่องสุ่ม แต่มีการคำนวณและต่อเนื่อง โดยวิธี binding.gyp ทำงานได้เพราะ npm จะรัน node-gyp rebuild อัตโนมัติเมื่อพบไฟล์นี้ เพราะถือว่าเป็นสัญญาณว่าแพ็กเกจมีโค้ด C/C++ native
ผู้โจมตีฝังคำสั่ง shell โดยใช้ syntax command substitution ของ gyp เอง เปิด payload อันตรายอย่างเงียบ ๆ พร้อมคืนชื่อไฟล์ซอร์สปลอมเพื่อให้ build ไม่แสดง error เครื่องมือที่สแกนเฉพาะ install script ใน package.json จึงไม่เห็นอะไรน่าสงสัยเลย โดย root index.js อันตรายมีขนาด 4.5 MB ขณะที่ entry point ของแพ็กเกจถูกต้องมีเพียง 27 KB ซึ่งเป็นช่องว่างขนาดที่ควรทำให้สงสัยทันที payload ซ่อนภายใต้ obfuscation 4 ชั้น รวมถึง ROT cipher, AES-128-GCM และเทคนิค runtime-switching ที่ดาวน์โหลด Bun JavaScript runtime ในไม่ถึงหนึ่งวินาทีเพื่อรันขั้นสุดท้ายนอก Node.js หลบเครื่องมือที่ตรวจเฉพาะกิจกรรม process ของ Node.js
เมื่อทำงาน มัลแวร์เป็น credential harvester ที่สร้างมาเพื่อ CI/CD โดยเฉพาะ มุ่งเป้า AWS key, GCP credential, Azure token, HashiCorp Vault token, GitHub Actions secret และ 1Password vault มันขูด GitHub Actions runner memory โดยตรงเพื่อดึง masked secret ออกมาในรูปไม่ปกปิด (เทคนิคเดียวกับที่พบใน TanStack เมื่อพฤษภาคม 2569) credential ที่ขโมยถูกเข้ารหัสและอัปโหลดไปยัง repository ที่สร้างด้วยโปรแกรมภายใต้บัญชี GitHub ของผู้โจมตีชื่อ liuende501
วิธีการโจมตี
เวิร์มไม่หยุดแค่ขโมย credential แต่ใช้ npm token ที่ขโมยมาแจกแจงทุกแพ็กเกจที่ maintainer ที่ถูกเจาะเป็นเจ้าของ ฉีด payload binding.gyp เข้าแต่ละตัว และเผยแพร่ใหม่พร้อม SLSA provenance ปลอมและการเซ็น Sigstore ทำให้แพ็กเกจที่ติดมัลแวร์ซ้ำดูถูกต้องสมบูรณ์แม้กับเครื่องมือที่ออกแบบมาตรวจสอบความสมบูรณ์ของ supply chain
จุดที่น่ากังวลเป็นพิเศษคือมัลแวร์ยังฝังไฟล์ตั้งค่า backdoor เข้าไปในเครื่องมือ AI coding อย่าง Claude Code, Cursor และ Gemini เพื่อให้ทุกคำแนะนำที่ AI ช่วยภายในโปรเจกต์ที่ติดพิษถูกผู้โจมตีแทรกแซงอย่างเงียบ ๆ ได้ โดยไฟล์ที่ฝังได้แก่ .claude/setup.mjs, .cursor/rules/setup.mdc และ .vscode/setup.mjs
StepSecurity แนะนำให้ทีมเร่งตรวจสอบ repository และ CI pipeline หาแพ็กเกจที่ได้รับผลกระทบ ถือว่า credential ทั้งหมดจากสภาพแวดล้อมที่ถูกเจาะถูกขโมยแล้วและ rotate ทันที พร้อมมองหาไฟล์ AI assistant ที่ถูกฉีด และบล็อกการเชื่อมต่อออกไปยัง github.com/liuende501 และ endpoint ดาวน์โหลด Bun เป็นมาตรการ containment เร่งด่วน
ผลกระทบต่อไทย
นักพัฒนาและองค์กรไทยที่ใช้ npm ในงานพัฒนาและมี CI/CD pipeline มีความเสี่ยงโดยตรงต่อ Phantom Gyp โดยเฉพาะการที่เทคนิค binding.gyp เลี่ยง scanner ที่ตรวจเฉพาะ package.json ทำให้องค์กรไทยที่พึ่งเครื่องมือสแกน supply chain ทั่วไปอาจตรวจไม่เจอ
ความอันตรายคือเวิร์มมุ่งเป้า credential คลาวด์ใน CI/CD (AWS, GCP, Azure, Vault, GitHub Actions) ซึ่งหากรั่วจะเปิดทางเข้าถึงโครงสร้างพื้นฐานทั้งหมดขององค์กรไทย และการแพร่ตัวเองด้วย token ที่ขโมยมายังทำให้ลามไปแพ็กเกจที่นักพัฒนาไทยดูแลเป็นลูกโซ่
การฝัง backdoor เข้าเครื่องมือ AI coding อย่าง Claude Code และ Cursor เป็นภัยรูปแบบใหม่ที่นักพัฒนาไทยจำนวนมากซึ่งหันมาใช้เครื่องมือเหล่านี้ยังไม่ตระหนัก ทำให้คำแนะนำของ AI อาจถูกแทรกแซงโดยไม่รู้ตัว
คำแนะนำ
- ตรวจ repository และ CI pipeline ทันที — หาแพ็กเกจที่ได้รับผลกระทบ (เช่น @vapi-ai/server-sdk, ai-sdk-ollama)
- Rotate credential ทั้งหมด — ถือว่า credential จากสภาพแวดล้อมที่ถูกเจาะถูกขโมยแล้ว ทั้ง AWS, GCP, Azure, Vault, GitHub Actions
- ตรวจหาไฟล์ binding.gyp และ index.js ผิดปกติ — โดยเฉพาะ index.js ขนาดใหญ่ผิดปกติ (4.5 MB) ที่ root
- ลบไฟล์ backdoor ของ AI assistant — ตรวจ .claude/setup.mjs, .cursor/rules/setup.mdc, .gemini/settings.json, .vscode/setup.mjs
- บล็อก github.com/liuende501 และ endpoint Bun — เป็นมาตรการ containment
- เปิด 2FA และใช้ scanner ที่ตรวจ binding.gyp — ไม่พึ่งการสแกนเฉพาะ package.json
Indicators of Compromise (IoCs)
| ประเภท | ตัวบ่งชี้ | คำอธิบาย |
|---|---|---|
| GitHub Account | github.com/liuende501 | บัญชี exfiltration ของผู้โจมตี (236 repo ที่สร้างอัตโนมัติ) |
| URL | github.com/oven-sh/bun/…/bun-linux-x64-baseline.zip | URL ดาวน์โหลด Bun runtime ที่ใช้ระหว่างรัน payload |
| Malicious File | binding.gyp (157 ไบต์) | install hook ที่มี Phantom Gyp command substitution |
| Malicious File | index.js (root, 4.5 MB+) | payload มัลแวร์ obfuscate ที่ root แพ็กเกจ |
| Malicious File | .claude/setup.mjs / .cursor/rules/setup.mdc / .gemini/settings.json / .vscode/setup.mjs | ไฟล์ backdoor ฝังในเครื่องมือ AI coding |
| API Endpoint | 169.254.169.254/latest/api/token (AWS) / /metadata/identity (Azure) | endpoint cloud metadata ที่มุ่งเป้าขโมย credential |
| Repo Description | “Miasma – The Spreading Blight” / สตริงกลับด้าน Shai-Hulud | ตัวระบุตัวเองใน repo exfiltration |
หมายเหตุ: ตัวบ่งชี้ถูก defang โดยเจตนา ให้ re-fang เฉพาะในแพลตฟอร์ม threat intelligence ที่ควบคุมได้ เช่น MISP, VirusTotal หรือ SIEM
