AI coding assistants เช่น Claude Code, Cursor และ Grok Build สามารถรันคำสั่งใดๆ ก็ได้ทันทีที่นักพัฒนาเปิด repository ที่ไม่น่าเชื่อถือ โดยไม่ต้องคลิกหรือตอบรับใดๆ ช่องโหว่นี้เกิดจากวิธีที่เครื่องมือเหล่านี้เรียกใช้ฟีเจอร์ core.fsmonitor ของ Git เพื่อสแกนไฟล์ในโปรเจกต์
ทำไมเรื่องนี้ถึงสำคัญในตอนนี้
นักพัฒนาเริ่มพึ่งพา AI agent มากขึ้นในการแนะนำโค้ด, ปรับปรุงโครงสร้างฟังก์ชัน (refactor), หรือแม้แต่เขียนโมดูลทั้งชุด Agent เหล่านี้จำเป็นต้องมีข้อมูลภาพรวม (snapshot) ของ workspace อย่างรวดเร็ว จึงมีการรัน git status อยู่เบื้องหลัง เมื่อ Git อ่านไฟล์ .git/config ของ repository ค่าใดๆ ที่ถูกกำหนดให้กับ core.fsmonitor จะถูกปฏิบัติเหมือนเป็นคำสั่ง shell ที่ Git จะรัน ผู้ไม่หวังดีสามารถใส่คำสั่งที่สร้างขึ้นมาไว้ในค่าคอนฟิกนั้น และเมื่อ AI เรียกใช้ Git ในเบื้องหลัง คำสั่งนั้นจะถูกรันทันทีก่อนที่ผู้ใช้จะพิมพ์โค้ดแม้แต่บรรทัดเดียว
โค้ดดังกล่าวจะรันด้วยสิทธิ์ของผู้พัฒนาเอง ซึ่งเป็นการข้ามระบบ sandbox ที่ AI agent มักจะทำงานอยู่ ในทางปฏิบัติ repository ที่ถูกฝังมัลแวร์สามารถติดตั้งมัลแวร์, ขโมยข้อมูลประจำตัว (credentials), หรือแก้ไขไฟล์ต้นฉบับได้ ในขณะที่นักพัฒนายังคงเชื่อว่าผู้ช่วย AI กำลังเพียงแค่ให้คำแนะนำเท่านั้น
ขั้นตอนการโจมตี
- การเตรียมการ (Preparation) – ผู้โจมตีสร้าง repository ที่มีไฟล์
.git/configซึ่งมีบรรทัดอย่างcore.fsmonitor = /path/to/malicious/script - การส่งมอบ (Delivery) – repository ถูกส่งต่อในรูปแบบไฟล์ zip, คัดลอกมาจาก USB, ซิงค์ผ่านไดรฟ์ที่ใช้ร่วมกัน หรือวางไว้ในเครื่องของเหยื่อโดยที่มีโฟลเดอร์
.gitติดไปด้วยอยู่แล้ว - การกระตุ้น (Trigger) – นักพัฒนาเปิดโฟลเดอร์นั้นใน IDE ที่รองรับ AI ผู้ช่วยจะรัน
git statusเพื่อรวบรวมบริบท (context) Git จะอ่านค่าคอนฟิกในเครื่อง, รันคำสั่งcore.fsmonitor, และสคริปต์อันตรายจะทำงานทันที
การใช้ git clone แบบปกติจะไม่ทำให้เกิดความเสี่ยงนี้ เนื่องจากกระบวนการ clone จะสร้างไดเรกทอรี .git ขึ้นมาใหม่ซึ่งไม่มีค่าคอนฟิกที่ถูกดัดแปลง การโจมตีนี้จะสำเร็จก็ต่อเมื่อผู้โจมตีสามารถส่งมอบโฟลเดอร์ .git ที่มีอยู่ก่อนแล้วมาให้ได้เท่านั้น
สิ่งที่อาจได้รับความเสียหาย
- นักพัฒนาเป็นรายบุคคล อาจถูกเจาะระบบเครื่องคอมพิวเตอร์โดยไม่รู้ตัว และสูญเสียข้อมูลใดๆ ก็ตามที่ AI agent สามารถเข้าถึงได้
- ทีมงาน ที่แชร์โค้ดผ่านไดรฟ์ภายในหรือไฟล์ zip จากผู้รับเหมา อาจแพร่กระจายมัลแวร์ไปยังเวิร์กสเตชันหลายเครื่อง
- ผู้ให้บริการเครื่องมือ เสี่ยงต่อความเสียหายด้านชื่อเสียง หากผู้ใช้คิดว่าการรั่วไหลเกิดจาก AI assistant แทนที่จะเป็นการทำงานของ Git
เนื่องจากคำสั่งอันตรายจะได้รับสิทธิ์เดียวกับผู้ใช้ มันจึงสามารถแก้ไขไฟล์ใดๆ ก็ได้ที่นักพัฒนาเข้าถึงได้ รวมถึง SSH keys, build scripts หรือข้อมูลประจำตัวในการ deploy (deployment credentials)
ขั้นตอนการป้องกันที่นักพัฒนาสามารถทำได้ทันที
อย่าเชื่อใจการตั้งค่า Git ในเครื่อง (local Git settings) ค่าคอนฟิกของ repository จะมีลำดับความสำคัญเหนือกว่าค่า global ทุกครั้งที่ AI assistant สอบถามข้อมูลโปรเจกต์
ตรวจสอบรายการ
core.fsmonitorก่อนเปิดโฟลเดอร์ด้วยผู้ช่วย AI:git config --get core.fsmonitorหากพบค่าใดๆ ปรากฏอยู่ ให้ถือว่าเป็นสิ่งที่น่าสงสัย
ลบรายการดังกล่าวออก ด้วยคำสั่ง:
git config --local --unset core.fsmonitorตรวจสอบคีย์เสี่ยงอื่นๆ ที่ Git สามารถรันได้:
hooksPath,sshCommand,pager,editor,filterโดยใช้รูปแบบgit config --getแบบเดียวกันเพื่อตรวจสอบว่าค่าเหล่านั้นว่างเปล่าเลือกใช้การ clone ที่สะอาด (clean clones) สำหรับโค้ดใดๆ ที่คุณตั้งใจจะส่งให้เครื่องมือ AI หากจำเป็นต้องทำงานกับไฟล์ zip หรือโฟลเดอร์ที่ถูกส่งต่อมา ให้ลบไดเรกทอรี
.gitทิ้งแล้วทำการ re-initialize repository ใหม่ หรือทำการตรวจสอบตามขั้นตอนข้างต้นก่อน
ความรับผิดชอบอยู่ที่ใคร
ช่องโหว่นี้ไม่ใช่ข้อบกพร่องของโมเดลภาษา (language models) ที่ขับเคลื่อน Claude Code, Cursor หรือ Grok Build แต่เป็นผลพวงมาจากวิธีที่เครื่องมือเหล่านั้นรวบรวมข้อมูลไฟล์ ผู้ให้บริการบางรายเริ่มมีการทำ sandbox สำหรับการเรียกใช้ Git ให้รัดกุมยิ่งขึ้น แต่พฤติกรรมเริ่มต้น (default behavior) ยังคงเชื่อถือการตั้งค่าใน repository ท้องถิ่น จนกว่าอุตสาหกรรมจะมีการนำมาตรฐานที่ลบหรือเพิกเฉยต่อค่าคอนฟิกที่อาจเป็นอันตรายเมื่อ AI agent สแกน workspace มาใช้ นักพัฒนาจะต้องเป็นปราการด่านสุดท้ายในการป้องกัน
สิ่งที่ควรจับตามองต่อไป
- การอัปเดตเครื่องมือ ที่มีการล้างค่า (sanitize) การตั้งค่า Git อย่างชัดเจนก่อนที่จะเรียกใช้
git status - แนวทางปฏิบัติจากชุมชน สำหรับการพัฒนาโดยใช้ AI อย่างปลอดภัย ซึ่งน่าจะรวมถึงการตรวจสอบความพร้อม (pre-flight checks) ที่แนะนำ
- งานวิจัยด้านความปลอดภัย ที่อาจค้นพบคีย์คอนฟิกของ Git อื่นๆ ที่สามารถรันโค้ดได้ ซึ่งจะทำให้รายการตรวจสอบขยายกว้างกว่า 5 รายการที่ระบุไว้ข้างต้น
สรุปสั้นๆ: ผู้ช่วย AI อาจเป็นคู่หูเขียนโปรแกรม (pair-programmer) ที่สะดวกสบาย แต่ก็พร้อมจะรันคำสั่งใดๆ ก็ตามที่ซ่อนอยู่ใน Git config ของ repository ได้อย่างเต็มใจ ดังนั้น ควรตรวจสอบ workspace ให้ดีก่อนที่จะปล่อยให้ผู้ช่วย AI เข้าไปจัดการ
