ข้ามไปยังเนื้อหา
ล่าสุด
23:03SoftBank ขาดทุน 7 พันล้านดอลลาร์ ครั้งแรกในรอบ 2 ปี เดิมพัน AI สะดุด จีนยังสกัดดีลหุ่นยนต์22:58Otter.ai เพิ่ม 27 ภาษา รวม 31 ภาษา ภาษาไทยมาแน่ ถอดเสียงประชุมสลับภาษาได้22:25GTA 6 เปิดโหลดล่วงหน้าแล้ว 212GB เตรียมเล่น 19 พ.ย. ย้อนไทม์ไลน์ 3 ปีกว่าจะถึงวันวางขาย22:11iPhone Duo ปะทะ Galaxy Z Fold8 จอพับ 7.6 นิ้วเท่ากัน แต่ราคาไทยห่างกัน 18,000 บาท ใครเหมาะกับใคร22:03ก่อนกดจ่าย 11.11 ทำ 7 ขั้นนี้ก่อน กันโดนร้านปลอม ของไม่ตรงปก และลิงก์หลอก21:57ทำไมมือถือกับโน้ตบุ๊กปีหน้าแพงขึ้น? ไขปม RAMageddon ที่ทำให้ OPPO พับแผนรุ่นท็อป21:47ฝรั่งเศสชี้ตัวการแฮกตู้เย็นซูเปอร์มาร์เก็ต 700 แห่ง เป็นหน่วยไซเบอร์สายอิหร่าน อาหารเน่าเสียหายหลายสิบล้านยูโร21:28ลาก่อนหน้าต่างเด้งตอนกด Shift รัว Windows 11 เพิ่มช่องติ๊ก “ไม่ต้องเปิด Sticky Keys อีก” หลังทนกันมา 30 ปี

KOMCHADคมชัด ข่าวไอที

เตือนนักพัฒนา! ปุ่ม “อย่าถามอีก” ใน Claude Code ทำรหัสผ่านและ API key หลุดขึ้น GitHub 1,122 ไฟล์

เตือนนักพัฒนา! ปุ่ม “อย่าถามอีก” ใน Claude Code ทำรหัสผ่านและ API key หลุดขึ้น GitHub 1,122 ไฟล์

Apiiro พบไฟล์ .claude/settings.local.json ของ Claude Code บน GitHub สาธารณะ 1,122 ไฟล์มีรหัสผ่านหรือคีย์จริง จากตัวเลือก Yes, and don't ask again พร้อมวิธีตรวจและแก้ไข

เขียนโดยKOMCHAD อ่าน 5 นาที

ทีมวิจัยของ Apiiro เผยแพร่รายงานเมื่อ 5 พฤศจิกายน 2569 ว่าพบไฟล์ .claude/settings.local.json ของ Claude Code บน GitHub สาธารณะ 1,122 ไฟล์ที่มีรหัสผ่านหรือคีย์จริงอยู่ข้างใน ต้นเหตุคือเมื่อนักพัฒนากดตัวเลือก “Yes, and don’t ask again” ให้คำสั่งในเทอร์มินัล Claude Code จะบันทึกคำสั่งนั้นทั้งบรรทัดลงไฟล์ตั้งค่า ถ้าคำสั่งมีรหัสผ่าน รหัสผ่านก็ถูกบันทึกไปด้วย และหลุดออกไปเมื่อไฟล์ถูก push ขึ้น repository สาธารณะ

สารบัญ
  1. ความลับหลุดได้อย่างไร
  2. ตัวเลขจากงานวิจัย
  3. ทำไมเครื่องสแกนความลับจับไม่ได้
  4. วิธีแก้สำหรับนักพัฒนา
  5. ที่มาของปัญหา
  6. คำถามที่พบบ่อยเกี่ยวกับ ความลับหลุดจาก Claude Code

⚡ สรุปข่าวใน 30 วินาที

  • Apiiro ตรวจไฟล์ settings.local.json บน GitHub 104,185 ไฟล์
  • 1,122 ไฟล์ (ราว 1.1%) มีความลับจริง รวม 1,379 ค่า
  • ตรวจลึกรวมประวัติ Git พบความลับ 2,539 ค่าใน 1,994 repository
  • เครื่องสแกน gitleaks และ TruffleHog จับไม่ได้เลย 215 ไฟล์
  • ต้องเปลี่ยนรหัสผ่านและคีย์ที่หลุดทันที การลบไฟล์อย่างเดียวไม่พอ
1,122ไฟล์ที่มีความลับจริง
2,539ความลับที่พบทั้งหมด
1,994repository ที่ได้รับผล
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 ของ Supabase122
การล็อกอิน SSH เข้าเซิร์ฟเวอร์สาธารณะ43
โทเคน GitHub, GitLab, npm42
คีย์ AWS23

ข้อมูลอีกชุดที่น่าสนใจคือ ในบรรดา 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. ขั้นที่ 1 เปลี่ยนความลับทุกค่าที่เคยหลุดก่อนทำอย่างอื่น
  2. ขั้นที่ 2 สั่ง git rm –cached .claude/settings.local.json เพื่อเลิกติดตามไฟล์
  3. ขั้นที่ 3 เพิ่มไฟล์นี้ลงใน .gitignore ของ repository เอง
  4. ขั้นที่ 4 ใช้ตัวแปรสภาพแวดล้อมหรือระบบจัดการความลับ แทนการพิมพ์รหัสผ่านในคำสั่ง
  5. ขั้นที่ 5 อนุญาตคำสั่งแบบรูปแบบกว้าง เช่น Bash(npm run test *) แทนคำสั่งเฉพาะที่มีรหัสผ่าน

องค์กรควรเพิ่มการสแกนโฟลเดอร์ .claude และโฟลเดอร์ของเอเจนต์อื่นใน pre-commit และ CI รวมถึงค้นประวัติ Git หารูปแบบรหัสผ่านที่เครื่องสแกนมักพลาด

ที่มาของปัญหา

ปัญหาแบบนี้เคยมีคนรายงานมาก่อน มีรายงานใน issue ของ Claude Code ตั้งแต่สิงหาคม 2568 ว่าคำสั่งที่อนุญาตไว้ถูกเก็บพร้อมรหัสผ่านแบบข้อความธรรมดา issue นี้ถูกปิดอัตโนมัติในเดือนมกราคม 2569 เพราะไม่มีความเคลื่อนไหว ไม่ได้หมายความว่าแก้แล้ว และในกุมภาพันธ์ 2569 บริษัทความปลอดภัย ironPeak ก็เคยพบไฟล์ตั้งค่าที่มีรหัสผ่านฐานข้อมูลและ API key และเผยแพร่เครื่องมือสแกน

  1. ส.ค. 2568 มีผู้รายงานปัญหาเก็บรหัสผ่านใน issue ของ Claude Code
  2. ม.ค. 2569 issue ถูกปิดอัตโนมัติ
  3. ก.พ. 2569 ironPeak พบไฟล์ตั้งค่าที่มีรหัสผ่าน
  4. 1-3 พ.ย. 2569 Apiiro เก็บข้อมูลและแจ้งองค์กรที่ได้รับผล
  5. 5 พ.ย. 2569 Apiiro เผยแพร่รายงาน

คำถามที่พบบ่อยเกี่ยวกับ ความลับหลุดจาก Claude Code

ไฟล์ไหนที่ทำความลับหลุด

ไฟล์ .claude/settings.local.json ที่บันทึกคำสั่งเมื่อเลือก Yes, and don’t ask again

พบความลับหลุดกี่ไฟล์

1,122 ไฟล์จาก 104,185 ไฟล์บน GitHub สาธารณะ

ลบไฟล์แล้วปลอดภัยไหม

ไม่พอ ต้องเปลี่ยนรหัสผ่านและคีย์ทั้งหมด เพราะยังอยู่ในประวัติ commit

ป้องกันอย่างไร

เพิ่มไฟล์ลงใน .gitignore ของโปรเจกต์ และใช้ตัวแปรสภาพแวดล้อมแทนการพิมพ์รหัสผ่านในคำสั่ง

มีคนถูกเจาะระบบแล้วหรือยัง

รายงานแสดงความเสี่ยงที่ข้อมูลหลุด ยังไม่ใช่หลักฐานว่ามีการโจมตี แต่มีองค์กรหนึ่งยืนยันว่าคีย์ที่หลุดยังใช้ได้จริง

คุณรู้สึกอย่างไรกับข่าวนี้?

แตะอีโมจิเพื่อดูว่าคนอื่นรู้สึกอย่างไร

ความคิดเห็น 0

แสดงความคิดเห็น

แสดงความคิดเห็นอย่างสุภาพ ความคิดเห็นที่มีลิงก์หรือคำไม่เหมาะสมอาจต้องรอตรวจสอบก่อนแสดง นโยบายความเป็นส่วนตัว

0/5000

Ctrl + Enter เพื่อส่ง

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