OpenSSH 9.2 เปิดตัวพร้อมการแก้ไขช่องโหว่ในการตรวจสอบสิทธิ์ล่วงหน้า

เปิดตัว 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

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