ÉlevéeCVE-2026-109829
undici vulnérable à la contamination du cache et à la divulgation inter-utilisateur via des redirections cross-origin
Conséquences sérieuses, souvent sous quelques conditions : à corriger rapidement.
- Sévérité
- Élevée7.4 / 10
- Publiée le
- 27 de octubre de 2026
- Mise à jour
- 27 de octubre de 2026
L'avis
Traduction automatique de l'avis officiel. En cas de doute, l'avis d'origine, plus bas, fait foi.
Impact
Lorsqu'un Agent sans origine compose les intercepteurs de redirection et de cache comme compose(redirect(), cache()) avec un cache partagé (type: 'shared'), le cache construit sa clé à partir de l'URL de la demande initiale avant que le gestionnaire de redirection ne change l'origine. La réponse produite après une redirection est alors stockée sous la clé initiale, même si la redirection a changé d'origine.
Un attaquant qui contrôle la cible d'une redirection depuis une URL de confiance peut avoir sa réponse mise en cache sous cette URL de confiance. Un appelant ultérieur demandant cette URL de confiance reçoit le corps de l'attaquant depuis le cache partagé sans qu'aucune origine ne soit contactée, permettant une contamination persistante du cache. La même confusion de clé div également des données privées : lorsque une demande authentifiée renvoie une redirection private, no-store vers une ressource spécifique à l'utilisateur, la réponse finale est stockée sous l'URL initiale et peut être servie à un appelant ultérieur non authentifié.
L'intercepteur de cache a été introduit dans undici 7.0.0, et toutes les versions 7.x et 8.x antérieures aux versions corrigées sont affectées. Les applications sont uniquement affectées lorsqu'elles utilisent un Agent sans origine, un MemoryCacheStore ou SqliteCacheStore partagé, et la composition compose(redirect(), cache()). Les dispatchers Client et Pool liés à une origine, ainsi que la composition inverse compose(cache(), redirect()), ne sont pas affectés.
Correctifs
Mettre à jour vers 7.30.1 ou 8.12.2. Avant de stocker une réponse, undici vérifie maintenant que l'origine qui a produit la réponse correspond encore à la clé du cache, et préserve la politique de contrôle de cache de chaque saut de redirection, de sorte que les réponses de redirection cross-origin et les réponses derrière un saut no-store ou private ne sont plus mises en cache sous la clé initiale.
Contournements
Composer les intercepteurs comme compose(cache(), redirect()), utiliser des dispatchers et des magasins de cache par origine, ou désactiver la mise en cache partagée pour les demandes capables de rediriger.
Composants touchés
| Composant | Versions touchées | Corrigé en |
|---|---|---|
| undiciJavaScript (npm) | >= 7.0.0, < 7.30.1 | 7.30.1 |
| undiciJavaScript (npm) | >= 8.0.0, < 8.12.2 | 8.12.2 |
Vous utilisez une version touchée ? Passez à la version corrigée, puis redéployez.