- บทความเกี่ยวกับ 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 ความคิดเห็น
ความเห็นจาก Hacker News