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など)へダウングレードすることを勧告している。

発見者は偶然見つかったと報告

  • この問題はPostgreSQL およびMicrosoftの開発者であるAndres Freund氏が発見し、Openwallのメーリングリストへliblzma周辺に起因した奇妙な症状を観察し、その原因としてxzパッケージにバックドアが確認されたと投稿したことが発端であった
  • Andres Freud氏はマイクロベンチマークを行っていた際、sshd(他のプロセスを停止させた状態、かつユーザー名が誤っているなどの理由ですぐにエラーとなっていたにもかかわらず)のCPUリソースが驚くべき消費量であることに気づいた。さらなる分析の結果、(不正な)liblzmaを読み込んだ状態でssh経由でのログインが大幅(約0.5秒)に遅延することを発見した。

mastodon.social

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

  • 脆弱性の影響が確認されたバージョンは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回を超えると分析されている。なお、2024年3月31日時点でJia Tan氏は解任されている。
  • Jia Tan氏は2022年4月にXZ開発者のメーリングリストへパッチを送信していたが、このパッチを適用するよう別の人物(Jigar Kumar氏)が強く反応(圧力)を行っていた。その後にJia Tan氏に対して権限が付与されたが、以降その強烈な反応を示していた人物はメーリングリスト上では登場をしなくなった。フィードバックが遅いとするこのJigar氏の反応に対し、Lasse Collin氏は長期的な精神健康上の問題を主な原因として対応に時間を要するようになったと説明している
  • Jia Tan氏はバックドアを仕込んだバージョンを展開するためだったのか、「素晴らしい新機能」が実装されたとして、Fedoraの関係者などに対して問題のバージョンを追加するよう数週間にわたり連絡を行っていたとされる。このことからJia Tan氏のGithubアカウントが第三者によって操作された可能性は低いのではないか(本人が直接関与していた可能性)とAndres Freund氏は指摘する。*1
  • Jia Tan氏は、2021年最初に行っていたコミットとして、XZ Utilsではなく libarchiveに対しbsdtar展開時の警告にエラーテキストを追加するものとしてPRを行っていたが、その際も不可解な変更を行っていた。これについては既に対応が行われている
  • 2024年3月29日時点で利用規約に違反をしたとして、XZ UtilsのGithubリポジトリは無効化の措置が取られている。

日時 出来事
2021年頃 Jia Tan氏のアカウントがGithubで作成される。
2021年10月29日 Jia Tan氏が無害なパッチをXZのメーリングリストに投稿。
2021年11月29日 Jia Tan氏が再び無害なパッチをXZのメーリングリストに投稿。
2022年2月7日 Lasse Collin氏がjiat0218@gmail.comを作成者とする最初のコミットをマージ。
2022年4月19日 Jia Tan氏がXZ のメーリングリストに再びパッチを送信。
2022年4月22日 別の人物(Jigar Kumar氏)がLasse Collin氏へパッチが取り込まれないことにクレームをつける圧力をかけ始める。
2022年5月19日 Lasse Collin氏が対応の遅延について謝罪。その後もJigar Kumar氏による圧力が継続。
2022年6月8日 Lasse Collin氏が反発し、精神的健康衛生上の問題により対応が遅れていると言及。
2022年6月10日 Lasse Collin氏がJia Tan名の最初のコミットをマージ。
2022年6月21日 さらに別の人物(Dennis Ens氏)がプロジェクトをほかの人へ引き継ぐよう圧力をかけ始める。
2022年9月27日 Jia Tan氏が5.4.0のリリース概要を説明。
2022年10月28日 Jia Tan氏がGithubのTukaaniグループに追加。
2023年1月7日 Jia Tan氏にマネージャー権限が解放され、最初のコミットマージを行う。
2023年3月 oss-fuzzの連絡先がLasse Collin氏からJia Tan氏へ変更される。
2023年7月7日 Jia Tan氏がifuncのサポートを無効化。
2024年1月19日 XZ Utilsのプロジェクトサイト(サブドメイン)がGithubページを指すように変更される。
2024年2月24日頃 XZ UtilsのGithubリポジトリに対して、不正なコードのコミットが行われる。5.6.0のタグをつけビルド。不正なtarballを含むファイルを公開。
2024年2月26日 Debianが5.6.0を検証バージョンへ追加。
2024年3月4日 Redhatにおいて、liblzmaでValgrindのエラーが発生し始める。
2024年3月9日頃 XZ UtilsのGithubリポジトリに対し、テストファイルとして再度2つの不正なコード(bad-3-corrupt_lzma2.xz、good-large_compressed.lzma)のコミットが行われる。5.6.1のタグをつけリリース。
2024年3月29日 Andres Freund氏がXZ Utilsのバックドアについて指摘する内容をOpenwallのMLへ投稿。

更新履歴

  • 2024年4月1日 AM 新規作成
  • 2024年4月2日 AM 誤記修正(RHELが影響対象と読み取れるため)
  • 2024年4月2日 AM 発見の経緯、関係者の説明が不正確であったため修正
  • 2024年4月5日 AM タイムラインを微修正