เปิดตัว OpenSSH 9.2 แล้ว ซึ่งเป็นการใช้งานแบบเปิดของไคลเอนต์และเซิร์ฟเวอร์สำหรับการทำงานโดยใช้โปรโตคอล SSH 2.0 และ SFTP เวอร์ชันใหม่ขจัดช่องโหว่ที่นำไปสู่การเพิ่มหน่วยความจำสองเท่าในขั้นตอนการตรวจสอบสิทธิ์ล่วงหน้า เฉพาะรุ่น OpenSSH 9.1 เท่านั้นที่ได้รับผลกระทบ ปัญหาไม่ปรากฏในเวอร์ชันก่อนหน้า
ในการสร้างเงื่อนไขสำหรับการสำแดงช่องโหว่ ก็เพียงพอที่จะเปลี่ยนแบนเนอร์ไคลเอ็นต์ SSH เป็น "SSH-2.0-FuTTYSH_9.1p1" เพื่อตั้งค่าสถานะ "SSH_BUG_CURVE25519PAD" และ "SSH_OLD_DHGEX" ซึ่งขึ้นอยู่กับเวอร์ชันของ SSH ลูกค้า. หลังจากตั้งค่าแฟล็กเหล่านี้ หน่วยความจำสำหรับบัฟเฟอร์ “options.kex_algorithms” จะถูกปลดปล่อยสองครั้ง - เมื่อเรียกใช้ฟังก์ชัน do_ssh2_kex() ซึ่งจะเรียก compat_kex_proposal() และเมื่อเรียกใช้ฟังก์ชัน do_authentication2() ซึ่งจะเรียก input_userauth_request(), mm_getpwnamallow( ), copy_set_server_options() ตลอดสาย , assemble_algorithms() และ kex_assemble_names()
การสร้างช่องโหว่ที่ใช้งานได้นั้นถือว่าไม่น่าเป็นไปได้ เนื่องจากกระบวนการหาประโยชน์นั้นซับซ้อนเกินไป - ไลบรารีการจัดสรรหน่วยความจำสมัยใหม่ให้การป้องกันการเพิ่มหน่วยความจำสองเท่า และกระบวนการก่อนการตรวจสอบความถูกต้องซึ่งมีข้อผิดพลาดเกิดขึ้นจะทำงานโดยมีสิทธิ์ลดลงในแบบแยก สภาพแวดล้อมแซนด์บ็อกซ์
นอกเหนือจากช่องโหว่ที่ระบุไว้แล้ว เวอร์ชันใหม่ยังแก้ไขปัญหาด้านความปลอดภัยอีกสองประการ:
- เกิดข้อผิดพลาดขณะประมวลผลการตั้งค่า "PermitRemoteOpen" ทำให้อาร์กิวเมนต์แรกถูกละเว้นหากแตกต่างจากค่า "any" และ "none" ปัญหาปรากฏในเวอร์ชันที่ใหม่กว่า OpenSSH 8.7 และทำให้ข้ามการตรวจสอบเมื่อมีการระบุสิทธิ์อนุญาตเดียวเท่านั้น
- ผู้โจมตีที่ควบคุมเซิร์ฟเวอร์ DNS ที่ใช้ในการแก้ไขชื่อสามารถบรรลุการแทนที่อักขระพิเศษ (เช่น “*”) ลงในไฟล์known_hosts ถ้าตัวเลือก CanonicalizeHostname และ CanonicalizePermissionCNAMEs ถูกเปิดใช้งานในการกำหนดค่า และผู้แก้ไขระบบไม่ตรวจสอบความถูกต้องของ การตอบสนองจากเซิร์ฟเวอร์ DNS การโจมตีนี้ถือว่าไม่น่าเป็นไปได้เนื่องจากชื่อที่ส่งคืนจะต้องตรงกับเงื่อนไขที่ระบุผ่าน CanonicalizePermissionCNAMEs
การเปลี่ยนแปลงอื่นๆ:
- มีการเพิ่มการตั้งค่า EnableEscapeCommandline ใน ssh_config สำหรับ ssh เพื่อควบคุมว่าการประมวลผลฝั่งไคลเอ็นต์ของลำดับการหลีกเลี่ยง "~C" ที่ให้บรรทัดคำสั่งนั้นเปิดใช้งานอยู่หรือไม่ ตามค่าเริ่มต้น ขณะนี้การจัดการ "~C" ถูกปิดใช้งานเพื่อใช้การแยกแซนด์บ็อกซ์ที่เข้มงวดมากขึ้น ซึ่งอาจทำลายระบบที่ใช้ "~C" สำหรับการส่งต่อพอร์ตขณะรันไทม์
- เพิ่มคำสั่ง ChannelTimeout ใน sshd_config สำหรับ sshd เพื่อตั้งค่าการหมดเวลาการไม่ใช้งานช่อง (ช่องที่ไม่มีการบันทึกการรับส่งข้อมูลตามเวลาที่ระบุในคำสั่งจะถูกปิดโดยอัตโนมัติ) สามารถตั้งค่าการหมดเวลาที่แตกต่างกันสำหรับเซสชัน, X11, เอเจนต์ และการเปลี่ยนเส้นทางการรับส่งข้อมูล
- มีการเพิ่มคำสั่ง UnusedConnectionTimeout ใน sshd_config สำหรับ sshd ซึ่งช่วยให้คุณสามารถตั้งค่าการหมดเวลาสำหรับการยกเลิกการเชื่อมต่อไคลเอนต์ที่ไม่มีช่องทางที่ใช้งานอยู่ในช่วงเวลาหนึ่ง
- เพิ่มตัวเลือก “-V” ใน sshd เพื่อแสดงเวอร์ชัน ซึ่งคล้ายกับตัวเลือกที่คล้ายกันในไคลเอ็นต์ ssh
- เพิ่มบรรทัด "Host" ลงในเอาต์พุตของ "ssh -G" ซึ่งสะท้อนถึงค่าของอาร์กิวเมนต์ชื่อโฮสต์
- เพิ่มตัวเลือก "-X" ลงใน scp และ sftp เพื่อควบคุมพารามิเตอร์โปรโตคอล SFTP เช่น ขนาดบัฟเฟอร์การคัดลอก และจำนวนคำขอที่รอดำเนินการ
- ssh-keyscan อนุญาตให้สแกนช่วงที่อยู่ CIDR แบบเต็ม เช่น "ssh-keyscan 192.168.0.0/24"
ที่มา: opennet.ru