| Nom du plugin | @nuxt/nitro-server |
|---|---|
| Type de vulnérabilité | Script intersite (XSS) |
| Numéro CVE | CVE-2026-46342 |
| Urgence | Faible |
| Date de publication CVE | 2026-05-20 |
| URL source | CVE-2026-46342 |
Nuxt Nitro ‘__nuxt_island’ Poisonnement de Cache Partagé (CVE-2026-46342) — Ce que les Propriétaires de Sites WordPress Doivent Savoir
Résumé : Une vulnérabilité récemment divulguée dans le serveur Nuxt Nitro impacte les versions ≥ 4.2.0 et ≤ 4.4.5. Elle peut conduire à un empoisonnement de cache partagé et à du Cross-Site Scripting (XSS) via le __nuxt_island point de terminaison. Le problème est corrigé dans 4.4.6. Si votre site WordPress s'intègre avec des front-ends JavaScript, des architectures sans tête, du rendu en bord CDN, ou utilise des composants Nuxt/Nitro dans votre chaîne d'outils, cet avis explique le risque, les méthodes de détection, les atténuations (y compris les règles d'urgence de pare-feu/de bord), et les stratégies de durcissement de la chaîne d'approvisionnement à long terme.
Pourquoi cela importe pour les propriétaires de sites WordPress
La plupart des déploiements WordPress restent basés sur PHP avec un rendu côté serveur depuis la pile WordPress. Cependant, de plus en plus, les opérateurs à Hong Kong et dans la région utilisent des front-ends JavaScript modernes (Nuxt, Next, Remix) pour des performances et des flux de travail de développeur améliorés — une architecture sans tête ou découplée. Ces front-ends s'appuient généralement sur des serveurs basés sur Node, des middleware Nitro, et des caches/CDN en bord.
Le problème signalé (CVE-2026-46342) affecte un point de terminaison du serveur Nitro utilisé par les front-ends Nuxt : __nuxt_island. Lorsque les réponses ne sont pas étroitement liées aux propriétés de la requête d'origine, un cache partagé peut servir une réponse créée pour un utilisateur à un autre. Si cette réponse contient du contenu contrôlé par un attaquant (par exemple, du HTML non assaini ou des fragments de script), un attaquant peut empoisonner les caches et déclencher du Cross-Site Scripting pour de nombreux visiteurs du site.
Même si votre backend WordPress ne fonctionne pas directement sous Node, les systèmes WordPress peuvent être impactés lorsque :
- Votre site WordPress utilise un front-end Nuxt ou Nitro qui récupère des données de l'API REST WordPress ou de GraphQL.
- Votre environnement d'hébergement utilise des services de rendu côté serveur ou de rendu en bord qui incluent des composants basés sur Nitro.
- Votre CI/CD, pipeline de construction, ou services tiers utilisent le package vulnérable pour générer des aperçus, déployer des front-ends, ou rendre des pages en bord.
Cet avis adopte une position pragmatique avec le ton d'un expert en sécurité de Hong Kong : direct, opérationnel, et axé sur ce que les propriétaires et opérateurs de sites doivent faire maintenant.
Vue d'ensemble technique — ce qui est cassé
- Le
__nuxt_islandle point de terminaison rend ou hydrate des composants isolés (petits fragments interactifs) dans le modèle de rendu hybride de Nuxt. - Le comportement vulnérable : les réponses du point de terminaison ne sont pas suffisamment liées aux propriétés de la requête (origine, en-têtes, cookies, paramètres de requête). Si une couche de mise en cache stocke cette réponse sans les en-têtes Vary/Cache-Control appropriés ou les clés de cache, la réponse mise en cache peut être servie à d'autres requêtes qui diffèrent dans des propriétés de requête critiques.
- Si un attaquant peut créer une requête qui inclut du contenu contrôlé par l'attaquant (par exemple, via des propriétés injectées ou des données réfléchies) et provoquer la mise en cache de cette réponse, l'attaquant peut empoisonner le cache partagé. Lorsque d'autres utilisateurs reçoivent cette réponse mise en cache, tout script malveillant s'exécutera dans leurs navigateurs — entraînant un impact potentiellement généralisé.
Le résultat final : une seule exploitation réussie peut se transformer en XSS de masse via un fragment de cache isolé empoisonné.
Surface d'attaque pour les sites WordPress
Modèles d'intégration courants qui exposent les sites alimentés par WordPress à ce problème :
- WordPress sans tête + front-end Nuxt :
- WordPress sert du contenu via REST API / GraphQL.
- Le front-end Nuxt utilise Nitro pour rendre des îlots qui incluent du contenu de WP.
- Un package Nitro vulnérable utilisé dans le processus front-end peut causer une contamination du cache.
- Rendu en périphérie / aperçu CDN / génération d'images OG :
- Certains générateurs d'aperçu en périphérie ou points de terminaison d'images incluent un rendu basé sur Nitro.
- Si votre fournisseur d'hébergement ou CI utilise des composants Nitro, ces points de terminaison peuvent être affectés.
- Outils pour développeurs :
- Les systèmes de construction et d'aperçu (storybook, aperçus SSR, générateurs de sites statiques) qui installent la dépendance vulnérable peuvent créer ou télécharger des artefacts contaminés ou des sorties mises en cache.
- Intégrations tierces :
- Les fournisseurs de plugins, les constructeurs de thèmes ou les fournisseurs de services sans tête pourraient exécuter des aperçus basés sur Nitro. S'ils utilisent des versions vulnérables, les sites des clients peuvent être impactés indirectement.
Si votre site WordPress est purement classique (sans front-end sans tête, sans outils Node dans les déploiements), le risque est beaucoup plus faible. Mais dans les environnements DevOps modernes, il vaut la peine de vérifier.
Comment les attaquants peuvent l'exploiter (scénarios pratiques)
- XSS réfléchi via un fragment d'îlot mis en cache :
- L'attaquant envoie une requête élaborée à
__nuxt_islandavec un paramètre contrôlé par l'attaquant. - Nitro génère un fragment contenant le paramètre sans désinfection appropriée.
- Le CDN met en cache le fragment pour une clé partagée.
- Les visiteurs suivants reçoivent le fragment mis en cache ; le JavaScript de l'attaquant s'exécute dans leurs navigateurs.
- L'attaquant envoie une requête élaborée à
- Poisonnement de type stocké via des données en amont :
- Si le front-end rend des données d'une API tierce ou d'une entrée utilisateur (par exemple, des commentaires), un attaquant stocke une entrée malveillante en amont.
- Le serveur rend l'île avec le contenu malveillant ; la réponse est mise en cache et servie plus tard à d'autres.
- Abus à grande échelle : Les caches Edge signifient qu'un seul objet mis en cache peut affecter des milliers de visiteurs ; les routes de poisonnement de cache amplifient l'impact.
Patch et mise à jour — la correction la plus importante
Si vous utilisez Nuxt/Nitro quelque part dans votre pile, mettez à jour le package affecté immédiatement :
- Affecté :
@nuxt/nitro-server≥ 4.2.0 et ≤ 4.4.5 - Corrigé dans : 4.4.6 — mettez à niveau vers 4.4.6 ou une version ultérieure
Actions :
- Pour les projets qui utilisent npm/yarn/pnpm :
- Exécutez
npm install @nuxt/nitro-server@^4.4.6(ou mettez à jourpackage.jsonet exécutez votre gestionnaire de packages). - Mettez à jour les fichiers de verrouillage (
package-lock.json,yarn.lock,pnpm-lock.yaml) et engagez-les.
- Exécutez
- Pour les builds conteneurisées :
- Reconstruisez les images et redéployez après avoir mis à jour le package et le fichier de verrouillage.
- Évitez de vous fier à des versions implicites les plus récentes — utilisez des versions figées et reconstruisez les images fréquemment.
- Pour les services de bord ou de prévisualisation que vous ne contrôlez pas :
- Contactez votre fournisseur ou le propriétaire du service et demandez une confirmation de la mise à jour.
- Demandez-leur de mettre à jour vers 4.4.6+ et d'invalider les caches après la mise à jour.
Si vous ne pouvez pas mettre à jour immédiatement, appliquez les atténuations ci-dessous.
Atténuations immédiates que vous pouvez appliquer maintenant (même avant la mise à jour)
Mesures pratiques que vous pouvez mettre en œuvre rapidement pour réduire l'exposition :
- Désactivez le cache partagé pour le point de terminaison de l'île
- Assurez-vous que les réponses de
__nuxt_islandsont marquées comme non mises en cache par les caches partagés :- Définissez
Cache-Control : privé, pas de cache, pas de stockage, doit être revalidé(choisissez les directives appropriées pour votre environnement). - Ajouter
Variezles en-têtes pour inclure les cookies/l'autorisation/l'hôte si les réponses en dépendent :Variez : Cookie, Authorization, Accept-Encoding, Host.
- Définissez
- Si vous contrôlez les règles CDN, créez une règle pour contourner le cache pour tout chemin correspondant à
/__nuxt_islandou similaires.
- Assurez-vous que les réponses de
- Mise à jour virtuelle avec WAF / règles de bord