2 คะแนน โดย GN⁺ 2023-10-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความเกี่ยวกับ CVE-2023-38545 ซึ่งเป็นปัญหาความปลอดภัยสำคัญที่พบใน curl 8.4.0 และถือว่าเป็นหนึ่งในปัญหาความปลอดภัยที่ร้ายแรงที่สุดของ curl ในรอบเวลายาวนาน
  • ปัญหานี้เป็นช่องโหว่ heap overflow ที่เกิดจากข้อบกพร่องในฟังก์ชันที่ใช้เชื่อมต่อกับพร็อกซี SOCKS5
  • ปัญหานี้ถูกนำเข้ามาในช่วงต้นปี 2020 ตอนที่ฟังก์ชันถูกแปลงจากการเรียกแบบบล็อกกิงเป็น state machine แบบไม่บล็อกกิง เพื่อปรับปรุงประสิทธิภาพของการส่งข้อมูลแบบขนานจำนวนมากผ่าน SOCKS5
  • ข้อบกพร่องอยู่ในสถานะ INIT ของ state machine ซึ่งเป็นจุดที่มีการตั้งค่าตัวแปรภายในเพื่อกำหนดว่า curl จะ resolve โฮสต์เองหรือจะส่งชื่อไปให้พร็อกซี หากชื่อโฮสต์ยาวเกินไป โค้ดจะสลับไปใช้โหมด resolve ภายในเครื่อง ซึ่งอาจทำให้เกิด memory overflow ได้หากชื่อโฮสต์ยาวกว่าบัฟเฟอร์ปลายทาง
  • หากตั้งขนาดบัฟเฟอร์ให้เล็กกว่า 65541 ไบต์ และชื่อโฮสต์ยาวกว่าขนาดบัฟเฟอร์ ก็อาจเกิด overflow ได้ ซึ่งต้องอาศัยให้ผู้ไม่หวังดีป้อนชื่อโฮสต์ขนาดใหญ่มากเพื่อกระตุ้นข้อบกพร่องนี้
  • ผู้โจมตีที่ควบคุมเซิร์ฟเวอร์ HTTPS ซึ่งไคลเอนต์ที่ใช้ libcurl เข้าถึงผ่านพร็อกซี SOCKS5 ได้ สามารถส่ง redirect ที่ถูกปรับแต่งผ่านการตอบกลับ HTTP 30x เพื่อทำให้แอปพลิเคชันเกิด heap buffer overflow ได้
  • ปัญหานี้ได้รับการแก้ไขใน curl 8.4.0 โดยเมื่อชื่อโฮสต์ยาวเกินไป curl จะคืนค่า error แทนที่จะสลับจากการ resolve ระยะไกลมาเป็นการ resolve ภายในเครื่อง และยังมีการเพิ่ม test case เฉพาะสำหรับสถานการณ์นี้ด้วย
  • ผู้เขียนยอมรับว่าข้อบกพร่องนี้คงไม่เกิดขึ้นหาก curl ถูกเขียนด้วยภาษาแบบ memory-safe แทน C แต่ก็ระบุว่ายังไม่มีแผนจะพอร์ต curl ไปยังภาษาอื่นในตอนนี้
  • ผู้เขียนเสนอว่าแนวทางที่เป็นไปได้คือการยอมรับ ใช้งาน และสนับสนุน dependency ที่เขียนด้วยภาษาแบบ memory-safe ให้มากขึ้น และอาจค่อย ๆ แทนที่บางส่วนของ curl ได้ในอนาคต
  • ผู้เขียนยอมรับความผิดพลาดและกล่าวขอโทษ พร้อมระบุว่าข้อบกพร่องนี้น่าจะตรวจพบได้ด้วยชุดทดสอบที่ดีกว่านี้ อีกทั้งยังกล่าวถึงเครื่องมือ static code analysis ที่ไม่พบปัญหาในฟังก์ชันนี้
  • ผู้เขียนสรุปว่าการปล่อยโค้ดที่มี heap overflow ไปยังซอฟต์แวร์ซึ่งติดตั้งอยู่ในอินสแตนซ์มากกว่า 20 พันล้านชุด เป็นประสบการณ์ที่ไม่แนะนำให้ใครพบเจอ

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

 
GN⁺ 2023-10-12
ความเห็นจาก Hacker News
  • บทความเกี่ยวกับปัญหา heap overflow ในไลบรารี Curl ซึ่งถูกใช้งานในอุปกรณ์จำนวนมากและส่วนใหญ่เขียนโดยคนเพียงคนเดียว
  • Daniel ผู้เขียน Curl ออกมาขอโทษสำหรับความผิดพลาดที่เกิดจากบั๊กซึ่งไม่ถูกค้นพบในโค้ดนานถึง 1315 วัน
  • บทความเสนอว่า หาก Curl ถูกเขียนด้วยภาษาแบบ memory-safe แทน C ก็อาจหลีกเลี่ยงปัญหาด้าน memory safety ได้
  • ผู้เขียนพิจารณาความเป็นไปได้ในการค่อย ๆ แทนที่บางส่วนของ Curl ด้วยภาษาที่ปลอดภัยต่อหน่วยความจำมากกว่า แต่ก็ยอมรับว่าความคืบหน้าของการพัฒนาแบบนั้นเป็นไปอย่างช้า
  • ผู้เขียนอ้างว่า 41% ของช่องโหว่ด้านความปลอดภัยใน Curl สามารถหลีกเลี่ยงได้หากใช้ภาษาแบบ memory-safe
  • บทความนี้ได้รับการยอมรับว่าเขียนได้ชัดเจนและตรงไปตรงมา โดยอธิบายตรรกะและมุมมองเบื้องหลังปัญหาได้ดี
  • ความเห็นบางส่วนตั้งคำถามถึงความร้ายแรงของปัญหานี้ โดยระบุว่า attack vector มีขนาดเล็กมากและต้องอาศัยเงื่อนไขที่เฉพาะเจาะจงอย่างมากจึงจะใช้ประโยชน์ได้
  • ความเห็นหนึ่งวิจารณ์ส่วนของโค้ดที่อาจทำให้ตัวตนผู้ใช้รั่วไหลผ่าน DNS สำหรับผู้ที่ใช้เครื่องมือต่อต้านการเซ็นเซอร์
  • อีกความเห็นหนึ่งชี้ว่าผู้เขียนมองข้ามข้อจำกัดของ DNS hostname ที่ระบุไว้ใน RFC1123 และสิ่งนี้อาจมีส่วนทำให้เกิดปัญหา
  • มีการกล่าวถึงข้อเท็จจริงที่ว่าอัปเดตความปลอดภัยล่าสุดของ Windows 10 ไม่ได้รวม Curl เวอร์ชันใหม่กว่าไว้