piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

XZ Utilsの脆弱性 CVE-2024-3094 についてまとめてみた

2024年3月29日、Linux向け圧縮ユーティリティとして広く利用されているXZ Utilsに深刻な脆弱性 CVE-2024-3094 が確認されたとして、研究者やベンダがセキュリティ情報を公開しました。この脆弱性は特定の条件下においてバックドアとして悪用される恐れがあるものとみられており、当該ソフトウエアのメンテナのアカウントにより実装されたソフトウエアサプライチェーン攻撃の可能性が指摘されています。ここでは関連する情報をまとめます。

脆弱性の概要

  • xzとは主要なLinuxディストリビューションに含まれる汎用的なデータ圧縮形式で、今回問題が確認されたのはその圧縮・解凍ユーティリティであるliblzma(API)を含むXZ Utils。CVE-2024-3094が採番されており、Red Hatによって評価されたCVSS基本値はフルスコアの10。影響を受けたライブラリをリンクしているsshdを使用していた場合、liblzmaの実装が改ざんされ、任意のソフトウエアを利用できるようになり、結果として外部から不正アクセスをされる恐れがある。
  • 今回脆弱性の発見が早期であったことから、主要なLinuxディストリビューションの実稼働リリースへの組み込みはこれまでのところ報告されておらず、また悪用に関する情報も確認されていない。
  • 直接影響を受けていないケースにおいても予防的な措置としてダウングレードが行われているケースがある。また米国CISAも侵害影響が確認されていないバージョン(5.4.6など)へダウングレードすることを勧告している。

0.5秒の遅延から発覚

  • この問題はPostgreSQL およびMicrosoftの開発者であるAndres Freund氏が発見し、Openwallのメーリングリストへxzにバックドアが確認されたと投稿したことが発端であった。
  • Andres Freund氏は 不正なliblzmaライブラリを読み込んだ状態でssh経由でのログインが大幅(約0.5秒)に遅延することを発見していた。

影響を受ける対象バージョン

  • 脆弱性の影響が確認されたバージョンは5.6.0、5.6.1の2つ。不正なコードは当該バージョン中のtarballに存在する。さらに当該対象バージョンをインストールしていることに加え、実行するLinuxディストリビューションにおいてglibc(IFUNC向け)を使用している環境が必要となる。
  • 使用するソフトウエアバージョンの確認をする場合は当該ソフトウエアのバージョン確認の機能(xz -Vなど)を使用するのではなく、パッケージマネージャを使用するなど他手段で確認をとることが推奨されている。なお、セキュリティ研究者のKotas氏はXZのどのバージョンがインストールされているかを確認できるとして、次のスクリプトを公開している

for xz_p in $(type -a xz | awk '{print $NF}' | uniq); do strings "$xz_p" | grep "xz (XZ Utils)" || echo "No match found for $xz_p"; done

  • XZ Utilsまたはliblzmaは、複数の主要なLinuxディストリビューションで採用されているが、2024年3月30日までに判明している影響を受けたLinux ディストリビューションはFedora、Debianのベータバージョンであり、実稼働しているディストリビューションで報告されているケースはない。
  • 以下は影響が確認されたもの。なおmacOSは予防的措置としてダウングレードが行われている
Linxuディストリ 影響確認された対象
Red Hat Fedora Rawhide、Fedora Linux 40 ベータ版
Debian 2024年2月1日に公開された検証(unstable)バージョン(5.5.1alpha-0.1以降5.6.1-1を含む)
Kali 2024年3月26日から3月29日までにKaliのアップデートを行っていた場合。
openSUSE 2024年3月7日から2024年3月28日までに公開されていたOpenSUSE Tumbleweed、OpenSUSE Micro OS
Alpine 5.6.1-r2より前の 5.6系バージョン
Arch 仮想マシンイメージファイル 20240301.218094 および 20240315.221711。2024年2月24日から2024年3月28日までに作成されたコンテナイメージ
Ubuntu noble-projectedのみ
  • 以下は影響がないと報告のあったディストリビューションなど。
    • FreeBSD (main、stable/14、stable/13のブランチに影響対象のバージョンが含まれるもバックドアのコンポーネントはベンダーインポートにおいて除外された。)
    • Amazon Linux
    • Apache Software Foundation

対応

  • 各Linuxディストリビューションが公開している方法(更新によるダウングレード等)にて対応する。

脆弱性を通じて仕込まれるマルウエアの挙動

ステージ 処理概要
0 不正な.m4ファイル(m4/build-to-host.m4)よりテストファイルの1つを取得し、次のステージ用に出力し実行する。
1 「####Hello####」で始まるbashファイルより、不正なテストアーカイブ(good-large_compressed.lzma)から暗号化された出力内容を複数の処理を経て復号し、次のステージ用に出力し実行する。
2 さらに別のbashファイルを通じて、最終的にliblzma_la-crc64-fast.oというバックドアファイルを生成する。
  • マルウエアは実行中プロセスが/usr/sbin/sshdであった場合起動することが確認されている。詳細は判明しておらず他のプロセスや、sshdが別のディレクトリに配置されているシステムにおいても影響を受ける場合がある。
  • マルウエアはOpensshで読み込まれた場合、RSA_public_decrypt 関数を不正な処理へリダイレクトを行っており、これが認証のバイパスを意図したものとして使用されている可能性がある。マルウエアはバックドアを使用する者が設定した内容に基づきアクセスが許可されるもので、この時必要となる情報は使用者のみが知るRSAキーなどが該当するとみられ、パスワードやPKIベースの認証は有効とならない。

メンテナが不正なコードを追加か

  • XZ Utilsの開発は主に二人のメンテナによって行われていたが、当初からの開発者であるLasse Collin氏は、問題となったtarballの作成及び署名をもう一人の主要なメンテナであったJia Tan氏(JiaT75)が行ったと明らかにした。Jia Tan氏は約2年半前からXZ Utilsの開発に参加を行っており、それから約1年後にマネージャー権限を解放されコミットをすることが許可されていた。同氏によるコミットはこれまで700回を超えると分析されている。
  • Jia Tan氏は2022年4月にメーリングリストへパッチを送信していたが、このパッチを適用するよう別の人物(Jigar Kumar氏)が強く反応を行っていた。その後にJia Tan氏に対して権限が付与されたが、以降その反応を示していた人物は登場をしなくなった。フィードバックが遅いとするこのJigar氏の反応に対し、Lasse Collin氏は長期的な精神健康上の問題を主な原因として対応に時間を要するようになったと説明している
  • Jia Tan氏はバックドアを仕込んだバージョンを展開するためだったのか、「素晴らしい新機能」が実装されたとして、Fedoraの関係者などに対して問題のバージョンを追加するよう数週間にわたり連絡を行っていた。このことからJia Tan氏のGithubアカウントが第三者によって操作された可能性は低いのではないか(本人が直接関与していた可能性)とAndres Freund氏は指摘する。*1
  • Jia Tan氏は、2021年最初に行っていたコミットとして、XZ Utilsではなく libarchiveに対しbsdtar展開時の警告にエラーテキストを追加するものとしてPRを行っていたが、その際も不可解な変更を行っていた。これについては既に対応が行われている
日時 出来事
2021年頃 Jia Tan氏のアカウントがGithubで作成される。
2022年4月頃 Jia Tan氏がXZ のメーリングリストにパッチを送信。別の人物がLasse Collin氏へ圧力をかけ始める。
2023年1月7日 Jia Tan氏にマネージャー権限が解放され、最初のコミットマージを行う。
2023年3月 oss-fuzzの連絡先がLasse Collin氏からJia Tan氏へ変更される。
2024年2月11日 XZ Utilsのプロジェクトサイト(サブドメイン)がGithubページを指すように変更される。
2024年2月24日頃 XZ UtilsのGithubリポジトリに対して、不正なコードのコミットが行われる
2024年3月9日頃 XZ UtilsのGithubリポジトリに対し、テストファイルとして再度2つの不正なコード(bad-3-corrupt_lzma2.xz、good-large_compressed.lzma)のコミットが行われる。
2024年3月29日 Andres Freund氏がXZ Utilsのバックドアについて指摘する内容をOpenwallのMLへ投稿。

更新履歴

  • 2024年4月1日 AM 新規作成
  • 2024年4月2日 AM 誤記修正(RHELが影響対象と読み取れるため)