GNOMEプロジェクトに属するライブラリで巷間よく用いられているXMLパーサ libxml2 で発見されていた3つのCVE脆弱性に関する FreeBSD portsでの対策は、2つの選択肢がありました。
- バージョン 2.11 から 開発版に近い 2.14 に移行する
- 2.11 にパッチを当てる
これらの選択肢のうち、2.14 移行のパッチは メーリングリストでも議論されていたようです。 小生もこのスレッドで流れたパッチを適用したシステムを稼働させましたが、公式に2.14移行となると、依存するパッケージがかなりの数になりすべてを検証し尽くすことは無論、2.11でも対応が不明なものについても調査をしなければならないようで、すぐに実施されるとは思われず、解決を待っていました。
2025/06/22 GNOME本家側にあるパッチ適用が公開
textproc/libxml2 は、XMLパーサライブラリとして利用されているものが840で、FreeSBDデスクトップ環境で必要とされるパッケージ数に匹敵します。
GNOMEプロジェクトで使われるXML文字列の解析で必ず使われているのもあり、大きな変更がともないます。
2.11で動いているシステムの可用性を損なわない変更はある意味で急場をしのげます。
CVE-2024-56171 対応 パッチ
FreeBSD-ports では FreeBSDに属する変更として、files に追加されるパッチが多いですが、今回本家 gitlab から入手できるパッチが Makefile に追記されました。これらはGNOME側の対応だったですが、昨年に作られていたようです。
そのうちのCVE-2024-567171 に対するパッチを紹介します。
CVE-2024-56171 脆弱性の概要
- Use-after-free脆弱性
この脆弱性は、xmlSchemaItemListAdd関数の呼び出し後に発生するuse-after-free(解放後使用)の問題です。
問題の詳細
根本原因
xmlSchemaItemListAdd関数は内部でアイテム配列を再割り当て(realloc)することがあります。配列が再割り当てされると、以前のメモリアドレスは無効になり、古いポインタを参照し続けるとuse-after-freeが発生します。
- 影響を受ける関数
xmlSchemaIDCFillNodeTables
xmlSchemaBubbleIDCNodeTables
両関数では、xmlSchemaItemListAddを呼び出した後も、古いduplsポインタを使い続けていました。
修正内容
修正箇所1: xmlSchemaIDCFillNodeTables
まとめ
この修正は、XMLスキーマ検証機能を使用するアプリケーションのセキュリティと安定性にとって重要です。特に、外部からのXMLデータを処理するWebアプリケーションやサービスでは、この脆弱性を悪用した攻撃のリスクがありました。
修正は最小限かつ的確で、パフォーマンスへの影響もなく、根本的な問題を解決しています。