เปิดเผยรายละเอียดของช่องโหว่ร้ายแรงใน Exim

ที่ตีพิมพ์ การเปิดตัวแก้ไข ข้อยกเว้น 4.92.2 ด้วยการกำจัดวิพากษ์วิจารณ์ ช่องโหว่ (CVE-2019-15846) ซึ่งในการกำหนดค่าเริ่มต้นสามารถนำไปสู่การเรียกใช้โค้ดจากระยะไกลโดยผู้โจมตีที่มีสิทธิ์รูท ปัญหาจะปรากฏขึ้นเฉพาะเมื่อมีการเปิดใช้งานการสนับสนุน TLS และถูกนำไปใช้โดยการส่งใบรับรองไคลเอ็นต์ที่ออกแบบมาเป็นพิเศษหรือค่าที่แก้ไขไปยัง SNI ช่องโหว่ ระบุ โดย Qualys.

ปัญหา นำเสนอ ในตัวจัดการสำหรับการหลีกอักขระพิเศษในสตริง (string_ตีความ_escape() จาก string.c) และเกิดจากอักขระ '\' ที่ส่วนท้ายของสตริงที่ถูกตีความก่อนอักขระ null ('\0') และ Escape เมื่อทำการ Escape ลำดับ '\' และโค้ดที่สิ้นสุดบรรทัดที่เป็นโมฆะต่อไปนี้จะถือเป็นอักขระตัวเดียว และตัวชี้จะถูกเลื่อนไปที่ข้อมูลนอกบรรทัด ซึ่งถือเป็นความต่อเนื่องของบรรทัด

โค้ดที่เรียก string_ตีความ_escape() จะจัดสรรบัฟเฟอร์สำหรับเดรนตามขนาดจริง และพอยน์เตอร์ที่ถูกเปิดเผยจะจบลงในพื้นที่นอกขอบเขตของบัฟเฟอร์ ดังนั้น เมื่อพยายามประมวลผลสตริงอินพุต สถานการณ์เกิดขึ้นเมื่ออ่านข้อมูลจากพื้นที่นอกขอบเขตของบัฟเฟอร์ที่จัดสรร และความพยายามในการเขียนสตริงที่ไม่ได้ใช้ Escape อาจนำไปสู่การเขียนเกินขอบเขตของบัฟเฟอร์

ในการกำหนดค่าเริ่มต้น สามารถใช้ประโยชน์จากช่องโหว่ได้โดยการส่งข้อมูลที่ออกแบบมาเป็นพิเศษไปยัง SNI เมื่อสร้างการเชื่อมต่อที่ปลอดภัยไปยังเซิร์ฟเวอร์ ปัญหานี้ยังสามารถแก้ไขได้ด้วยการแก้ไขค่า peerdn ในการกำหนดค่าที่กำหนดค่าสำหรับการตรวจสอบสิทธิ์ใบรับรองไคลเอ็นต์หรือเมื่อนำเข้าใบรับรอง การโจมตีผ่าน SNI และ peerdn สามารถทำได้ตั้งแต่การเปิดตัว ข้อยกเว้น 4.80ซึ่งใช้ฟังก์ชัน string_unprinting() เพื่อยกเลิกการพิมพ์เนื้อหา peerdn และ SNI

มีการเตรียมต้นแบบการหาช่องโหว่สำหรับการโจมตีผ่าน SNI ซึ่งทำงานบนสถาปัตยกรรม i386 และ amd64 บนระบบ Linux พร้อม Glibc ช่องโหว่นี้ใช้การซ้อนทับข้อมูลบนพื้นที่ฮีป ส่งผลให้มีการเขียนทับหน่วยความจำที่ใช้จัดเก็บชื่อไฟล์บันทึก ชื่อไฟล์จะถูกแทนที่ด้วย "/../../../../../../../../etc/passwd" ถัดไป ตัวแปรที่มีที่อยู่ของผู้ส่งจะถูกเขียนทับ ซึ่งจะถูกบันทึกไว้ในบันทึกเป็นครั้งแรก ซึ่งช่วยให้คุณเพิ่มผู้ใช้ใหม่เข้าสู่ระบบได้

การอัปเดตแพ็คเกจพร้อมการแก้ไขช่องโหว่ที่เผยแพร่โดยการแจกจ่าย debian, อูบุนตู, Fedora, SUSE/เปิดSUSE и FreeBSD. ปัญหา RHEL และ CentOS ไม่อ่อนแอเนื่องจาก Exim ไม่รวมอยู่ในที่เก็บแพ็คเกจปกติ (ใน อบอุ่น обновление แล้ว เกิดขึ้น, แต่สำหรับตอนนี้ ไม่ได้วาง ไปยังที่เก็บข้อมูลสาธารณะ) ในรหัส Exim ปัญหาได้รับการแก้ไขด้วยซับเดียว ปะซึ่งจะปิดใช้งานเอฟเฟกต์การ Escape ของแบ็กสแลชหากอยู่ท้ายบรรทัด

เพื่อเป็นวิธีแก้ปัญหาชั่วคราวในการบล็อกช่องโหว่ คุณสามารถปิดใช้งานการสนับสนุน TLS หรือเพิ่มได้
ส่วน ACL “acl_smtp_mail”:

เงื่อนไขการปฏิเสธ = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
เงื่อนไขการปฏิเสธ = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}

ที่มา: opennet.ru

เพิ่มความคิดเห็น