ทีมวิจัยของ Apiiro เผยแพร่รายงานเมื่อ 5 พฤศจิกายน 2569 ว่าพบไฟล์ .claude/settings.local.json ของ Claude Code บน GitHub สาธารณะ 1,122 ไฟล์ที่มีรหัสผ่านหรือคีย์จริงอยู่ข้างใน ต้นเหตุคือเมื่อนักพัฒนากดตัวเลือก “Yes, and don’t ask again” ให้คำสั่งในเทอร์มินัล Claude Code จะบันทึกคำสั่งนั้นทั้งบรรทัดลงไฟล์ตั้งค่า ถ้าคำสั่งมีรหัสผ่าน รหัสผ่านก็ถูกบันทึกไปด้วย และหลุดออกไปเมื่อไฟล์ถูก push ขึ้น repository สาธารณะ
สารบัญ
⚡ สรุปข่าวใน 30 วินาที
- Apiiro ตรวจไฟล์ settings.local.json บน GitHub 104,185 ไฟล์
- 1,122 ไฟล์ (ราว 1.1%) มีความลับจริง รวม 1,379 ค่า
- ตรวจลึกรวมประวัติ Git พบความลับ 2,539 ค่าใน 1,994 repository
- เครื่องสแกน gitleaks และ TruffleHog จับไม่ได้เลย 215 ไฟล์
- ต้องเปลี่ยนรหัสผ่านและคีย์ที่หลุดทันที การลบไฟล์อย่างเดียวไม่พอ
ความลับหลุดได้อย่างไร
Claude Code ถามยืนยันก่อนรันคำสั่ง Bash ทุกครั้ง ถ้านักพัฒนาเลือก “Yes, and don’t ask again” ระบบจะเพิ่มกฎอนุญาตลงในไฟล์ .claude/settings.local.json ภายในโปรเจกต์ ปัญหาคือกฎนี้เก็บคำสั่งทั้งบรรทัด เช่น คำสั่งเชื่อมฐานข้อมูลที่พิมพ์รหัสผ่านไว้ในคำสั่ง รหัสผ่านจึงอยู่ในไฟล์แบบข้อความธรรมดา
Anthropic ระบุว่าตอนที่ Claude Code เขียนไฟล์นี้ครั้งแรก ระบบจะเพิ่มชื่อไฟล์ลงในรายการไฟล์ที่ Git ไม่ติดตามของเครื่องนั้น แต่การตั้งค่านี้อยู่บนเครื่องของนักพัฒนาแต่ละคน ไม่ได้ติดไปกับโปรเจกต์ เมื่อย้ายเครื่อง เพื่อนร่วมทีมโคลนโปรเจกต์ หรือไฟล์ถูกติดตามไว้ก่อนแล้ว ไฟล์ก็อาจถูก commit ขึ้นไปได้
ตัวเลขจากงานวิจัย
Apiiro เก็บข้อมูลระหว่าง 1-3 พฤศจิกายน และแจ้งองค์กรที่ได้รับผลไปแล้วเมื่อ 2-3 พฤศจิกายน มีองค์กรหนึ่งยืนยันว่าคีย์ที่หลุดยังใช้งานได้จริง Apiiro ไม่ได้ทดลองใช้ความลับที่พบ ผลการวิจัยจึงแสดงความเสี่ยงที่ข้อมูลจะหลุด ยังไม่ใช่หลักฐานว่ามีใครถูกเจาะระบบ
| ประเภทความลับ | จำนวนที่พบ |
|---|---|
| รหัสผ่านฐานข้อมูล | 379 |
| คีย์ service-role ของ Supabase | 122 |
| การล็อกอิน SSH เข้าเซิร์ฟเวอร์สาธารณะ | 43 |
| โทเคน GitHub, GitLab, npm | 42 |
| คีย์ AWS | 23 |
ข้อมูลอีกชุดที่น่าสนใจคือ ในบรรดา 1,105 repository ที่ตรวจย้อนได้ พบ commit ที่ Claude เป็นผู้เขียนร่วมแก้ไฟล์นี้ใน 539 repository แต่ตัวเลขนี้ไม่ได้หมายความว่า Claude เป็นคนใส่ความลับทุกค่า
ทำไมเครื่องสแกนความลับจับไม่ได้
ใน 1,122 ไฟล์ เครื่องมือสแกนยอดนิยม gitleaks จับได้ 564 ไฟล์ และ TruffleHog จับได้ 643 ไฟล์ แต่มี 215 ไฟล์ที่ทั้งสองเครื่องมือจับไม่ได้เลย ส่วนใหญ่เป็นรหัสผ่านที่พิมพ์อยู่ในคำสั่ง เช่น หลัง PGPASSWORD= หรือ sshpass -p หรือ mysql -p ซึ่งไม่มีรูปแบบเฉพาะให้เครื่องสแกนจับ ต่างจากคีย์ของผู้ให้บริการที่มีคำนำหน้าชัดเจน
ปัญหานี้ไม่ได้เกิดกับ Claude Code อย่างเดียว ผู้เชี่ยวชาญแนะนำให้ตรวจโฟลเดอร์ของเอเจนต์ AI ตัวอื่นด้วย เช่น .cursor, .gemini และ .specstory
วิธีแก้สำหรับนักพัฒนา
ขั้นแรกและสำคัญที่สุดคือเปลี่ยนรหัสผ่าน โทเคน และคีย์ทุกตัวที่เคยอยู่ในไฟล์ เพราะการลบไฟล์ไม่ได้ลบประวัติ commit ที่ผ่านมา และอาจมีคนโคลนหรือ fork ไปแล้ว จากนั้นจึงจัดการไฟล์ตามขั้นตอนนี้
- ขั้นที่ 1 เปลี่ยนความลับทุกค่าที่เคยหลุดก่อนทำอย่างอื่น
- ขั้นที่ 2 สั่ง git rm –cached .claude/settings.local.json เพื่อเลิกติดตามไฟล์
- ขั้นที่ 3 เพิ่มไฟล์นี้ลงใน .gitignore ของ repository เอง
- ขั้นที่ 4 ใช้ตัวแปรสภาพแวดล้อมหรือระบบจัดการความลับ แทนการพิมพ์รหัสผ่านในคำสั่ง
- ขั้นที่ 5 อนุญาตคำสั่งแบบรูปแบบกว้าง เช่น Bash(npm run test *) แทนคำสั่งเฉพาะที่มีรหัสผ่าน
องค์กรควรเพิ่มการสแกนโฟลเดอร์ .claude และโฟลเดอร์ของเอเจนต์อื่นใน pre-commit และ CI รวมถึงค้นประวัติ Git หารูปแบบรหัสผ่านที่เครื่องสแกนมักพลาด
ที่มาของปัญหา
ปัญหาแบบนี้เคยมีคนรายงานมาก่อน มีรายงานใน issue ของ Claude Code ตั้งแต่สิงหาคม 2568 ว่าคำสั่งที่อนุญาตไว้ถูกเก็บพร้อมรหัสผ่านแบบข้อความธรรมดา issue นี้ถูกปิดอัตโนมัติในเดือนมกราคม 2569 เพราะไม่มีความเคลื่อนไหว ไม่ได้หมายความว่าแก้แล้ว และในกุมภาพันธ์ 2569 บริษัทความปลอดภัย ironPeak ก็เคยพบไฟล์ตั้งค่าที่มีรหัสผ่านฐานข้อมูลและ API key และเผยแพร่เครื่องมือสแกน
- ส.ค. 2568 มีผู้รายงานปัญหาเก็บรหัสผ่านใน issue ของ Claude Code
- ม.ค. 2569 issue ถูกปิดอัตโนมัติ
- ก.พ. 2569 ironPeak พบไฟล์ตั้งค่าที่มีรหัสผ่าน
- 1-3 พ.ย. 2569 Apiiro เก็บข้อมูลและแจ้งองค์กรที่ได้รับผล
- 5 พ.ย. 2569 Apiiro เผยแพร่รายงาน
คำถามที่พบบ่อยเกี่ยวกับ ความลับหลุดจาก Claude Code
ไฟล์ไหนที่ทำความลับหลุด
ไฟล์ .claude/settings.local.json ที่บันทึกคำสั่งเมื่อเลือก Yes, and don’t ask again
พบความลับหลุดกี่ไฟล์
1,122 ไฟล์จาก 104,185 ไฟล์บน GitHub สาธารณะ
ลบไฟล์แล้วปลอดภัยไหม
ไม่พอ ต้องเปลี่ยนรหัสผ่านและคีย์ทั้งหมด เพราะยังอยู่ในประวัติ commit
ป้องกันอย่างไร
เพิ่มไฟล์ลงใน .gitignore ของโปรเจกต์ และใช้ตัวแปรสภาพแวดล้อมแทนการพิมพ์รหัสผ่านในคำสั่ง
มีคนถูกเจาะระบบแล้วหรือยัง
รายงานแสดงความเสี่ยงที่ข้อมูลหลุด ยังไม่ใช่หลักฐานว่ามีการโจมตี แต่มีองค์กรหนึ่งยืนยันว่าคีย์ที่หลุดยังใช้ได้จริง


ความคิดเห็น 0
ยังไม่มีความคิดเห็นเป็นคนแรกที่แสดงความคิดเห็นในบทความนี้