ผู้ช่วยเขียนโค้ดด้วย AI สามารถถูกควบคุมได้โดยรายการใน .git/config ที่เป็นอันตราย ซึ่งใช้ประโยชน์จากฟีเจอร์ core.fsmonitor ของ Git ทำให้ repository ที่ไม่น่าเชื่อถือสามารถรันคำสั่งบนเครื่องของนักพัฒนาได้ทันทีที่ผู้ช่วยทำการสแกนไฟล์
ช่องโหว่นี้ปรากฏขึ้นในเอเจนต์ยอดนิยมหลายตัว ได้แก่ Claude Code, Cursor, OpenAI Codex, Goose, Qwen Code, Grok Build และ Hermes ในเอเจนต์ที่ได้รับการแก้ไขแล้ว การโจมตีนี้จะไม่สามารถใช้งานได้อีกต่อไป ส่วนเอเจนต์ที่เหลือยังคงมีช่องโหว่ โดยไม่จำเป็นต้องมีการคลิกหรือตอบรับคำสั่งใดๆ เพิ่มเติม และโค้ดที่เป็นอันตรายจะรันด้วยสิทธิ์ของผู้ใช้เอง นอกเหนือจาก sandbox ใดๆ ที่เอเจนต์ AI อาจจัดเตรียมไว้ให้
วิธีที่การโจมตีเข้าถึงนักพัฒนา
- ผู้รับเหมาบีบอัดโปรเจกต์เป็นไฟล์ zip แล้วส่งทางอีเมล
- เพื่อนร่วมทีมแชร์โฟลเดอร์ผ่านไดรฟ์เครือข่าย
- การส่งมอบ USB stick ที่มีโค้ดอยู่ภายใน
ในแต่ละกรณี repository จะมาในรูปแบบไดเรกทอรีที่มีโฟลเดอร์ .git อยู่แล้ว เมื่อผู้ช่วย AI เปิดโฟลเดอร์ มักจะมีการรัน git status อยู่เบื้องหลังเพื่อสร้างมุมมองของโค้ด Git ช่วยให้การทำงานนั้นเร็วขึ้นด้วยการตั้งค่า core.fsmonitor ซึ่งจะบอกให้ Git เรียกโปรแกรมภายนอกเพื่อเฝ้าดูการเปลี่ยนแปลงของระบบไฟล์ หากไฟล์ .git/config ของ repository มีการกำหนดคำสั่งที่เป็นอันตรายสำหรับ core.fsmonitor Git จะรันคำสั่งนั้นโดยอัตโนมัติโดยไม่ต้องขออนุญาตผู้ใช้
เนื่องจากคำสั่งถูกเรียกใช้งานโดย Git เอง มันจึงได้รับสิทธิ์เดียวกับผู้ใช้และสามารถข้ามผ่าน sandbox ใดๆ ที่เครื่องมือ AI อาจตั้งค่าไว้ การโจมตีจะไม่เกิดขึ้นระหว่างการ git clone, git fetch หรือ git pull ตามปกติ แต่จะทำงานก็ต่อเมื่อมีการแตกไฟล์ repository ที่มี metadata ของ .git ติดมาด้วยแล้วเท่านั้น
ทำไมเรื่องนี้ถึงสำคัญ
นักพัฒนาพึ่งพาผู้ช่วย AI มากขึ้นเรื่อยๆ ในการแนะนำการเขียนโค้ด (completions), ปรับปรุงโครงสร้างโค้ด (refactor) หรือสร้างโมดูลทั้งชุด เครื่องมือเหล่านี้ต้องการภาพรวม (snapshot) ของโครงสร้างไฟล์ในโปรเจกต์อย่างรวดเร็ว จึงมีการเรียกใช้คำสั่ง Git อย่างเงียบๆ หาก repository ที่เป็นอันตรายสามารถรันโค้ดได้ในขณะนั้น ผู้โจมตีจะสามารถเข้าควบคุมเครื่องทำงานของนักพัฒนาได้โดยไม่มีการแจ้งเตือนใดๆ ให้เห็น ผลกระทบที่อาจเกิดขึ้นมีตั้งแต่การขโมยข้อมูลประจำตัว (credentials) ไปจนถึงการติดตั้ง backdoor ที่ฝังตัวถาวร ในขณะที่ผู้ใช้คิดว่าพวกเขากำลังแค่ "ตรวจสอบ" โค้ดด้วยผู้ช่วย AI เท่านั้น
การตรวจหา repository ที่ถูกวางยา
ก่อนจะส่ง repository ให้กับผู้ช่วย ให้รันคำสั่ง:
git config --get core.fsmonitor
หากมีผลลัพธ์แสดงออกมา (ไม่เป็นค่าว่าง) แสดงว่ามีการตั้งค่าให้โปรแกรมทำงานโดยอัตโนมัติ เพื่อการตรวจสอบที่ครอบคลุมยิ่งขึ้น ให้แสดงรายการการตั้งค่า Git ที่น่าสงสัย:
git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'
หากคุณพบรายการที่คุณไม่ได้เป็นคนเพิ่ม ให้ลบออกด้วย:
git config --local --unset core.fsmonitor
โปรดทราบว่าการตั้งค่า git config --global core.fsmonitor false ไม่สามารถ ป้องกันคุณได้ เนื่องจากการตั้งค่าในระดับ repository (local) จะมีลำดับความสำคัญเหนือกว่าการตั้งค่าระดับ global เสมอ ดังนั้น repository ที่เป็นอันตรายจึงสามารถเพิกเฉยต่อกฎระดับ global ได้ง่ายๆ
สถานะการแก้ไขในปัจจุบัน
- Claude Code – แก้ไขแล้ว (fsmonitor)
- Cursor – แก้ไขแล้ว
- OpenAI Codex – แก้ไขแล้ว
- Goose – แก้ไขแล้ว
- Qwen Code – ยังไม่ได้รับการแก้ไข
- Grok Build – ยังไม่ได้รับการแก้ไข
- Hermes – ยังไม่ได้รับการแก้ไข
นักพัฒนาที่ใช้เอเจนต์ที่ยังไม่ได้รับการแก้ไข ควรระมัดระวัง repository ที่ได้รับมาว่าอาจเป็นอันตราย จนกว่าจะเปลี่ยนเครื่องมือหรือบังคับใช้โยบาย Git ในเครื่องที่เข้มงวดขึ้น
มุมมองโต้แย้งจากชุมชน Git
core.fsmonitor ของ Git เป็นฟีเจอร์เพื่อเพิ่มประสิทธิภาพการทำงานที่ถูกต้อง ไม่ใช่ข้อผิดพลาด (bug) โดยผู้ดูแลระบบโต้แย้งว่า ความรับผิดชอบในการตรวจสอบเนื้อหาของ repository ก่อนที่จะเรียกใช้คำสั่ง Git นั้นอยู่ที่ผู้เรียกใช้งาน การปิดใช้งานฟีเจอร์นี้ในระดับ global เป็นการบรรเทาปัญหาที่ตรงไปตรงมา แต่ตามที่ระบุไว้ การตั้งค่าทับซ้อนในระดับ local สามารถทำลายการป้องกันนั้นได้ การอภิปรายในวงกว้างในขณะนี้มุ่งเน้นไปที่ว่า ผู้ช่วย AI ควรจะทำ sandbox สำหรับการเรียกใช้ Git ภายนอกทั้งหมด หรือควรปฏิเสธการประมวลผล repository ที่มี custom fsmonitor hooks
สิ่งที่ควรจับตามองต่อไป
- การอัปเดตจากเอเจนต์ AI ที่ยังไม่ได้รับการแก้ไข โดยเฉพาะคำแถลงใดๆ เกี่ยวกับการทำ sandbox สำหรับการเรียกใช้ Git
- การเปลี่ยนแปลงที่อาจเกิดขึ้นในการจัดการค่าเริ่มต้นของ
core.fsmonitorใน Git สำหรับไดเรกทอรีที่ไม่น่าเชื่อถือ - เครื่องมือจากบุคคลที่สามที่สามารถล้างข้อมูล (sanitize) ใน
.git/configของ repository ก่อนที่จะส่งถึงผู้ช่วย
บทสรุป
เพียงบรรทัดเดียวในไฟล์คอนฟิกที่ถูกซ่อนไว้ สามารถเปลี่ยนความสะดวกสบายที่ขับเคลื่อนด้วย AI ให้กลายเป็นช่องทางในการรันโค้ดจากระยะไกล (remote-code-execution vector) ได้ จนกว่าเอเจนต์ที่มีช่องโหว่จะได้รับการแก้ไข แนวทางที่ปลอดภัยที่สุดคือการตรวจสอบทุก repository ที่ได้รับมานอกเหนือจากขั้นตอนการ clone มาตรฐาน และลบ core.fsmonitor หรือ hook ที่คล้ายกันออก ก่อนที่จะอนุญาตให้ผู้ช่วย AI เข้าถึงโค้ดนั้น
