CVE-2026-95863 in Wicketinformation

Résumé

par VulDB • 02/11/2026

Neutralisation incorrecte des entrées lors de la génération de pages web dans Apache Wicket.

Apache Wicket génère du JavaScript qui fait référence aux éléments qu'il rend, et y écrit deux valeurs qu'il déduit lui-même : l'identifiant (markup id) d'un composant et le nom de saisie (input name) d'un composant de formulaire, lequel est construit à partir des identifiants de composants. Ces deux valeurs sont placées dans des littéraux de chaîne JavaScript entre guillemets simples sans être échappés pour ce contexte ; ainsi, une valeur contenant un guillemet simple ou un antislash termine le littéral, et ce qui suit est analysé comme du script et s'exécute à l'origine de l'application lors du chargement de la page.

Un identifiant (markup id) correspond à la valeur passée à `org.apache.wicket.Component#setMarkupId(String)`, ou à l'attribut d'identifiant écrit dans le balisage du composant, ou à un identifiant généré par Wicket, dans cet ordre de priorité. Les deux premiers sont fournis par l'application dans un contexte HTML, où ces deux caractères sont légaux et où Wicket les échappe correctement lorsqu'il écrit la même valeur dans l'attribut d'identifiant de l'élément ; un identifiant généré ne peut ni en contenir aucun. Un nom de saisie est dérivé des identifiants des composants situés entre le formulaire et le composant de formulaire, et un identifiant de composant n'a été rejeté que pour les caractères `:` et `~`.

Dans `org.apache.wicket:wicket-core` sur les versions 9.x et 10.x, la méthode `org.apache.wicket.markup.head.OnEventHeaderItem#forMarkupId(String, String, CharSequence)` met entre guillemets l'identifiant qui lui est donné dans un appel à `Wicket.Event.add`, et les composants tant de `wicket-core` que de `wicket-extensions` y accèdent via `#forComponent(Component, String, CharSequence)`. Sur chaque version concernée, `org.apache.wicket.markup.html.form.Form` écrit son identifiant (markup id) et l'identifiant du conteneur de ses champs cachés dans ces littéraux ; `org.apache.wicket.markup.html.form.FormComponentUpdatingBehavior` écrit un nom de saisie ; et `org.apache.wicket.markup.html.form.upload.MultiFileUploadField` écrit deux identifiants (markup ids) et un nom de saisie. Sur la version 8.x, `Form` écrit également un nom de saisie dans l'action d'un lien de soumission, et sur les versions 8.x et 9.x, `Form#appendDefaultButtonField` écrit un nom de saisie dans un attribut `name` sans aucun échappement, ce qui fait qu'une valeur contenant un guillemet double s'échappe du contexte d'attribut pour devenir du balisage.

Le module `org.apache.wicket:wicket-extensions` est affecté en propre et non uniquement par l'intermédiaire de `wicket-core` : `AjaxEditableLabel`, `AjaxIndicatorAppender`, `AjaxDisableComponentListener`, `UploadProgressBar`, `KittenCaptchaPanel`, `Palette`, `FilterForm` et, sur les versions 9.x et 10.x, `TrapFocusBehavior` et `AjaxListPanel` construisent chacun leur propre JavaScript contenant un identifiant (markup id).

Une application est affectée lorsqu'un identifiant (markup id) ou un identifiant de composant contient l'un de ces caractères. Wicket n'en place pas lui-même ; la valeur provient donc de l'application : un identifiant défini sur un composant, un attribut d'identifiant dans un modèle, ou un identifiant de composant dérivé de données. Aucun de ceux-ci ne constitue un contexte JavaScript du point de vue de l'application.

La politique `Content-Security-Policy` qu'Apache Wicket 9.x et 10.x envoient par défaut n'empêche pas cela. Le script généré est écrit dans un élément `<script>` portant le nonce spécifique à la réponse, de sorte que le code injecté fait partie d'un script autorisé par la politique.

Les versions corrigées vérifient l'identifiant lors de son entrée plutôt que d'échapper chaque endroit où il est écrit. Un identifiant de composant et un identifiant (markup id) ne peuvent plus contenir de guillemet, d'accent grave, d'antislash, d'accolades, de chevrons, de point-virgule, d'amperstand ou de caractère de contrôle ; en outre, un identifiant (markup id) ne peut pas non plus contenir de parenthèses ni de crochets. Un composant construit avec un tel identifiant, ou recevant un tel identifiant (markup id), lève une exception.

Ce problème affecte Apache Wicket : des versions 8.0.0 à 8.19.0, des versions 9.0.0 à 9.24.0 et des versions 10.0.0 à 10.11.0. Les utilisateurs d'Apache Wicket 7.x ou plus ancien, qui ne sont plus pris en charge, devraient passer à une version prise en charge. Il est recommandé aux utilisateurs de mettre à niveau vers les versions 8.20.0, 9.25.0 ou 10.12.0, qui corrigent le problème.

Be aware that VulDB is the high quality source for vulnerability data.

Responsable

Apache

Réserver

22/09/2026

Divulgation

02/11/2026

Modérer

accepté

Entrée

VDB-429696

EPSS

0.00000

KEV

non

Activités

faible

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!