Security Blog

ผู้ช่วยเขียนโค้ด AI ของคุณเพิ่งอ่านกระเป๋าเงินของคุณ

#204

October 2, 2026 · By Marketing team

← All posts

เครื่องมือเขียนโค้ด AI อ่านไฟล์ .env ก่อนที่คุณจะพิมพ์อะไรด้วยซ้ำ คีย์ API ของคุณ — แต่ละตัวคือบัตรเครดิตที่ไม่มีวงเงินจำกัด — ไปอยู่ใน context window ของคนอื่นก่อนที่คุณจะเขียน prompt แรกด้วยซ้ำ ปัญหาไม่ได้อยู่ที่ AI ปัญหาคือ secrets ถูกเก็บเป็นไฟล์

เปิดผู้ช่วยเขียนโค้ด AI ของคุณขึ้นมา ก่อนที่คุณจะพิมพ์อะไรสักตัวอักษร มันอ่านไดเรกทอรีโปรเจกต์ของคุณไปแล้ว ไฟล์ .env ของคุณ คีย์ API ของคุณ รหัสผ่านฐานข้อมูลของคุณ Stripe secret key ของคุณ

คุณไม่ได้สั่งให้มันทำ คุณไม่ได้อนุมัติ มันเป็นฟีเจอร์ ไม่ใช่บั๊ก — เครื่องมือต้องการบริบทของโปรเจกต์จึงจะมีประโยชน์ มันจึงอ่านทุกอย่างที่นักพัฒนาอ่านได้

และนักพัฒนาอ่านได้ทุกอย่าง

เวอร์ชัน greentext

มีโพสต์หนึ่งถูกส่งต่อกันมากในสัปดาห์นี้ เขียนเป็นเสียงในใจของนักพัฒนา:

> เปิด Claude Code ไฟล์ .env ของคุณถูกอ่านก่อนที่คุณจะพิมพ์อะไร คีย์ API ของคุณตอนนี้อยู่ในแชทแล้ว คุณเพิ่ม "don't read .env" ลงใน CLAUDE.md ไม่ได้ผล

มีคนเห็นโพสต์นั้น 380,000 คน บันทึกไว้ 2,700 คน ไม่ใช่เพราะมันเป็นข่าวใหม่ — แต่เพราะมันเป็นกระจก

นักพัฒนาทุกคนที่อ่านมีความคิดเดียวกัน: นี่มัน setup ของฉันเลย

คำสั่งไม่ได้ผล

สิ่งแรกที่คนลองคือเขียนกฎ "ห้ามอ่านไฟล์ .env" ใน CLAUDE.md ใน AGENTS.md ใน system prompt เป็นข้อห้ามที่ตรงไปตรงมาและชัดเจน

เครื่องมือก็ยังอ่านไฟล์เหล่านั้นอยู่ดี

เรื่องนี้พอคิดดูก็สมเหตุสมผล ไฟล์ถูกอ่านเป็นส่วนหนึ่งของการสร้างบริบทโปรเจกต์ — ก่อนที่คำสั่งจะถูกประมวลผลด้วยซ้ำ การบอกโมเดลไม่ให้อ่านไฟล์ที่มันอ่านไปแล้ว ก็เหมือนการบอกใครสักคนให้ลืมสิ่งที่เพิ่งเห็น ข้อมูลอยู่ใน context window แล้ว มันถูกส่งไปแล้ว คำสั่งมาถึงหลังความเสียหายเกิดขึ้นแล้ว

นักวิจัยคนหนึ่งพบว่าแม้แต่ deny rules ระดับไฟล์ก็ยังเลี่ยงได้ผ่านสคริปต์ที่กำหนดเองหรือ pipe chain อีกคนพบว่าบิล proxy สูงขึ้นผิดปกติ เพราะ credentials ของ HTTP_PROXY ถูกโหลดและใช้งานโดยอัตโนมัติ

เงินในไฟล์ .env ของคุณ

คนมักจัดเรื่องนี้เป็นประเด็นความเป็นส่วนตัว แต่มันเป็นประเด็นการเงิน

เปิดไฟล์ .env ทั่วไปในโปรเจกต์ production:

OPENAI_API_KEY=sk-...
STRIPE_SECRET_KEY=sk_live_...
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
DATABASE_URL=postgresql://user:pass@...

คีย์ OpenAI นั้นคือบัตรเครดิตที่ไม่มีวงเงินจำกัดและไม่มี PIN คนที่ได้สตริงนั้นไปสามารถเรียก API เป็นเงิน $40,000 ได้ภายในคืนเดียว คีย์ Stripe สามารถคืนเงิน สร้างรายการเรียกเก็บ เข้าถึงข้อมูลการชำระเงินของลูกค้า ส่วน credentials ของ AWS — ขึ้นอยู่กับ IAM policy ซึ่งแทบจะกว้างเกินไปเสมอ — สามารถสั่ง spin up GPU instances เข้าถึง S3 buckets หรือลบ infrastructure ทิ้งได้

นี่ไม่ใช่รายการรหัสผ่าน นี่คือรายการกระเป๋าเงิน แต่ละใบมียอดคงเหลือต่างกันและไม่มีล็อก

กระเป๋าเงิน 29 ล้านใบบนทางเท้า

รายงานล่าสุดของ GitGuardian นับ secrets ที่รั่วไหลใน public GitHub commits ปี 2025 ได้ 28.6 ล้านรายการ เพิ่มขึ้น 34% จากปีก่อน และเป็นการเพิ่มขึ้นต่อปีมากที่สุดเท่าที่เคยวัดได้

ตัวเลขเฉพาะของ AI ยิ่งแย่กว่า secrets ของบริการ AI รั่วไหล 1.2 ล้านรายการ — พุ่งขึ้น 81% จากปีก่อน Commits ที่เขียนร่วมโดยเครื่องมือเขียนโค้ด AI รั่ว secrets ในอัตราประมาณสองเท่าของค่าเฉลี่ยพื้นฐาน และพบ secrets ไม่ซ้ำกัน 24,000 รายการในไฟล์คอนฟิกูเรชันของ MCP — ท่อที่เชื่อม AI agents เข้ากับบริการภายนอก

ในสิบห้าอันดับประเภท secrets ที่รั่วเร็วที่สุด สิบสองอันดับเป็นบริการ AI ไม่ใช่ฐานข้อมูล ไม่ใช่ผู้ให้บริการคลาวด์ แต่เป็นบริการ AI

เครื่องมือที่เราใช้เขียนโค้ดเร็วขึ้น กำลังรั่วกุญแจของระบบที่โค้ดนั้นเชื่อมต่ออยู่

ปัญหาที่แท้จริง

นักพัฒนาที่โพสต์เธรด greentext นั้นปิดท้ายด้วยวิธีแก้ที่ใช้ได้จริง — คอนฟิกูเรชัน settings.json ที่บล็อกการอ่านไฟล์ วิธีนั้นใช้ได้ สำหรับตอนนี้ สำหรับเครื่องมือนั้น

แต่ปัญหาที่แท้จริงไม่ใช่ Claude Code หรือ Cursor หรือ Copilot ปัญหาที่แท้จริงคือ secrets ถูกเก็บเป็นไฟล์

ไฟล์ .env คือเอกสาร plaintext ที่วางอยู่บนดิสก์ อ่านได้โดย process ใดก็ตามที่รันในฐานะ user ของคุณ ก่อนยุคเครื่องมือเขียนโค้ด AI โปรเซสที่อ่านโปรเจกต์ของคุณคือ git, npm, node, editor ของคุณ คุณไว้ใจมันโดยปริยาย คุณไม่ได้คิดว่า secrets ของคุณอยู่ห่างจากการเปิดเผยแค่คำสั่ง cat เดียว

เครื่องมือเขียนโค้ด AI แค่ทำให้สิ่งที่เป็นนัยกลายเป็นสิ่งที่ชัดเจน มันอ่านโปรเจกต์ของคุณแบบเดียวกับเครื่องมืออื่นทุกตัว — แค่บังเอิญส่งบริบทไปยังที่ที่คุณมองเห็นได้

CI pipeline ของคุณก็อ่านไฟล์ .env เช่นกัน test runner ของคุณก็อ่าน linter ของคุณก็อ่าน Docker build ของคุณก็อ่าน ไม่มีตัวไหนขออนุญาตเหมือนกัน คุณแค่ไม่สังเกตเพราะมันไม่ได้โชว์บันทึกแชทของสิ่งที่มันเจอให้คุณดู

รูปแบบที่อยู่ข้างใต้

secrets ที่รั่วในปี 2022 จำนวน 70% ยังใช้งานได้จนถึงวันนี้ ไม่ได้หมุนเวียน ไม่ได้เพิกถอน ยังทำงานได้ ยังให้สิทธิ์เข้าถึงอยู่ ผ่านมาสามปีแล้ว

นี่คือตัวเลขที่แท้จริง ไม่ใช่การรั่ว 29 ล้านครั้ง — แต่คือ 70% ที่ไม่เคยถูกแก้ เพราะการหมุนเวียนคีย์หมายถึงการหาทุกระบบที่ใช้มัน อัปเดตทุก deployment ทดสอบทุก integration คีย์ถูกสร้างครั้งเดียว วางลงในไฟล์ .env แล้วไม่เคยนึกถึงมันอีก ต้นทุนของการรั่วไหลเกิดขึ้นทันที ต้นทุนของการแก้ไขการรั่วไหลนั้นไม่มีขอบเขต

องค์กรส่วนใหญ่จึงไม่แก้ พวกเขาแก้ไม่ได้ พวกเขาไม่รู้ว่าคีย์ไหนอยู่ที่ไหน คีย์ไหนยังใช้งานอยู่ คีย์ไหนถูกคัดลอกไปอยู่ในไฟล์ .env อื่นบนเครื่องอื่นโดยนักพัฒนาคนอื่นที่ต้องการทำฟีเจอร์ให้ทำงานได้ในบ่ายวันศุกร์

ทั้งหมดนี้หมายความว่าอย่างไร

ไฟล์ .env ทุกไฟล์คือการเดิมพัน เดิมพันว่าจะไม่มี process ใดอ่านมันโดยที่ไม่ควร เดิมพันว่าจะไม่มีเครื่องมือใดส่งมันไปยังที่ที่ไม่คาดคิด เดิมพันว่าจะไม่มีนักพัฒนาคนไหน commit มันโดยไม่ตั้งใจ

ปีที่แล้วมีคนแพ้เดิมพันนั้น 29 ล้านครั้ง เฉพาะบน public GitHub เท่านั้น ส่วน private repos — ที่ GitGuardian พบ secrets ใน 35% ของ repositories — ยังไม่นับรวมด้วยซ้ำ

วิธีแก้ไม่ใช่กฎใน settings.json วิธีแก้ไม่ใช่บรรทัดใน .gitignore วิธีแก้ไม่ใช่การเขียน "DO NOT READ .ENV" ด้วยตัวพิมพ์ใหญ่ทั้งหมดในไฟล์คำสั่งของคุณ

วิธีแก้คือ secret ไม่ควรอยู่ที่นั่นตั้งแต่แรก ไม่ใช่อยู่ในไฟล์ ไม่ใช่อยู่ในตัวแปรสภาพแวดล้อมที่โหลดมาจากไฟล์ ไม่ใช่อยู่ในรูปแบบใดก็ตามที่ process ซึ่งมีสิทธิ์เท่าคุณอ่านได้ด้วยการทำในสิ่งที่ process ทำ: อ่านไฟล์ในไดเรกทอรีโปรเจกต์ของคุณ

ถ้า secret อยู่บนดิสก์ มันจะถูกอ่าน คำถามเดียวคือเมื่อไร และโดยอะไร

---

แหล่งอ้างอิง