ช่องโหว่ที่สำคัญใน Exim ที่อนุญาตให้เรียกใช้โค้ดบนเซิร์ฟเวอร์ที่มีสิทธิ์รูท

ในเซิร์ฟเวอร์อีเมล Exim ระบุ วิกฤต จุดอ่อน (CVE-2019-10149) ซึ่งสามารถนำไปสู่การเรียกใช้โค้ดจากระยะไกลบนเซิร์ฟเวอร์ที่มีสิทธิ์รูทเมื่อประมวลผลคำขอที่สร้างขึ้นเป็นพิเศษ ความเป็นไปได้ของการใช้ประโยชน์จากปัญหาถูกบันทึกไว้ในเวอร์ชันตั้งแต่ 4.87 ถึง 4.91 รวมหรือเมื่อสร้างด้วยตัวเลือก EXPERIMENTAL_EVENT

ในการกำหนดค่าเริ่มต้น การโจมตีสามารถดำเนินการได้โดยไม่มีความยุ่งยากที่ไม่จำเป็นโดยผู้ใช้ภายในเครื่อง เนื่องจากมีการใช้ ACL "verify = ผู้รับ" ซึ่งจะทำการตรวจสอบเพิ่มเติมสำหรับที่อยู่ภายนอก การโจมตีระยะไกลอาจเกิดขึ้นได้เมื่อมีการเปลี่ยนแปลงการตั้งค่า เช่น ทำหน้าที่เป็น MX รองสำหรับโดเมนอื่น การลบ ACL "verify=recipient" ออก หรือการเปลี่ยนแปลงบางอย่างใน local_part_suffix) การโจมตีระยะไกลยังเกิดขึ้นได้หากผู้โจมตีสามารถรักษาการเชื่อมต่อกับเซิร์ฟเวอร์ไว้เป็นเวลา 7 วัน (เช่น การส่งหนึ่งไบต์ต่อนาทีเพื่อข้ามการหมดเวลา) อย่างไรก็ตาม มีความเป็นไปได้ที่จะมีเวกเตอร์การโจมตีที่ง่ายกว่าสำหรับการใช้ประโยชน์จากปัญหาจากระยะไกล

ช่องโหว่นี้เกิดจากการยืนยันที่อยู่ของผู้รับอย่างไม่ถูกต้องในฟังก์ชัน Deliver_message() ที่กำหนดไว้ในไฟล์ /src/deliver.c ด้วยการจัดการการจัดรูปแบบที่อยู่ ผู้โจมตีสามารถแทนที่ข้อมูลของเขาเป็นอาร์กิวเมนต์ของคำสั่งที่เรียกผ่านฟังก์ชัน execv() ด้วยสิทธิ์รูทได้ การดำเนินการไม่จำเป็นต้องใช้เทคนิคที่ซับซ้อนที่ใช้สำหรับบัฟเฟอร์ล้นหรือหน่วยความจำเสียหาย การทดแทนอักขระแบบธรรมดาก็เพียงพอแล้ว

ปัญหาเกี่ยวข้องกับการใช้โครงสร้างสำหรับการแปลงที่อยู่:

send_localpart = ขยาย_สตริง (
string_sprintf("${local_part:%s}", ใหม่->ที่อยู่));
send_domain = ขยาย_สตริง (
string_sprintf("${domain:%s}", new->address));

ฟังก์ชันexpand_string() เป็นตัวรวมที่ซับซ้อนเกินไป รวมถึงการจดจำคำสั่ง “${run{command arguments}” ซึ่งนำไปสู่การเรียกใช้ตัวจัดการภายนอก ดังนั้น ในการโจมตีภายในเซสชัน SMTP ผู้ใช้ภายในเครื่องจะต้องส่งคำสั่งเช่น 'RCPT TO “username+${run{...}}@localhost”' เท่านั้น โดยที่ localhost เป็นหนึ่งในโฮสต์จากรายการ local_domains และชื่อผู้ใช้คือชื่อของผู้ใช้ภายในเครื่องที่มีอยู่

หากเซิร์ฟเวอร์ทำงานเป็นเมลรีเลย์ การส่งคำสั่ง 'RCPT TO "${run{...}}@relaydomain.com"' จากระยะไกลก็เพียงพอแล้ว โดยที่ Relaydomain.com เป็นหนึ่งในโฮสต์ที่อยู่ในรายการ Relay_to_domains ส่วนการตั้งค่า เนื่องจาก Exim ไม่ได้ตั้งค่าเริ่มต้นให้ยกเลิกโหมดสิทธิพิเศษ (deliver_drop_privilege = false) คำสั่งที่ส่งผ่าน "${run{...}}" จะถูกดำเนินการในฐานะรูท

เป็นที่น่าสังเกตว่าจุดอ่อนนั้นคือ ถูกกำจัด ในรุ่น 4.92 ที่เผยแพร่ในเดือนกุมภาพันธ์ โดยไม่ได้เน้นว่าการแก้ไขอาจนำไปสู่ปัญหาด้านความปลอดภัย ไม่มีเหตุผลใดที่จะเชื่อได้ว่ามีการจงใจปกปิดช่องโหว่โดยนักพัฒนา Exim เนื่องจากปัญหาได้รับการแก้ไขในระหว่างนั้น กรมราชทัณฑ์ ความล้มเหลวที่เกิดขึ้นเมื่อส่งที่อยู่ที่ไม่ถูกต้อง และ Qualys ระบุช่องโหว่ระหว่างการตรวจสอบการเปลี่ยนแปลงใน Exim

การแก้ไขสำหรับเวอร์ชันก่อนหน้าที่ยังคงใช้ในการแจกจ่ายอยู่ในปัจจุบันมีเฉพาะในรูปแบบเท่านั้น ปะ- การเปิดตัวแก้ไขสำหรับสาขาก่อนหน้าเพื่อแก้ไขปัญหามีกำหนดในวันที่ 11 มิถุนายน การอัปเดตแพ็คเกจพร้อมแล้ว debian, อูบุนตู, openSUSE. Arch ลินุกซ์ и Fedora มีเวอร์ชัน 4.92 ซึ่งไม่มีปัญหาเกิดขึ้น ปัญหา RHEL และ CentOS ไม่อ่อนแอเนื่องจาก Exim ไม่รวมอยู่ในที่เก็บแพ็คเกจมาตรฐาน

ที่มา: opennet.ru

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