ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

xz-utils(v 5.6.0, v5.6.1)にバックドアの脆弱性

Julia Discourseの最新記事をずら~っと眺めていて気付いたのだが, xz-utilsのバージョン5.6.0, 5.6.1のtarballに含まれるバイナリにバックドアがしかけられていたそうだ。

PSA: backdoor in xz-utils and relevance for the Julia ecosystemがその内容。

手元でartifactsの中にも該当バージョンが入っていて,早速フォルダごと削除。 また,XZ_jll5.6.1は削除。 ただ依存しているのは,tomlファイルでgrepをかけてもChainRulesCore.jldocs/Manifest.tomlぐらいで, 5.6.1を消しても通常の動作ではあまり関係無さそう。

ただ,何故5.6.1が入っているのかは謎。

Ubuntuの方は5.4.1で,特に警戒が必要なssh系には影響が無さそうで一安心。

[追記 2024/4/2 12時過ぎ] Julia言語用アーティファクトの中のxz-utilsのバージョン確認のための何か

一応xz-utilsのバージョンを確認できるものを作ってみました。

using Pkg

function print_xz_versions()
    a_path = joinpath(Pkg.depots1(), "artifacts")
    for d in readdir(a_path)
        pc_path = joinpath(a_path, d, "lib", "pkgconfig", "liblzma.pc")
        if isfile(pc_path)
            for l in readlines(pc_path)
                m = match(r"^Version: ([^ \n]+)", l)
                if !isnothing(m)
                    is_danger = !isnothing(match(r"5\.6\.[01]", m[1]))
                    ms_str = is_danger ? "Danger !!" : ""
                    println("Version: $(m[1])  $ms_str")
                    println("dir: $(joinpath(a_path, d))\n")
                end
            end
        end
    end
    nothing
end

何かファイルに保存して,includeしてprint_xz_versions()で保存されているxz_utilsのバージョンと保存場所を表示します。

確認方法としては,pkg-config用のファイルを見つけてそのファイルに書かれているバージョンをチェックしています。

[追記 2024/4/2 22時過ぎ] Juliaの公式パッケージの対応

ということで,おそらく今後pkg updateしても5.6.[01]のバージョンがダウンロードされることはないと思います。

基本的にはsshのサーバーとコラボしない限り問題は少ないはずですが,所定の位置に脆弱性のあるバージョンがあることが分かると, ハックしてsshdとリンクさせることは,難しいとは言えど技術的には可能なので5.6.[01]のバージョンを見つけたら削除しておく方がいいでしょう。

Julia言語のartifactsは一度作成されるとなかなか削除されないので,自分の手で確実に削除されるのをおすすめします。

なお,私の会社PCでは,BInaryBuilder.jl→大元はBinaryBuilderBase.jlに依存しているパッケージがXZ_jllを利用しているようでした。