พบช่องโหว่ในเซิร์ฟเวอร์ telnetd จากชุดซอฟต์แวร์ GNU InetUtils ช่องโหว่นี้อนุญาตให้เชื่อมต่อในฐานะผู้ใช้ใดๆ ก็ได้ รวมถึง root โดยไม่ต้องยืนยันรหัสผ่าน ยังไม่มีการกำหนดหมายเลข CVE ช่องโหว่นี้มีมาตั้งแต่ InetUtils เวอร์ชัน 1.9.3 (2015) และยังไม่ได้รับการแก้ไขในเวอร์ชันปัจจุบัน 2.7.0 การแก้ไขมีอยู่ในแพทช์ (1, 2)
ปัญหาเกิดจากข้อเท็จจริงที่ว่า ในการตรวจสอบรหัสผ่าน กระบวนการ telnetd จะเรียกใช้ยูทิลิตี้ "/usr/bin/login" โดยส่งชื่อผู้ใช้ที่ไคลเอ็นต์ระบุเมื่อเชื่อมต่อเป็นอาร์กิวเมนต์ เซิร์ฟเวอร์โปรแกรม "ล็อกอิน" รองรับตัวเลือก "-f" ซึ่งอนุญาตให้ล็อกอินโดยไม่ต้องยืนยันตัวตน (ตัวเลือกนี้มีไว้สำหรับใช้เมื่อผู้ใช้ได้รับการยืนยันตัวตนแล้ว) ดังนั้น การแทนที่ตัวเลือก "-f" ลงในชื่อผู้ใช้ จะช่วยให้คุณเชื่อมต่อได้โดยไม่ต้องยืนยันรหัสผ่าน
ในการเชื่อมต่อแบบปกติ คุณไม่สามารถใช้ชื่อผู้ใช้เช่น "-f root" ได้ แต่ Telnet มีโหมดการเชื่อมต่ออัตโนมัติที่เปิดใช้งานโดยตัวเลือก "-a" ในโหมดนี้ ชื่อผู้ใช้จะไม่ถูกดึงมาจากบรรทัดคำสั่ง แต่จะถูกส่งผ่านตัวแปรสภาพแวดล้อม USER เมื่อเรียกใช้ยูทิลิตี้การเข้าสู่ระบบ ค่าของตัวแปรสภาพแวดล้อมนี้จะถูกแทนที่โดยไม่มีการตรวจสอบเพิ่มเติมและไม่มีการหลีกเลี่ยงอักขระพิเศษ ดังนั้น ในการเชื่อมต่อในฐานะผู้ใช้ root เพียงแค่ตั้งค่าตัวแปรสภาพแวดล้อม USER เป็น "-f root" และเชื่อมต่อกับเซิร์ฟเวอร์ Telnet โดยใช้ตัวเลือก "-a": $ USER='-f root' telnet -a server_name
การเปลี่ยนแปลงที่ทำให้เกิดช่องโหว่นี้ถูกเพิ่มเข้าไปในโค้ด telnetd ในเดือนมีนาคม 2015 และแก้ไขปัญหาที่ป้องกันไม่ให้ระบบตรวจสอบชื่อผู้ใช้ในโหมดล็อกอินอัตโนมัติโดยไม่ต้องใช้การตรวจสอบสิทธิ์ Kerberos โดยวิธีการแก้ไขคือ เพิ่มการรองรับการส่งชื่อผู้ใช้ในโหมดล็อกอินอัตโนมัติผ่านตัวแปรสภาพแวดล้อม แต่ลืมตรวจสอบความถูกต้องของชื่อผู้ใช้จากตัวแปรสภาพแวดล้อมไป
ที่มา: opennet.ru
