5 คะแนน โดย GN⁺ 2025-08-05 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 อย่างโปร่งใสช่วยส่งต่อบทเรียนด้านความปลอดภัยที่จับต้องได้ให้กับสตาร์ทอัปหรือผู้พัฒนาส่วนบุคคลที่มีลักษณะคล้ายกันในอนาคต

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

 
crawler 2025-08-06

ตัวอักษร "S" ของ vibe-coded ย่อมาจาก Security

 
wkbae 2025-08-06

น่าทึ่งที่ผู้ใช้คนหนึ่งบน Hacker News ใช้ประโยชน์จากช่องโหว่นี้เพื่อลบข้อมูลที่ไม่เหมาะสมก่อนผู้บุกรุก และช่วยให้การตอบสนองฉุกเฉินเป็นไปอย่างมีประสิทธิภาพ

 
GN⁺ 2025-08-05
ความคิดเห็นจาก Hacker News
  • ฉันเองก็ชอบทำงานเร็วมากเหมือนกัน รู้สึกสนุกกับการไม่ทำ code review แล้วกด push ทันที ๆ แต่พอเห็นโพสต์โมตมเมมนี้แล้วก็เข้าใจแล้วว่าทำไมโปรเจกต์ข้างเคียงของฉันถึงถูกหยุดบ่อย ๆ เพราะสุดท้ายก็ไปถึงงานจริงที่น่าเบื่อ และก็หยุดอยู่ตรงจุดนั้นเอง
  • สงสัยว่าเป็น Firebase กันแน่ ไม่รู้ว่าพวกเขายังใช้ free tier อยู่หรือไม่ หรือว่าใครสักคนเอาเปรียบโจมตีโดยไม่สุจริตจนตอนเช้าตื่นขึ้นมาก็ได้บิลที่เป็นตัวเลขห้าหลัก
  • ฉันเป็นหนึ่งในคนที่ได้เจอเหตุการณ์ Slurfish มาด้วยตัวเอง ทำงานด้านความปลอดภัยอยู่ พอเห็นมันชัดแบบนี้ก็ยังแอบขำ แต่ก็รู้เลยว่าคนที่มีเวลาช่วยจริงจังบน HN จะโผล่มาเร็ว ๆ นี้เอง ชอบมากที่มีโพสต์โมตมเมมของโปรเจกต์ vibe-coded ตัวนี้ถูกเปิดเผยอย่างละเอียด
    • คนมักคิดว่าแค่ว่า “vibe coding” คือปัญหา แต่ความจริงอย่างน้อยมีอย่างน้อยสองประเด็น—“ทิ้งบัญชี admin สำหรับทดสอบไว้” และ “เช็ค token แล้วไม่ทำ cross-check”—ที่เป็นปัญหาปกติได้ทั้งที่ไม่ใช้ AI หรือ vibe coding
    • หากมีภาพปลารูปแบบสวัสติก้า (\‘swastika-fish\’) สักรูปสักหน่อยก็น่าจะดีนะ แต่เสียดายที่ไม่เห็นของจริง
  • โพสต์โมตมเมมนี้รู้สึกน่าสนใจขึ้นเพราะเป็นแอป vibe-coded โดยเฉพาะเลย ฉันสงสัยว่าอาจได้รับแรงบันดาลใจจากนิทรรศการทำปลาใน Lego House หรือเปล่า เมื่อไปมาเมื่อไม่นานมานี้ การที่ปลาที่ฉันสร้างไปว่ายน้ำพร้อมปลาตัวอื่น ๆ น่าหลงใหลจริง ๆ คลิปวิดีโอ LEGO House Build-a-Fish บน YouTube
    • ไม่เคยรู้ว่านิทรรศการนี้มีอยู่ ที่ St Louis Aquarium มีปลาที่ถูกระบายสีให้ดูเหมือนว่ายน้ำจริง และรับแรงบันดาลใจจาก Google Quickdraw ราวปี 2016
  • น่าทึ่งมากที่มีคนใช้ช่องโหว่ด้านความปลอดภัยเพื่อหยุดการโจมตีจริง
    • แบบนี้เคยเกิดขึ้นมาหลายครั้งเหมือนกัน บาง worm/exploit เคยแก้ไขช่องโหว่เองเพื่อกันตัวเองไว้
    • อ่านเจอบทความมาปีก่อนว่าหน่วย FBI เคยทำสิ่งคล้ายกันเพื่อหยุด exploit ที่ชื่อ EternalBlue (ชื่อ exploit อาจไม่แม่นยำ)
    • ผู้คนพวกนี้น่าทึ่งจริง ๆ
  • “S” ใน vibe-coded คืออักษรย่อของ Security
    • “S” อาจหมายถึงงู...หรือบางทีอาจหมายถึงมังกรก็ได้
  • คนที่คิดไอเดียใหม่ ๆ จากศูนย์ ทำเอง ทดลองเอง แล้วได้เรียนรู้เยอะ ๆ พร้อมกล้าที่จะยอมรับความล้มเหลวแบบมืออาชีพ คือผู้เชี่ยวชาญตัวจริง ถ้าไม่ต้องสูญเสียเงิน 100,000 ดอลลาร์ ไม่ให้ระบบเครือข่ายพัง และไม่ต้องตกงาน ในอีกหนึ่งปีเขาจะน่าจะหันกลับมามองเหตุการณ์เหล่านี้แล้วหัวเราะได้
  • ตอนนี้บนไซต์นั้นมีปลาสวัสติก้าอยู่ มีคนพยายามแอบวางมันไว้ในรูปลักษณะปลาเพื่อเลี่ยงตัวกรอง ลิงก์ภาพที่เป็นเรื่อง [https://drawafish.com/rank.html?userId=1754341779700_log2xle5o] ซึ่งตอนนี้ถูกลบไปแล้ว
    • มีปลาที่มีข้อความว่า “Balls” ด้วย พบได้ที่ลิงก์นี้ ส่วนตัวคิดว่าระดับนี้มันแทบไม่ใช่ปัญหาอะไร
    • ปลาตัวนั้นอยู่ระดับที่สัมผัสได้ถึงสัมผัสแห่งพระพุทธเจ้า
  • ตอนนี้สามารถโหวตปลาตัวไหนก็ได้โดยไม่ต้องยืนยันตัวตน (สูงสุด 20 ครั้ง/นาที ต่อ IP) โดยใช้ POST ไปยัง URL นี้ ลิงก์ Vote API {"fishId":"xxxx","vote":"up"}
    • ตรงนี้ตั้งใจทำแบบนั้นตั้งแต่แรกนะ บางตัวอาจชอบแค่นิดหน่อย บางตัวอาจชอบมากมาก เลยทำให้ไลก์/ไม่ชอบได้ตามใจ
  • ชอบมากที่มีโพสต์โมตมเมมสำหรับเว็บไซต์ vibe-coded แบบนี้ หลายคนมองเทคโนโลยีแบบเคร่งเครียดเกินไป มุมมองแบบเบาสบายและสนุก ๆ อย่างนี้สดใหม่มาก และในฐานะโปรเจกต์เล็ก ๆ แล้วก็ทั้งน่าสนใจและมีความหมายมาก