สรุปสั้น
นักวิจัยด้านความปลอดภัยเปิดเผยการโจมตีแบบ one-click ผ่าน Microsoft Visual Studio Code (VS Code) ที่ทำให้สามารถขโมย GitHub token ของผู้ใช้ได้ โดยนาย Ammar Askar นักวิจัยด้านความปลอดภัย ระบุว่า “เพียงแค่คลิกลิงก์ ผู้โจมตีก็สามารถขโมย GitHub token ที่อ่านและเขียน repo ของคุณได้ รวมถึง repo ส่วนตัว”
GitHub รองรับฟีเจอร์ชื่อ GitHub.dev ซึ่งทำงานเป็นโปรแกรมแก้ไขซอร์สโค้ดบนเว็บแบบเบาในแซนด์บ็อกซ์ของเบราว์เซอร์ โดยเปิดสภาพแวดล้อม VS Code ให้ผู้ใช้ส่ง pull request และ commit ได้ ฟังก์ชันนี้ทำงานได้เพราะ github.com ส่ง OAuth token ผ่าน POST ไปยัง github.dev เพื่อให้โต้ตอบกับ GitHub แทนผู้ใช้ ปัญหาคือ token นี้ไม่ได้จำกัดสิทธิ์เฉพาะ repo ที่โต้ตอบ แต่มีสิทธิ์เข้าถึงทุก repo ที่ผู้ใช้เข้าถึงได้
โดยสรุป ช่องโหว่นี้เปิดทางให้ผู้โจมตีติดตั้ง extension VS Code อันตรายที่ขโมย GitHub OAuth token เมื่อ token ถูกส่งไปยัง GitHub.dev ผ่านการใช้ประโยชน์จากกลไก message-passing ระหว่างหน้าต่าง VS Code หลักกับ webview ซึ่งใช้แสดงตัวอย่าง Markdown หรือแก้ไข Jupyter notebook
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 3 มิถุนายน 2569 ว่านักวิจัยเปิดเผยการโจมตีแบบ one-click ผ่าน VS Code บน GitHub.dev ที่ขโมย GitHub OAuth token ของผู้ใช้ได้เพียงคลิกลิงก์เดียว ซึ่งอันตรายเพราะ token ไม่ได้ถูกจำกัดขอบเขต ทำให้เข้าถึง repo ส่วนตัวทั้งหมดของเหยื่อได้
โดยเฉพาะ exploit จะรัน JavaScript อันตรายภายใน webview ที่ไม่น่าเชื่อถือ เพื่อจำลองการกดแป้นพิมพ์ (keydown event) ในหน้าต่าง editor หลัก เปิด Command Palette ด้วยการกระตุ้น “Ctrl+Shift+P” และติดตั้ง extension ที่ผู้โจมตีควบคุม ซึ่งจะดึง GitHub OAuth token ที่ส่งไปยัง GitHub.dev แล้ว query GitHub API เพื่อแจกแจง repo ส่วนตัวทั้งหมดที่เหยื่อเข้าถึงได้
แนวทางนี้ยังอาศัยฟีเจอร์ของ VS Code ที่ชื่อ local workspace extensions ซึ่งอนุญาตให้ติดตั้ง extension โดยตรงโดยไม่แสดงกล่อง trust dialog ตราบใดที่วางไว้ในโฟลเดอร์ “.vscode/extensions” ภายใน workspace นั้น ทำให้ข้ามการตรวจสอบ publisher trust ได้ นาย Askar อธิบายว่าextension สามารถเพิ่ม keybinding พิเศษให้ VS Code ได้ ดังนั้นเมื่อกระตุ้น keybinding ได้อย่างเชื่อถือได้ ก็เพิ่ม keybind สำหรับคำสั่งที่ต้องการ เช่นการติดตั้ง extension โดยข้ามการตรวจสอบ publisher ที่ไว้ใจ
นาย Askar ระบุว่าได้แจ้ง GitHub เรื่องช่องโหว่เมื่อวันที่ 2 มิถุนายน 2569 และหนึ่งชั่วโมงหลังจากนั้นก็เปิดเผยรายละเอียดต่อสาธารณะ โดยอ้างถึงการจัดการบั๊กที่เกี่ยวกับ VS Code ของ Microsoft ในอดีต ขณะที่ Microsoft รับทราบช่องโหว่และระบุว่ากำลังแก้ไข ทั้งนี้นาย Alexandru Dima ผู้จัดการฝ่ายวิศวกรรมซอฟต์แวร์ของ Microsoft ชี้แจงว่า “ปัญหานี้ไม่กระทบ VS Code Desktop”
วิธีการโจมตี
จุดเริ่มต้นของการโจมตีคือการหลอกให้เหยื่อคลิกลิงก์ที่นำไปสู่ GitHub.dev พร้อม workspace ที่มี extension อันตรายฝังอยู่ในโฟลเดอร์ “.vscode/extensions” ซึ่งเป็นจุดที่ทำให้ extension ถูกติดตั้งโดยไม่ต้องผ่านการยืนยัน publisher trust
เมื่อเปิด workspace แล้ว exploit จะรัน JavaScript อันตรายใน webview ที่ไม่น่าเชื่อถือ (เช่นที่ใช้แสดง Markdown preview หรือ Jupyter notebook) แล้วใช้กลไก message-passing เพื่อจำลองการกดแป้นพิมพ์ในหน้าต่าง editor หลัก เทคนิคนี้ช่วยให้สามารถเปิด Command Palette ด้วย Ctrl+Shift+P และสั่งติดตั้ง extension ที่ผู้โจมตีควบคุมได้
extension อันตรายจะดักจับ GitHub OAuth token ที่ github.com ส่งผ่าน POST ไปยัง github.dev ซึ่งเนื่องจาก token นี้มีสิทธิ์เข้าถึงทุก repo ที่เหยื่อเข้าถึงได้ (ไม่จำกัดเฉพาะ repo เดียว) ผู้โจมตีจึงสามารถ query GitHub API เพื่อแจกแจงและเข้าถึง repo ส่วนตัวทั้งหมด รวมถึงอ่านและเขียนโค้ดได้ ความร้ายแรงอยู่ที่ทั้งหมดนี้เกิดขึ้นได้จากการคลิกลิงก์เพียงครั้งเดียว
ผลกระทบต่อไทย
นักพัฒนาและองค์กรไทยจำนวนมากใช้ GitHub เป็นแพลตฟอร์มหลักในการเก็บซอร์สโค้ด รวมถึงใช้ GitHub.dev สำหรับแก้ไขโค้ดผ่านเบราว์เซอร์ ทำให้ความเสี่ยงจากการถูกขโมย OAuth token กระทบโดยตรง โดยเฉพาะหากนักพัฒนามีสิทธิ์เข้าถึง repo ส่วนตัวขององค์กร
ความอันตรายคือ token ที่ถูกขโมยมีสิทธิ์เข้าถึงทุก repo ที่เหยื่อเข้าถึงได้ ทำให้แม้นักพัฒนารายเดียวถูกโจมตี ผู้ไม่หวังดีก็อาจเข้าถึงซอร์สโค้ดลับ ความลับทางการค้า หรือ credential ที่ฝังในโค้ดขององค์กรไทยทั้งหมด
นอกจากนี้ การที่ผู้โจมตีเขียน repo ได้ยังเปิดทางให้ฝังโค้ดอันตรายหรือ backdoor ในโปรเจกต์ นำไปสู่การโจมตี supply chain ต่อผู้ใช้ปลายทาง ซึ่งเป็นภัยที่ขยายวงกว้างเกินกว่าตัวนักพัฒนาที่ถูกโจมตี
คำแนะนำ
- ระวังลิงก์ GitHub.dev ที่ไม่น่าเชื่อถือ — อย่าคลิกลิงก์เปิด workspace บน GitHub.dev จากแหล่งที่ไม่รู้จัก จนกว่า Microsoft จะออกแพตช์
- ใช้ VS Code Desktop สำหรับงานสำคัญ — เนื่องจากช่องโหว่นี้ไม่กระทบ VS Code Desktop
- ตรวจสอบและเพิกถอน token ที่น่าสงสัย — ตรวจ OAuth app และ token ที่ผูกกับบัญชี GitHub เพิกถอนตัวที่ไม่รู้จัก
- จำกัดสิทธิ์การเข้าถึง repo — ใช้หลัก least privilege ไม่ให้นักพัฒนารายเดียวเข้าถึง repo สำคัญทั้งหมดโดยไม่จำเป็น
- ตรวจสอบ extension ใน workspace — ระวัง extension ที่อยู่ในโฟลเดอร์ .vscode/extensions ที่ไม่ได้ติดตั้งเอง
- เปิดการแจ้งเตือนกิจกรรม repo — เพื่อตรวจจับการเข้าถึงหรือแก้ไข repo ที่ผิดปกติ
