- Google แนะนำมานานกว่า 10 ปีว่า API key ไม่ใช่ความลับและเปิดเผยได้อย่างปลอดภัย แต่หลังจาก เปิดใช้ Gemini API คีย์เดียวกันกลับกลายเป็นวิธีการยืนยันตัวตนที่มีความอ่อนไหว
- คีย์สาธารณะที่ใช้กับ Google Maps, Firebase ฯลฯ เดิม ได้สิทธิ์เข้าถึง Gemini API โดยอัตโนมัติ ทำให้ คีย์ที่เปิดเผยสามารถเข้าถึงข้อมูลส่วนตัวและก่อให้เกิดการเรียกเก็บเงินได้
- Truffle Security ยืนยันว่ามี Google API key ที่ใช้งานจริง 2,863 รายการ ถูกเปิดเผยบนอินเทอร์เน็ต และบางส่วนเป็น คีย์ของบริการของ Google เอง
- Google ยอมรับปัญหาและกำลังนำ การบล็อกคีย์ที่รั่วไหล, ค่าเริ่มต้นเฉพาะสำหรับ Gemini, และฟังก์ชันแจ้งเตือนเมื่อพบการเปิดเผย มาใช้ แต่ การตรวจสอบย้อนหลังสำหรับคีย์เดิมยังไม่เสร็จสมบูรณ์
- กรณีนี้แสดงให้เห็นถึง ความเสี่ยงจากการขยายสิทธิ์ของข้อมูลรับรองเดิมเมื่อผนวกรวมความสามารถ AI และนักพัฒนาจำเป็นต้องตรวจสอบทันทีว่า มีการเปิดใช้ Gemini API และมีการเปิดเผยคีย์หรือไม่
ปัญหาหลัก
- Google Cloud ใช้โครงสร้าง API key แบบเดี่ยว ในรูปแบบ
AIza... ซึ่งทำหน้าที่พร้อมกันสองอย่าง คือ ใช้ระบุตัวตนแบบสาธารณะ และ ใช้ยืนยันตัวตนแบบอ่อนไหว
- ในอดีต Google ระบุชัดเจนกับนักพัฒนาว่า API key ปลอดภัยแม้ฝังไว้ในโค้ดฝั่งไคลเอนต์โดยตรง
- ในเช็กลิสต์ความปลอดภัยของ Firebase ก็ระบุว่า “API key ไม่ใช่ความลับ”
- แต่เมื่อเปิดใช้ Gemini API แล้ว API key ทุกตัวของโปรเจกต์เดิมจะได้รับสิทธิ์เข้าถึง endpoint ของ Gemini โดยอัตโนมัติ
- สิทธิ์ถูกขยาย โดยไม่มีคำเตือน ขั้นตอนยืนยัน หรืออีเมลแจ้งเตือน
- สิ่งนี้ทำให้เกิดปัญหาสองด้าน
- การขยายสิทธิ์ย้อนหลัง (Retroactive Privilege Expansion): คีย์ Maps ที่เคยเปิดเผยในอดีต กลายเป็นข้อมูลรับรองสำหรับเข้าถึง Gemini
- ค่าเริ่มต้นที่ไม่ปลอดภัย (Insecure Defaults): เมื่อสร้างคีย์ใหม่ การตั้งค่าเริ่มต้นเป็น “Unrestricted” ทำให้เข้าถึงได้ทุก API รวมถึง Gemini
- ผลลัพธ์คือ โทเคนสำหรับการเรียกเก็บเงินหลายพันรายการได้กลายเป็นข้อมูลรับรองสำหรับยืนยันตัวตนจริง และถูกเปิดเผยอยู่บนอินเทอร์เน็ต
สถานการณ์การโจมตีที่เป็นไปได้
- ผู้โจมตีสามารถคัดลอกคีย์
AIza... จากซอร์สโค้ดของเว็บไซต์ แล้วเข้าถึง Gemini API ได้ด้วย คำขอ curl แบบง่าย ๆ
- ผู้โจมตีสามารถใช้สิ่งนี้เพื่อ
- เข้าถึงข้อมูลที่ไม่เปิดเผย (
/files/, /cachedContents/ endpoints)
- สร้างค่าใช้จ่ายจากการใช้งาน Gemini API
- ทำให้บริการหยุดชะงักจากการใช้โควตาจนหมด
- ผู้โจมตีไม่จำเป็นต้องเจาะโครงสร้างพื้นฐานของเหยื่อ เพียงแค่ ดึงคีย์จากหน้าเว็บสาธารณะ ก็สามารถโจมตีได้
ขนาดของคีย์ที่ถูกเปิดเผย
- Truffle Security วิเคราะห์ ชุดข้อมูล Common Crawl เดือนพฤศจิกายน 2025 (ประมาณ 700TiB) และพบ Google API key ที่ยังใช้งานได้ 2,863 รายการ
- คีย์เหล่านี้เดิมใช้กับ บริการสาธารณะอย่าง Google Maps แต่มีสิทธิ์เข้าถึง Gemini API ด้วย
- กลุ่มที่ได้รับผลกระทบมีทั้ง สถาบันการเงิน บริษัทด้านความปลอดภัย บริษัทจัดหางานระดับโลก และแม้แต่ Google เอง
- แสดงให้เห็นว่า Google เองก็เผชิญความเสี่ยงเชิงโครงสร้างแบบเดียวกัน
กรณีคีย์ภายในของ Google
- Truffle Security สาธิตการเข้าถึง Gemini API โดยใช้ คีย์ที่รวมอยู่ในซอร์สโค้ดสาธารณะของเว็บไซต์ผลิตภัณฑ์ Google
- คีย์ดังกล่าว ถูกเปิดเผยต่อสาธารณะมาตั้งแต่ก่อนเดือนกุมภาพันธ์ 2023 และเดิมใช้เพียงเพื่อระบุโปรเจกต์เท่านั้น
- เมื่อเรียก
/models endpoint ก็ได้รับ การตอบกลับปกติ (200 OK) ยืนยันว่า สามารถเข้าถึง API ที่อ่อนไหวได้
- นั่นหมายความว่า คีย์ที่เคยไม่เป็นอันตรายในอดีตได้รับสิทธิ์ที่อ่อนไหวโดยที่นักพัฒนาไม่ได้เข้ามาเกี่ยวข้อง
ไทม์ไลน์การรายงานช่องโหว่และการตอบสนอง
- 21 พฤศจิกายน 2025: รายงานไปยัง Google VDP
- 25 พฤศจิกายน: Google พิจารณาว่าเป็น “พฤติกรรมที่ตั้งใจไว้”
- 1–2 ธันวาคม: หลัง Truffle Security นำเสนอกรณีคีย์ภายในของ Google ทาง Google จึง จัดประเภทใหม่ว่าเป็นบั๊กและยกระดับความร้ายแรง
- 12 ธันวาคม: Google เริ่ม ขยาย pipeline สำหรับตรวจจับคีย์ที่รั่วไหลและจำกัดการเข้าถึง Gemini
- 13 มกราคม 2026: Google จัดประเภทช่องโหว่นี้เป็น “การยกระดับสิทธิ์ภายในบริการเดียว (Single-Service Privilege Escalation, READ)”
- 2 กุมภาพันธ์: ยืนยันว่ากำลังดำเนินการแก้ไขที่ต้นตอของปัญหา
มาตรการติดตามของ Google
- Google ประกาศ แผนเสริมความปลอดภัย ต่อไปนี้ในเอกสารทางการ
- Scoped defaults: คีย์ใหม่ที่สร้างใน AI Studio จะ อนุญาตให้เข้าถึงเฉพาะ Gemini เท่านั้น
- Leaked key blocking: บล็อกการเข้าถึง Gemini API ของคีย์ที่รั่วไหลโดยอัตโนมัติ
- Proactive notification: แจ้งเตือนผู้ใช้ทันทีเมื่อพบคีย์ที่ถูกเปิดเผย
- แม้บางส่วนเริ่มดำเนินการแล้ว แต่ การตรวจสอบย้อนหลังของคีย์ที่เปิดเผยไปก่อนหน้าและการแจ้งผู้ใช้ยังไม่เสร็จสมบูรณ์
แนวทางตรวจสอบสำหรับนักพัฒนา
- ขั้นตอนที่ 1: ตรวจสอบทุกโปรเจกต์ GCP ว่า มีการเปิดใช้ Generative Language API หรือไม่
- ขั้นตอนที่ 2: หากเปิดใช้แล้ว ให้ตรวจสอบการตั้งค่า API key เพื่อหา คีย์ที่เป็น ‘Unrestricted’ หรือรวม Gemini ไว้
- ขั้นตอนที่ 3: ตรวจสอบว่า คีย์ดังกล่าวอยู่ในโค้ดสาธารณะหรือหน้าเว็บหรือไม่
- หากคีย์ถูกเปิดเผย ต้อง หมุนคีย์ (rotating) ทันที
- เพิ่มเติม: สามารถใช้เครื่องมือ TruffleHog เพื่อ ตรวจจับคีย์ที่ใช้งานจริงและเข้าถึง Gemini ได้โดยอัตโนมัติ
- ตัวอย่างคำสั่ง:
trufflehog filesystem /path/to/your/code --only-verified
บทสรุป
- กรณีนี้แสดงให้เห็นถึง ความเสี่ยงเชิงโครงสร้างที่ข้อมูลรับรองสาธารณะเดิมได้รับสิทธิ์อ่อนไหวจากการเพิ่มความสามารถ AI
- แม้ Google จะรับรู้ปัญหาและกำลังตอบสนอง แต่ ความสำคัญของค่าเริ่มต้นที่ปลอดภัยและการออกแบบแยกคีย์ ก็ถูกเน้นย้ำอีกครั้ง
- นักพัฒนาและองค์กรควร ตรวจสอบการเปิดใช้ Gemini API และสถานะการเปิดเผยคีย์โดยทันที
1 ความคิดเห็น
ความเห็นจาก Hacker News
เอกสารของ Google AI Studio แนะนำให้เผยแพร่แอปผ่าน open proxy
วิธีนี้ทำให้คนเข้าใจผิดว่า API key ปลอดภัยเพราะอยู่หลังพร็อกซี แต่ความจริงแล้วเปิดทางให้เกิด การใช้ AI แบบกินค่าใช้จ่ายโดยมิชอบ
แม้แต่แอปที่ไม่มีฟีเจอร์ AI เลย หากไม่ได้จำกัดขอบเขตของคีย์ด้วยตนเอง ก็ยังอาจเข้าถึงโมเดลราคาแพงได้
แอปที่เปราะบางลักษณะนี้ยังค้นหาเจอได้ง่ายเพียงแค่ใช้ Google, Twitter หรือค้นหาใน Hacker News
การวิเคราะห์ที่เกี่ยวข้องสรุปไว้ในบทความนี้
แม้ Google จะบอกว่าจะบล็อกคีย์ที่รั่วไหล แต่ตั้งแต่แรกพวกเขาก็ ไม่ได้ปฏิบัติต่อคีย์เหล่านั้นว่าเป็นความลับ
ทางที่เหมาะที่สุดคือควรป้องกันไม่ให้คีย์ทั้งหมดที่สร้างก่อนการเปิดตัว Gemini เข้าถึง Gemini ได้
หากระบบตรวจจับการรั่วไหลมี false positive ก็เสี่ยงที่จะบล็อกแม้แต่ Gemini key ที่ใช้งานปกติ
อย่างน้อยที่สุดควรถอด สิทธิ์ของ Generative Language API ออกจากคีย์เดิมทั้งหมด แต่ถึงอย่างนั้นก็ยังไม่ใช่คำตอบที่สมบูรณ์
สุดท้ายอาจต้องถอดสิทธิ์ดังกล่าวออกจากทุกคีย์แบบครอบคลุม
นั่นจะทำให้แอปจำนวนมหาศาลพัง และเป็นเหตุผลที่ Google ไม่อยากยอมรับปัญหานี้
ที่ร้ายแรงกว่านั้นคือคีย์ยังเปิดให้เข้าถึง cached context และข้อมูลที่อัปโหลด ได้ด้วย
มีคนพบว่า Google key ที่ hardcode อยู่ในอิมเมจ Android รุ่นเก่า สามารถนำมาใช้กับ Gemini ได้จริง
บางคีย์ถูกคนจำนวนมากใช้ไปแล้วจนโดน rate limit แต่บางคีย์ก็ยังใช้งานได้
ราวสองเดือนก่อน คีย์เหล่านี้ถูกมองว่าเป็นคีย์ที่รั่วไหลและถูกปิดใช้งานทั้งหมด
คีย์ที่สร้างไว้นานแล้วเดิมทีตั้งใจให้ใช้กับบริการที่จำกัดอย่าง Firebase หรือ Firestore เท่านั้น
แต่หลัง Gemini เปิดตัว การเข้าถึง Gemini กลับถูก เปิดใช้งานให้อัตโนมัติ กับคีย์เดิมด้วย ทำให้ถูกนำไปใช้ในทางที่ผิดได้ง่ายขึ้น
เท่ากับว่า public key ที่ฝังอยู่ในไฟล์ APK กลายเป็นคีย์สำหรับเข้าถึง Gemini ไปโดยตรง
ตัวอย่างเช่น หากนักพัฒนา X สร้างคีย์ไว้สำหรับ Maps แล้วนักพัฒนาอีกคน Y เปิด Gemini ในโปรเจกต์เดียวกัน
คีย์ของ X ก็จะได้สิทธิ์เข้าถึง Gemini ไปด้วย
ดังนั้นควร หลีกเลี่ยงการใช้โปรเจกต์ร่วมกันซ้ำ และใช้ GCP project แยกตามแต่ละบริการ
หลายคนสงสัยว่าทำไมข้อบกพร่องด้านความปลอดภัยที่ชัดเจนขนาดนี้ถึงไม่ถูกกรองออกตั้งแต่แรก
ถ้าเป็นบริษัทใหญ่อย่าง Google ก็ควรมี การทดสอบหรือสเปกมาตรฐาน อยู่แล้ว
ยิ่งองค์กรใหญ่และซับซ้อนขึ้นเท่าไร จุดบอดในการกำกับดูแล ก็ยิ่งเพิ่มขึ้นเท่านั้น
พวกเขาก็ยังหมกมุ่นอยู่กับโจทย์ กลับด้าน binary tree เหมือนเดิม
เหตุการณ์นี้ทำให้นึกถึงกรณีการนำ SSN (หมายเลขประกันสังคม) ไปใช้ผิดวัตถุประสงค์ในอดีต
เดิมทีเป็นเพียงหมายเลขสำหรับระบุตัวตน แต่เมื่อถึงจุดหนึ่งกลับถูกใช้เป็นคีย์ยืนยันตัวตนจนปัญหาขยายใหญ่ขึ้น
เป็นโครงสร้างแบบทำให้เสร็จเร็วและถูก แต่สุดท้ายผลักภาระต้นทุนไปให้ผู้ใช้
ดูเหมือนว่า Google ยัง แก้ปัญหานี้ไม่เสร็จสมบูรณ์
มันเป็นความผิดพลาดครั้งใหญ่จากการเร่งเปิดตัว Gemini และ
หากจะแก้จริงก็อาจต้องปิดคีย์เดิม ซึ่งมีโอกาสสูงที่จะทำให้ workflow ของลูกค้าพัง
ในมุมของ Google เอง นี่ก็เป็น ความเสียหายต่อภาพลักษณ์อย่างรุนแรง
นี่เป็นปัญหาแบบ Retroactive Privilege Expansion อย่างหนึ่ง
เดิมมีการเปิดเผย Maps key ไว้บนเว็บไซต์ แต่เมื่อมีนักพัฒนาอีกคนในทีมเปิด Gemini
public key นั้นก็กลายเป็นข้อมูลรับรองสำหรับเข้าถึง Gemini ทันที
ผลคือใครก็ตามสามารถใช้คีย์นั้นอัปโหลดไฟล์หรือเข้าถึงข้อมูลแคชได้
ผู้ใช้ที่ทำตามเอกสารเก่าและใช้ public key กำลังเป็นฝ่ายรับผลกระทบ
ผู้โจมตีสามารถขโมยคีย์นั้นไปก่อ บิลค่าใช้จ่ายพุ่ง ได้
ถ้าอธิบายให้ง่ายขึ้น ก็คือ API key เดิมนับพันรายการที่เคยเป็นแค่โทเคนสำหรับการคิดค่าบริการ
จู่ ๆ ก็กลายเป็น ข้อมูลรับรองสำหรับเข้าถึง Gemini
Maps API key เดิมถูกออกแบบมาเพื่อให้ผู้ใช้เรียกใช้บริการแผนที่ โดยให้บัตรของฉันเป็นคนจ่าย
ปัญหาคือคีย์เหล่านี้ตอนนี้กลับใช้เข้าถึง Gemini ได้ด้วย
เดิมควรแยกโปรเจกต์ภายในออกมาต่างหากเพื่อแยกคีย์ แต่
พอเร่งปล่อยของก็ใช้ โค้ดที่ LLM สร้างให้ ตรง ๆ และพอมีปัญหาก็โทษ Google
งานวิจัยก่อนหน้าของบริษัทรักษาความปลอดภัยที่วิเคราะห์ปัญหานี้ก็น่าประทับใจเช่นกัน
เช่นบทความ “Anyone can Access Deleted and Private Repository Data on GitHub”
ที่เปิดเผยกรณี ช่องโหว่การเข้าถึงข้อมูลใน GitHub repository ที่ถูกลบหรือเป็น private
ครั้งนี้การวิเคราะห์ของพวกเขาก็ช่วยได้มากเช่นกัน