ช่องโหว่ใน OpenSMTPD ที่อนุญาตการเข้าถึงรูทจากระยะไกลและในเครื่อง

บริษัท ควอลิส เปิดเผย ช่องโหว่ที่สำคัญจากระยะไกลอีกรายการหนึ่ง (CVE-2020-8794) ในเมลเซิร์ฟเวอร์ เปิดSMTPDพัฒนาโดยโครงการ OpenBSD เช่นเดียวกับที่ระบุไว้เมื่อปลายเดือนมกราคม จุดอ่อนปัญหาใหม่ทำให้สามารถรันคำสั่งเชลล์ตามอำเภอใจจากระยะไกลบนเซิร์ฟเวอร์ที่มีสิทธิ์ผู้ใช้รูทได้ ช่องโหว่ ถูกกำจัด ในประเด็น เปิดSMTPD 6.6.4p1.

ปัญหาเกิดจากจุดบกพร่องในโค้ดที่ส่งเมลไปยังเซิร์ฟเวอร์เมลระยะไกล (ไม่ใช่ในโค้ดที่จัดการการเชื่อมต่อขาเข้า) การโจมตีเป็นไปได้ทั้งบนฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ ในฝั่งไคลเอ็นต์ การโจมตีเป็นไปได้ในการกำหนดค่าเริ่มต้นของ 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 ด้วย ระบุ ช่องโหว่อีกประการหนึ่ง (CVE-2020-8793) ที่อนุญาตให้ผู้ใช้ภายในเครื่องสามารถอ่านบรรทัดแรกของไฟล์ใดๆ ในระบบได้ ตัวอย่างเช่น คุณสามารถอ่านบรรทัดแรกของ /etc/master.passwd ซึ่งมีแฮชรหัสผ่านของผู้ใช้รูท ช่องโหว่นี้ยังทำให้คุณสามารถอ่านเนื้อหาทั้งหมดของไฟล์ที่เป็นของผู้ใช้รายอื่นได้ หากไฟล์นี้อยู่ในระบบไฟล์เดียวกันกับไดเร็กทอรี /var/spool/smtpd/ ปัญหานี้ไม่สามารถหาประโยชน์ได้บน Linux หลายรุ่น โดยที่ค่าของ /proc/sys/fs/protected_hardlinks ตั้งไว้ที่ 1

ปัญหาเป็นผลมาจากการกำจัดที่ไม่สมบูรณ์ ปัญหาเปล่งออกมาระหว่างการตรวจสอบที่ดำเนินการโดย Qualys ในปี 2015 ผู้โจมตีสามารถดำเนินการโค้ดของตนด้วยสิทธิ์ของกลุ่ม “_smtpq” ได้โดยการตั้งค่าตัวแปร “PATH=” และวางสคริปต์ชื่อ makemap ในไดเร็กทอรีปัจจุบัน (ยูทิลิตี smtpctl รัน makemap โดยไม่ระบุเส้นทางอย่างชัดเจน) เมื่อเข้าถึงกลุ่ม "_smtpq" ผู้โจมตีสามารถทำให้เกิดสภาวะการแข่งขัน (สร้างไฟล์ขนาดใหญ่ในไดเร็กทอรีออฟไลน์และส่งสัญญาณ SIGSTOP) และก่อนที่การประมวลผลจะเสร็จสิ้น ให้แทนที่ไฟล์ในไดเร็กทอรีออฟไลน์ด้วยฮาร์ด symlink ชี้ไปที่ไฟล์เป้าหมายซึ่งจำเป็นต้องอ่านเนื้อหา

เป็นที่น่าสังเกตว่าใน Fedora 31 ช่องโหว่ช่วยให้คุณได้รับสิทธิพิเศษของกลุ่มรูททันทีเนื่องจากกระบวนการ smtpctl นั้นมาพร้อมกับแฟล็กรูท setgid แทนที่จะเป็นแฟล็ก setgid smtpq เมื่อเข้าถึงกลุ่มรูท คุณสามารถเขียนทับเนื้อหาของ /var/lib/sss/mc/passwd และเข้าถึงรูทเต็มไปยังระบบได้

ที่มา: opennet.ru

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