- 3 สิงหาคม 2025 DrawAFish! เกิด เหตุการณ์ความปลอดภัยขนาดใหญ่ บนเว็บไซต์เป็นเวลาประมาณ 6 ชั่วโมง
- การรั่วไหลของรหัสผ่านผู้ดูแล, API ที่ขาดการยืนยันตัวตน, ช่องโหว่ JWT เป็นต้นช่องโหว่ด้านความปลอดภัยสำคัญถูกเปิดให้การโจมตีได้พร้อมกัน
- ส่งผลให้ ชื่อผู้ใช้ทั้งหมดถูกเปลี่ยนเป็นคำหยาบคาย และภาพที่ไม่เหมาะสมได้รับการอนุมัติในขณะเดียวกันกับภาพที่ปลอดภัยเดิมถูกลบออกไป
- ดำเนินการแก้ไขผ่าน การกู้คืนแบบแฮนด์เมน, การแก้ไขตรรกะการยืนยันตัวตน, และการตรวจสอบการสำรองข้อมูล
- บทเรียนหลักคือ การพัฒนาอย่างรวดเร็ว (“vibe-coding”) และการขาดการทดสอบ/รีวิวโค้ด อาจก่อให้เกิดผลร้ายแรงด้านความปลอดภัย
ภาพรวม DrawAFish.com และสรุปเหตุการณ์เมื่อ 3 สิงหาคม 2025
- DrawAFish.com เป็นเว็บไซต์ที่ให้ผู้ใช้วาดปลาเองและปล่อยให้ว่ายน้ำในกระชังร่วมกับผู้ใช้อื่น
- เมื่อ 1 สิงหาคม 2025 DrawAFish.com ขึ้นอันดับ 1 ใน Hacker News และได้รับความสนใจสูงมาก ผู้พัฒนานำแนวทาง “vibe-coding” มาใช้ด้วยการใช้เครื่องมืออย่าง Copilot ในการสร้างฟีเจอร์อย่างรวดเร็ว
- อย่างไรก็ตาม เช้าตรู่วันที่ 3 สิงหาคม 2025 เกิดเหตุการณ์ความปลอดภัยที่รุนแรงขึ้น
- เกิดสถานการณ์นานประมาณ 6 ชั่วโมงที่ชื่อผู้ใช้ทั้งหมดถูกเปลี่ยนเป็นคำหยาบคาย และภาพไม่เหมาะสมได้รับการอนุมัติในขณะเดียวกันเกิดความยุ่งเหยิง
- สุดท้ายผู้ดูแลระบบจึงต้องทำการกู้คืนด้วยตนเอง
รายละเอียดช่องโหว่
1. รหัสผ่านผู้ดูแล 6 หลักที่รั่วไหลไปก่อนหน้านี้
- ผู้พัฒนาใช้ชื่อผู้ใช้และรหัสผ่านของตัวเองตั้งแต่สมัยเด็ก (6 หลัก) สำหรับบัญชีผู้ดูแลตั้งแต่ต้น
- รหัสผ่านนี้ถูกเผยแพร่สู่สาธารณะแล้วผ่านการรั่วไหลข้อมูลของเว็บไซต์อื่นๆ เช่น Neopets
- ผู้พัฒนามีการใช้ Google Auth หลังจากนั้น แต่ยังไม่ลบรหัสผ่านเดิม ทำให้ผู้โจมตียังคงใช้ช่องโหว่นี้ได้
- ผู้โจมตีใช้ข้อมูลที่รั่วไหลไปเพื่อยืนยันตัวตนผู้ดูแลสำเร็จ และดำเนินการอนุมัติภาพหมิ่นประมาทและลบภาพปกติด้วยการกระทำที่เป็นอันตราย
2. API เปลี่ยนชื่อผู้ใช้ที่ไม่มีการยืนยันตัวตน
- ระหว่างพัฒนาส่วน backend ของโปรไฟล์ ผู้พัฒนาตั้งใจพัฒนาเร็วโดยสร้าง API เปลี่ยนชื่อผู้ใช้โดยไม่มีขั้นตอนตรวจสอบการยืนยันตัวตน
- ในทางปฏิบัติทุกคนสามารถเปลี่ยนชื่อผู้ใช้ได้ตามใจชอบ
3. JWT ตรวจสอบไม่เข้ม
- ในระบบยืนยันตัวตนบนพื้นฐาน token JWT ได้พัฒนาระบบที่ทำให้การกระทำของผู้ดูแลเป็นไปได้โดยไม่ต้องแมป token กับ userId/email
- กล่าวคือ หากผู้โจมตีมี token ที่ออกจากข้อมูลยืนยันตัวตนผู้ดูแล ก็สามารถใช้สิทธิ์ผู้ดูแลกับคำขอใดๆ ได้
- น่าสนใจว่า ผู้ใช้หนึ่งคนใน Hacker News ใช้ช่องโหว่นี้เพื่อลบไฟล์ไม่เหมาะสมก่อนผู้บุกรุก ทำให้การแก้ไขเหตุฉุกเฉินเร็วขึ้น
กระบวนการกู้คืน
- ผู้พัฒนาเริ่มตอบสนองอย่างรวดเร็วตั้งแต่ประมาณ 7:45 น. ในเช้าวันเกิดเหตุ โดยเริ่มจากคอมพิวเตอร์เดสก์ท็อป
- เนื่องจากไม่ได้ตั้งค่า backup ของ firebase ไว้ จึงไม่สามารถพึ่งพาสำรองข้อมูลได้ และแก้ไขโค้ดอย่างรวดเร็วเพื่อบังคับใช้การยืนยันตัวตน
- ติดตามบันทึกโมเดอเรชันทั้งหมดและพัฒนาสคริปต์เพื่อยกเลิกการทำงานที่เป็นอันตรายของผู้โจมตี (สคริปต์นี้ก็เขียนด้วยแนวทาง vibe-coding ด้วย)
- ในเวลาฉุกเฉินยังปิดการเข้าถึงของบุคคลที่สามที่ใช้สิทธิ์ผู้ดูแล (ผู้ใช้ Hacker News) แล้วติดต่อขอ feedback เรื่องรีแฟกเตอร์ความปลอดภัยใน codebase และดำเนินการ patch เพิ่มเติม
วัฒนธรรมการพัฒนาและบทเรียน
- ผู้พัฒนาพบว่า “vibe-coding” ที่ให้ความสำคัญกับการต้นแบบอย่างรวดเร็วและการตรวจสอบขั้นต่ำ แม้จะให้ความสนุกและประสิทธิภาพสูง แต่ในทางปฏิบัติอาจนำไปสู่ช่องโหว่ด้านความปลอดภัยรุนแรง
- LLM (Copilot) มีประโยชน์มากต่อการผลิตโค้ดที่เร็วมาก แต่ความรับผิดชอบด้านคุณภาพและความปลอดภัยของโค้ดยังคงอยู่ที่ผู้พัฒนาเอง
- กรณีนี้เป็นหลักฐานว่าการละเว้นขั้นตอนความปลอดภัยพื้นฐานอย่างการทดสอบ, ตรรกะการยืนยันตัวตน, การ code review จะทำให้โครงการขนาดเล็กต้องเผชิญความเสี่ยงสูงต่อการโจมตีภายนอกได้อย่างมาก
สรุปและมุมมอง
- กรณี DrawAFish.com แสดงให้เห็นถึงความสำคัญของ มาตรการรักษาความปลอดภัยพื้นฐาน ที่มักถูกมองข้ามในการดำเนินการจริง
- แม้จะพึ่งพาเครื่องมือโอเพนซอร์สและเครื่องมือพัฒนาแบบเร็ว ต้องตรวจสอบประเด็นพื้นฐานเสมอ โดยเฉพาะ การทดสอบ, การยืนยันตัวตน, การ code review และการจัดการรหัสผ่าน
- เมื่อได้รับการสนใจในระดับที่คาดไม่ถึง (เช่น อันดับสูงสุดบน Hacker News) พื้นที่เสี่ยงและพื้นที่โจมตีสามารถขยายตัวได้อย่างรวดเร็ว
- การบันทึก postmortem อย่างโปร่งใสช่วยส่งต่อบทเรียนด้านความปลอดภัยที่จับต้องได้ให้กับสตาร์ทอัปหรือผู้พัฒนาส่วนบุคคลที่มีลักษณะคล้ายกันในอนาคต
ยังไม่มีความคิดเห็น