บริษัท ควอลิส
ปัญหาเกิดจากจุดบกพร่องในโค้ดที่ส่งเมลไปยังเซิร์ฟเวอร์เมลระยะไกล (ไม่ใช่ในโค้ดที่จัดการการเชื่อมต่อขาเข้า) การโจมตีเป็นไปได้ทั้งบนฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ ในฝั่งไคลเอ็นต์ การโจมตีเป็นไปได้ในการกำหนดค่าเริ่มต้นของ OpenSMTPD ซึ่ง OpenSMTPD ยอมรับคำขอเฉพาะบนอินเทอร์เฟซเครือข่ายภายใน (localhost) และส่งข้อความอีเมลไปยังเซิร์ฟเวอร์ภายนอก เพื่อใช้ประโยชน์จากช่องโหว่นั้น ก็เพียงพอแล้วที่ในระหว่างการส่งจดหมาย OpenSMTPD จะสร้างเซสชันกับเมลเซิร์ฟเวอร์ที่ควบคุมโดยผู้โจมตี หรือผู้โจมตีสามารถเข้าไปในการเชื่อมต่อไคลเอนต์ (MITM หรือการเปลี่ยนเส้นทางระหว่างการโจมตีผ่าน DNS หรือ BGP ).
สำหรับการโจมตีฝั่งเซิร์ฟเวอร์ จะต้องกำหนดค่า OpenSMTPD ให้รับคำขอเครือข่ายภายนอกจากเมลเซิร์ฟเวอร์อื่นหรือให้บริการจากบุคคลที่สามที่อนุญาตให้คุณส่งคำขอไปยังอีเมลที่กำหนดเองได้ (เช่น แบบฟอร์มยืนยันที่อยู่บนเว็บไซต์) ตัวอย่างเช่น ผู้โจมตีสามารถเชื่อมต่อกับเซิร์ฟเวอร์ OpenSMTPD และส่งจดหมายที่ไม่ถูกต้อง (ไปยังผู้ใช้ที่ไม่มีอยู่จริง) ซึ่งจะนำไปสู่การตอบกลับโดยส่งจดหมายพร้อมรหัสข้อผิดพลาด (ตีกลับ) ไปยังเซิร์ฟเวอร์ของผู้โจมตี ผู้โจมตีสามารถใช้ประโยชน์จากช่องโหว่เมื่อ OpenSMTPD เชื่อมต่อเพื่อส่งการแจ้งเตือนไปยังเซิร์ฟเวอร์ของผู้โจมตี คำสั่งเชลล์ที่ถูกแทรกระหว่างการโจมตีจะถูกวางไว้ในไฟล์ที่ดำเนินการด้วยสิทธิ์รูทเมื่อรีสตาร์ท OpenSMTPD ดังนั้นผู้โจมตีต้องรอให้ OpenSMTPD รีสตาร์ทหรือเริ่มความผิดพลาดของ OpenSMTPD เพื่อให้การโจมตีเสร็จสมบูรณ์
ปัญหามีอยู่ในฟังก์ชัน mta_io() ในโค้ดสำหรับแยกวิเคราะห์การตอบสนองหลายบรรทัดที่ส่งคืนโดยเซิร์ฟเวอร์ระยะไกลหลังจากสร้างการเชื่อมต่อแล้ว (เช่น "250-ENHANCEDSTATUSCODES" และ "250 HELP") OpenSMTPD คำนวณว่าบรรทัดแรกประกอบด้วยตัวเลขสามหลักและข้อความที่คั่นด้วยอักขระ "-" และบรรทัดที่สองประกอบด้วยตัวเลขสามหลักและข้อความที่คั่นด้วยช่องว่าง หากตัวเลขสามหลักไม่ตามด้วยช่องว่างและข้อความในบรรทัดที่สอง ตัวชี้ที่ใช้กำหนดข้อความจะถูกตั้งค่าเป็นไบต์ตามอักขระ '\0' และจะพยายามคัดลอกข้อมูลต่อท้ายข้อความ ของเส้นเข้าไปในบัฟเฟอร์
ตามคำร้องขอของโครงการ OpenBSD การเผยแพร่รายละเอียดเกี่ยวกับการใช้ประโยชน์จากช่องโหว่ถูกเลื่อนออกไปจนถึงวันที่ 26 กุมภาพันธ์เพื่อให้ผู้ใช้สามารถอัปเดตระบบของตนได้ ปัญหานี้มีอยู่ในโค้ดเบสตั้งแต่เดือนธันวาคม 2015 แต่การใช้ประโยชน์ก่อนการเรียกใช้โค้ดด้วยสิทธิ์รูทนั้นเป็นไปได้ตั้งแต่เดือนพฤษภาคม 2018 นักวิจัยได้เตรียมต้นแบบการทำงานของช่องโหว่นี้ ซึ่งผ่านการทดสอบแล้วใน OpenSMTPD builds สำหรับ OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (ทดสอบ) และ Fedora 31
ใน OpenSMTPD ด้วย
ปัญหาเป็นผลมาจากการกำจัดที่ไม่สมบูรณ์
เป็นที่น่าสังเกตว่าใน Fedora 31 ช่องโหว่ช่วยให้คุณได้รับสิทธิพิเศษของกลุ่มรูททันทีเนื่องจากกระบวนการ smtpctl นั้นมาพร้อมกับแฟล็กรูท setgid แทนที่จะเป็นแฟล็ก setgid smtpq เมื่อเข้าถึงกลุ่มรูท คุณสามารถเขียนทับเนื้อหาของ /var/lib/sss/mc/passwd และเข้าถึงรูทเต็มไปยังระบบได้
ที่มา: opennet.ru