Security Blog

คุณสั่งให้เอเจนต์แก้ error ที่ค้างอยู่ แต่หนึ่งในนั้นถูกเขียนโดยผู้โจมตี

#461

October 2, 2026 · By Marketing team

← All posts

รายงาน error ปลอมบน Sentry หลอกให้ AI coding agent รันโค้ดของผู้โจมตีภายใต้สิทธิ์เต็มของนักพัฒนา สำเร็จถึง 85% ของเวลา สิ่งที่เป็นหายนะตัวจริงไม่ใช่ injection แต่คือ credential แบบ standing ที่เอเจนต์ซึ่งถูกยึดจะเข้าถึงได้

นักพัฒนาคนหนึ่งเปิด AI coding agent ขึ้นมาแล้วพิมพ์คำขอธรรมดาที่สุดในโลก: "ช่วยดู Sentry errors ที่ยังไม่ได้แก้ แล้วจัดการให้หน่อย" เอเจนต์ดึงรายการ error มาผ่าน Sentry connector ของมัน อ่าน issue ตัวบนสุด ทำตามขั้นตอนแก้ไขที่เขียนไว้ในรายงานนั้น แล้วรันมัน ผ่านไปครึ่งนาที มันได้รันโค้ดของผู้โจมตีบนเครื่องของนักพัฒนา ภายใต้สิทธิ์เต็มของนักพัฒนา ทั้งที่ไม่มีใครทำอะไรผิดเลย

นี่คือ Agentjacking ซึ่ง Tenet Security เปิดเผยเมื่อเดือนนี้ และมันได้ผล 85% ของเวลา กับ coding agent สามตัวที่นิยมที่สุดในตลาด: Claude Code, Cursor และ Codex [1][2]

เกิดอะไรขึ้นกันแน่

ก่อนอื่น Sentry คืออะไร: มันคือบริการ monitor error ที่ถูกใช้อย่างแพร่หลายที่สุดตัวหนึ่งในวงการซอฟต์แวร์ เมื่อแอปของคุณโยน error ออกมาหรือ crash Sentry จะจับไว้แล้วยื่นรายงานให้นักพัฒนาของคุณจัดสรรลำดับ — มันฝังอยู่ในแอปจำนวนมหาศาลที่คุณใช้อยู่ทุกวัน ทุกแอปจะฝัง DSN ไว้เพื่อส่งรายงานเหล่านั้น: คีย์ฝั่ง client ที่ถูกใส่มาใน source ของเว็บไซต์โดยเจตนา เพื่อให้เบราว์เซอร์ส่ง error กลับบ้านได้ ใครก็อ่านได้ และใครที่ถือมันอยู่ก็ POST error event เข้ามาในโปรเจกต์ Sentry ของคุณได้

นั่นคือหัวใจทั้งหมดของการโจมตี Tenet ประดิษฐ์ error event ปลอมขึ้นมา โดยตั้งค่า field message ให้หน้าตาเหมือนคำแนะนำแก้ไขของ Sentry เองเป็นอย่างยิ่ง: markdown ที่จัดระเบียบเรียบร้อย มี "วิธีแก้ที่แนะนำ" และคำสั่งให้รัน แล้วยื่นมันเข้าไปด้วย DSN สาธารณะ จากนั้นก็รอสิ่งที่นักพัฒนาทำเป็นปกติที่สุด — สั่งให้เอเจนต์เคลียร์คิว error

เอเจนต์ query ไปที่ Sentry ผ่าน MCP connector ของมัน connector ส่ง error กลับมาให้ในฐานะ output ระบบที่เชื่อถือได้ เอเจนต์แยกไม่ออกระหว่างรายงาน Sentry ของจริงกับของปลอม เพราะมันมีหน้าตาเหมือนกันทุกไบต์ จึงทำตามที่ถูกสั่งและรัน "วิธีแก้" ซึ่งโดยทั่วไปคือการเรียก npx ไปยังแพ็กเกจของผู้โจมตี ตั้งแต่ตรงนั้นมันมีทุกอย่างที่นักพัฒนามี: environment variables, Git credentials, URL ของ private repository และ cloud keys ใน ~/.aws/

Tenet พบ 2,388 องค์กร ที่มี DSN ซึ่งฉีดได้ ตั้งแต่นักพัฒนาอิสระไปจนถึงบริษัท Fortune 100 ในการทดสอบแบบควบคุม เอเจนต์ได้รันคำสั่งที่ถูกฉีดเข้าไปจริงในบริษัทจริง — รวมถึง บริษัทเทคโนโลยี Fortune 100 มูลค่า 2.5 แสนล้านดอลลาร์ ที่ AI agent อ่านรายงานบั๊กปลอมแล้วรันโค้ดของ Tenet บนเครื่องในองค์กรสองเครื่อง [1][3] หลังแจ้ง Sentry เมื่อวันที่ 3 มิถุนายน บริษัทรับทราบในวันเดียวกัน แต่ปฏิเสธที่จะแก้ที่ราก โดยบอกว่าปัญหานี้ "technically not defensible" และออก content filter ที่บล็อก payload string เฉพาะตัวเดียว [4]

นี่ไม่ใช่ความประมาทของ Sentry

ทีนี้คือส่วนที่อึดอัดใจ: ไม่มีอะไรในห่วงโซ่นั้นเป็นบั๊กเลย DSN ควร จะเป็นสาธารณะ MCP server ควร จะส่งข้อมูล error ของคุณกลับมา เอเจนต์ ควร จะลงมือกับข้อมูลวินิจฉัยที่คุณขอให้แก้ ทุกขั้นตอนได้รับอนุญาต และนั่นแหละคือเหตุผลที่ไม่มี firewall ไม่มี EDR และไม่มี system prompt ตัวไหนจับมันได้เลย

ข้อบกพร่องนี้เป็นเรื่องโครงสร้าง และไม่ใช่ของ Sentry เพียงเจ้าเดียว เครื่องมือใดก็ตามที่ป้อนข้อความซึ่งคนนอกมีอิทธิพลต่อได้ให้เอเจนต์ — ไม่ว่าจะเป็น error tracker, คิว issue, เว็บเพจที่ scrape มา หรือเอกสารที่แชร์กัน — ล้วนเป็นช่องทางฉีดทั้งสิ้น และเอเจนต์ก็ปฏิบัติกับทั้งหมดนั้นราวกับเป็นกระแสคำสั่งเดียวที่ไม่มีการแยกแยะ Prompt injection ผ่านมาสองปีของยุคเอเจนต์ก็ยังแก้ไม่ตก: คุณกันข้อความที่เป็นศัตรูออกจากกระบวนการคิดของโมเดลได้ไม่แน่นอน จงสมมติว่าคุณกันไม่ได้

injection ไม่ใช่หายนะตัวจริง

ส่วนนี้ควรค่อย ๆ ทบทวนดี ๆ เหตุผลที่ Agentjacking เป็นเรื่องเร่งด่วนระดับวิกฤต ไม่ใช่เพราะเอเจนต์ถูกหลอก แต่คือ สิ่งที่เอเจนต์ที่ถูกหลอกจะเข้าถึงได้ มันรันภายใต้สิทธิ์ standing access เต็มรูปแบบของนักพัฒนา: ทุกคีย์ใน environment ทุกไฟล์ credential บนดิสก์ พวงกุญแจทั้งพวงที่อยู่ห่างออกไปแค่คำสั่งเดียว

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

ออกแบบมาเพื่อเรื่องนี้ โดยเจตนา

credential ของ Clavitor ไม่เคยอยู่ใน environment ที่เอเจนต์รันอยู่ ไม่มี ~/.aws/credentials ให้อ่าน ไม่มี API key ใน env var ให้เอาออกไป เพราะค่า secret ไม่เคยไปอยู่ที่ซึ่งโค้ดถูกรัน — เอเจนต์ได้รับ ผลลัพธ์ ของการใช้ credential ไม่ใช่ตัว credential เอง มันเข้าถึงได้เฉพาะสิ่งเดียวที่ credential ถูกตั้งชื่อไว้ให้ใช้ จึงไล่ enumerate คลังเพื่อหาอย่างอื่นไม่ได้ และสิทธิ์ที่ให้มีขอบเขตและเพิกถอนได้ เซสชันที่เริ่มมีพฤติกรรมเหมือนผู้โจมตีจึงถูกตัดได้กลางคัน

ข้อนี้บอกกันตรง ๆ : สิ่งนี้ไม่ได้หยุด injection และไม่ได้หยุดเอเจนต์ที่ถูกยึดไม่ให้รันคำสั่ง Prompt injection ยังแก้ไม่ตก และเราไม่ได้อ้างว่าจะแก้มัน สิ่งที่เปลี่ยนไปคือผลตอบแทนที่ผู้โจมตีได้ โค้ดของผู้โจมตียังรันอยู่ — แต่เจอ environment ที่ไม่มีอะไรค้างอยู่ให้คุ้มค่าแก่การขโมย การยึดสำเร็จ แต่การปล้นล้มเหลว

เราเขียนกฎที่ระบบ credential ต้องรักษาไว้ เมื่อถึงจุดที่ตัวเอเจนต์เองถูกหันมาเล่นงานคุณได้ โดยเริ่มจากที่ secret ไม่เคยอยู่ที่ซึ่งโค้ดถูกรัน และเอเจนต์จะเข้าถึงได้เฉพาะสิ่งที่ credential ถูกตั้งชื่อไว้เท่านั้น ลองไล่ตรวจของคุณตามกฎเหล่านั้น: clavitor.ai/rules

บทเรียนไม่ใช่ "อุดช่องโหว่ Sentry"

Sentry แก้เรื่องนี้ไม่ได้ และก็พูดอย่างนั้นเอง และเครื่องมือที่ถูกวางยาตัวต่อไปจะไม่ใช่ Sentry ตราบใดที่เอเจนต์ของคุณยังแบก credential แบบลอย ๆ แบบ standing อยู่ ทุกเครื่องมือที่เชื่อถือได้ที่มันอ่านก็คือปืนที่ขึ้นลำ และ prompt injection คือไกปืนที่คุณล็อกไม่ได้

คุณกันข้อความที่เป็นอันตรายออกไปไม่ได้หรอก เพราะฉะนั้นเลิกวาง credential ไว้ในระยะเอื้อมของเอเจนต์ที่อ่านข้อความนั้นดีกว่า

Clavitor (@clavitorai) คือ credential vault ที่สร้างมาเพื่อ AI agent และเพื่อรับมือกับมัน clavitor.ai

แหล่งอ้างอิง

[1] Tenet Security — "Agentjacking: hijacking coding agents with fake Sentry errors" (85% success; 2,388 orgs; mechanism): https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/

[2] The Hacker News — "Agentjacking Attack Tricks AI Coding Agents Into Running Malicious Code": https://thehackernews.com/2026/06/agentjacking-attack-tricks-ai-coding.html

[3] The New Stack — "A public Sentry key is all it takes to hijack Claude Code, Cursor, and Codex": https://thenewstack.io/agentjacking-sentry-mcp-attack/

[4] Infosecurity Magazine — "New 'Agentjacking' Attacks Could Hijack AI Coding Agents" (Sentry's response): https://www.infosecurity-magazine.com/news/agentjacking-attacks-hijack-ai/