สรุปสั้น

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

เงื่อนไขของการโจมตีคือรีโพสิทอรีต้องเดินทางมาถึงเครื่องเหยื่อในรูปของไฟล์ที่ยังมีไดเรกทอรี .git ติดมาด้วย ซึ่งเกิดขึ้นได้กับไฟล์บีบอัดที่ส่งต่อกัน ไดรฟ์ที่แชร์ร่วมกัน โฟลเดอร์ซิงก์ หรือแฟลชไดรฟ์ ในขณะที่การ clone ตามปกติจะไม่นำคอนฟิกของฝั่งผู้ส่งติดมาด้วย ปัจจุบันแพตช์ออกแล้วสำหรับ goose, Claude Code และ Cursor ส่วน Hermes Agent, Qwen Code, Grok Build และอีกหนึ่งเส้นทางใน Claude Code ยังคงรันคำสั่งที่มากับรีโพเมื่อ Manifold ทดสอบซ้ำเมื่อวันที่ 1 กันยายน 2569

วันเดียวกันนั้นบริษัท OpenAI เผยแพร่รหัสช่องโหว่ของตนเอง 3 รายการที่ครอบคลุมปัญหาประเภทเดียวกันใน Codex โดยให้เครดิตแก่ทีมวิจัยที่ไม่เกี่ยวข้องกัน 3 ทีม ซึ่งสะท้อนว่าปัญหานี้ถูกค้นพบโดยอิสระหลายทางในเวลาไล่เลี่ยกัน ทั้งนี้ยังไม่มีแหล่งใดรายงานว่ามีการนำช่องโหว่เหล่านี้ไปใช้โจมตีจริง

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 2 กันยายน 2569 ว่า Manifold Security เผยแพร่ผลการวิจัยชุดที่เรียกว่า GitSpawn ซึ่งอธิบายปัญหาที่เกิดจากค่าคอนฟิกของ Git ชื่อ core.fsmonitor โดยบริษัทเขียนรายละเอียดไว้ 5 รายการจากทั้งหมด 8 รายการ และระบุว่าพบรูปแบบเดียวกันในเอเจนต์มากกว่าที่เอ่ยชื่อไว้ในรายงาน

core.fsmonitor คือค่าตั้งเพื่อเพิ่มประสิทธิภาพของ Git ที่กำหนดคำสั่งซึ่ง Git จะเรียกทำงานเพื่อระบุว่าไฟล์ใดเปลี่ยนแปลงบ้าง และ Git อ่านค่านี้จากไฟล์ .git/config ของรีโพสิทอรีเอง ผลคือคำสั่งใด ๆ ที่ทำให้ Git รีเฟรชดัชนี รวมถึง git status และ git diff จะเรียกคำสั่งนั้นให้ทำงาน ส่วนเอเจนต์เขียนโค้ดเรียกคำสั่งเหล่านี้อยู่เบื้องหลังเพื่อดูว่าตัวเองอยู่บนสาขาใดและไฟล์ใดเปลี่ยนไปบ้าง โดยไม่ได้แตะคอนฟิกของรีโพเลย

จังหวะที่เพย์โหลดทำงานเป็นจุดที่ทำให้เรื่องนี้ร้ายแรงกว่าที่คิด เพราะบน Claude Code และ Hermes Agent เพย์โหลดจะทำงานก่อนที่ผู้ใช้จะกดยอมรับกล่องยืนยันความเชื่อถือของพื้นที่ทำงาน บน Qwen Code ทำงานก่อนที่ผู้ใช้จะยืนยันตัวตนด้วยซ้ำ ส่วนบน Grok Build ทำงานตั้งแต่การกดแป้นพิมพ์ครั้งแรก กล่าวคือกลไกอนุมัติที่ผู้ใช้เข้าใจว่าเป็นด่านป้องกันนั้นมาช้าเกินไปแล้วในทุกกรณี

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

ฝั่ง OpenAI อธิบายลักษณะเดียวกันไว้ในบันทึกของ CVE-2026-19592 ว่า “ตัวช่วยนี้ทำงานนอกแซนด์บ็อกซ์คำสั่งของ Codex และไม่มีกล่องขออนุมัติจากผู้ใช้ ทำให้โค้ดที่ผู้โจมตีควบคุมรันด้วยสิทธิ์ของผู้ใช้ได้ โค้ดดังกล่าวสามารถอ่าน แก้ไข หรือลบไฟล์ของผู้ใช้ และเข้าถึงทรัพยากรอื่นที่บัญชีของผู้ใช้เข้าถึงได้”

ในกรณีของ goose คำสั่ง goose review ประกอบคำสั่ง Git ของตนโดยใส่แฟล็กคอนฟิกเพียงตัวเดียวคือ -c core.quotePath=off และไม่ได้ล้างค่าอื่นออกเลย GitHub จึงกำหนดให้ CVE-2026-72718 มีคะแนน CVSS 4.0 ที่ 7.0 ในประกาศที่ให้เครดิตแก่นาย Francisco Rosales ซึ่งเป็นรายการเดียวในชุดนี้ที่มีคะแนนความรุนแรงกำกับ โดยประกาศระบุว่า “การรัน goose review ในรีโพที่เป็นอันตรายจึงรันโค้ดของผู้โจมตี โดยไม่มีการส่งพรอมป์ ไม่มีการเรียกโมเดล ไม่มีการอนุมัติเครื่องมือ ไม่มีกล่องยืนยันความเชื่อถือ คำสั่งทำงานก่อนที่ goose จะติดต่อโมเดลด้วยซ้ำ”

ประเด็นที่ควรบันทึกไว้คือปัญหานี้ไม่ใช่ของใหม่ บริษัท Sonar รายงานจุดเดียวกันไว้ตั้งแต่เดือนเมษายน และระบุว่า Anthropic เคยย้ายลำดับการเริ่มทำงานเพื่อปิดช่องนี้ไปครั้งหนึ่งแล้ว พร้อมชี้ว่าการข้ามกล่องยืนยันความเชื่อถือแบบเดียวกันเคยเกิดกับ Visual Studio Code ก่อนเวอร์ชัน 1.63.1 (CVE-2021-43891) และ JetBrains IDEs ก่อนเวอร์ชัน 2021.3.1 (CVE-2022-24346) โดย Sonar เขียนไว้ว่า “ในเวอร์ชัน 2.0.34 Claude ถูกอัปเดตในลักษณะที่บรรเทาช่องโหว่เฉพาะจุดนั้น ด้วยการไม่รัน git status ก่อนที่ผู้ใช้จะอนุมัติกล่องยืนยันความเชื่อถืออีกต่อไป อย่างไรก็ตามยังมีปัญหาที่เกี่ยวข้องหลงเหลืออยู่” ทั้งนี้เวอร์ชัน 2.0.34 ออกเมื่อวันที่ 5 พฤศจิกายน 2568 ขณะที่ Manifold รายงานว่าพฤติกรรมตอนเริ่มทำงานแบบเดิมกลับมาปรากฏอีกครั้งในเวอร์ชัน 2.1.193 ซึ่งออกเมื่อวันที่ 25 มิถุนายน 2569 นอกจากนี้ Anthropic เองก็เคยเปิดเผยช่องโหว่ประเภทรันโค้ดก่อนยืนยันความเชื่อถือใน Claude Code มาก่อน โดยประกาศเมื่อเดือนมิถุนายนสำหรับ CVE-2026-55607 ระบุถึงการรัน git fsmonitor ระหว่างการทำงานกับ worktree

เอเจนต์และเวอร์ชันที่ได้รับผลกระทบ

  • goose — ทุกเวอร์ชันก่อน 1.44.0 แก้ไขแล้วใน 1.44.0
  • Codex CLI — 0.102.0 ถึง 0.130.0 แก้ไขแล้วใน 0.131.0
  • Codex Desktop สำหรับ macOS — 260202.0859 ถึง 26.513.31313 แก้ไขแล้วใน 26.519.22136
  • Codex Desktop สำหรับ Windows — 26.304.38 ถึง 26.513.40821 แก้ไขแล้วใน 26.519.21041 และแพ็กเกจบน Microsoft Store 26.304.38.0 ถึง 26.513.4821.0 แก้ไขแล้วใน 26.519.2081.0
  • Claude Code — Manifold ยืนยันบน 2.1.193 และแก้ไขแล้วใน 2.1.196 สำหรับเส้นทาง core.fsmonitor ส่วนเส้นทางผ่านคำสั่ง claude ultrareview ยังยืนยันว่าใช้งานได้บน 2.1.252
  • Hermes Agent — ยืนยันบน 0.18.2 และ 0.21.0 ยังไม่มีแพตช์
  • Qwen Code — ยืนยันบน 0.19.6 และ 0.22.3 ยังไม่มีแพตช์
  • Grok Build — ยืนยันบน 0.2.93 และ 1.0.13 ยังไม่มีแพตช์

วิธีการโจมตี

ขั้นแรกผู้โจมตีเตรียมรีโพสิทอรีที่มีไฟล์ .git/config ตั้งค่า core.fsmonitor ให้ชี้ไปยังคำสั่งของตน จากนั้นส่งรีโพนั้นถึงเหยื่อในรูปแบบที่รักษาไดเรกทอรี .git ไว้ครบ เช่น ไฟล์บีบอัดที่แนบมากับข้อความ โฟลเดอร์บนไดรฟ์ที่แชร์กันในทีม โฟลเดอร์ที่ซิงก์ผ่านบริการคลาวด์ หรือแฟลชไดรฟ์ที่ส่งมือต่อมือ จุดนี้คือเงื่อนไขสำคัญที่จำกัดขอบเขตของการโจมตี เพราะการ clone ตามปกติจะไม่พาคอนฟิกของฝั่งผู้ส่งมาด้วย

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

สิ่งที่ทำให้กลไกป้องกันที่มีอยู่ไม่ช่วยอะไรคือลำดับเวลา เพราะการเรียกคำสั่งเบื้องหลังเกิดขึ้นตั้งแต่ตอนเริ่มเซสชัน ก่อนที่กล่องยืนยันความเชื่อถือของพื้นที่ทำงานจะถูกแสดง ก่อนที่ผู้ใช้จะยืนยันตัวตน หรือกระทั่งตั้งแต่การกดแป้นแรก แล้วแต่ผลิตภัณฑ์ นอกจากนี้ยังมีคีย์คอนฟิกอื่นของ Git ที่ให้ผลคล้ายกัน เช่น core.hooksPath และ attr.tree ที่ใช้ร่วมกับ filter แบบ clean หรือ process ซึ่งเป็นเหตุผลที่การตรวจสอบควรดูมากกว่าค่า fsmonitor เพียงตัวเดียว

บริษัท Cobalt สรุปธรรมชาติของเทคนิคนี้ไว้ในบทความฝั่ง red team เมื่อเดือนธันวาคมว่า “การใช้ FSMonitor ในทางที่ผิดเป็นการใช้ประโยชน์จากฟีเจอร์ที่ถูกต้อง ไม่ใช่จากบั๊ก มันอาศัยจุดตัดระหว่างความยืดหยุ่นของ Git กับระบบอัตโนมัติของ IDE สมัยใหม่ เพื่อเปลี่ยนเหตุการณ์เปิดรีโพสิทอรีให้กลายเป็นการรันโค้ด”

สถานะการแก้ไขและข้อจำกัดของข้อมูลชุดนี้

รายงานส่วนที่ว่าด้วยการติดต่อผู้ผลิตมีรายละเอียดที่ควรอ่านอย่างระมัดระวัง เพราะข้อมูลเกือบทั้งหมดในส่วนนี้มาจากฝั่งผู้วิจัยเพียงด้านเดียว โดย Manifold ระบุว่ารายงานของตน 5 รายการถูกตีกลับว่าซ้ำกับที่นักวิจัยรายอื่นยื่นไว้อย่างเป็นอิสระ ซึ่งรายการหนึ่งถูกยื่นในวันเดียวกัน

สำหรับ Claude Code ผู้วิจัยรายงานปัญหา core.fsmonitor เมื่อวันที่ 26 มิถุนายน และระบุว่าได้รับการแก้ไขใน 2.1.196 เมื่อวันที่ 29 มิถุนายน โดยรายงานถูกปิดในฐานะรายการซ้ำกับที่ยื่นก่อนหน้าในวันเดียวกัน ทั้งนี้ Anthropic ไม่ได้ออกประกาศสำหรับกรณีนี้ และ The Hacker News ตรวจสอบเมื่อวันที่ 2 กันยายนพบว่าบันทึกประกาศของแพ็กเกจบน npm ไม่ครอบคลุมทั้งสองกรณีของ Claude Code

ส่วนเส้นทางที่สองของ Claude Code ซึ่งเข้าถึงผ่านคำสั่ง claude ultrareview นั้นเปิดใช้คีย์คอนฟิกของ Git อีกตัวที่ Manifold ยังไม่เปิดเผย โดยยืนยันว่าปัญหายังใช้งานได้บนเวอร์ชัน 2.1.252 เมื่อวันที่ 1 กันยายน เทียบกับรุ่นปัจจุบันที่ 2.1.258 และยังไม่มีแหล่งใดระบุว่ารุ่นที่ออกตามมาปิดช่องนี้แล้วหรือยัง

ศูนย์รับมือด้านความปลอดภัยของบริษัท Alibaba รับรายงานของ Qwen Code เมื่อวันที่ 7 กรกฎาคม โดย The Hacker News ยืนยันผ่าน npm registry เมื่อวันที่ 2 กันยายนว่าเวอร์ชัน 0.22.3 ที่ Manifold นำมาทดสอบซ้ำยังเป็นรุ่นล่าสุดที่เผยแพร่อยู่ ขณะที่ฝั่ง Hermes Agent ของบริษัท Nous Research นั้น Manifold ระบุว่าติดต่อไป 6 ครั้งผ่าน 5 ช่องทาง แล้วประกาศแบบไม่เปิดเผยก็ยังไม่ถูกคัดกรอง และแม้ Manifold จะระบุว่า VulnCheck กำหนดรหัส CVE-2026-71963 ให้ แต่ The Hacker News ไม่พบบันทึกที่เผยแพร่ของรหัสนั้นในรายการ CVE ของ MITRE เมื่อวันที่ 2 กันยายน ทั้งที่รหัสที่อยู่ข้างเคียงกันเป็นบันทึกของ VulnCheck ที่เผยแพร่แล้ว

ด้าน xAI ปิดรายงานก่อนหน้าที่เป็นปัญหาประเภทเดียวกันในฐานะข้อมูลเพื่อทราบเมื่อวันที่ 1 กรกฎาคม แล้วปิดรายงานของ Manifold ที่ยื่นเมื่อวันที่ 14 กรกฎาคมในฐานะรายการซ้ำกับรายงานนั้น นอกจากนี้ยังมีงานวิจัยแยกอีกชิ้นบนบิลด์ 0.2.93 ตัวเดียวกันที่พบว่า Grok Build อัปโหลดรีโพสิทอรี Git ทั้งก้อนขึ้นไปยังพื้นที่จัดเก็บของ xAI ซึ่งบริษัทตอบเรื่องนี้บนแพลตฟอร์ม X แทนที่จะออกประกาศอย่างเป็นทางการ ส่วน Cursor CLI นั้น Manifold บันทึกปัญหาประเภทเดียวกันไว้ก่อนหน้านี้ 3 สัปดาห์ โดยคำสั่งตั้งค่าที่มากับรีโพทำงานก่อนกล่องยืนยันความเชื่อถือและอยู่นอกแซนด์บ็อกซ์เช่นกัน

สุดท้าย ยังไม่มีแหล่งใดรายงานการนำช่องโหว่เหล่านี้ไปใช้โจมตีจริง โดย The Hacker News ตรวจสอบแคตตาล็อกช่องโหว่ที่ถูกใช้โจมตีจริงของหน่วยงาน CISA สหรัฐฯ เมื่อวันที่ 2 กันยายน เวอร์ชัน 2026.09.01 ซึ่งมี 1,687 รายการ และไม่พบรหัสใดในชุดนี้อยู่ในแคตตาล็อก

ผลกระทบต่อไทย

จุดที่ผูกกับไทยโดยตรงคือ Hermes Agent ของ Nous Research ซึ่งอยู่ในรายชื่อเอเจนต์ที่ยังไม่มีแพตช์ในรายงานชุดนี้ เป็นตัวเดียวกับที่ผู้โจมตีเคยสั่งให้ทำงานเองโดยไม่มีคนคุมเพื่อเจาะเครือข่ายหน่วยงานรัฐของไทยเมื่อเดือนกรกฎาคม ตามที่เว็บไซต์นี้เคยรายงานไว้ในโพสต์ 2026/07/262 เรื่องเอเจนต์ AI ที่ถูกปล่อยให้ไล่เจาะเครือข่ายกระทรวงการคลัง ผลคือเอเจนต์ตัวหนึ่งปรากฏอยู่ทั้งสองฝั่งของสมการ คือเป็นเครื่องมือที่เคยถูกใช้โจมตีองค์กรไทย และเป็นซอฟต์แวร์ที่นักพัฒนาไทยที่หยิบมาใช้เองอาจถูกโจมตีผ่านมันได้ ขณะที่ผู้พัฒนายังไม่ตอบรับรายงานช่องโหว่หลังถูกติดต่อ 6 ครั้งผ่าน 5 ช่องทาง

ในทางปฏิบัติ ความเสี่ยงกับทีมพัฒนาในไทยไม่ได้อยู่ที่การ clone จากที่สาธารณะ แต่อยู่ที่วิธีส่งไฟล์ที่ใช้กันจริงในองค์กร ทั้งการส่งโฟลเดอร์โปรเจกต์เป็นไฟล์ ZIP ผ่านแชท การวางโปรเจกต์ไว้บนไดรฟ์ร่วมของทีม การซิงก์โฟลเดอร์งานผ่านบริการคลาวด์ และการรับไฟล์จากผู้รับเหมาภายนอกด้วยแฟลชไดรฟ์ ทั้งหมดนี้รักษาไดเรกทอรี .git ไว้ครบตามที่ช่องโหว่ต้องการ และเป็นเส้นทางที่หน่วยงานรัฐและบริษัทที่ทำงานกับผู้รับเหมาหลายรายใช้เป็นกิจวัตร

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

คำแนะนำ

ตรวจไฟล์ .git/config ก่อนเปิดโฟลเดอร์ที่ได้รับมาด้วยเอเจนต์ โดยมองหาคีย์ core.fsmonitor, core.hooksPath และ attr.tree ที่ใช้ร่วมกับ filter แบบ clean หรือ process

รันคำสั่ง git config --get core.fsmonitor ภายในรีโพสิทอรีใดก็ตามที่เดินทางมาถึงในรูปของไฟล์ และตรวจคอนฟิกระดับผู้ใช้ด้วย git config --global --list | grep fsmonitor

ปิดค่านี้เป็นค่าเริ่มต้นด้วยคำสั่ง git config --global core.fsmonitor false สำหรับเครื่องที่ไม่ได้ต้องการฟีเจอร์นี้จริง ๆ

ผู้ผลิตที่ทำเอเจนต์ควรล้างค่าคอนฟิกออกจากการเรียก Git เบื้องหลัง เช่นใช้ git -c core.fsmonitor=false status แทนการเรียกตรง ๆ

อัปเดตเอเจนต์ที่มีแพตช์แล้วให้เป็นรุ่นที่แก้ไข โดยเฉพาะ Codex CLI ซึ่งมีรุ่นปัจจุบันที่ 0.152.1 ณ วันที่ 2 กันยายน การติดตั้งที่ตรึงเวอร์ชันไว้ต่ำกว่า 0.131.0 จึงยังเปิดช่องอยู่

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

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