XZ Utils (xz/liblzma) にバックドアが仕込まれたという脆弱性 CVE-2024-3094 が、その発生経緯と威力の面でやばそうで、かつ、自分の手元のPC (macOS) にも、脆弱性のある版が知らないうちにインストールされていたことが衝撃的なので、自分に関わる部分でのメモを残す。
nvd.nist.gov
: NVD - CVE-2024-3094www.cisa.gov
: Reported Supply Chain Compromise Affecting XZ Utils Data Compression Library, CVE-2024-3094 | CISAwww.tenable.com
: Frequently Asked Questions About CVE-2024-3094, A Backdoor in XZ Utils - Blog | Tenable®www.helpnetsecurity.com
: Beware! Backdoor found in XZ utilities used by many Linux distros (CVE-2024-3094) - Help Net Securitywww.redhat.com
: Urgent security alert for Fedora 41 and Fedora Rawhide userswww.jpcert.or.jp
: XZ Utilsに悪意のあるコードが挿入された問題(CVE-2024-3094)について (追記: 2024-04-01T15:03:28+09:00)CVE-2024-3094, 詳しく知る必要がありそう。 / https://t.co/rkDlBz2lPb
— Masahiko OHKUBO (@mah_jp) March 30, 2024
手元の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
そこで、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 switch
が使えない模様brew uninstall xz
は他のパッケージへの影響範囲が広すぎて実施を控えたなお、Homebrew側でダウングレードの対応がなされていた後なので、上記手順のみで 5.4.6 へ変更できた可能性がある。
あ、Homebrewはxzを5.6.1から5.4.6にrevertしたのか(うちは更新をサボってた)。いろいろやばそう https://t.co/vsDbE5foUM
— Haruhiko Okumura (@h_okumura) March 30, 2024
下記のご指摘、確かに……。調査時にそこまで考えなかった。
脆弱性があるかもしれないソフトウェアを実行してバージョンを確認するのはどうなんだろうと思ったりhttps://t.co/SrTP48p1vy
— React脳の恐怖 (@yuta0801_) March 30, 2024
より安全なのは、xzのバージョンを直接実行で調べるのではなく、各環境のパッケージマネージャを介して調べる方法。具体的には次のような方法になると思われる。
brew list --version xz
でバージョン番号を読み取る下記のツイートにある方法も参考になる。
Check if impacted by CVE-2024-3094 ❓
— Malwar3Ninja | Threatview.io 💻 (@Malwar3Ninja) March 30, 2024
❌ xz -V
✔️ strings /usr/local/bin/xz | grep "(XZ Utils)"
✔️strings `which xz` | grep "(XZ Utils"
✔️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 https://t.co/jDxSi2n5wQ
CVE-2024-3094 の要因となったcommitの主が、xzリポジトリ以外に行った過去のpull requestの、内容の再精査が行われているらしい。
xz/liblzmaの、問題となっているコードを詳細に解析しているところ、およびそのリンク集。1は今回の脆弱性の最初の報告である。
以上。なにか新しいことがあれば追記します。