CVE-2024-3094: XZ Utilsにバックドアが仕込まれたという脆弱性の自分用メモ

CVE-2024-3094: XZ Utilsにバックドアが仕込まれたという脆弱性の自分用メモ
Page content

手元にも来とる……

XZ Utils (xz/liblzma) にバックドアが仕込まれたという脆弱性 CVE-2024-3094 が、その発生経緯と威力の面でやばそうで、かつ、自分の手元のPC (macOS) にも、脆弱性のある版が知らないうちにインストールされていたことが衝撃的なので、自分に関わる部分でのメモを残す。

Homebrew (macOS) の場合

対応前 [2024-03-30]

手元の2台のMacbook AirにはHomebrewを導入していて、けっこう頻繁にbrew updateを叩いて更新している。その環境では xz が 5.6.1 にアップデートされてしまっていた。

## 追記: 【推奨】一般的により安全なバージョン確認方法
$ brew list --version xz
xz 5.6.1
## 追記: 【非推奨】最初に掲載していたバージョン確認方法
$ xz -V
xz (XZ Utils) 5.6.1
liblzma 5.6.1

対応内容 [2024-03-30]

そこで、2台とも次の手順をやってみて xz を 5.4.6 へダウングレードした。

## 追記: 【推奨】Homebrewに従うxz更新(downgrade)方法
$ brew update && brew upgrade
$ brew list --version xz
xz 5.4.6
## 追記: 【非推奨】最初に掲載していたxz更新(downgrade)方法
$ brew update
$ brew unlink xz
$ brew install xz
$ xz -V
xz (XZ Utils) 5.4.6
liblzma 5.4.6

巷で紹介されているswitchや、uninstallをしなかった理由は次の通り。

  • 私の手元のbrewコマンドではbrew switchが使えない模様
  • brew uninstall xzは他のパッケージへの影響範囲が広すぎて実施を控えた

なお、Homebrew側でダウングレードの対応がなされていた後なので、上記手順のみで 5.4.6 へ変更できた可能性がある。

対応内容部分に関する追記集

追記: [2024-03-31T00:53:39+09:00]

下記のご指摘、確かに……。調査時にそこまで考えなかった。

より安全なのは、xzのバージョンを直接実行で調べるのではなく、各環境のパッケージマネージャを介して調べる方法。具体的には次のような方法になると思われる。

下記のツイートにある方法も参考になる。

backdoorに関する周辺情報 (仕込みの意図や拡張性 etc.)

追記: [2024-03-30T23:18:08+09:00]

CVE-2024-3094 の要因となったcommitの主が、xzリポジトリ以外に行った過去のpull requestの、内容の再精査が行われているらしい。

  1. Added error text to warning when untaring with bsdtar by JiaT75 · Pull Request #1609 · libarchive/libarchive · GitHub
  2. libarchive: pull the fix for a suspicious commit by LeSuisse · Pull Request #300114 · NixOS/nixpkgs · GitHub

改訂: [2024-03-31T22:39:50+09:00]

xz/liblzmaの、問題となっているコードを詳細に解析しているところ、およびそのリンク集。1は今回の脆弱性の最初の報告である。

  1. oss-security - backdoor in upstream xz/liblzma leading to ssh server compromise
  2. xz/liblzma: Bash-stage Obfuscation Explained - gynvael.coldwind//vx.log
  3. kill switchの存在について:
  4. Ken Thompsonの(loginへの)トロイの木馬の現代(open-ssh)版 - 間違いだらけの備忘録
  5. xz-utils backdoor situation · GitHub

以上。なにか新しいことがあれば追記します。