ภาพประกอบเชิงนามธรรมที่สร้างขึ้นบนพื้นสีน้ำเงินเข้ม: มีโซ่ของบล็อกโปร่งแสงที่เชื่อมต่อกันเรียงจากซ้ายไปขวา แต่ละบล็อกประทับตราสีฟ้าซайанเรืองแสงขนาดเล็กไว้ ใกล้กับตรงกลางของโซ่ บล็อกหนึ่งถูกสลับเปลี่ยนเป็นบล็อกสีเข้มที่ประทับตราสีฟ้าซайанเหมือนกัน และโซ่ยังคงดำเนินต่อไปโดยไม่ขาดตอน เส้นใยสีอำพันบางๆ แตกแขนงลงมาจากบล็อกสีเข้มนั้นไปยังแถวเล็กๆ ของหน้าต่างเทอร์มินัลสีเข้มที่ด้านล่างของกรอบ ไม่มีข้อความ ตัวเลข ผู้คน เครื่องหมายการค้า หรือโลโก้องค์กรใดๆ ปรากฏอยู่ โลโก้ OrcaRouter ถูกคอมโพสิตไว้ที่มุมขวาล่าง
AI Safety Incidents

ChainDrop: แหล่งที่มาที่ถูกต้องในแพ็กเกจ npm กว่า 400 แพ็กเกจ และ hook ของ Claude Code ที่ไม่ต้องติดตั้งผ่าน npm

ผู้เขียน

Elias Hawthorne

วันที่เผยแพร่

โมเดลล่าสุด · 20ดูโมเดลทั้งหมด →
เบนช์มาร์ก: Artificial Analysis · อัปเดตทุกวัน
กลับไปยังโพสต์ทั้งหมด

เมื่อวันที่ 4 สิงหาคม 2026ผู้โจมตีได้ยึดครองบัญชี GitHub ที่อยู่เบื้องหลัง keyv ซึ่งเป็นไลบรารีแคชที่ Elastic Security Labs ระบุว่าถูกดาวน์โหลดมากกว่า 600 ล้านครั้งในเดือนก่อนหน้า Wiz Research และ Orca Security ต่างบันทึกว่าไฟล์อันตรายถูกพุชตรงไปยังสาขาหลักของ keyv และเวิร์กโฟลว์ GitHub Actions ของโปรเจกต์เองก็สร้างและเผยแพร่รีลีสที่ถูกวางยาพิษนั้น — ดังนั้นมันจึงไปถึง npm พร้อมกับ provenance ที่ถูกต้อง ซึ่งเป็นเครื่องมือ attestation ในห่วงโซ่อุปทานที่ใช้ตัดสินว่าแพ็กเกจหนึ่งน่าเชื่อถือ จากนั้นหนอนที่แพร่กระจายตัวเองได้ซึ่งนักวิจัยเรียกว่า ChainDrop ก็ใช้โทเคน npm ที่ถูกขโมยไปทำกลอุบายเดิมซ้ำกับแพ็กเกจของนักพัฒนารายอื่น ๆ: Elastic นับได้มากกว่า 400 แพ็กเกจที่แตกต่างกันภายในวันที่ 6 สิงหาคม Microsoft Threat Intelligence บรรยายถึงแคมเปญเดียวกันเมื่อวันที่ 4 สิงหาคม และหน่วยงานความมั่นคงไซเบอร์ของสิงคโปร์นับได้กว่า 1,300 เวอร์ชันแพ็กเกจที่ถูกบุกรุก ซึ่งมีจำนวนดาวน์โหลดรวมกัน 2 พันล้านครั้งต่อเดือน ทั้ง Elastic และ Microsoft ต่างอธิบายถึงฮุกที่ถูกเรียกใช้ซ้ำเมื่อมีการเปิดรีโพซิทอรีใน Claude Code หรือ Visual Studio Code รายการแหล่งที่มาฉบับเต็ม ระดับความรุนแรง และการประเมินความเชื่อมั่นของบันทึกนี้ อยู่ใน คลังเหตุการณ์ AI พร้อมกับรายการอื่น ๆ เกี่ยวกับห่วงโซ่อุปทานของ npm และเครื่องมือสำหรับนักพัฒนาที่ถูกบันทึกไว้ในบริเวณใกล้เคียง

วิธีที่ไปป์ไลน์การเผยแพร่ที่ชอบด้วยกฎหมายลงนามรับรองการถูกบุกรุกของตัวเอง

Wiz Research เรียบเรียงช่วงนาทีแรกของเหตุการณ์ใหม่: ตั้งแต่09:00 UTC ของวันที่ 4 สิงหาคม ผู้โจมตีใช้ตัวตนที่ถูกบุกรุกเพื่อนำเพย์โหลดที่ฝังตัวถาวรใน IDE เข้าสู่รีโพซิทอรี keyv จากนั้นไม่นานก็เผยแพร่ keyv เวอร์ชันใหม่ที่มีเพย์โหลดดังกล่าว Wiz ระบุว่าฝ่ายที่ถูกบุกรุกเป็นบัญชีผู้ดูแล GitHub และกล่าวว่ามีแพ็กเกจหลายรายการในระบบนิเวศ keyv และ cacheable ตามมา

บทวิเคราะห์ตอบสนองเร็วของ Orca Security มีรายละเอียดเฉพาะเจาะจงกว่าเกี่ยวกับเส้นทางการลงนาม โดยระบุว่าผู้โจมตีได้ผลักไฟล์อันตรายสองไฟล์ — setup.mjs และ Math_Symbol.js — ไปยังสาขาหลักโดยตรงและออกเวอร์ชันใหม่ทันที เนื่องจากเวอร์ชันเหล่านั้นถูกสร้างผ่านเวิร์กโฟลว์ GitHub Actions ของบัญชีที่ถูกบุกรุก เวอร์ชันที่ถูกวางยาพิษจึงถูกเผยแพร่ไปยัง npm พร้อมลายเซ็นรับรองแหล่งที่มาที่ถูกต้อง ซึ่งข้ามการตรวจสอบความสมบูรณ์มาตรฐานของห่วงโซ่อุปทาน Zscaler ThreatLabz ทีมวิจัยอิสระที่ไม่ได้อยู่ในบรรดาแหล่งอ้างอิงของบันทึกนี้ ได้ข้อสรุปเดียวกันและให้ระดับกับเรื่องนี้ว่า keyv 6.0.0 ที่เป็นอันตรายมีการรับรองแหล่งที่มาระดับ SLSA Build Level 3 ที่ถูกต้อง เนื่องจากผู้โจมตีควบคุมรีโพซิทอรีต้นทาง BleepingComputer ซึ่งรายงานแคมเปญนี้ในวันนั้น บันทึกกลไกเดียวกัน — ไฟล์อันตรายถูกผลักไปยังสาขาหลักของโปรเจกต์โดยตรง มีการสร้างเวอร์ชันใหม่ และมีการรับรองแหล่งที่มาที่ถูกต้องเนื่องจากการบิลด์ทำงานผ่านเวิร์กโฟลว์ GitHub Actions ที่ถูกต้อง

การวิเคราะห์ของ Microsoft เพิ่มรายละเอียดหนึ่งที่ดูเหมือนข้อขัดแย้งแต่ไม่ใช่ข้อขัดแย้ง ในขั้นตอนการแพร่กระจายของหนอน Microsoft Threat Intelligence พบว่าเวอร์ชันที่เป็นอันตรายจำนวนมาก ไม่มีคอมมิตซอร์สโค้ด พูลรีเควสต์ แท็ก หรือรีลีสที่ชอบด้วยกฎหมายที่สอดคล้องกัน ซึ่งบ่งชี้ว่าผู้โจมตีแก้ไขและเผยแพร่ tarball ของแพ็กเกจโดยตรง แทนที่จะบุกรุกแต่ละรีโพซิทอรีซอร์สโค้ดสาธารณะ เมื่อนำมาอ่านร่วมกัน แหล่งข้อมูลเหล่านี้อธิบายกลไกการลงนามสองแบบภายในแคมเปญเดียว: รีลีส keyv รุ่นแรกผ่านไปป์ไลน์ CI จริงของผู้เสียหายและมีคำรับรองที่ยืนยันความถูกต้อง ในขณะที่รีลีสภายหลังของหนอนส่วนใหญ่ถูกประกอบและเผยแพร่ด้วยโทเคนรีจิสทรีที่ถูกขโมยมา ทำให้ไม่เหลือร่องรอยซอร์สโค้ดเลย ข้อสังเกตของ Microsoft เองคือรูปแบบ tarball-direct อธิบายว่าทำไมรีลีสที่เป็นอันตรายจึงมักปรากฏเป็นการเพิ่มเวอร์ชันแพตช์ตามปกติ โดยไม่มีคอมมิตซอร์สโค้ดหรือพูลรีเควสต์ที่สอดคล้องกัน

บทเรียนที่ชวนอึดอัดนี้ถูกกล่าวไว้อย่างตรงไปตรงมาโดย Zscaler: provenance ตรวจสอบความถูกต้องของกระบวนการ build ไม่ใช่ตัวตนของบัญชีหรือความสมบูรณ์ของระบบ CI ที่รันกระบวนการนั้น นอกจากนี้ยังยอมรับถึงช่องว่างที่สำคัญสำหรับผู้ใดก็ตามที่กำลังประกอบเหตุการณ์ขึ้นใหม่ — กลไกการยึดบัญชีที่แน่ชัดซึ่งผู้โจมตีใช้ยังไม่เป็นที่ทราบในเวลาที่ทำการวิเคราะห์

สิ่งที่ทำงานเมื่อ npm install: preinstall, Bun 1.3.13 และคอลเลกเตอร์ 300 แพตเทิร์น

Elastic Security Labs อธิบายว่าตัวกระตุ้นคือ preinstall hook ใน package.json ซึ่งใช้ประโยชน์จากฟีเจอร์ที่ถูกต้องของ npm ที่รันคำสั่งใดก็ได้ก่อนที่แพ็กเกจจะติดตั้งเสร็จ โดยไม่ต้องให้เหยื่อโต้ตอบเพิ่มเติม hook นี้จะเรียก setup.mjs ซึ่งจะตรวจสอบว่ามี Bun JavaScript runtime อยู่ในเครื่องแล้วหรือไม่ หากไม่มี ตัว dropper จะตรวจหาแพลตฟอร์มและสถาปัตยกรรมของเครื่อง ดาวน์โหลด Bun v1.3.13 จากหน้าปล่อยตัวอย่างเป็นทางการ แยกไฟล์ออกมา ใช้มันเพื่อรันเพย์โหลด แล้วลบไดเรกทอรีชั่วคราวเพื่ออำพรางร่องรอย Wiz ระบุ user agent ได้เองว่า Bun/1.3.13 เป็นตัวที่ส่งคำขออันเป็นอันตราย ตัว dropper ทำงานข้ามแพลตฟอร์ม โดยมุ่งเป้าไปที่ Linux, macOS และ Windows

เพย์โหลดถูกทำให้ยากต่อการวิเคราะห์อย่างมาก และแหล่งข้อมูลต่าง ๆ มีความเห็นแตกต่างกันเล็กน้อยเกี่ยวกับขนาดของมัน โดย Elastic ระบุว่า 711 กิโลไบต์ ส่วน Orca Security ระบุว่า 728 KB โดยมันใช้เทคนิค control-flow flattening และรูปแบบการเข้ารหัสสตริงแบบ Base91 พร้อมทั้งมีสตริงที่ใช้ธีม Dune ได้แก่ laza, kanly, ghola, mentat, lasgun, sietch, fedaykin, tleilaxu, sandworm, sardaukar, ornithopter, navigator ซึ่ง Elastic ตั้งข้อสังเกตว่ามีความคล้ายคลึงกับแคมเปญ Shai-Hulud ก่อนหน้านี้

คำอธิบายเชิงพฤติกรรมของ Microsoft เพิ่มรายละเอียดสองประการที่ควรรู้ เพย์โหลดจะตรวจสอบสภาพแวดล้อมของตนก่อนและ จะหยุดทำงานบนระบบภาษารัสเซีย หลีกเลี่ยงอินสแตนซ์ที่ซ้ำกัน และเริ่มสำเนาพื้นหลังแบบแยกตัวบนเวิร์กสเตชันของนักพัฒนา; ภายใน CI มันจะคงผูกอยู่กับงานที่กำลังทำงานอยู่เพื่อให้สามารถเข้าถึงความลับของเวิร์กโฟลว์ ข้อมูลรับรองของ runner และสิทธิ์ในการเผยแพร่ผ่าน OpenID Connect

ตัวรวบรวมคือจุดที่เหตุการณ์นี้กลายเป็นเรื่องราวเกี่ยวกับเครื่องมือ AI มากกว่าเรื่องราวข้อมูลรับรองทั่วไป Elastic กล่าวว่ามันสแกน รูปแบบที่ไม่ซ้ำกันมากกว่า 300 รูปแบบจากแหล่งจัดเก็บข้อมูลรับรองบนเครื่องของนักพัฒนา และการกำหนดเป้าหมายที่สำคัญก็มุ่งไปที่ ข้อมูลรับรองของเครื่องมือ AI: Anthropic, Claude, Codex, Cursor, OpenAI และ Geminiนอกจากนี้ยังเก็บข้อมูลรับรองของ AWS, GCP, Azure และ Alibaba Cloud, personal access token ของ GitHub, JWT และ session token, token ของ HashiCorp Vault, private key ของ SSH, service account token ของ Kubernetes และ token ของ npm ด้วย Wiz รายงานว่ารายการเป้าหมายได้รับการขยายขึ้นเกือบ 70% เมื่อเทียบกับโค้ด Mini Shai-Hulud รุ่นก่อนหน้าซึ่งเป็นฐานในการสร้างมันขึ้นมา โดยมีการเพิ่มรายการใหม่ รวมถึงแหล่งจัดเก็บข้อมูลรับรองของเอเจนต์ AI สำหรับ Claude, OpenAI, Codex, Cursor และ Gemini, คีย์สโตร์สกุลเงินคริปโตสำหรับ Foundry, Solana และ Monero, master.key ของ Jenkins, ข้อมูลลับของ Argo CD และ Harbor, การกำหนดค่า CLI ของ Alibaba และ Tencent และ /etc/shadow.

ทั้ง Microsoft และ Elastic อธิบายการออกแบบการขโมยข้อมูลออกแบบเดียวกัน ผลลัพธ์ถูกทำให้อยู่ในรูปแบบ JSON บีบอัดด้วย gzip และเข้ารหัสด้วยคีย์ AES-256-GCM ที่สร้างขึ้นแบบสุ่ม และคีย์นั้นถูกห่อด้วยคีย์สาธารณะ RSA ของผู้โจมตี เพย์โหลดไม่ได้ฝังโดเมน command-and-control ไว้ตายตัว: Elastic กล่าวว่ามันสอบถามสัญญาอัจฉริยะบน Ethereum ที่0xE1f2395ee43e45A1556EC6438a88c31B83493103เพื่อดึงปลายทางปัจจุบันในขณะรัน ดังนั้นโครงสร้างพื้นฐานจึงสามารถหมุนเวียนได้โดยไม่ต้องแตะมัลแวร์ หากล้มเหลว มันจะมองหาเครื่องหมายที่ลงลายเซ็นทางคริปโต — thebeautifulmarchoftime — ในประวัติคอมมิตของ GitHub และตรวจสอบโดเมนเทียบกับคีย์ RSA ที่ฝังไว้ หากทั้งสองวิธีล้มเหลว มันจะขโมยข้อมูลผ่านรีพอซิทอรี GitHub สาธารณะที่บัญชีของผู้เสียหายสร้างขึ้นเอง ซึ่งมีคำอธิบายว่า "Shai-Hulud: Here We Go Again" Microsoft ระบุว่ามีเส้นทางสำรองหนึ่งเส้นทางที่เข้ารหัสโทเคน GitHub ที่ถูกขโมยด้วย Base64 สองชั้นแทนการเข้ารหัส

การแพร่กระจายถูกกำหนดโดยคุณภาพของโทเค็น Elastic รายงานว่าหนอนจะทำงานก็ต่อเมื่อการกวาดตรวจข้อมูลรับรองพบ npm token ที่มีสิทธิ์ในการเขียนแพ็กเกจและความสามารถในการเผยแพร่โดยไม่ต้องใช้การยืนยันตัวตนสองขั้นตอน; จากนั้นจึงดาวน์โหลด tarball ล่าสุดของทุกแพ็กเกจที่เขียนได้ ฉีดตัวเองเข้าไป เพิ่มเวอร์ชันแพตช์ และเผยแพร่ซ้ำ BleepingComputer เสริมว่าโทเค็นทุกตัวจะถูกตรวจสอบแบบเรียลไทม์กับปลายทาง whoami ของรีจิสทรีก่อนที่จะถูกขโมย กิจวัตรนี้เองที่เปลี่ยนตัวตนหนึ่งที่ถูกบุกรุกให้กลายเป็นหลายร้อยรีลีส และเป็นเหตุให้เวอร์ชันอันตรายดูเหมือนการเพิ่มเวอร์ชันแพตช์ธรรมดา

An HTML card titled 'The first four hours, 4 August 2026', subtitled 'What the sources put where in the infection order, and the three counts the campaign is quoted with'. A four-step numbered column headed 'Infection order' reads: 1, 09:00 UTC: files pushed to main — attacker adds IDE persistence payloads to the keyv repository, then publishes a new keyv version, per Wiz Research; 2, the victim's CI builds the payload — keyv 6.0.0 reaches npm through the compromised account's own GitHub Actions workflow carrying valid provenance and a SLSA Build Level 3 attestation, per Orca Security and Zscaler ThreatLabz; 3, the worm republishes with stolen tokens — stolen npm tokens with write access and 2FA bypass bump patch versions, at peak roughly one infected package per second, per Elastic Security Labs and Zscaler ThreatLabz; 4, IDE hooks travel with the repos — a stolen GitHub App token commits .claude/settings.json and .vscode/tasks.json to up to 50 branches per accessible repository, per Elastic Security Labs. A right-hand panel headed 'Three counts, three units' shows: 400+, unique npm packages compromised by 6 August, per Elastic and Microsoft Threat Intelligence; 868, worm-reached packages across 1,381 versions, per Aikido via BleepingComputer and Orca Security; 1,300+, package versions with 2 billion monthly downloads, per CSA Singapore advisory AD-2026-009, 6 August. A footer reads: each figure is a snapshot taken while the campaign was still running; none of the cited sources claims a final total.

เส้นทางการติดเชื้อที่ไม่ต้องใช้ npm install

ข้อค้นพบที่ทำให้แคมเปญนี้แตกต่างจากหนอน npm ก่อนหน้านี้ คือการติดตั้งไม่ใช่ช่องทางเดียวในการบุกรุกอีกต่อไป Elastic อธิบายเส้นทางการดำเนินการเพิ่มเติมอีกสองเส้นทางที่มุ่งเป้าไปยังผู้ใช้เครื่องมือเขียนโค้ด AI SessionStart ที่เป็นฮุกใน .claude/settings.json จะรัน node .claude/setup.mjs เมื่อเซสชัน Claude ใหม่เริ่มต้น สำหรับ VS Code งาน folderOpen ใน .vscode/tasks.json จะรัน node .vscode/setup.mjs เมื่อเปิดรีโพซิทอรีที่ติดเชื้อ การวิเคราะห์ของ Microsoft ระบุอาร์ติแฟกต์สี่รายการเดียวกัน — .claude/settings.json, .claude/setup.mjs, .vscode/tasks.json และ .vscode/setup.mjs — และอธิบายว่าเป็นเส้นทางติดเชื้อทุติยภูมิที่สามารถเริ่มเพย์โหลดใหม่ได้หลังจากกระบวนการติดตั้ง npm ดั้งเดิมเสร็จสิ้นแล้ว

เงื่อนไขที่ทำให้สถานการณ์นี้ทวีความรุนแรงขึ้นอย่างมากนั้นอยู่ในข้อมูลรับรองที่ถูกขโมยมา เมื่อมี GitHub App tokenรวมอยู่ด้วย Elastic รายงานว่าเวิร์มจะคอมมิตฮุกอันตรายเข้าไปใน สาขาต่าง ๆ ได้ถึง 50 สาขาต่อหนึ่งรีโปที่เข้าถึงได้ โดยฉีด .claude/settings.json และ .vscode/tasks.json ลงในแต่ละสาขา ข้อสรุปของ Elastic คือ นักพัฒนาที่โคลนสาขาใดสาขาหนึ่งในนั้นแล้วเปิดขึ้นมาสามารถติดเชื้อได้เพียงแค่เปิดโปรเจกต์ — ไม่มีการติดตั้งแพ็กเกจ และด้วยเหตุนี้จึงไม่มีกลไกป้องกันผ่านสคริปต์ติดตั้งอยู่ในเส้นทางนั้นเลย

การประเมินของ Zscaler ระบุว่า persistence hooks ยังคงอยู่รอดหลังการถอดแพ็กเกจ และจะถูกเรียกใช้อีกครั้งเพียงแค่เปิดโปรเจกต์ใน VS Code หรือ Claude Code ซึ่งหลีกเลี่ยง--ignore-scriptsมาตรการบรรเทาที่หลายทีมนำมาใช้หลังหนอน npm ก่อนหน้านี้ คำแนะนำจึงเป็นไปตามนั้นโดยตรง: ให้ถือว่าไฟล์กำหนดค่าของ IDE และเอเจนต์ AI — .claude/, .cursor/, .vscode/, .gemini/ — เป็นโค้ดที่เรียกใช้งานได้ และตรวจทานด้วยความเข้มงวดเช่นเดียวกับซอร์สโค้ด

มีลายนิ้วมือสำหรับครึ่งที่เป็นรีโพซิทอรีของการโจมตี Elastic รายงานว่าคอมมิตที่เกิดจากเวิร์มสามารถระบุได้จากชื่อผู้เขียน claude และข้อความคอมมิต chore: update config และ Wiz บันทึกสตริงข้อความเดียวกัน Elastic เสริมว่าข้อความคอมมิตยังพาโทเค็น GitHub ที่ถูกขโมยไปพร้อมกับสตริงข่มขู่ — IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients — ซึ่งตีความว่าเป็นความพยายามข่มขู่ให้นักพัฒนาไม่กล้าเพิกถอนโทเค็น Wiz บันทึกสตริงเดียวกันในคอมมิตเริ่มต้น โดยข้อความที่สั้นกว่าถูกสลับเข้ามาใช้ในคอมมิตที่แนะนำฮุกของ IDE

A generated abstract illustration on a deep navy field: a tall repository-shaped block stands at centre, its face divided into thin horizontal branch lines. A narrow beam of pale light from an editor-shaped pane at upper left falls across the block, and where the beam touches one branch line, a small bright hook symbol appears and a thin amber thread runs down into a dark pool at the base. The other branch lines remain untouched and faintly lit. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

จำนวนไม่ตรงกัน และนั่นไม่ใช่ข้อขัดแย้ง

ตัวเลขทุกตัวที่เผยแพร่เกี่ยวกับขอบเขตผลกระทบนั้นผูกอยู่กับหน่วยที่แตกต่างกัน และหน่วยเหล่านี้ไม่สามารถใช้แทนกันได้ Elastic Security Labs ซึ่งเขียนเมื่อวันที่ 6 สิงหาคม นับได้ว่าแพ็กเกจ npm ที่ไม่ซ้ำกันมากกว่า 400 แพ็กเกจถูกบุกรุก Microsoft Threat Intelligence ระบุว่ามีแพ็กเกจมากกว่า 400 แพ็กเกจจากผู้เผยแพร่หลายรายที่ไม่เกี่ยวข้องกัน Aikido ตามที่ BleepingComputer อ้างคำพูด ระบุว่าตัวเลขอยู่ที่อย่างน้อย 868 แพ็กเกจใน 1,381 เวอร์ชัน Orca Security รายงานว่าแพ็กเกจ keyv และ cacheable จำนวน 10 แพ็กเกจถูกวางยาพิษโดยตรง โดยมียอดดาวน์โหลดรายเดือนกว่า 619 ล้านครั้ง จากนั้นจึงมีแพ็กเกจเพิ่มเติมอีก 868 แพ็กเกจและ 1,381 เวอร์ชันที่หนอนคอมพิวเตอร์เข้าถึงได้ คิดเป็นยอดติดตั้งรายเดือนมากกว่า 2 พันล้านครั้ง คำแนะนำของ CSA สิงคโปร์ เลขที่ AD-2026-009 ลงวันที่ 6 สิงหาคม บันทึกว่ามีเวอร์ชันแพ็กเกจที่ถูกบุกรุกกว่า 1,300 เวอร์ชันซึ่งคิดเป็นยอดรวม2 พันล้านดาวน์โหลดต่อเดือน

เหล่านั้นคือฐานการนับที่แตกต่างกันสามแบบ — แพ็กเกจ เวอร์ชันแพ็กเกจ และปริมาณการดาวน์โหลดรายเดือน — ซึ่งเก็บมาจากช่วงเวลาที่แตกต่างกันสามช่วงของแคมเปญที่ยังดำเนินอยู่ คำอธิบายของ Zscaler เกี่ยวกับความเร็วนี้อธิบายว่าทำไมตัวเลขเหล่านี้จึงแตกต่างกัน: ระบุว่าเวิร์มแพร่กระจายตัวเองไปยังแพ็กเกจมากกว่า 400 แพ็กเกจภายในเวลาไม่ถึง 4 ชั่วโมง และในช่วงพีคได้เผยแพร่ประมาณ หนึ่งแพ็กเกจที่ติดเชื้อต่อวินาทีการถือว่าจำนวนที่นับได้ภายหลังเป็นการแก้ไขจำนวนก่อนหน้าจะเป็นสิ่งผิด แต่ละจำนวนเป็นสแนปช็อต ณ ช่วงเวลาหนึ่ง และไม่มีแหล่งที่อ้างอิงใดกล่าวอ้างถึงจำนวนรวมสุดท้าย

ตัวเลขการเปิดเผยของ Elastic ในระดับไลบรารีเป็นตัวเลขที่ถูกอ้างถึงบ่อยที่สุดและมีความกำกวมน้อยที่สุด โดยรายงานว่า keyv เพียงอย่างเดียวมีจำนวนดาวน์โหลดเกิน 600 ล้านครั้งในเดือนก่อน ขณะที่ flat-cache อยู่ที่เกือบ 580 ล้าน cacheable-request เกิน 137 ล้าน cacheable เกิน 30 ล้าน และ cache-manager เกิน 16 ล้าน ประกาศคำเตือนของ CSA ระบุเวอร์ชันที่ได้รับผลกระทบโดยเฉพาะ ซึ่งรวมถึง keyv 6.0.0, flat-cache 6.1.24, file-entry-cache 11.1.6, cacheable-request 13.0.20, cacheable 2.5.1, cache-manager 7.2.10, @cacheable/utils 2.5.1 และ ecto 5.0.1

กับดักการเพิกถอน

ผู้ตอบสนองเหตุการณ์ที่ติดตั้งเวอร์ชันที่ได้รับผลกระทบต้องเผชิญกับปัญหาที่สองต่อจากปัญหาแรก Elastic รายงานว่าในเส้นทางสำรองแบบมีเงื่อนไขของ GitHub เพย์โหลดพยายามติดตั้งคอมโพเนนต์ตรวจสอบโทเค็นซึ่งรักษาการเข้าถึงข้อมูลรับรองไว้ และมีตัวจัดการที่สร้างความเสียหายหากโทเค็นที่ถูกตรวจสอบถูกเพิกถอน Zscaler อธิบายกลไกนี้อย่างละเอียดในเชิงปฏิบัติการและเรียกมันว่ากับดักการเพิกถอนโทเค็น โดยหนอนจะติดตั้งโปรเซสเบื้องหลังที่เรียกดู GitHub API ทุก 60 วินาทีด้วยโทเค็นที่ถูกขโมยมา และหากโทเค็นนั้นส่งคืนข้อผิดพลาด 4xx ซึ่งหมายความว่าเหยื่อได้เพิกถอนโทเค็นแล้ว เพย์โหลดที่สร้างความเสียหายระดับทุติยภูมิจะถูกเรียกทำงาน ซึ่งอาจรวมถึงการรันโค้ดจากระยะไกลหรือการลบไดเรกทอรีโฮมของผู้ใช้ ขึ้นอยู่กับตัวแปร

Wiz เสริมว่า dead-man's switch นั้นถูกตั้งให้พร้อมทำงานแบบเลือกได้โดยอาศัยการตอบกลับจากเซิร์ฟเวอร์สั่งการและควบคุม: ผู้ปฏิบัติการสามารถส่งค่ากลับเพื่อระบุว่าจะติดตั้งคำสั่งใดให้พร้อม และสวิตช์ควรเฝ้าดูการเพิกถอนโทเค็นใด Wiz ยังตั้งข้อสังเกตว่าตัวตรวจสอบจะมองหาการตอบกลับที่ถูกต้องจากปลายทางของผู้ใช้ ดังนั้นโทเค็นชนิดใดก็ตามที่ถูกต้อง ณ ที่นั้นจึงใช้เป็นตัวกระตุ้นได้

ผลที่ตามมาในทางปฏิบัติได้รับการบันทึกโดย BleepingComputer และโดยคำแนะนำของ Aikido ที่อ้างถึง: เวิร์กสเตชันของนักพัฒนาหรือ CI/CD runner ที่ติดตั้งเวอร์ชันที่ได้รับผลกระทบควรถือว่าถูกบุกรุก แม้ว่าจะถอดแพ็กเกจออกในภายหลังแล้วก็ตาม เนื่องจากการทำงานในระยะที่สองอาจทำให้โทเค็นถูกเปิดเผยและบั่นทอนความสมบูรณ์ของบิลด์ คำแนะนำของ Microsoft มาถึงข้อสรุปเดียวกันจากฝั่งการบิลด์ โดยเตือนว่าองค์กรที่ติดตั้งแพ็กเกจที่ได้รับผลกระทบโดยเปิดใช้งานสคริปต์วงจรชีวิตควรถือว่าเวิร์กสเตชันหรือ build runner อาจถูกบุกรุก และควรสร้างระบบที่ได้รับผลกระทบและอาร์ติแฟกต์ปลายน้ำขึ้นใหม่จากแหล่งที่เชื่อถือได้

An HTML card titled 'Established, assessed, and not shown', subtitled 'The same five analyses, sorted by how strongly each claim is supported — not by how confidently it is written'. Three columns. ESTABLISHED lists: the keyv maintainer's GitHub account was compromised, files were pushed to main and a release was published on 4 August 2026; at least keyv 6.0.0 shipped through the victim's own CI with valid provenance and SLSA Build Level 3; a preinstall hook ran setup.mjs, which downloaded Bun v1.3.13 to execute an obfuscated payload; the collector scanned 300+ credential patterns including Anthropic, Claude, Codex, Cursor, OpenAI and Gemini; hooks in .claude/settings.json and .vscode/tasks.json run on session start and folder open; a GitHub App token extended the hooks to up to 50 branches per accessible repository; more than 400 unique packages were compromised within days; CSA Singapore published advisory AD-2026-009 on 6 August 2026. ASSESSED lists: attribution to the Mini Shai-Hulud family and a TeamPCP lineage; that the account takeover was the initial access route; that provenance must not be read as proof of safety, since it validates the pipeline and not the account; that IDE configuration files should be treated as executable code. NOT SHOWN lists: how the maintainer account was taken over, reported as unknown by Zscaler; any single final total, since the counts use packages, versions and downloads interchangeably; any confirmed reuse of a stolen AI-tooling credential against a provider account; who the operator is beyond vendor attribution; any remediation outcome, account recovery or enforcement action. A footer cites Elastic Security Labs, Microsoft Threat Intelligence, Wiz Research, Orca Security and CSA Singapore AD-2026-009.

สิ่งที่ได้รับการยืนยันแล้ว สิ่งที่ถูกประเมิน และสิ่งที่ไม่มีใครเคยแสดงให้เห็น

บันทึกหลักและการวิเคราะห์อิสระทั้งห้ารายการเห็นพ้องต้องกันในเรื่องกลไก และข้อกล่าวอ้างด้านกลไกถือเป็นส่วนที่หนักแน่นที่สุดของแฟ้มเอกสารนี้

• บัญชี GitHub ของผู้ดูแล keyv ถูกละเมิดความปลอดภัย และไฟล์อันตรายถูกผลักเข้าไปยัง main โดยตรงก่อนที่จะมีการเผยแพร่รีลีส เมื่อวันที่ 4 สิงหาคม 2026 — มีรายงานอย่างสอดคล้องกันโดย Wiz, Orca Security, BleepingComputer และ CSA Singapore

• อย่างน้อยที่สุด keyv 6.0.0 ก็เข้าสู่ npm ผ่านไปป์ไลน์ CI ของเหยื่อเอง โดยมี provenance ที่ถูกต้อง พร้อมกับที่ Zscaler ระบุว่าเป็นการรับรอง SLSA Build Level 3 นี่คือข้อกล่าวอ้างที่ทำให้เหตุการณ์นี้กลายเป็นเรื่องน่าสนใจ และได้รับการยืนยันจากสามองค์กรที่ไม่ได้เป็นผู้เขียนร่วมงานของกันและกัน

• {{1}}ฮุกก่อนติดตั้ง (preinstall hook) ได้รัน setup.mjs ซึ่งดาวน์โหลด Bun v1.3.13 และรันเพย์โหลดที่ถูกทำให้คลุมเครือ (obfuscated payload) ซึ่งสแกนรูปแบบข้อมูลรับรอง (credential patterns) มากกว่า 300 รูปแบบ รวมถึงข้อมูลรับรองของเครื่องมือเขียนโค้ดด้วย AI{{/1}} — Elastic และ Wiz เห็นตรงกันทั้งในเรื่องเวอร์ชันรันไทม์และรายการข้อมูลรับรองที่ AI มุ่งเป้า

• Hook ที่เขียนไว้ใน .claude/settings.json และ .vscode/tasks.json จะทำงานเมื่อเริ่มเซสชันและเมื่อเปิดโฟลเดอร์ และโทเค็นของ GitHub App ขยายขอบเขตดังกล่าวไปยังสาขาได้สูงสุด 50 สาขาต่อรีโปที่เข้าถึงได้ — เป็นสิ่งที่ Elastic ค้นพบ และเป็นพื้นฐานของคำกล่าวอ้างที่ว่านักพัฒนาอาจติดมัลแวร์ได้เพียงแค่เปิดรีโป

• มีแพ็กเกจที่ไม่ซ้ำกันมากกว่า 400 แพ็กเกจถูกบุกรุกภายในไม่กี่วัน และ CSA Singapore ซึ่งเป็นหน่วยงานกำกับดูแลระดับชาติ ได้เผยแพร่คำแนะนำ AD-2026-009 เมื่อวันที่ 6 สิงหาคม 2026 โดยระบุรายชื่อเวอร์ชันที่ได้รับผลกระทบและตัวชี้วัด

สิ่งที่แหล่งข้อมูลถือว่าเป็นการประเมินมากกว่าข้อเท็จจริงควรได้รับการติดป้ายกำกับ Wiz อธิบายว่าเพย์โหลดนี้เป็นรุ่นสืบทอดของตระกูลมัลแวร์ "Mini" Shai-Hulud ซึ่งสร้างขึ้นจากคลัง Shai-Hulud-Open-Source สาธารณะที่เผยแพร่โดย TeamPCP โดยมีการเปลี่ยนแปลงสำคัญบางประการ Orca Security โยงการโจมตีนี้ไปที่ TeamPCP ส่วน Zscaler เชื่อมโยง ChainDrop กับ TeamPCP และจัดให้อยู่ในสายการพัฒนาที่ต่อเนื่องตั้งแต่เดือนกันยายน 2025 นี่คือฉันทามติของผู้ให้บริการด้านความปลอดภัยในการระบุที่มา ไม่ใช่สิ่งที่เอกสารปฐมภูมิที่อ้างถึงพิสูจน์เกี่ยวกับบุคคลหรือกลุ่มที่มีชื่อระบุไว้

มีสามสิ่งที่ไม่มีแหล่งอ้างอิงใดยืนยัน และบทความนี้ไม่ได้เติมเต็มข้อมูลเหล่านั้น ประการแรก วิธีการที่บัญชีผู้ดูแลถูกยึดไป: Zscaler ระบุอย่างชัดเจนว่ากลไกที่แน่ชัดยังไม่เป็นที่ทราบ ณ เวลาของการวิเคราะห์ ประการที่สอง ยอดรวมสุดท้ายเพียงยอดเดียว: ตัวเลข 400, 868 และ 1,300 นับจำนวนแพ็กเกจ แพ็กเกจและเวอร์ชัน และเวอร์ชัน ณ ช่วงเวลาที่แตกต่างกัน และไม่มีแหล่งใดอ้างว่าแคมเปญได้สิ้นสุดลงแล้ว ประการที่สาม และสำคัญที่สุดสำหรับข้อกล่าวอ้างเฉพาะด้าน AI ในบันทึกนี้ ไม่มีแหล่งอ้างอิงใดรายงานกรณีที่ได้รับการยืนยันว่าข้อมูลรับรองที่ถูกขโมยของ Anthropic, Codex, Cursor, Gemini หรือ OpenAI ถูกนำกลับมาใช้ซ้ำกับบัญชีผู้ให้บริการ สิ่งที่ได้รับการบันทึกไว้คือเจตนาและความสามารถ — รายชื่อเป้าหมายที่ชัดเจน และตัวเก็บข้อมูลที่สร้างขึ้นเพื่อเข้าถึงเป้าหมายนั้น — ไม่ใช่การละเมิดระบบปลายทางของผู้ให้บริการ AI ที่ได้รับการพิสูจน์แล้ว

สิ่งที่เปลี่ยนแปลงไปหลังจากนั้น — และสิ่งที่ผู้ตอบสนองต้องทำ

มาตรการแก้ไขที่ชัดเจนที่สุดในบันทึกคือการเปลี่ยนแพลตฟอร์ม Elastic แนะนำให้อัปเกรดเป็น npm 12 หรือใหม่กว่า ซึ่งบล็อกฮุก preinstall โดยค่าเริ่มต้น; คำแนะนำของ Microsoft แนะนำแยกต่างหากให้ใช้ npm CLI v12 และฟีเจอร์ min-release-age ซึ่งหน่วงเวอร์ชันใหม่ไว้ให้นานพอที่ชุมชนจะตรวจจับการถูกบุกรุกได้ก่อนที่จะไปถึงขั้นตอน build

ยิ่งไปกว่านั้น ขั้นตอนการตอบสนองที่แหล่งข้อมูลเผยแพร่ยังทับซ้อนกันอย่างมาก

• Elastic: เพิกถอนโทเค็น GitHub ทั้งหมด รวมถึงโทเค็นเซสชันบนเครื่องที่ได้รับผลกระทบ; เพิกถอนและสร้างโทเค็น npm ขึ้นใหม่ โดยเฉพาะโทเค็นระบบอัตโนมัติที่มีสิทธิ์เขียนและสามารถข้ามการยืนยันตัวตนแบบสองขั้นตอนได้; ค้นหาในรีโพซิทอรีสำหรับคอมมิตที่ไม่ได้รับอนุญาตซึ่งมีข้อความ chore: update config from claude@users.noreply.github.com; หมุนเวียนซีเคร็ตของคลาวด์, Kubernetes, Vault, เครื่องมือ AI และ CI/CD; เปิดใช้งานการยืนยันตัวตนแบบสองขั้นตอนบนบัญชี npm

• Microsoft: ล้างแคช npm และ yarn บน endpoint และ build host ที่ได้รับผลกระทบ ปักหมุดเวอร์ชันที่ทราบว่าดี ตรวจสอบ lockfile และ artefact เพื่อค้นหาเวอร์ชันที่ถูกบุกรุก รวมถึงการอ้างอิงแบบ transitive สร้าง shared base image และ golden build runner ขึ้นใหม่ และตรวจสอบขอบเขตโทเค็น การอนุมัติ workflow และ provenance ของการเผยแพร่ เนื่องจากเหตุการณ์นี้สอดคล้องกับการใช้ไปป์ไลน์ CI/CD ในทางที่ผิดผ่านการเผยแพร่ด้วย OIDC

• CSA Singapore: นำเวอร์ชันที่ได้รับผลกระทบออกจากสภาพแวดล้อมการพัฒนา การ buil d และ CI/CD ปฏิบัติต่อระบบที่ได้รับผลกระทบเสมือนเป็นระบบที่ถูกบุกรุกและสร้างระบบใหม่ หมุนเวียนข้อมูลรับรอง (credentials) ตรวจสอบสภาพแวดล้อมระบบคลาวด์และซอร์สโค้ดเพื่อหาการเข้าถึงโดยไม่ได้รับอนุญาต เฝ้าติดตามตัวบ่งชี้ที่เผยแพร่ต่อสาธารณะ และเสริมความแข็งแกร่งให้กับการอนุญาตแบบ allowlist การตรวจสอบความถูกต้องสมบูรณ์ และการควบคุมแหล่งที่มา (provenance)

• Zscaler: ถือว่า .claude/, .cursor/, .vscode/ และ .gemini/ เป็นโค้ดที่เรียกใช้งานได้ และเลิกถือว่า provenance ของ SLSA หรือ Sigstore เป็นหลักฐานยืนยันความปลอดภัย แต่ให้เสริมด้วยการตรวจจับความผิดปกติของพฤติกรรมการเผยแพร่ เช่น การเผยแพร่นอกเวลา การเผยแพร่เวอร์ชันจำนวนมากในครั้งเดียว และผู้เผยแพร่ที่ลงมือเป็นครั้งแรก

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

สิ่งที่เหตุการณ์นี้เปลี่ยนคือการจัดประเภท ไฟล์คอนฟิกของเครื่องมือสำหรับนักพัฒนาถือเป็นเส้นทางการประมวลผล และการที่โปรแกรมแก้ไขเปิดโฟลเดอร์ถือเป็นเหตุการณ์ประมวลผล และการรับรองแหล่งที่มาถือเป็นถ้อยแถลงเกี่ยวกับว่าไปป์ไลน์ใดเป็นผู้ผลิตแพ็กเกจ — ไม่ใช่เกี่ยวกับว่าใครถือกุญแจอยู่ตอนที่ไปป์ไลน์นั้นทำงาน ซึ่งเป็นช่องว่างที่การเผยแพร่ keyv ครั้งแรกพลาดไปโดยแท้

© 2026 OrcaRouter

สำหรับผู้ให้บริการ

ให้บริการแพลตฟอร์มการอนุมานอยู่หรือไม่ นำโมเดลของคุณขึ้น OrcaRouter

providers@orcarouter.ai

เข้าร่วมคอมมูนิตี้ของเรา

Discordsupport@orcarouter.aiXLinkedInGitHubYouTube