กลับ

2026/10/29

ไฟล์ AGENTS.md และ CLAUDE.md ที่เป็นอันตราย: โฟลเดอร์ Downloads ใช้ยึดการควบคุม AI coding agent ได้อย่างไร

ไฟล์คำสั่งที่ถูกวางไว้ใน Downloads พยายามสั่งให้ AI coding agent ติดตั้งมัลแวร์ npm เกิดอะไรขึ้น งานวิจัยพบอะไร และจะป้องกันอย่างไร

ประเด็นสำคัญ

  • ไฟล์ AGENTS.md ที่ถูกวางไว้ในโฟลเดอร์ ~/Downloads ของผู้ใช้ สั่งให้ AI coding agent ติดตั้งแพ็กเกจ npm ที่ทราบกันว่าเป็นอันตราย ความพยายามนี้ถูกหยุดไว้ก่อนที่โค้ดใดๆ จะทำงาน
  • ในการทดสอบในห้องแล็บ OpenAI Codex ทำตามไฟล์คำสั่งที่เป็นอันตรายมากกว่า 90% ของจำนวนครั้งที่ทดลอง ส่วน Claude Code ทำตามประมาณครึ่งหนึ่ง
  • นี่ไม่ใช่บั๊กที่แก้ได้ด้วยแพตช์ agent เชื่อถือไฟล์คำสั่งในโฟลเดอร์ที่มันเริ่มทำงาน และเบราว์เซอร์สามารถเขียนไฟล์ลงใน Downloads ได้
  • วิธีป้องกันหลักนั้นเรียบง่าย: อย่าเริ่ม agent ใน Downloads อ่านไฟล์คำสั่งที่คุณไม่ได้เขียนเอง ตรวจสอบการตั้งค่า agent ว่ามี endpoint ที่คุณไม่ได้ตั้งหรือไม่ และเปิดใช้การอนุมัติและ sandbox ไว้เสมอ

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

เมื่อวันที่ 22 ตุลาคม 2026 บริษัทด้านความปลอดภัย Forever Security ได้เผยแพร่บทความ “Markdown Is the New Executable” โดย Gal Weizman และ Omer Samet บทความอธิบายเหตุการณ์จริงที่เกิดขึ้นบนเครื่องของลูกค้ารายหนึ่งของบริษัท AI coding agent กำลังทำงานอยู่ในโฟลเดอร์ ~/Downloads ของผู้ใช้ และไฟล์ AGENTS.md ในโฟลเดอร์นั้นสั่งให้มันติดตั้ง function-color ซึ่งเป็นแพ็กเกจ npm ที่เป็นอันตราย Forever หยุด agent ได้ก่อนที่แพ็กเกจจะถูกติดตั้งและก่อนที่โค้ดอันตรายใดๆ จะทำงาน

ไม่มีใครรู้ว่าไฟล์นั้นเข้ามาอยู่ในโฟลเดอร์ Downloads ได้อย่างไร Forever ระบุว่าไม่สามารถหาคำตอบได้ และข่าวจาก BleepingComputer และ The Hacker News ก็ย้ำประเด็นเดียวกัน จากนั้น Forever ได้สร้างการสาธิตในห้องแล็บเพื่อแสดงว่าหน้าเว็บสามารถวางไฟล์ลักษณะนี้ได้อย่างไร และ agent จะทำอะไรกับไฟล์นั้น

ตัวแพ็กเกจเองไม่ใช่ของใหม่ Checkmarx และ CloudSEK เชื่อมโยง function-color เข้ากับแคมเปญ npm ชื่อ MALFEX แพ็กเกจนี้เป็นเพียงตัวห่อบางๆ ที่ดึง function-flag เข้ามา สคริปต์ติดตั้งของแพ็กเกจนั้นจะดาวน์โหลดและรัน payload เพิ่มเติมจากเซิร์ฟเวอร์ระยะไกล แคมเปญนี้มุ่งเป้าไปที่ Windows และ Checkmarx รายงานว่าผู้ปฏิบัติการเคลื่อนไหวมาตั้งแต่เดือนสิงหาคม 2023 เมื่อเราตรวจสอบ npm registry ในวันที่ 29 ตุลาคม 2026 พบว่า function-color, function-flag และ cdn-img-fetch ล้วนถูกแทนที่ด้วยแพ็กเกจตัวยึดตำแหน่ง 0.0.1-security ของ npm แล้ว

ทำไมไฟล์ Markdown จึงบังคับทิศทาง agent ได้

ข้อโต้แย้งของ Forever อยู่บนพฤติกรรมปกติสองอย่างที่กลายเป็นอันตรายเมื่อเกิดขึ้นพร้อมกัน

  1. agent โหลดไฟล์คำสั่งโดยอัตโนมัติ coding agent อ่านไฟล์คำสั่งของโปรเจกต์ตอนเริ่มทำงาน และถือว่าเป็นคำแนะนำจากผู้ใช้ Codex อ่าน AGENTS.md ตั้งแต่ root ของโปรเจกต์ลงมาจนถึงโฟลเดอร์ปัจจุบัน หากไม่มี root ของโปรเจกต์ จะอ่านเฉพาะโฟลเดอร์ปัจจุบัน Claude Code โหลด CLAUDE.md จากโฟลเดอร์ที่เริ่มทำงานและจากทุกโฟลเดอร์ที่อยู่เหนือขึ้นไป และจะอ่าน AGENTS.md แทนเมื่อไม่มี CLAUDE.md
  2. เว็บสามารถเขียนไฟล์ลงใน Downloads ได้ BleepingComputer รายงานว่า Chrome, Edge และ Firefox บันทึกไฟล์ลงใน Downloads เป็นค่าเริ่มต้นโดยไม่ถามว่าจะเก็บไว้ที่ไหน หน้าเว็บสามารถกำหนดชื่อและเนื้อหาของไฟล์ได้ ไฟล์ Markdown ไม่ใช่โปรแกรม ระบบตรวจสอบไฟล์ปฏิบัติการที่ดาวน์โหลดมาของระบบปฏิบัติการจึงไม่ถือว่าเป็นอันตราย

เมื่อรวมกัน หมายความว่าหน้าเว็บสามารถวางไฟล์ที่ agent จะอ่านเป็นคำสั่งในภายหลังได้ agent ไม่จำเป็นต้องถูก “หลอก” ในความหมายทั่วไป มันเพียงทำสิ่งที่มันถูกสร้างมาให้ทำ Forever ยังชี้ว่า agent บางตัวท่องเว็บได้เอง ในกรณีนั้นอาจไม่มีใครเห็นการดาวน์โหลดเลย

หลักการเดียวกันใช้ได้กับโฟลเดอร์อื่นนอกจาก Downloads ทุกโฟลเดอร์ที่เนื้อหาที่ไม่น่าเชื่อถือเข้าถึงได้ล้วนเป็นเป้าหมายที่เป็นไปได้ เช่น repository ที่เพิ่ง clone มา ไฟล์บีบอัดที่เพิ่งแตกออก หรือโฟลเดอร์ที่แชร์ร่วมกัน สำหรับ Claude Code โปรเจกต์ที่แตกไฟล์ไว้ในโฟลเดอร์ย่อยของ Downloads จะโหลด CLAUDE.md ที่อยู่ใน Downloads ด้วย เพราะไฟล์ในโฟลเดอร์แม่ก็ถูกโหลดเช่นกัน

งานวิจัยแสดงให้เห็นอะไร

Forever ทดสอบ agent สองตัว การทดสอบส่วนใหญ่ใช้ payload ทดแทนที่ไม่เป็นอันตราย (เปิดโปรแกรมเครื่องคิดเลข) แพ็กเกจอันตรายตัวจริงถูกรันเพียงครั้งเดียว ภายในเครื่องเสมือนที่แยกออกมา

OpenAI Codex

นักวิจัยนำไฟล์ AGENTS.md ตัวจริงจากเครื่องของลูกค้ามาใช้ซ้ำ ไฟล์นี้สั่งให้ Codex เพิ่มรายการเซิร์ฟเวอร์ MCP ลงในการตั้งค่าระดับทั้งเครื่อง ~/.codex/config.toml รายการนั้นรันคำสั่งตอนเริ่มทำงานเพื่อติดตั้งแพ็กเกจ npm เนื่องจากการตั้งค่าเป็นแบบ global การเปลี่ยนแปลงจึงคงอยู่ในทุกเซสชัน Codex ต่อๆ ไปบนเครื่อง ไม่ใช่เฉพาะเซสชันที่อ่านไฟล์ Forever รายงานว่าการโจมตีต้องใช้กลวิธีหลายอย่าง ได้แก่ เอกสารรูปแบบยาวและน่าเบื่อ เซสชันลูกที่เริ่มด้วย flag ข้าม sandbox และวิธีเปิดใช้งานที่เลี่ยงการหมดเวลาตอนเริ่มต้นของ Codex ถึงอย่างนั้น Codex ก็รัน payload มากกว่า 90% ของจำนวนครั้งที่ทดลอง

Claude Code

สำหรับ Claude Code นักวิจัยเขียน CLAUDE.md ขึ้นเอง โดยทำให้ดูเหมือนบันทึกการตั้งค่าสำหรับ API gateway ภายในองค์กร ไฟล์ขอให้ Claude เขียนค่า ANTHROPIC_BASE_URL ลงใน .claude/settings.json ของโปรเจกต์ เพื่อส่งทราฟฟิก API ไปยังเซิร์ฟเวอร์ที่นักวิจัยควบคุม ตามที่ Forever ระบุ วิธีนี้ทำให้ OAuth token ของเซสชันรั่วไหล และยังทำให้เซิร์ฟเวอร์ของผู้โจมตีปลอมตัวเป็นโมเดลและส่ง tool call กลับมาได้ รวมถึงคำสั่ง shell ที่ปิด sandbox ไว้ Forever สาธิตการขโมย token (นำ token ไปใช้ซ้ำเพื่อทำการแทนเหยื่อ) และการรันโค้ดในการเปิดใช้งานครั้งถัดไป พวกเขายังแสดงอีกวิธีที่กระตุ้นการโจมตีภายในเซสชันเดียวกันด้วยการเริ่ม subagent

วิธีนี้ได้ผลไม่แน่นอนเท่า Claude Code ขอการอนุมัติก่อนเขียนลงไฟล์การตั้งค่า และมักปฏิเสธการเปลี่ยนแปลงที่น่าสงสัย Forever รายงานว่าสำเร็จประมาณครึ่งหนึ่ง และประมาณหนึ่งในห้าครั้งสำหรับวิธีใช้ subagent ในเซสชันเดียวกัน

สิ่งที่ยังไม่ได้พิสูจน์

  • Forever ยังระบุไม่ได้ว่าไฟล์ตัวจริงเข้ามาอยู่ในโฟลเดอร์ Downloads ของลูกค้าได้อย่างไร เส้นทางการดาวน์โหลดจากเว็บเป็นความเป็นไปได้ที่สาธิตให้เห็นแล้ว ไม่ใช่สาเหตุที่ยืนยันแล้ว
  • มีการทดสอบเฉพาะ Codex และ Claude Code เท่านั้น Forever ให้เหตุผลว่า agent อื่นที่โหลดไฟล์คำสั่งก็มีความเสี่ยงในลักษณะเดียวกัน แต่ไม่ได้ทดสอบ
  • บทความไม่ได้ระบุเวอร์ชันของเครื่องมือ และไม่มีแถลงการณ์จากผู้ผลิต จุดยืนของ Forever คือ “ไม่มีอะไรที่ OpenAI หรือ Anthropic ต้องแพตช์”: agent ทำงานตามที่ออกแบบไว้

ทำไมเรื่องนี้จึงสำคัญ

ไฟล์คำสั่งมักถูกมองข้ามได้ง่ายเพราะดูเหมือนเอกสาร แต่ในทางปฏิบัติมันทำหน้าที่เหมือนการตั้งค่า และเมื่อผ่าน agent ที่เข้าถึง shell ได้ มันก็ทำหน้าที่เหมือนโค้ด มีสามประเด็นที่ทำให้ความเสี่ยงนี้เกิดขึ้นได้จริง:

  • agent มักถูกเริ่มใน Downloads ผู้คนใช้ agent เพื่อจัดระเบียบไฟล์หรือทำงานกับสิ่งที่เพิ่งดาวน์โหลดมา Forever บอก BleepingComputer ว่าลูกค้าหลายร้อยรายของบริษัทรัน coding agent จาก Downloads โดยมีเซสชัน Claude Code มากกว่า 1,300 เซสชันที่เริ่มต้นที่นั่น
  • ผลกระทบอยู่นานกว่าเซสชัน การตั้งค่า global ที่ถูกเปลี่ยน เซิร์ฟเวอร์ MCP ใหม่ หรือ API endpoint ที่ถูกเปลี่ยนเส้นทาง ยังคงทำงานต่อไปแม้ไฟล์ต้นทางจะถูกลบแล้ว
  • ข้อมูลรับรองคือเป้าหมาย session token ของ agent ที่ถูกขโมยคือการล็อกอินที่ใช้งานได้จริง ผู้โจมตีใช้มันได้โดยไม่ต้องรันโค้ดใดๆ บนเครื่อง

แนวทางป้องกันในทางปฏิบัติ

1. เลือกตำแหน่งที่จะเริ่ม agent

  • อย่าเริ่ม coding agent ใน ~/Downloads หรือในโฟลเดอร์ใดก็ตามที่เบราว์เซอร์ อีเมล หรือแอปแชตเขียนไฟล์ลงไป ให้ย้ายหรือ clone งานไปไว้ในโฟลเดอร์ทำงานเฉพาะก่อน
  • หลีกเลี่ยงการเริ่ม agent ในโฟลเดอร์ home ด้วย ให้เริ่มในโฟลเดอร์โปรเจกต์นั้นๆ โดยตรง BleepingComputer ระบุว่า OpenAI และ Anthropic ก็แนะนำเช่นเดียวกัน
  • พิจารณาตั้งค่าเบราว์เซอร์ให้ถามตำแหน่งบันทึกทุกครั้งที่ดาวน์โหลด แม้จะต้องคลิกเพิ่มอีกครั้ง แต่ช่วยหยุดการดาวน์โหลดแบบเงียบๆ ได้

2. ค้นหาไฟล์คำสั่งที่คุณไม่ได้เขียนเอง

ค้นหาในตำแหน่งที่ไฟล์ที่ไม่น่าเชื่อถือมักไปตกอยู่ รวมถึงโฟลเดอร์ home ของคุณ บน Linux และ macOS:

find ~/Downloads ~/Desktop ~ -maxdepth 3 \( -name AGENTS.md -o -name AGENTS.override.md -o -name CLAUDE.md -o -name CLAUDE.local.md \) -print 2>/dev/null | sort -u

บน Windows ใน PowerShell:

Get-ChildItem $HOME\Downloads, $HOME\Desktop -Recurse -Depth 3 -Force -ErrorAction SilentlyContinue -Include AGENTS.md, AGENTS.override.md, CLAUDE.md, CLAUDE.local.md | Select-Object FullName, LastWriteTime

อ่านทุกไฟล์ที่พบก่อนให้ agent เข้าใกล้ ระวังเป็นพิเศษกับคำสั่งให้ติดตั้งแพ็กเกจ เพิ่มเซิร์ฟเวอร์ เปลี่ยน API endpoint หรือปิดการอนุมัติ ตรวจสอบไฟล์คำสั่งส่วนตัวของคุณด้วย คือ ~/.codex/AGENTS.md และ ~/.claude/CLAUDE.md เพราะไฟล์เหล่านี้มีผลกับทุกเซสชัน

ไฟล์คำสั่งของโปรเจกต์ที่ถูกต้องจะอธิบายวิธี build และทดสอบโปรเจกต์ ไม่มีเหตุผลใดที่จะต้องเปลี่ยนการตั้งค่า global ของ agent, API endpoint หรือการตั้งค่าความปลอดภัย ให้ถือว่าไฟล์ใดก็ตามที่ขอเปลี่ยนแปลงสิ่งเหล่านี้เป็นไฟล์ประสงค์ร้าย

3. ตรวจสอบการตั้งค่า agent ว่ามีการเปลี่ยนแปลงที่คุณไม่ได้ทำหรือไม่

ตามคำแนะนำของ Forever ให้มองหาบล็อกเซิร์ฟเวอร์ MCP ที่ไม่คาดคิด ค่า chatgpt_base_url ที่ถูกเปลี่ยน หรือ ANTHROPIC_BASE_URL หรือ API endpoint อื่นที่คุณไม่ได้ตั้งไว้:

grep -nE '^\[mcp_servers|base_url' ~/.codex/config.toml
grep -nE 'BASE_URL|mcpServers' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json .mcp.json 2>/dev/null

ทีมที่ใช้ Claude Code สามารถบังคับการตั้งค่าจากส่วนกลางด้วย managed settings และยังใช้ ConfigChange hooks เพื่อตรวจสอบหรือบล็อกการเปลี่ยนการตั้งค่าระหว่างเซสชันได้

4. เปิดใช้มาตรการป้องกันไว้เสมอ

  • เปิดการแจ้งขออนุมัติและ sandbox ไว้ หลีกเลี่ยง flag ที่ข้ามสิ่งเหล่านี้ เช่น --dangerously-bypass-approvals-and-sandbox ของ Codex หรือ --dangerously-skip-permissions ของ Claude Code นอกสภาพแวดล้อมแบบใช้แล้วทิ้ง
  • อ่านการแจ้งขออนุมัติสำหรับไฟล์การตั้งค่าและไฟล์ config อย่างละเอียด ในการทดสอบ Claude Code ขั้นตอนการอนุมัติคือสิ่งที่หยุดการโจมตีได้ประมาณครึ่งหนึ่ง
  • อ่านกล่องโต้ตอบ workspace trust ของ Claude Code ก่อนยอมรับสำหรับโฟลเดอร์ใหม่
  • ทำงานกับ repository และไฟล์ดาวน์โหลดที่ไม่น่าเชื่อถือภายในเครื่องเสมือนหรือ dev container ไม่ใช่บนเครื่องทำงานหลัก
  • สำหรับ npm ให้บล็อกแพ็กเกจ MALFEX ที่ทราบแล้ว และพิจารณาใช้ ignore-scripts สำหรับการติดตั้งที่ยังไม่ได้ตรวจสอบ

5. หากคุณพบไฟล์ที่ถูกวางไว้

  1. อย่าเริ่ม agent ในโฟลเดอร์นั้น เก็บสำเนาไฟล์ไว้เพื่อการสืบสวน แล้วลบออกจากโฟลเดอร์
  2. ตรวจสอบไฟล์การตั้งค่า agent ที่ระบุไว้ข้างต้น และลบสิ่งที่คุณไม่ได้เพิ่มเอง
  3. ให้สันนิษฐานว่า session token ของ agent อาจรั่วไหลแล้ว ออกจากระบบแล้วเข้าสู่ระบบใหม่ และเปลี่ยน API key ทั้งหมดที่ agent เข้าถึงได้
  4. ค้นหา function-color และ function-flag ใน lockfile และโฟลเดอร์ node_modules หากมีการติดตั้งตัวใดตัวหนึ่ง ให้ถือว่าเครื่องถูกเจาะระบบแล้ว และปฏิบัติตามกระบวนการรับมือเหตุการณ์ของคุณ

ภาพรวมที่กว้างขึ้น

ชื่อบทความของ Forever คือ “Markdown Is the New Executable” ซึ่งเป็นมุมมองที่มีประโยชน์ต่อไฟล์ใดก็ตามที่ agent อ่านเป็นคำสั่ง ไฟล์คำสั่งเป็นตัวกำหนดว่า agent ที่เข้าถึง shell ได้จะทำอะไรต่อไป จึงควรได้รับความระมัดระวังเช่นเดียวกับสคริปต์: รู้ว่ามาจากไหน ตรวจทานการเปลี่ยนแปลง และเก็บให้ห่างจากโฟลเดอร์ที่ใครก็ได้บนอินเทอร์เน็ตเขียนลงไปได้ วิธีแก้ไขในที่นี้ส่วนใหญ่เป็นนิสัย ไม่ใช่แพตช์ และมีต้นทุนในการนำไปใช้ต่ำ

เอกสารอ้างอิง