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

npm SDK ของ Tensorlake ถูกวางยาเพื่อขโมยข้อมูลรับรองของ AI-Agent — และเพื่อล้างไดเรกทอรี Home ของคุณ หากคุณเพิกถอนโทเค็น

ผู้เขียน

Alistair Wren

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

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

เมื่อวันที่ 8 ตุลาคม 2026 รีลีสที่ถูกวางยาพิษของ tensorlake — SDK บน npm สำหรับแพลตฟอร์มของ Tensorlake ซึ่งรันโค้ดที่ไม่น่าเชื่อถือที่สร้างโดย LLM ภายในแซนด์บ็อกซ์ที่แยกจากกัน — เข้าสู่ทะเบียน npm เวอร์ชัน 0.5.144 ถูกเผยแพร่เมื่อ 01:12:07 UTC; นักวิจัยของ Socket กล่าวว่าพวกเขาแจ้งเตือนเกี่ยวกับเรื่องนี้ประมาณสิบเอ็ดนาทีต่อมา มันไม่ใช่รีลีสที่ได้รับอนุญาต Tensorlake ระบุว่าผู้โจมตีผลักโค้ดเข้าไปในที่เก็บ GitHub ของบริษัทโดยตรง และเผยแพร่ผ่านเวิร์กโฟลว์การเผยแพร่ของโปรเจกต์เอง ดังนั้นแพ็กเกจจึงมี provenance ของ npm ที่ถูกต้อง — ใบรับรองที่ลงนามซึ่งแสดงว่าถูกสร้างที่ไหน สำหรับซอร์สโค้ดที่ถูกวางยาพิษไปแล้ว บริษัทกล่าวว่าเวอร์ชันนี้เปิดให้ใช้งานอยู่ประมาณ 1 ชั่วโมง 40 นาที ตั้งแต่ 01:12 ถึง 02:54 UTC ก่อนที่ npm จะนำมันออก

เพย์โหลดนี้ไม่จำเป็นต้องนำเข้าหรือมีเอเจนต์ที่ทำงานอยู่ preinstall ฮุกใน manifest ของแพ็กเกจได้รัน node lib/setup.mjs ซึ่งเป็นตัวโหลดที่ถูกทำให้อ่านยาก และได้ติดตั้ง Bun runtime ลงบนเครื่องและใช้มันเพื่อรัน lib/Math_Symbol.js ซึ่งเป็นตัวขโมยข้อมูลรับรองขนาด 856,501 ไบต์และเป็นหนอนที่แพร่กระจายตัวเอง ใครก็ตามที่ทำการติดตั้งแบบปกติของเวอร์ชันนั้นได้รันมัน เนื่องจากมันเป็นแท็ก latest ของแพ็กเกจ เวอร์ชันนั้นคือสิ่งที่การติดตั้งเริ่มต้นเลือกใช้ในขณะที่มันยังใช้งานอยู่

สิ่งที่ทำให้บันทึกนี้ควรค่าแก่การเก็บรักษาไม่ใช่ขนาดของเพย์โหลด — ครอบครัว Shai-Hulud เคยมีเอกสารบันทึกไว้แล้ว แต่เป็นรายการเป้าหมายต่างหาก ควบคู่ไปกับโทเคน npm และ GitHub, ข้อมูลรับรอง AWS, ข้อมูลลับของ Kubernetes และ Vault, คีย์ SSH, ไฟล์ .env รหัสผ่านในเบราว์เซอร์ และกระเป๋าเงินคริปโต บิลด์นี้ยังเก็บ การตั้งค่าเครื่องมือพัฒนา AI และไฟล์ MCP — โดยเฉพาะที่เกี่ยวข้องกับ Claude Code, Cursor, Kiro, Windsurf และ Zed ตามรายงานของ Socket นอกจากนี้มันยังเขียน .claude/settings.json และ .vscode/tasks.json ของตัวเองลงในรีโพซิทอรีที่มันเข้าถึงได้ เพื่อให้โค้ดทำงานอีกครั้งในครั้งถัดไปที่นักพัฒนาเปิดโปรเจกต์นั้นใน Claude Code หรือ VS Code นี่คือการโจมตีซัพพลายเชนที่มุ่งเป้าไปที่เครื่องซึ่งผู้คนใช้สร้างเอเจนต์โดยตรง

รีลีสหลุดออกจากบัญชีของผู้ดูแลได้อย่างไร

Socket, SafeDep และ Aikido ต่างเผยแพร่บทวิเคราะห์ของตนเองเมื่อวันที่ 8 ตุลาคม และคำอธิบายกลไกของพวกเขาสอดคล้องกัน ระดับความเชื่อมั่นของคลังข้อมูลสำหรับบันทึกนี้คือ A ไม่ได้ถูกทำเครื่องหมายว่ามีข้อโต้แย้ง และไม่มีสิ่งใดที่พบในแหล่งข้อมูลขัดแย้งกับสิ่งใดในคำอธิบายเหล่านั้น

รายงานของ SafeDep ติดตามคอมมิตแปดรายการไปยังสาขาmain ของที่เก็บ ระหว่างเวลา 01:20 ถึง 03:57 UTC เมื่อวันที่ 7 ตุลาคม ซึ่งระบุว่าเป็นบัญชีผู้ดูแลที่เก็บ และทำผ่านส่วนติดต่อเว็บของ GitHub คอมมิตที่เอกสารเก็บถาวรอ้างว่าเป็นคอมมิตอันธพาลรายการแรกคือ 41b38f0 ซึ่งเป็นการแก้ไขสี่ไฟล์เมื่อเวลา 03:44:48 UTC ของวันที่ 7 ตุลาคม โดยมีข้อความว่า "Add files via upload" และมีลายเซ็น verified ของ GitHub — GitHub ลงนามคอมมิตที่ทำในโปรแกรมแก้ไขเว็บของตัวเอง ดังนั้น "verified" จึงบันทึกพื้นผิวการแก้ไข ไม่ใช่ตัวบุคคล คอมมิตนั้นไม่ได้แตะต้องไฟล์ใดนอกเหนือจาก typescript/lib/Math_Symbol.js และ typescript/lib/setup.mjs ตาม GitHub API: มีเพียงเพย์โหลดเท่านั้น และไม่มีอย่างอื่น

SafeDep เสนอการตีความพฤติกรรมของผู้ปฏิบัติการ โดยระบุว่าเป็นข้ออนุมานของตนเอง: การแก้ไขครั้งแรกของฮุก preinstall ทำให้ไวยากรณ์ JSON ของไฟล์เสีย และมีคอมมิตซ่อมแซมตามมาในอีกสิบเก้านาทีต่อมา ซึ่ง SafeDep อธิบายว่าสอดคล้องกับบุคคลที่กำลังแก้ไขไฟล์ในเบราว์เซอร์ มากกว่ากระบวนการไปป์ไลน์แบบสคริปต์ ไม่มีสิ่งใดที่เผยแพร่โดย Socket, SafeDep, Aikido, StepSecurity หรือ Tensorlake ระบุวิธีการที่บัญชีของผู้ดูแลถูกยึดไป

ผู้โจมตีไม่จำเป็นต้องมีโทเค็น npm SafeDep รายงานว่าบัญชีนั้นเริ่มของโปรเจกต์publish_npm.yaml เวิร์กโฟลว์ด้วยมือเมื่อวันที่ 8 ตุลาคม เวลา 00:08 UTC; บันทึกการบิลด์แสดงไฟล์เพย์โหลดภายใน tarball ที่เผยแพร่ การเผยแพร่ใช้ npm trusted publishing, และแพ็กเกจที่เกี่ยวข้อง tensorlake-native-* ที่เผยแพร่จากการรันเดียวกันมี SLSA provenance ที่ถูกต้อง — provenance ที่ถูกต้องอย่างแท้จริงสำหรับการบิลด์จากซอร์สที่ถูกวางยาพิษ การเผยแพร่เกิดขึ้นหลังจากเวิร์กโฟลว์เริ่มได้สิบสองนาที

archive บันทึกว่า repository ถูกเจาะระบบเป็นเวลาราว20 ชั่วโมงก่อนที่การเผยแพร่จะถูกสั่งให้ทำงาน — ช่วงว่างที่ไทม์ไลน์ด้านล่างเรียงให้เห็นทีละ commit — ซึ่งสอดคล้องกับคำแถลงของ Tensorlake เองว่าผู้โจมตีเผยแพร่ "ผ่านเวิร์กโฟลว์การปล่อยเวอร์ชันของเราเอง"

เพย์โหลดทำอะไรเมื่อมันทำงานแล้ว

A screenshot of a card titled 'A credential stealer with an AI-tooling list', kicked 'tensorlake@0.5.144 · what the payload collected', subtitled 'Per Socket, SafeDep and Tensorlake's advisory — grouped by what each collector reached for'. Three columns of paired labels sit side by side. 'Publishing and source control' lists npm tokens from .npmrc, the token API and the OIDC exchange; GitHub tokens with a repository and workflow permission check; GitHub Actions secrets read from Runner.Worker memory; and cryptocurrency browser wallets across 14 extensions. 'AI agent tooling' lists ~/.claude.json for Claude Code settings; ~/.kiro/settings/mcp.json for Kiro MCP config; .cursor, Windsurf and Zed config and MCP files; and .claude/settings.json and .vscode/tasks.json written back into reachable repositories. 'Cloud, cluster and endpoint' lists AWS via STS, SSM Parameter Store and Secrets Manager; Kubernetes service-account tokens and kubeconfigs; HashiCorp Vault at 127.0.0.1:8200; SSH and GPG keys, .env files and Docker and CLI files; the Wallets row, wallet.dat, Exodus, Electrum and MetaMask; and saved passwords via a downloaded HackBrowserData binary. A footer reads 'Collector list per Socket's initial assessment, SafeDep's decoded payload analysis and the Tensorlake advisory (GHSA-8g63-53c9-65j2). Socket flags AI development tooling for Claude Code, Cursor, Kiro, Windsurf and Zed by name.'

การประเมินของ Socket ระบุถึงการเก็บเกี่ยวข้อมูลจากไฟล์ภายในเครื่อง สภาพแวดล้อม CI แหล่งข้อมูล Kubernetes และ Vault รวมถึงการส่งข้อมูลออก การคงอยู่ในระบบ และการรันโค้ดที่ถูกส่งมาจากระยะไกล SafeDep ได้จำลองเพย์โหลดที่ถอดรหัสแล้วขึ้นมาใหม่: lib/setup.mjs ดาวน์โหลด Bun 1.3.13 จาก GitHub release อย่างเป็นทางการ และใช้มันรันเวิร์ม และมันจะยุติการทำงานบน CI runner — เป้าหมายคือเครื่องของนักพัฒนา ไม่ใช่บิลด์เอเจนต์ SafeDep ยังพบว่าเพย์โหลดนั้นมีสำเนาแบบธรรมดาของตัวโหลดตัวเดียวกันนี้ติดมาด้วย ซึ่งมันจะฝังลงในแพ็กเกจและรีโพซิทอรีอื่น ๆ

เพย์โหลดรันชั้นอำพรางสามชั้น ซึ่ง SafeDep ถอดรหัสได้โดยไม่ต้องรันตัวอย่าง: อาร์เรย์สตริงของออบฟัสเคเตอร์ ไซเฟอร์กำหนดเองที่ใช้ซอลต์ svksjrhjkcejg — เหมือนกับตัวที่รายงานไว้ในเหตุการณ์ก่อนหน้านี้ของ keyv ที่ถูกละเมิด — และ AES-256-GCM ครอบคลุมไฟล์ที่ฝังไว้สิบเอ็ดไฟล์ รวมถึงสคริปต์ ฮุก และคีย์สาธารณะ RSA สองคีย์ บรรทัดแรกมีแท็กบิลด์ WORMTAG='tensrlake', สะกดผิด ซึ่งเป็นวิธีที่ SafeDep ใช้แยกแยะบิลด์นี้จากการติดเชื้อซ้ำที่กำลังดำเนินอยู่

นอกจากคอนฟิกูเรชันของเครื่องมือ AI แล้ว รายการที่ถูกเก็บรวบรวมยังกว้างและเจาะจง: ~/.claude.json และ ~/.kiro/settings/mcp.json สำหรับการตั้งค่าของเอเจนต์; คีย์ SSH, ไฟล์ CLI ของคลาวด์, .npmrc, .env, ไฟล์ Docker และ Kubernetes และประวัติเชลล์; wallet.dat รวมถึงข้อมูลของ Exodus, Electrum และ Ledger Live และส่วนขยายกระเป๋าเงินในเบราว์เซอร์ เช่น MetaMask และ Phantom; AWS STS, SSM Parameter Store และ Secrets Manager; ซีเคร็ตของ GitHub Actions ที่อ่านจากหน่วยความจำของโปรเซส Runner.Worker; และโทเคนบัญชีบริการของ Kubernetes และโทเคน Vault มันดาวน์โหลดไบนารีเฉพาะแพลตฟอร์มจาก iseekaigogo[.]com/hbd/<platform> และรันมันด้วยอาร์กิวเมนต์ "dump -b all -c password -f json" — อาร์กิวเมนต์ที่ตรงกับเครื่องมือ HackBrowserData แม้ว่า SafeDep ระบุว่าไม่สามารถกู้ไบนารีตัวนั้นกลับมาได้ และจัดให้การระบุตัวตนครั้งนี้เป็นการอนุมาน หนอนตัวนี้ SafeDep เสริม จะออกเมื่อเจอโลแคลรัสเซีย

A screenshot of a card titled 'Persistence, resolution, and the wipe trigger', kicked 'tensorlake@0.5.144 · staying power', subtitled 'The release was removed in under two hours; the implant it installed was built to outlive that.' Three columns sit side by side. 'Persistence: gh-token-monitor' lists a systemd user service on Linux, a LaunchAgent com.user.gh-token-monitor on macOS, a scheduled task with a PowerShell monitor on Windows, and files left behind in ~/.local/bin, ~/.config and %LOCALAPPDATA%. 'Endpoint resolution order' lists, in numbered order, the primary endpoint iseekaigogo[.]com:443/router; an Ethereum contract 0xb614155Fd88...1Df091B9; the public RPC endpoints that contract is read through, given as ~30 by Socket and 35 by SafeDep; signed GitHub commits found by the string thebeautifulmarchoftime; and public dead-drop repositories described as 'Shai-Hulud: Here We Go Again'. 'The dead-man switch' lists a poll of api.github.com/user every 60s, for 24 hours, firing on a 40x response to that token, with the effect rm -rf ~/ (advisory: home dir), armed only if the account has no orgs, and the order that matters: remove monitor, then revoke. A footer reads 'Per Socket's blog and SafeDep's analysis, with the C2 endpoint, the contract and the gh-token-monitor service confirmed in Tensorlake's advisory. Socket and SafeDep give different counts of the public RPC endpoints the contract is read through.'

การคงอยู่เป็นสิ่งที่จงใจ Socket เขียนถึงเพย์โหลดนี้ว่า "การผสมผสานนั้นขยายความเสี่ยงออกไปไกลเกินกว่าการที่คีย์ API เพียงคีย์เดียวถูกขโมย" พร้อมเสริมว่า "การคงอยู่สามารถรักษาสิทธิ์การเข้าถึงของผู้โจมตีไว้ได้แม้ dependency ที่ได้รับผลกระทบจะถูกนำออกไปแล้ว" SafeDep รายงานว่าหนอนนี้คอมมิตไฟล์ hook ของ Claude Code และ VS Code โดยใช้ชื่อผู้เขียน git ว่า claude และฝังเวิร์กโฟลว์ "Run Copilot" ที่ดัมป์ความลับทั้งหมดของรีโพซิทอรีแล้วลบ run และสาขานั้นทิ้ง คำแนะนำของ Tensorlake บอกนักพัฒนาที่กำลังตรวจสอบล็อกของตนให้มองหาสาขาที่ชื่อ dependabot/github_actions/format/setup-formatter และคอมมิตที่เขียนขึ้นภายใต้อัตลักษณ์เดียวกันนั้น

การแพร่กระจายอาศัยโทเค็นที่ถูกขโมยมา มากกว่าจะอาศัยช่องโหว่ตัวที่สอง Socket ระบุว่าหนอนตัวนี้จะไล่แจกแจงแพ็กเกจที่เชื่อมโยงกับตัวตนด้านการเผยแพร่ของเหยื่อ สร้าง provenance ของ Sigstore ขึ้นมา แล้วเผยแพร่เวอร์ชันที่ถูกวางยาพิษซ้ำออกไป SafeDep เสริมรายละเอียดว่าภายใน CI มันจะเพิ่ม dependency แบบ git และลงลายเซ็นให้ผลลัพธ์ของตนด้วย Fulcio และ Rekor ดังนั้น provenance บนแพ็กเกจที่มันเผยแพร่เป็นรายถัดไปจึงถูกต้องสมบูรณ์พอ ๆ กับ provenance บนเวอร์ชัน 0.5.144

ยี่สิบชั่วโมงก่อนการเผยแพร่

ช่องว่างระหว่างคอมมิตอันธพาลรายการแรกกับรีลีสคือส่วนหนึ่งของไทม์ไลน์ที่อธิบายว่าแพ็กเกจที่ถูกวางยามี provenance ที่ถูกต้องได้อย่างไร เวลาทั้งหมดเป็น UTC; เวลาคอมมิตเป็นของ SafeDep และ GitHub API และเวลาเผยแพร่ การนำออก และการแจ้งเตือนเป็นของ Tensorlake

A screenshot of a card titled 'Compromised source in the repo, then one manual publish', kicked 'tensorlake@0.5.144 · the ~20-hour window', subtitled 'All times UTC. Commit times per SafeDep's timeline and the GitHub API; publish and removal times per the Tensorlake advisory.' Three columns sit side by side. '7 October 2026 — source, main branch' lists 01:20 setup.mjs and Math_Symbol.js added; 01:24 the preinstall script added; 01:43 package.json JSON repaired; 02:13 to 03:44 four loader and payload revisions; 03:44 commit 41b38f0, the payload commit; 03:57 the version set to 0.5.144. '8 October 2026 — release and removal' lists 00:08 publish_npm.yaml started by hand; 01:12:07 version 0.5.144 published to npm; 01:22:02 issue #1014 opened by StepSecurity; 01:23:10 flagged by Socket, about eleven minutes in; 02:54 the version removed, after roughly 1h 40m live; 20:24 version 0.5.145 published next. '9 October 2026 — disclosure closed' lists advisory GHSA-8g63-53c9-65j2; pull request #1016, source reverted and 0.5.145 cut; issue #1014 closed as completed; 0.5.143 as the last version stated unaffected; and no usage seen, per Tensorlake's user-agent telemetry. A footer reads 'The ~20-hour gap between the first rogue commit and the publish is SafeDep's commit timeline, and matches the archive's own upstream record.'

อ่านประกอบกัน: ไฟล์เพย์โหลดถูกนำเข้าสู่แบรนช์หลักของรีโพซิทอรีเมื่อวันที่ 7 ตุลาคม เวอร์ชันถูกตั้งเป็น 0.5.144 เมื่อเวลา 03:57 ของเช้าวันนั้น และไม่มีอะไรถูกเผยแพร่จนกระทั่งบัญชีหนึ่งเริ่มเวิร์กโฟลว์การเผยแพร่ด้วยมือเมื่อเวลา 00:08 ของวันถัดไป ซอร์สโค้ดที่ถูกบุกรุกอยู่ในแบรนช์นั้นราว 20 ชั่วโมงก่อนที่ไปป์ไลน์ของโครงการเองจะบิลด์มัน นั่นคือทั้งหมดของการโจมตีเส้นทางการเผยแพร่ — ไม่มีการปลอมแปลง attestation ไม่มี tarball ที่ถูกเผยแพร่ซ้ำ ข้อมูล provenance นั้นถูกต้องเกี่ยวกับการบิลด์โค้ดที่ไม่ควรอยู่ในแบรนช์ตั้งแต่แรก

สวิตช์คนตาย

ส่วนของเหตุการณ์นี้ที่ไม่เคยมีมาก่อนในการถูกเจาะระบบ npm ก่อนหน้านี้ คือสิ่งที่เกิดขึ้นหลังจากที่เหยื่อตอบสนองอย่างถูกต้อง หากโทเค็น GitHub ที่ถูกขโมยไปเป็นของบัญชีที่ไม่มีองค์กรใด ๆ SafeDep รายงาน ตัวหนอนจะติดตั้ง gh-token-monitor: บริการที่คอยตรวจสอบ api.github.com/user ด้วยโทเค็นที่ถูกขโมยมานั้นทุก 60 วินาที เป็นเวลา 24 ชั่วโมง เมื่อ GitHub ตอบกลับเป็น 40x — ซึ่งจะเกิดขึ้นทันทีที่โทเค็นถูกเพิกถอน — ตัวตรวจสอบจะเรียกใช้ตัวจัดการที่ผู้โจมตีจัดหาให้ และลบไดเรกทอรีบ้านของผู้ใช้

Socket อธิบายคอมโพเนนต์เดียวกันว่าเป็นการใช้มอนิเตอร์ของ Socket ที่คงอยู่ผ่านONLOGON scheduled task โดยรันแฮนด์เลอร์ที่ผู้โจมตีจัดหามาผ่านInvoke-Expression และระบุว่าโค้ดมีสตริงตามตัวอักษรว่า "IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner" ซึ่งพบในระลอก Shai-Hulud ก่อนหน้านี้ SafeDep ระบุชื่อแฮนด์เลอร์ว่าrm -rf ~/ ถ้อยคำของ Socket ชัดเจนว่ากลไกนี้ทำงานไม่ว่าการเพิกถอนจะเกิดขึ้นที่ใด มอนิเตอร์อยู่ในเครื่อง แต่การเพิกถอนไม่ได้อยู่ในเครื่อง แหล่งข้อมูลทั้งสี่แห่ง — Socket, SafeDep, StepSecurity และคำแนะนำของ Tensorlake เอง — ให้ลำดับการดำเนินการเดียวกัน: ลบมอนิเตอร์ก่อน แล้วจึงเพิกถอน.

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

คลังข้อมูลบันทึกว่าไม่มีความเสียหายที่ยืนยันได้สำหรับรายการนี้ และแหล่งข้อมูลสนับสนุนข้อสรุปนั้น ไม่ใช่เพียงแค่ไม่ได้โต้แย้งมัน

• Tensorlake ระบุว่าไม่พบการใช้งานเวอร์ชันนี้คำแนะนำของบริษัทระบุว่าบริษัทติดตามการใช้งาน SDK ผ่านเฮดเดอร์ user-agent และ "ไม่พบการใช้งานเวอร์ชันนี้เลยนับตั้งแต่เปิดตัว" นั่นเป็นถ้อยแถลงของผู้ขายเกี่ยวกับข้อมูลเทเลเมทรีของตนเอง ไม่ใช่ตัวเลขที่ผ่านการตรวจสอบ

• ตัวเลขการดาวน์โหลดไม่ใช่จำนวนการติดเชื้อSocket รายงานว่าแพ็กเกจนี้มียอดดาวน์โหลดประมาณ12,000 ครั้งต่อสัปดาห์และตั้งข้อสังเกตว่านี่อธิบายการใช้งานโดยรวมของแพ็กเกจ ไม่ใช่การดาวน์โหลดเวอร์ชันที่เป็นอันตราย; SafeDep กล่าวอ้างประมาณ106,000 ครั้งต่อเดือนบนแพ็กเกจเดียวกัน ไม่มีหลักฐานใดบ่งชี้ว่า 0.5.144 ทำงานที่ใดก็ตาม หน้าต่างการเปิดตัวที่ถูกตั้งค่าสถานะของ Socket และหน้าต่างสองชั่วโมงของ Tensorlake สอดคล้องกับเวอร์ชันที่ถูกลบออกก่อนที่จะแพร่กระจาย

• บั๊กของเพย์โหลดเองอาจจำกัดการแพร่กระจายของมันไว้ SafeDep พบสองจุด: เส้นทางการแพร่กระจายผ่าน npm ต้องมี ./dist/Math_Symbol.js อยู่บนดิสก์ และจะหยุดทำงานหากไม่มีไฟล์นี้ และตัวโหลดที่ฝังไว้จะมองหา ai_init.js ขณะที่เวิร์มเขียน math_init.js SafeDep ระบุว่าสิ่งที่พบเหล่านี้เป็นข้อจำกัดในการแพร่กระจาย และบทความมองว่าสิ่งเหล่านี้เป็นเพียงการตีความโค้ดของบทวิเคราะห์ชิ้นหนึ่ง ไม่ใช่หลักประกันว่าจะไม่มีอะไรแพร่กระจายไปเลย

• การรับรองแหล่งที่มา (provenance attestation) เป็นของจริงนี่ไม่ใช่ข้อกล่าวอ้างที่ยังเป็นที่โต้แย้ง: npm provenance บันทึกว่าแพ็กเกจถูกสร้างที่ไหนและโดยเวิร์กโฟลว์ใด และในกรณีนี้มันบันทึกความจริงไว้ — เวิร์กโฟลว์การรีลีสของโปรเจกต์เอง ซึ่งสร้างซอร์สที่ถูกวางยาพิษ คำเตือนของ Tensorlake ระบุไว้ตรง ๆ ว่า "แพ็กเกจนี้มี npm provenance ที่ถูกต้อง" Socket ชี้ประเด็นเดียวกันอย่างตรงไปตรงมาเมื่อระบุว่า provenance "บอกว่าแพ็กเกจถูกสร้างที่ไหน แต่มันไม่ได้บอกว่าโค้ดปลอดภัย"

รายละเอียดหลายประการที่แพร่กระจายอยู่ในขณะนี้เป็นข้อกล่าวอ้างจากการวิเคราะห์เพียงแหล่งเดียว และควรอ่านในลักษณะเช่นนั้น กลไกเฉพาะที่ผู้โจมตีใช้เพื่อให้ได้มาซึ่งบัญชีของผู้ดูแลนั้น ยังไม่ถูกเปิดเผยโดยบริษัทที่ทำการสอบสวนใด ๆ หรือโดย Tensorlake ที่อยู่สัญญา Ethereum และบทบาทของมันในการแปลงเอนด์พอยต์ปรากฏอยู่ในรายงานของ SafeDep และ Socket — Socket กล่าวว่าเพย์โหลดแปลงเอนด์พอยต์ของมันผ่านสัญญา Ethereum โดยใช้เอนด์พอยต์ RPC สาธารณะประมาณ 30 แห่ง พร้อมกลไกสำรองผ่าน GitHub ขณะที่ SafeDep ระบุจำนวน RPC ไว้ที่ 35 และรายงานว่าเมื่อวันที่ 8 ตุลาคม สัญญาดังกล่าวส่งคืนค่า iseekaigogo.com — และ Tensorlake ยืนยันเอนด์พอยต์และสัญญาดังกล่าวในคำแนะนำของบริษัท จำนวน RPC ที่แน่นอนนั้นแตกต่างกันระหว่างบทวิเคราะห์ทั้งสองชิ้น แต่การออกแบบไม่แตกต่าง

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

อะไรเปลี่ยนแปลงไปหลังจากนั้น

การตอบสนองรวดเร็วกว่าและประสานงานกันมากกว่าเหตุการณ์

• เวอร์ชันนั้นหายไปแล้ว ตามข้อมูลของ Tensorlake มันเปิดให้ใช้งานตั้งแต่ 01:12 ถึง 02:54 UTC ของวันที่ 8 ตุลาคม ขณะที่ SafeDep รายงานว่า npm ได้ลบมันออกไป เมื่อสอบถาม registry ของ npm โดยตรงเมื่อวันที่ 10 ตุลาคมสำหรับบทความนี้ 0.5.144 ไม่ปรากฏอยู่ในบรรดาเวอร์ชันที่เผยแพร่ของแพ็กเกจนี้แล้ว และแท็ก latest ของแพ็กเกจคือ 0.5.148 คำแนะนำของ Tensorlake ชี้ให้นักพัฒนาหันไปใช้ 0.5.143 เป็นเวอร์ชันสุดท้ายที่ไม่ได้รับผลกระทบ

• คำแนะนำนี้ได้รับการเผยแพร่พร้อมแพตช์แก้ไข คำแนะนำ GHSA-8g63-53c9-65j2 ของ Tensorlake ระบุว่าแพ็กเกจจาก PyPI และ crates.io ที่ชื่อ tensorlake รวมทั้ง tensorlake CLI ไม่ได้รับผลกระทบ — มีเพียงแพ็กเกจ npm เท่านั้นที่ได้รับผลกระทบ — และเวอร์ชัน 0.5.143 และก่อนหน้าไม่ได้รับผลกระทบ SafeDep รายงานว่าผู้ดูแลได้ย้อนกลับซอร์สโค้ดในพูลรีเควสต์ #1016 และปล่อย 0.5.145.

• เธรดการเปิดเผยนี้ครบถ้วนอย่างผิดปกติ นักวิจัย Ashish Kurmi จาก StepSecurity ได้เปิด issue บน GitHub #1014 เมื่อ 01:22:02 UTC วันที่ 8 ตุลาคม — ประมาณสิบนาทีหลังการเผยแพร่ — โดยชี้ไปที่บทวิเคราะห์ของ StepSecurity เองเกี่ยวกับสิ่งที่พวกเขาเรียกว่าเวิร์ม "โทเค็นตัวประกัน" Oliver Smith จาก Aikido แสดงความคิดเห็นว่าเพย์โหลดถูกนำเข้ามาในคอมมิต 41b38f0 และระบุว่ามันเป็นโปรแกรมขโมยข้อมูล Shai-Hulud ตัวใหม่ ผู้ดูแล David Lorenzo — ตัวตนผู้ดูแลที่ระบุไว้บนแพ็กเกจ npm ว่า calavera — ตอบกลับเมื่อ 9 ตุลาคม ยืนยันคำแนะนำด้านความปลอดภัยและปิด issue ว่าเสร็จสิ้นในวันเดียวกัน ชื่อ issue เองสอดคล้องกับหลักฐาน: เริ่มต้นเป็นรายงาน "อาจเป็นอันตราย" และเมื่อถึงเวลาที่มันถูกปิด ก็ถูกเปลี่ยนชื่อให้อธิบายเพย์โหลดว่าเป็นอันตรายโดยไม่มีเงื่อนไข

• แคมเปญที่สิ่งนี้เป็นส่วนหนึ่งนั้นใหญ่กว่าตัวแพ็กเกจนี้ Socket, SafeDep และ Aikido ต่างก็จัดให้การเผยแพร่ของ Tensorlake อยู่ในระลอก ChainDrop / Mini Shai-Hulud ที่ได้รับการบันทึกไว้ครั้งแรกเมื่อต้นเดือนสิงหาคม 2026 ซึ่งเหยื่อใน npm รวมถึง keyv, cacheable และแพ็กเกจที่เกี่ยวข้อง คำแนะนำของ Tensorlake กล่าวเช่นเดียวกัน โดยอ้างอิงถึง Socket, SafeDep และ Aikido

คำแนะนำของ Socket สำหรับทุกคนที่ติดตั้งเวอร์ชันนี้ คือควรถือว่าโฮสต์ถูกบุกรุกแล้ว: ตรวจสอบ lockfile, manifest และ build log ว่าเป็นเวอร์ชันนี้หรือไม่; ลบ gh-token-monitorเซอร์วิสก่อนเพิกถอนโทเคนใด ๆ; จากนั้นหมุนเวียนข้อมูลรับรองจากเครื่องที่สะอาด คำแนะนำของ Tensorlake ระบุลำดับเดียวกันและแนะนำให้ตรวจสอบ package registry และ repository ที่โทเคนที่ถูกเปิดเผยอาจเขียนข้อมูลลงไปได้ ว่ามีการเผยแพร่ที่ผิดปกติหรือไม่ บทความของ Aikido แนะนำให้ตั้งค่า ignore-scripts=trueใน.npmrcเพื่อบล็อก install hook และถือว่าเครื่องใดก็ตามที่ hook นั้นทำงานไปแล้วว่าถูกบุกรุกโดยสมบูรณ์

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

© 2026 OrcaRouter

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

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

providers@orcarouter.ai

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

Discordsupport@orcarouter.aiXGitHubYouTube