นักวิจัยด้านความปลอดภัยจาก Qualys
ปัญหามีสาเหตุมาจากจำนวนเต็มล้นในฟังก์ชัน stralloc_readyplus() ซึ่งอาจเกิดขึ้นเมื่อประมวลผลข้อความที่มีขนาดใหญ่มาก การดำเนินการต้องใช้ระบบ 64 บิตที่มีหน่วยความจำเสมือนมากกว่า 4GB เมื่อช่องโหว่ได้รับการวิเคราะห์ครั้งแรกในปี 2005 Daniel J. Bernstein แย้งว่าข้อสันนิษฐานในโค้ดที่ว่าขนาดของอาเรย์ที่จัดสรรนั้นอยู่ภายในค่า 32 บิตเสมอนั้นขึ้นอยู่กับข้อเท็จจริงที่ว่าไม่มีใครจัดเตรียมหน่วยความจำกิกะไบต์ให้กับแต่ละกระบวนการ ในช่วง 15 ปีที่ผ่านมา ระบบ 64 บิตบนเซิร์ฟเวอร์ได้เข้ามาแทนที่ระบบ 32 บิต และจำนวนหน่วยความจำที่ให้มาและแบนด์วิธเครือข่ายก็เพิ่มขึ้นอย่างมาก
ผู้ดูแลแพ็คเกจ qmail คำนึงถึงบันทึกของ Bernstein และจำกัดหน่วยความจำที่มีอยู่เมื่อเริ่มกระบวนการ qmail-smtpd (เช่น ใน Debian 10 ขีดจำกัดจะตั้งไว้ที่ 7MB) แต่วิศวกรจาก Qualys พบว่านี่ยังไม่เพียงพอ และนอกเหนือจาก qmail-smtpd แล้ว การโจมตีระยะไกลยังสามารถทำได้บนกระบวนการ qmail-local ซึ่งยังคงไม่จำกัดในแพ็คเกจที่ทดสอบทั้งหมด เพื่อเป็นการพิสูจน์ มีการเตรียมต้นแบบการหาประโยชน์ซึ่งเหมาะสำหรับการโจมตีแพ็คเกจ Debian ด้วย qmail ในการกำหนดค่าเริ่มต้น
ในการจัดระเบียบการเรียกใช้โค้ดจากระยะไกลระหว่างการโจมตี เซิร์ฟเวอร์ต้องการพื้นที่ว่างในดิสก์ 4GB และ RAM 8GB
การใช้ประโยชน์ช่วยให้คุณสามารถรันคำสั่งเชลล์ใด ๆ ที่มีสิทธิ์ของผู้ใช้ใด ๆ ในระบบยกเว้นผู้ใช้รูทและระบบที่ไม่มีไดเร็กทอรีย่อยของตนเองในไดเร็กทอรี "/ home" (กระบวนการ qmail-local จะเปิดตัวพร้อมสิทธิ์ ของผู้ใช้ในพื้นที่ที่ดำเนินการจัดส่งให้)
การโจมตีจะดำเนินการ
ผ่านการส่งข้อความเมลขนาดใหญ่มาก รวมถึงบรรทัดส่วนหัวหลายบรรทัด ขนาดประมาณ 4GB และ 576MB การประมวลผลสตริงดังกล่าวใน qmail-local ส่งผลให้เกิดจำนวนเต็มล้นเมื่อพยายามส่งข้อความไปยังผู้ใช้ภายในเครื่อง จำนวนเต็มล้นจะทำให้บัฟเฟอร์ล้นเมื่อคัดลอกข้อมูล และความเป็นไปได้ที่จะเขียนทับเพจหน่วยความจำด้วยโค้ด libc ด้วยการจัดการเลย์เอาต์ของข้อมูลที่ส่ง ทำให้สามารถเขียนที่อยู่ของฟังก์ชัน "open()" ใหม่ได้ โดยแทนที่ด้วยที่อยู่ของฟังก์ชัน "system()"
ถัดไป ในกระบวนการเรียก qmesearch() ใน qmail-local ไฟล์ “.qmail-extension” จะถูกเปิดผ่านฟังก์ชัน open() ซึ่งนำไปสู่การเรียกใช้ฟังก์ชันจริง
ระบบ (".qmail-extension") แต่เนื่องจากส่วน “ส่วนขยาย” ของไฟล์ถูกสร้างขึ้นตามที่อยู่ของผู้รับ (เช่น “localuser-extension@localdomain”) ผู้โจมตีจึงสามารถจัดเตรียมคำสั่งให้ส่งไปทำงานโดยการระบุผู้ใช้ “localuser-;command ;@localdomain” ในฐานะผู้รับข้อความ
ในระหว่างการวิเคราะห์โค้ด มีการระบุช่องโหว่สองรายการในแพตช์ยืนยัน qmail เพิ่มเติม ซึ่งเป็นส่วนหนึ่งของแพ็คเกจสำหรับ Debian ช่องโหว่แรก (
เพื่อแก้ไขปัญหา Bernstein แนะนำให้เรียกใช้กระบวนการ qmail โดยมีขีดจำกัดรวมของหน่วยความจำที่มีอยู่ (“softlimit -m12345678”) ซึ่งในกรณีนี้ปัญหาจะถูกบล็อก เพื่อเป็นอีกทางเลือกหนึ่งในการป้องกัน มีการกล่าวถึงการจำกัดขนาดสูงสุดของข้อความที่ประมวลผลผ่านไฟล์ “ควบคุม/ดาต้าไบต์” (โดยค่าเริ่มต้น จะไม่ได้สร้างไว้ด้วยการตั้งค่าเริ่มต้น qmail ยังคงมีความเสี่ยงอยู่) นอกจากนี้ "การควบคุม/ดาต้าไบต์" ไม่ได้ป้องกันการโจมตีในเครื่องจากผู้ใช้ระบบ เนื่องจากขีดจำกัดจะถูกพิจารณาโดย qmail-smtpd เท่านั้น
ปัญหาส่งผลกระทบต่อแพ็คเกจ
ที่มา: opennet.ru