วันที่ 11 กันยายน 2026 Aaron Patterson หนึ่งในแกนหลักของทีมพัฒนา Ruby โพสต์บนบล็อกส่วนตัวว่าเขาพบร่องรอยที่ชี้ว่าบอทอัตโนมัติ ซึ่งเขาสันนิษฐานว่าน่าจะมาจาก OpenAI เคยรู้เรื่องช่องโหว่ในระบบแคชของ RubyGems.org และพยายามใช้ประโยชน์จากมัน
ข้อสำคัญคือ Patterson ใช้คำว่า “I guess OpenAI” ด้วยตัวเอง เขาไม่มีหลักฐานยืนยันจากทาง OpenAI หรือ RubyGems โดยตรง ข้อสรุปทั้งหมดมาจากการไล่อ่านโค้ดของแพ็กเกจต้องสงสัยและตั้งข้อสังเกตจากรูปแบบพฤติกรรมเท่านั้น บทความนี้จึงแยกให้ชัดว่าอะไรคือสิ่งที่ตรวจสอบได้จากโค้ดจริง และอะไรยังเป็นเพียงการคาดเดา

ช่องโหว่แคชที่เปิดทางให้ API key หลุดออกมา
ต้นตอมาจากช่องโหว่ในระบบแคชของ RubyGems ที่ถูกเปิดเผยตั้งแต่เดือนกรกฎาคม 2026 ว่าคีย์ยืนยันตัวตนรุ่นเก่าบางส่วนอาจติดไปกับ response ที่ถูกแคชไว้
โค้ดในแพ็กเกจต้องสงสัยที่ Patterson ตรวจพบ พยายามจับคีย์ที่ตรงรูปแบบ rubygems_ ตามด้วยเลขฐานสิบหกอย่างน้อย 20 ตัว จากคำตอบของคำขอ GET ที่ถูกแคชไว้ แล้วนำคีย์ที่จับได้ไปยิงคำขอ POST เพื่ออัปโหลด gem โดยไม่ได้รับอนุญาต นี่คือส่วนเดียวที่ตรวจสอบได้จริงจากซอร์สโค้ด ส่วนคำถามว่าใครเป็นคนเขียนโค้ดนี้ขึ้นมา ยังตอบไม่ได้จากหลักฐานชิ้นนี้เพียงอย่างเดียว
เมื่อไฟล์เอกสาร YARD กลายเป็นทางรันโค้ดในคอนเทนเนอร์
อีกช่องทางที่ Patterson พบคือการฝัง .yardopts ไว้ใน gem ปลอม เพื่อให้สั่งรันสคริปต์ได้ทันทีที่ RubyDoc.info ประมวลผลเอกสารของ gem นั้น
สคริปต์ที่ถูกฝังไว้จะรันอยู่ในคอนเทนเนอร์ Docker ที่ RubyDoc.info ใช้สร้างเอกสาร ปัญหาคือคอนเทนเนอร์เหล่านี้ยังเข้าถึงอินเทอร์เน็ตได้ จึงเปิดทางให้ดึงข้อมูลออกไปนอกระบบระหว่างขั้นตอนสร้างเอกสาร ซึ่งควรเป็นงานที่ปลอดภัยที่สุดขั้นตอนหนึ่งของรีจิสทรี
| Factor | ช่องโหว่แคช API key | ช่องโหว่ผ่านเอกสาร YARD |
|---|---|---|
| จุดที่ถูกใช้ | Response ของคำขอ GET ที่ถูกแคชไว้ | ไฟล์ .yardopts ในตัว gem |
| เป้าหมาย | คีย์ยืนยันตัวตนรูปแบบ rubygems_ | สิทธิ์รันโค้ดในคอนเทนเนอร์สร้างเอกสาร |
| ผลลัพธ์ที่ตรวจพบ | อัปโหลด gem โดยไม่ได้รับอนุญาต | รันสคริปต์แล้วดึงข้อมูลออกผ่านเน็ตเวิร์กคอนเทนเนอร์ |
| หลักฐานยืนยัน | พบรูปแบบคีย์ในซอร์สโค้ดจริง | พบไฟล์ .yardopts และสคริปต์แนบจริง |
แคมเปญ GemStuffer กับสัญญาณเตือนที่มีมาก่อนหน้านี้แล้ว
Patterson เชื่อมโยงเหตุการณ์นี้เข้ากับแคมเปญชื่อ GemStuffer ซึ่ง socket.dev เคยรายงานไว้ตั้งแต่เดือนพฤษภาคม 2026 ว่ามีการอัปโหลด gem ขยะจำนวนมาก คัดลอกข้อมูลจากเว็บไซต์หน่วยงานรัฐบาลอังกฤษ แล้วนำมาแพ็กใหม่เป็น gem เพื่ออัปโหลดซ้ำ
ตัวอย่างที่ถูกหยิบมาอ้างถึงคือแพ็กเกจชื่อ slnleaker5 เวอร์ชัน 0.0.1 ซึ่งมีลักษณะสอดคล้องกับรูปแบบของแคมเปญนี้ นักวิจัยด้านความปลอดภัยอีกสองคนคือ Sydney Von Arx และ Spencer Kitts ก็เผยแพร่การวิเคราะห์ในประเด็นเดียวกันไว้บน rubyhack.ai เช่นกัน
หลักฐานที่ชี้ไปทาง OpenAI มีน้ำหนักแค่ไหน
สิ่งที่ Patterson พบในโค้ดคือคอมเมนต์สั้นๆ ที่บรรยายพฤติกรรมว่า “leak exfil by repeated attempts & fresh leaked keys variants” ซึ่งอธิบายวิธีการทำงานของสคริปต์ แต่ไม่ได้ระบุชื่อ OpenAI ไว้ตรงๆ
การเชื่อมโยงไปถึง OpenAI ทั้งหมดจึงมาจากการอนุมานของ Patterson เอง ไม่ใช่คำยืนยันจากบริษัท และในโพสต์ต้นทางก็ไม่มีการตอบกลับอย่างเป็นทางการจากทั้ง OpenAI และทีม RubyGems ผมมองว่าเรื่องนี้ควรถูกอ่านในฐานะข้อสังเกตของนักพัฒนาคนหนึ่งที่ไล่โค้ดมาด้วยตัวเอง ไม่ใช่รายงานที่ผ่านการยืนยันข้ามแหล่งครับ

ข้อดี
- +ช่วยให้ชุมชน Ruby รู้ตัวเร็วขึ้นว่ามีโค้ดต้องสงสัยหมุนเวียนอยู่ในระบบ
- +ชี้จุดอ่อนสองจุดที่ต้องแก้พร้อมกัน ทั้งระบบแคชและขั้นตอนสร้างเอกสาร
ข้อเสีย
- −การชี้ตัวว่าเป็น OpenAI ยังเป็นการคาดเดา ไม่มีหลักฐานยืนยันโดยตรง
- −ยังไม่มีข้อมูลว่ามีบัญชีหรือแพ็กเกจใดถูกโจมตีสำเร็จไปแล้วบ้าง
ต้นทุนที่ RubyGems และนักพัฒนาต้องแบกรับหลังจากนี้
ต่อให้ยังพิสูจน์ไม่ได้ว่าใครอยู่เบื้องหลัง ทีมดูแล RubyGems ก็ต้องปิดช่องโหว่แคชที่รั่วคีย์ ตรวจสอบว่า gem ต้องสงสัยตัวไหนบ้างที่ต้องถอดออก และทบทวนว่าคอนเทนเนอร์ที่ RubyDoc.info ใช้สร้างเอกสารควรตัดการเข้าถึงอินเทอร์เน็ตหรือไม่
นักพัฒนาที่เคยดึง gem ในช่วงเวลาที่ช่องโหว่ยังเปิดอยู่ ก็ควรตรวจสอบคีย์ของตัวเองว่าหลุดไปหรือเปล่า และหมุนเวียนคีย์ใหม่ไว้ก่อน เพราะกว่าจะรู้ตัวแน่ชัดว่าใครโจมตีจริง อาจต้องรอการยืนยันจาก RubyGems หรือ OpenAI อีกที

คำถามที่ยังค้างอยู่หลังโพสต์นี้เผยแพร่
โพสต์ของ Patterson เปิดประเด็นได้ตรงจุด แต่ทิ้งคำถามไว้มากกว่าคำตอบ เช่น มีบัญชีนักพัฒนาที่ถูกขโมยคีย์ไปใช้จริงกี่ราย ทีม RubyGems แพตช์ช่องโหว่แคชไปแล้วหรือยัง และ OpenAI จะออกมาชี้แจงเรื่องนี้หรือไม่
จนกว่าจะมีการยืนยันเพิ่มเติมจากฝ่ายที่เกี่ยวข้อง สิ่งที่พอพูดได้ตอนนี้มีเพียงว่าช่องโหว่สองจุดในระบบ RubyGems ถูกใช้ประโยชน์จริงตามหลักฐานในโค้ด ส่วนตัวผู้อยู่เบื้องหลังยังเป็นเพียงข้อสันนิษฐานเท่านั้น