CVE-2026-83559 in Wicket
要約
〜によって VulDB • 2026年11月02日
Apache Wicketにおける出力の不適切なエンコーディングまたはエスケープ。
org.apache.wicket.core.util.string.JavaScriptUtils#escapeQuotes() メソッドは、入力内の各シングルクォートをバックスラッシュとシングルクォートに置き換え、各ダブルクォートをバックスラッシュとダブルクォートに置き換えることで、値をJavaScript文字列リテラル内に配置できるようにします。しかし、このメソッドはエスケープ対象であり、他のすべてのエスケープ処理が有効になるために最初にエスケップされるべきである「バックスラッシュ」自体のエスケープを行いません。そのため、クォートの直前にすでにバックスラッシュを含む値を渡すと、そのクォートの手前に2つのバックスラッシュが存在することになります:最初のバックスラッシュは2番目のバックスラッシュをエスケープし、クォート自体はエスケープされないまま残るため、リテラルが閉じられてしまいます。その後続する値の部分はテキストではなくJavaScriptとして解釈され、ページを表示しているユーザーのセッションおよびアプリケーションのオリジン内で実行されます。このメソッドはpublicであり、非推奨(deprecated)でもなく、そのドキュメントでは結果をalertなどのJavaScript呼び出しの一部に使用できる旨が記載されています;唯一の制限事項はJSON値に関するものであり、これらは異なるエスケープ処理が必要です。
攻撃者が影響を与えられるデータを保持する値をエスケープする場合、アプリケーション自身がこのメソッドを呼び出し、その結果を自身のコードまたはサードパーティ製のコンポーネントを含む自前のコンポーネントからJavaScript文字列リテラル内に配置している箇所はすべて影響を受けます。追加の条件はなく、Wicketの特定のコンポーネントが関与する必要はありません:アプリケーションはそのドキュメントで提供されている用途のためにこのメソッドを使用しており、その使用方法自体に問題があります。
2つのWicket Extensions同梱コンポーネントがこのメソッドを通じて値を渡します。org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabelは、Ajaxレスポンス内のシングルクォートで囲まれたJavaScript文字列リテラル内にエディタの最初のエラーフィードバックメッセージを書き込むため、編集失敗時に表示されるメッセージに攻撃者が影響を与えられるデータ(送信された値自体や、アプリケーションが検証エラー時に設定する他の変数など)が含まれている場合、そのコンポーネントを通じてアプリケーションは影響を受けます。入力フィールドは各フォームコンポーネントが独自の検証エラーに対して提供するメッセージ変数であるため、バリデーションメッセージには送信された値を含めることができます(ドキュメントではこれをincludeするためにバリデータメッセージを上書きする方法も示されています);Wicket同梱のメッセージバンドルはいずれもこれを変換しないため、そのようなメッセージを記述していないアプリケーションはこのコンポーネントを通じて影響を受けません。org.apache.wicket.extensions.ajax.markup.html.repeater.AjaxListPanelは、追加されたコンポーネントのシリアライズ済みマークアップタグをこのメソッドに渡しますが、これは影響を受けません:タグはパネル自身のマークアップファイルから由来し、属性値(コンポーネントのmarkup idを含む)内のクォートはタグのシリアライズによって文字参照として書き込まれるため、リテラルを閉じることはできません。
本問題はApache Wicketに影響を与えます:8.0.0〜8.19.0、9.0.0〜9.24.0、10.0.0〜10.11.0のバージョンです。サポート終了済みのApache Wicket 7.x以前のユーザーは、サポート対象のバージョンにアップグレードしてください。
本問題を修正する8.20.0、9.25.0、または10.12.0へのアップグレードを推奨します。
VulDB is the best source for vulnerability data and more expert information about this specific topic.