Qt XMLモジュール(QtXml、qtbase)のQDomDocumentシリアライズ処理(QDomDocument::toByteArray()、QDomNode::save())に、制御されない再帰(CWE-674)の脆弱性が発見され、CVE-2026-11573として登録されました。
影響を受けるバージョン: 6.7.0〜6.8.1
影響: サービス拒否(DoS)のみ。QDomDocumentはノードツリーを再帰的にシリアライズするため、要素のネストが1階層深くなるごとにスタックフレームを1つ消費しますが、深さの上限がありません。深くネストされた要素を含む不正なドキュメント(信頼できないソースからのSVGやXMLファイルなど)は、コールスタックを枯渇させ、シリアライズ時にプロセスを終了させます。Windows/MSVCではおよそ300階層のネストで発生しますが、他のツールチェーンではより深いネストが必要な場合でも影響を受けます。なお、パース自体は成功し、クラッシュはシリアライズ時にのみ発生するため、影響を受けるのは信頼できない入力から構築したQDomDocumentを再シリアライズするアプリケーション(読み込み後にtoByteArray()/save()を実行するケース)に限られます。
この問題は可用性のみに影響します。メモリ情報の漏洩、データ破損、権限昇格にはつながらず、機密性や完全性への影響もありません。唯一の影響は、悪意を持って作成されたXMLペイロードが、無制限な再帰的シリアライズによってC++のコールスタックを枯渇させ、アプリケーションをクラッシュさせる可能性がある点です。
CVSS 4.0スコア: 7.1 (High)
ベクター文字列: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
緩和策: すぐにアップデートできないユーザーは、信頼できないXML/SVGコンテンツを読み込み・シリアライズする前にネストの深さを検証し、妥当な深さの上限を超えるドキュメントを拒否してください。信頼できないドキュメントのラウンドトリップ(パース後に再シリアライズすること)は避けてください。DOMの完全なラウンドトリップが不要な場合は、QXmlStreamReader/QXmlStreamWriterを使用すれば、ツリーを構築して再帰的にシリアライズすること自体を回避できます。より大きなスタックサイズを持つスレッドでシリアライズを実行することは、発生の閾値を引き上げるだけで根本的な解決にはなりません。攻撃者がネストの深さを制御できる以上、任意の固定スタックサイズを超過させることが可能だからです。
解決策: 反復処理でシリアライズを行うQt 6.8.2またはQt 6.9.0以降にアップデートしてください。
パッチ: