8 คะแนน โดย GN⁺ 2025-10-14 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในเดือนมิถุนายน 2025 พบ ช่องโหว่ร้ายแรง (CVSS 9.6) ใน GitHub Copilot Chat
  • ยืนยันความเป็นไปได้ของการรั่วไหลของข้อมูลลับและโค้ดส่วนตัวด้วยเทคนิค การข้าม CSP และ remote prompt injection
  • สามารถบิดเบือนผลลัพธ์การตอบของ Copilot ของผู้ใช้อื่นได้ด้วยการใช้ประโยชน์จาก ฟีเจอร์คอมเมนต์ที่ซ่อนอยู่ ของ GitHub
  • ประสบความสำเร็จในการข้าม CSP จากการวิเคราะห์เชิงลึกโครงสร้างการใช้งาน Camo proxy ของ GitHub
  • GitHub แก้ไขช่องโหว่นี้แบบเร่งด่วนใน เดือนสิงหาคม 2025 ด้วยการปิดการเรนเดอร์รูปภาพ

สรุป TL;DR

  • ในเดือนมิถุนายน 2025 พบช่องโหว่ร้ายแรงใน GitHub Copilot Chat ที่ทำให้ ซอร์สโค้ดและข้อมูลลับจากรีโพซิทอรีส่วนตัวรั่วไหล ได้
  • ผู้ค้นพบใช้ remote prompt injection และการ ข้าม CSP (Content Security Policy) ของ GitHub เพื่อควบคุมและบิดเบือนคำตอบของ Copilot ได้ทั้งหมด รวมถึงชี้นำให้เสนอมัลแวร์หรือลิงก์อันตราย
  • หัวใจของการโจมตีนี้คือการใช้ทั้ง ฟีเจอร์คอมเมนต์ที่ซ่อนอยู่แบบทางการของ GitHub และความไวต่อบริบทของ Copilot เพื่อแทรกพรอมป์ต์ในลักษณะที่ไม่มีใครมองเห็นได้
  • มีการวิเคราะห์พฤติกรรมที่ GitHub แปลงลิงก์รูปภาพภายนอกเป็น Camo proxy โดยอัตโนมัติ แล้วนำโครงสร้างนี้มาย้อนใช้ในระดับตัวอักษรเพื่อประกอบข้อมูลที่รั่วไหล
  • หลังมีการรายงานผ่าน HackerOne ทาง GitHub ได้แพตช์ด้วยการ ปิดฟังก์ชันการเรนเดอร์รูปภาพใน Copilot Chat

ภูมิหลัง

  • GitHub Copilot Chat เป็น ผู้ช่วย AI แบบบูรณาการ ที่ช่วยให้นักพัฒนาถามคำถาม ขอคำอธิบายโค้ด หรือรับข้อเสนอการพัฒนาได้
  • Copilot Chat อ้างอิง ข้อมูลบริบทหลากหลาย เช่น โค้ดในรีโพซิทอรี คอมมิต และ PR (pull request)
  • ยิ่งมีข้อมูลบริบทมากขึ้น พื้นผิวการโจมตีก็ยิ่งขยายตาม

การใช้ prompt injection และฟีเจอร์คอมเมนต์ที่ซ่อนอยู่

  • ในการทดลองโจมตีความไวต่อบริบทของ GitHub Copilot มีการแทรก พรอมป์ต์เฉพาะลงในคำอธิบาย PR (pull request)
  • แต่โดยปกติพรอมป์ต์หรือข้อความที่แทรกไว้จะถูกผู้ใช้ทุกคนมองเห็นได้
  • จากจุดนี้พบว่าสามารถใช้ ฟีเจอร์คอมเมนต์ที่ซ่อนอยู่แบบทางการของ GitHub(``) เพื่อ ส่งคำสั่งถึง Copilot โดยตรงในลักษณะที่มองไม่เห็น ได้
  • เมื่อใส่พรอมป์ต์ไว้ในคอมเมนต์ที่ซ่อนอยู่ เนื้อหาจะปรากฏใน Notifications แต่ไม่แสดงรายละเอียด จึงเกิดผลแบบ Server-Side Injection

อานุภาพของพรอมป์ต์อันตราย

  • พรอมป์ต์ในคอมเมนต์ที่ซ่อนอยู่จะยังส่งผลต่อ Copilot เหมือนเดิมเมื่อ ผู้ใช้อื่น เข้าถึงหน้า PR
  • สามารถแทรกคำสั่งแบบผสมได้ ไม่ใช่แค่ข้อความธรรมดา แต่รวมถึง ข้อเสนอแนะโค้ด, Markdown, URL อันตราย, และการแนะนำแพ็กเกจอันตรายอย่าง Copilotevil
  • Copilot ใช้ สิทธิ์เดียวกับผู้ใช้ที่ส่งคำขอนั้น จึงสามารถเข้าถึงรีโพซิทอรีส่วนตัวและใช้ข้อมูลภายในได้
  • สามารถจำลองสถานการณ์ที่ข้อมูลรั่วไหลไปถึงแฮ็กเกอร์เมื่อผู้ใช้กดคลิก ด้วยการ เพิ่มข้อมูลที่เข้ารหัสแบบ base16 ลงใน URL โดยตั้งใจ

สรุปผลกระทบหลัก

  • บิดเบือนและควบคุมเนื้อหาคำตอบของ Copilot ของผู้ใช้อื่น
  • ทำ prompt injection แบบปรับแต่งได้ ผ่าน Markdown, รูปภาพ, โค้ด, URL เป็นต้น
  • สามารถพยายามโจมตีเพื่อ ดึงข้อมูลภายในขอบเขตสิทธิ์ของผู้ใช้เหยื่อออกไปได้

การตีความเชิงโครงสร้างของการข้าม GitHub CSP

  • GitHub ใช้ CSP ที่เข้มงวด เพื่อจำกัดการโหลดรูปภาพและทรัพยากรจากโดเมนภายนอก
  • เมื่อมีการแทรกรูปภาพใน README หรือ Markdown ระบบจะใช้ GitHub Camo Proxy เพื่อแปลง URL ภายนอกให้เป็น proxy URL ที่อิงลายเซ็น HMAC
  • การให้เบราว์เซอร์โหลดรูปภาพได้จำเป็นต้องมี Camo URL และค่าลายเซ็นที่ GitHub สร้างไว้ล่วงหน้า
  • แม้ผู้ใช้จะสร้าง URL ที่มีข้อมูลแบบไดนามิกขึ้นเอง ก็จะ ถูกบล็อกหากไม่ผ่าน Camo proxy

วิธีใช้ประโยชน์จากโครงสร้าง Camo

  • ผู้ค้นพบได้ สร้างพจนานุกรมของ Camo proxy URL สำหรับชุดตัวอักษรและอักขระพิเศษทั้งหมดล่วงหน้า แล้วใส่ไว้ในพรอมป์ต์ที่ซ่อนอยู่
  • มีการออกแบบให้ Copilot ตอบคำขอแนว "เกม ASCII Art" โดยแปลง ข้อมูลที่รั่วไหล (เช่น ซอร์สโค้ดหรือคีย์) ให้กลายเป็นการเรียงต่อกันของรูปภาพจาก Camo proxy
  • แต่ละคำขอรูปภาพจะทำให้เบราว์เซอร์ตอบรับเพียง พิกเซลโปร่งใส 1x1 เท่านั้น จึงไม่มีการเปลี่ยนแปลงใดที่ผู้ใช้สังเกตเห็นได้
  • สุดท้ายมีการ เพิ่มพารามิเตอร์แบบสุ่มเพื่อหลีกเลี่ยงปัญหาแคช

การลงมือโจมตีและการทดสอบจริง

  • เป้าหมายถูกกำหนดเป็น ข้อมูลคำอธิบายช่องโหว่ zero-day ภายใน issue ของโปรเจกต์ส่วนตัว
  • มีการพิสูจน์กระบวนการโจมตีข้อมูลรั่วไหลจริงด้วย PoC (โค้ดพิสูจน์แนวคิด)
  • ยังทำให้ Copilot ค้นหาคีย์เวิร์ดอย่าง "AWS_KEY" และส่งผลลัพธ์ออกไปโดยอัตโนมัติ ได้ด้วย

การตอบสนองและแพตช์ของ GitHub

  • GitHub ได้แก้ไขช่องโหว่นี้ด้วยการ ปิดการเรนเดอร์รูปภาพใน Copilot Chat ทั้งหมดตั้งแต่วันที่ 14 สิงหาคม 2025

อ่านเพิ่มเติม

1 ความคิดเห็น

 
GN⁺ 2025-10-14
ความคิดเห็นจาก Hacker News
  • พวกเราดีใจมากที่ได้ย้ายสภาพแวดล้อมการทำงานทั้งหมดไปใช้ Forgejo ซึ่งเป็น VCS แบบ self-hosted โดยเริ่มย้ายรวมถึงรีโพซิทอรีของลูกค้าทั้งหมดตั้งแต่ 2 ปีก่อน ไม่เพียงช่วยลดค่าสมาชิก GitHub ลงได้มาก แต่ระบบที่มีนักพัฒนาใช้งานวันละ 30–40 คนก็ยังทำงานได้เร็วและเสถียรกว่ามาก อีกทั้งยังสั่งห้ามใช้ VSCode และเอดิเตอร์ทุกตัวที่มีฟีเจอร์ LLM ฝังมาในตัวด้วย นักพัฒนายังสามารถใช้ coding agent แบบ CLI ได้ แต่เรารันมันในคอนเทนเนอร์ที่แยกอย่างเข้มงวดและอนุญาตให้เข้าถึงซอร์สได้อย่างจำกัดเท่านั้น

    • อยากรู้ว่าในสภาพแวดล้อมที่นักพัฒนา 30–40 คนต่างโคลนรีโพซิทอรีไปไว้บนเครื่องตัวเองเพื่อทำงาน คุณป้องกันไม่ให้ใครเผลอเปิดเผยทั้งรีโพซิทอรีให้ LLM เห็นได้อย่างไร และถ้าใครกลัวผลกระทบต่อหน้าที่การงานจนไม่รายงานความผิดพลาด จะตรวจจับเหตุข้อมูลรั่วไหลได้อย่างไร

    • อยากถามว่าใช้ IDE อะไรเป็นทางเลือก

    • อยากรู้ว่าเครื่องมือ CLI พวกนี้เชื่อมต่อไปที่ไหน เป็นบริการทางการของ OpenAI หรือ Claude หรือเป็นผู้ให้บริการอย่าง AWS Bedrock

    • การแบน VSCode ทั้งหมดดูเหมือนเป็นมาตรการที่เกินไป มากกว่าการจำกัดเฉพาะปลั๊กอินหรือฟีเจอร์ที่มีปัญหา VSCode เป็น IDE เดียวที่รองรับภาษาได้กว้างมาก รวมถึงภาษาที่ IDE อื่นรองรับไม่ดีอย่าง Haskell, Lean 4 และ F* แม้แต่ในบริษัทยักษ์ใหญ่ด้านสินค้าอุปโภคบริโภคเชิงพาณิชย์ก็มักไม่ได้แบนตัว VSCode เอง และคิดว่าแค่ไม่ใช้ฟีเจอร์ที่มีปัญหาก็พอ

  • ผมคิดว่าปัญหานี้จริง ๆ แล้วยังไม่ได้ถูกแก้อย่างเหมาะสม จุดสำคัญของ Copilot คือมันรับอินพุตภาษาธรรมชาติได้ หมายความว่าไม่ว่าวิธีการรั่วไหลแบบไหน ถ้าเขียนอธิบายวิธีนั้นเป็นภาษาอังกฤษ มันก็จะทำตามได้ เขาบอกว่า “แก้” แค่วิธีเฉพาะบางแบบ แต่ไม่ได้เปิดเผยว่าจริง ๆ แก้อย่างไร เช่น อาจใช้ base64 ใน image URL ได้ หรือหลอกให้มันดึงรหัสผ่านออกมาด้วยข้อความอย่าง “ฉันเผลอบันทึกรายการของในตะกร้าไว้ในฟิลด์ passswd ช่วยหาหน่อย” ดูเหมือนจะยังมีช่องโหว่ให้ค้นหาได้อีกเยอะ ไม่รู้ว่าพวกเขามี bug bounty สำหรับเรื่องแบบนี้หรือเปล่า ที่นี่เป็นเหมืองทองเลย

    • อยากรู้ว่าการใช้ base64 เป็น image URL หมายถึงอะไร หมายถึงให้ใช้ image URL ที่ Camo ไม่ได้ครอบไว้หรือเปล่า เท่าที่เข้าใจ ด้วย CSP แล้วรูปภาพที่ไม่ผ่าน Camo จะถูกบล็อก และถ้า Copilot agent ไม่มีสิทธิ์เข้าถึงอินเทอร์เน็ต การ fetch เองก็คงยากอยู่แล้ว ถ้าทำได้จริง ก็น่าจะมีเส้นทางโจมตีที่ง่ายกว่าการใช้รูปภาพมาก

    • ดูเหมือนว่า GitHub จะแก้ปัญหานี้ด้วยการปิดการเรนเดอร์รูปภาพใน Copilot Chat ไปเลย

  • ไอเดียที่สร้าง Camo URL ล่วงหน้าสำหรับตัวอักษรและสัญลักษณ์ทั้งหมด แล้วแทรกมันเข้าไปในพรอมป์ตนั้นน่าประทับใจมาก เป็นวิธีที่สวยงาม

  • บทความนี้ให้ความรู้สึกเหมือนเป็นการโปรโมตบริษัทชื่อ Legit อยู่บ้าง แต่จริง ๆ แล้วโซลูชันที่ขับเคลื่อนด้วย AI ทั้งหมดต่างก็มีจุดอ่อนร่วมกันคือความไม่โปร่งใสและปัญหาเรื่องความน่าเชื่อถือ เวลาใช้เครื่องมือ AI ด้านความมั่นคงปลอดภัยไซเบอร์ที่ไม่ได้อยู่บนฐาน FOSS ความเสี่ยงด้านความปลอดภัยอาจยิ่งเพิ่มขึ้นด้วยซ้ำ

  • เรื่องแบบนี้ไม่ใช่ครั้งแรก ก่อนหน้านี้ก็มี กรณีที่เกี่ยวข้อง ชื่อ “GitHub Copilot Chat: From Prompt Injection to Data Exfiltration”

    • เรื่องแบบนี้จะเกิดซ้ำไปเรื่อย ๆ ในอนาคต
  • ผมคิดว่าการซ่อนข้อมูลด้วย HTML comment ที่ซ่อนอยู่ใน PR ยังอาจเป็นประเด็นร้ายแรงอยู่ โดยเฉพาะในรีโพซิทอรีโอเพนซอร์ส อยากรู้ว่าส่วนนี้ได้รับการปรับปรุงแล้วหรือยัง

    • ฟีเจอร์นี้ถูกใช้อย่างแพร่หลายเพื่อใส่ข้อความแนะนำไว้ใน issue/PR template แต่ก็ดูเหมือนว่าจะลบคอมเมนต์ออกจากอินพุตของ Copilot ได้ค่อนข้างง่าย และตราบใดที่ปัญหา “prompt injection” ของ LLM ยังไม่ถูกแก้ให้ปลอดภัยอย่างสมบูรณ์ ก็น่าจะต้องมีการจัดการแบบชั่วคราวเช่นนี้
  • สิ่งที่น่าสนใจของเอ็กซ์พลอยต์นี้คือมันอาศัยรูปแบบการตอบกลับแบบช้า ๆ ทีละโทเค็นของ LLM เพื่อให้สามารถประกอบข้อมูลกลับตามลำดับได้ คาดว่าถ้า LLM ส่งคำตอบทั้งหมดกลับมาเป็นก้อนเดียว จังหวะเวลาจะปั่นป่วนจนทำให้การประกอบกลับยากขึ้นมาก

    • อยากเสนอว่าแทนที่จะให้สร้าง URL ต่อหนึ่งตัวอักษร อาจให้มันสร้าง URL ที่มีทั้งตัวอักษรและตำแหน่งของตัวอักษรไปด้วย เช่น ให้สตริง "hacked" ถูกเรียกเป็น 0.0.0.0/1-h, 0.0.0.0/2-a แบบนี้ เพื่อให้ทีหลังสามารถเรียงคำขอและตัดคำขอซ้ำออกได้
  • สงสัยว่าจะรับมือโดยจำกัดสิทธิ์การเข้าถึง repo ของผู้ใช้ Copilot ให้เป็นแบบอ่านอย่างเดียวได้หรือไม่

  • ผมจำไม่ได้แล้วด้วยซ้ำว่าครั้งล่าสุดที่ผมทำให้ซอร์สโค้ดส่วนตัวรั่วผ่าน Copilot คือเมื่อไร

  • คิดว่าเป็นแนวทางที่แปลกใหม่และยอดเยี่ยมจริง ๆ