💦

FreeBSD libxml2 の2.11.9 -> 2.14.3

に公開

FreeBSDのlibxml2パッケージは現在バージョン2.11で停滞していましたが、月末に変更がありました。「更新が滞っていた」問題は一応解消しましたので、記事を修正します。

libxml2 2.14.0の大幅な変更

1. HTML5トークナイザーの完全実装

2025年3月27日にリリースされたlibxml2 2.14.0では、HTML5仕様に完全準拠したトークナイザーが実装されました。これまでのHTML4ベースの実装から大幅に刷新され、HTML5の厳密な解析ルールに従うようになりました。

主な変更点:

  • HTML5標準に完全準拠したトークナイザー
  • 非標準構文の警告を多数削除
  • HTMLツリー構築アルゴリズムは未実装(今後の課題)

2. バイナリ互換性後方互換性の喪失

最も重要な変更は、バイナリ互換性(ABI)の範囲が大幅に制限されたことです。

具体的な変更:

  • バイナリ互換性は2.14以降のバージョンのみに制限
  • ELFシステムにおいてsoname(共有ライブラリ名)が変更
    • 従来:libxml2.so.2
    • 新規:libxml2.so.16

FreeBSDが直面する技術的課題

1. 依存関係の連鎖的影響

libxml2はシステムの基盤ライブラリとして、多数のパッケージから依存されています。soname変更により、関連するすべてのパッケージの再ビルドが必要となります。

2. ポートシステムへの影響

FreeBSDのportsシステムでは、依存関係の整合性を保つため、大規模な更新には慎重な計画が必要です。libxml2の更新は以下に影響します:

  • デスクトップ環境(GNOME、KDE等)
  • Webブラウザ
  • 開発ツール
  • システムユーティリティ

3. 他ディストリビューションの対応状況

Debianでは同様の問題により、libxml2の更新が長期間停滞し、セキュリティ修正の適用に苦慮していました。Arch Linuxは比較的早期に2.14系に移行しましたが、LLVMプロジェクトのlldなど、一部ツールとの互換性問題が報告されています。

セキュリティ脆弱性の深刻度

2025年に入ってから、libxml2には複数の重要な脆弱性が発見されています:

  • CVE-2025-24928: 機密情報漏洩、データ改竄、DoS攻撃の可能性
  • CVE-2025-27113: サービス拒否攻撃の脆弱性
  • Use-After-Free脆弱性
  • スタックベースのバッファオーバーフロー

更新の影響

  • libxml2 は XMLパーサとしては多くの利用があり、expatなどと並んでセキュリティホールになることが多いです。
  • 手近なサーバで依存関係がどうなっているのかを確認するために、 pkg remove の実施を試み、”連鎖して削除されるpkg”がいくつかあるか調べてみました。
Installed packages to be REMOVED:
	ImageMagick7: 7.1.1.26_6
	asciidoc: 10.2.1
	at-spi2-core: 2.54.1
	avahi-app: 0.8_6
	bind-tools: 9.20.4
	colord: 1.4.7_3
	cups: 2.4.11_1
	cups-filters: 1.28.17_9
	dbus: 1.16.2_2,1
	dbus-glib: 0.114
	epson-inkjet-printer-escpr2: 1.1.62
	ffmpeg: 6.1.2_7,1
	gdk-pixbuf2: 2.42.10_3
	ghostscript10: 10.05.1
	libheif: 1.19.5
	libjxl: 0.11.1_1
	libplacebo: 7.349.0
	librsvg2-rust: 2.58.5_4
	libva: 2.22.0
	libwmf: 0.2.13_2
	libxkbcommon: 1.7.0_1
	libxml2: 2.11.9
	libxslt: 1.1.43
	motion: 4.6.0_1
	polkit: 125_1
	poppler-glib: 25.04.0_1
	poppler-utils: 25.04.0_1
	py311-beautifulsoup: 4.12.3
	py311-furo: 2024.8.6_1
	py311-lxml: 4.9.3
	shared-mime-info: 2.4_1
	vala: 0.56.17,1
	vulkan-loader: 1.4.307
	wayland: 1.23.1
	xkeyboard-config: 2.41_4
	xmlto: 0.0.28_3
	zabbix7-agent: 7.0.9

Number of packages to be removed: 37

これだけの規模になりますと、 ports 更新ではダウンタイムが長くなります。
ちなみにまだ 公式の "pkg" repositoryでは latest でも更新はされていないので、XXE攻撃が致命的侵害となるミッションクリティカルシステムでは ports更新でも良いかと思われます。

Discussion