Dev News 13 Nov 2026: Node 27 alpha genera certificados X.509, Storybook 11 beta.2 adelgaza el CLI y Astro corrige XSS en slots
Astro: XSS reflejado por nombres de slot sin escapar en @astrojs/solid-js y @astrojs/svelte
Dos advisories gemelos (CVE-2026-126363 y CVE-2026-126362, CVSS 2.3): el renderer envolvía el contenido de un slot con nombre en <astro-slot> y escribía ese nombre en el atributo name sin escapar HTML. Si tu página usa algo de la request como nombre de slot (un query param, por ejemplo), una comilla cierra el atributo y entra HTML arbitrario. El alcance es acotado: hace falta que el componente esté hidratado con client:* y que renderice el slot por nombre dinámico. Los fixes están en @astrojs/solid-js 7.1.2 y @astrojs/svelte 9.1.2. Severidad baja, pero es un bump trivial: hacelo.
Astro 7.4.11: security.allowedDomains valida protocolo, host y puerto juntos
Si corrés Astro detrás de un proxy, esto te interesa. Los headers X-Forwarded-Proto, X-Forwarded-Host y X-Forwarded-Port ahora se validan en conjunto contra cada entrada de security.allowedDomains, en vez de uno por uno, y ya no se aceptan protocolos que no sean HTTP(S) como ftp o ws. De paso: el dev server responde 400 a paths con percent-encoding roto en lugar de 500, astro build deja de borrar el archivo de licencias de build.license de Vite, y se corrige un bug donde hacer spread del mismo objeto sobre un elemento con scoped styles le iba engordando el class en cada request.
Vue 3.6.0-rc.15: Vapor se sigue alineando con el VDOM y varios fixes de reactivity
Otra release candidate de pulido. El compilador de Vapor corrige casos donde se comportaba distinto al VDOM (un argumento dinámico llamado key, la opción slotted omitida) y ahora reporta hijos inválidos en KeepAlive. El HMR recarga el componente raíz de un custom element de Vapor ya montado. En reactivity: effect() deja de mutar el objeto de opciones que le pasás, y un computed invalidado por su propia ejecución ya no notifica a sus lectores.
Qwik 2.0.0-rc.5: retries en SSG y un migrate-v2 que arrastra librerías de Qwik 1
La quinta RC de Qwik 2 apunta a que la migración no duela. migrate-v2 ahora bundlea en el server las librerías construidas con Qwik 1, les pisa @builder.io/qwik con la v2, y si lo corrés sobre una app que ya es v2 la actualiza a la release actual. En el router, SSG suma la opción retries para re-renderizar una ruta que falló antes de romper el build. Entre los fixes hay dos que conviene tener: se rechazan URLs de redirect inseguras en actions y loaders del cliente, y una página que crasheaba antes de mandar contenido respondía 200 en vez de 500.
@hono/node-server: un backslash en el path saltea las reglas del reverse proxy
Ojo si servís Hono sobre Node detrás de nginx, HAProxy o Envoy. CVE-2026-126210 (CVSS 5.3): el adapter le pasaba el request-target crudo al parser de URL de WHATWG, que trata el backslash como / y resuelve los ... Un pedido a /public\..\admin/secret le llega a la app como /admin/secret, mientras que el proxy evaluó sus reglas contra el path original y lo dejó pasar. El fix responde 400 Bad Request a cualquier path con backslash crudo, en HTTP/1.1, HTTP/2 y upgrades de WebSocket. Está en @hono/node-server 2.1.6 y 1.19.18. El control de acceso dentro de la app (middleware sobre /admin/*) no se ve afectado.
Tendencias Destacadas
TypeScript 7.1 todavía es beta y el ecosistema ya se está mudando: Storybook corre docgen sobre su API nativa mientras tira Babel y jscodeshift del CLI.
El patrón de la semana en seguridad es el desacuerdo entre capas: el proxy y la app leen paths distintos (@hono/node-server), o headers X-Forwarded validados de a uno (Astro). Si tu control de acceso vive en el proxy, revisá qué ve realmente la app.
Día tranquilo en releases estables: lo interesante está en los pre-releases (Node 27 alpha, Vue 3.6 RC, Qwik 2 RC, Storybook 11 beta), que es donde se ve hacia dónde va cada proyecto.
Astro: reflected XSS via unescaped slot names in @astrojs/solid-js and @astrojs/svelte
Two twin advisories (CVE-2026-126363 and CVE-2026-126362, CVSS 2.3): the renderer wrapped named slot content in <astro-slot> and wrote the slot name into its name attribute without HTML escaping. If a page takes the slot name from the request (a query parameter, say), a quote character ends the attribute and injects arbitrary HTML. The reach is narrow: the component has to be hydrated with a client:* directive and render the slot by a dynamic name. Fixes are in @astrojs/solid-js 7.1.2 and @astrojs/svelte 9.1.2. Low severity, but the bump is trivial.
Astro 7.4.11: security.allowedDomains validates protocol, host and port together
Worth a look if you run Astro behind a proxy. The X-Forwarded-Proto, X-Forwarded-Host and X-Forwarded-Port headers are now validated together against each security.allowedDomains entry instead of one at a time, and non-HTTP(S) protocols such as ftp or ws are no longer accepted. Also in this patch: the dev server returns 400 for malformed percent-encoded paths instead of a 500, astro build stops deleting the license file from Vite's build.license, and spreading the same object onto an element with scoped styles no longer grows its class on every request.
Vue 3.6.0-rc.15: Vapor keeps aligning with the VDOM, plus reactivity fixes
Another polish release candidate. The Vapor compiler fixes cases where it diverged from the VDOM (a dynamic argument named key, an omitted slotted option) and now reports invalid KeepAlive children. HMR reloads the root component of a mounted Vapor custom element. On the reactivity side, effect() no longer mutates the options object you pass in, and a computed invalidated by its own run no longer notifies its readers.
Qwik 2.0.0-rc.5: SSG retries and a migrate-v2 that carries Qwik 1 libraries along
The fifth Qwik 2 release candidate is about making the migration painless. migrate-v2 now bundles libraries built with Qwik 1 on the server, overrides @builder.io/qwik with v2 for them, and updates an app that is already on v2 to the current release. In the router, SSG gains a retries option to re-render a failed route before the build fails. Two fixes worth having: unsafe redirect URLs are rejected in client actions and loaders, and a page that crashed before sending content used to answer 200 instead of 500.
@hono/node-server: a backslash in the path bypasses reverse proxy rules
Heads up if you serve Hono on Node behind nginx, HAProxy or Envoy. CVE-2026-126210 (CVSS 5.3): the adapter passed the raw request-target to the WHATWG URL parser, which treats a backslash as / and then resolves .. segments. A request for /public\..\admin/secret reaches the app as /admin/secret, while the proxy applied its path rules to the original path and let it through. The fix answers 400 Bad Request to any path containing a raw backslash, across HTTP/1.1, HTTP/2 and WebSocket upgrades. It ships in @hono/node-server 2.1.6 and 1.19.18. Access control inside the app, such as middleware on /admin/*, is not affected.
Notable Trends
TypeScript 7.1 is still in beta and the ecosystem is already moving: Storybook runs docgen on its native API while dropping Babel and jscodeshift from the CLI.
This week's security pattern is layers disagreeing: the proxy and the app read different paths (@hono/node-server), or X-Forwarded headers validated one at a time (Astro). If your access control lives at the proxy, check what the app actually sees.
A quiet day for stable releases: the interesting work is in the pre-releases (Node 27 alpha, Vue 3.6 RC, Qwik 2 RC, Storybook 11 beta), which is where each project's direction shows.
Astro : XSS réfléchi via des noms de slot non échappés dans @astrojs/solid-js et @astrojs/svelte
Deux advisories jumeaux (CVE-2026-126363 et CVE-2026-126362, CVSS 2.3) : le renderer enveloppait le contenu d'un slot nommé dans <astro-slot> et écrivait ce nom dans l'attribut name sans échappement HTML. Si une page prend le nom du slot depuis la requête (un paramètre de query, par exemple), un guillemet ferme l'attribut et injecte du HTML arbitraire. La portée est limitée : le composant doit être hydraté avec une directive client:* et rendre le slot par un nom dynamique. Les correctifs sont dans @astrojs/solid-js 7.1.2 et @astrojs/svelte 9.1.2. Sévérité faible, mais la mise à jour est triviale.
Astro 7.4.11 : security.allowedDomains valide protocole, hôte et port ensemble
À regarder si Astro tourne derrière un proxy. Les en-têtes X-Forwarded-Proto, X-Forwarded-Host et X-Forwarded-Port sont désormais validés ensemble par rapport à chaque entrée de security.allowedDomains, et non plus un par un, et les protocoles non HTTP(S) comme ftp ou ws ne sont plus acceptés. Également : le serveur de dev renvoie 400 pour les chemins au percent-encoding invalide au lieu d'un 500, astro build ne supprime plus le fichier de licences de build.license de Vite, et le spread d'un même objet sur un élément avec scoped styles ne fait plus grossir son class à chaque requête.
Vue 3.6.0-rc.15 : Vapor continue de s'aligner sur le VDOM, avec des correctifs de reactivity
Encore une release candidate de finition. Le compilateur Vapor corrige des cas où il divergeait du VDOM (un argument dynamique nommé key, l'option slotted omise) et signale désormais les enfants invalides de KeepAlive. Le HMR recharge le composant racine d'un custom element Vapor déjà monté. Côté reactivity, effect() ne modifie plus l'objet d'options passé en argument, et un computed invalidé par sa propre exécution ne notifie plus ses lecteurs.
Qwik 2.0.0-rc.5 : retries en SSG et un migrate-v2 qui embarque les bibliothèques Qwik 1
La cinquième release candidate de Qwik 2 vise une migration sans douleur. migrate-v2 bundle désormais côté serveur les bibliothèques construites avec Qwik 1, remplace pour elles @builder.io/qwik par la v2, et met à jour une application déjà en v2 vers la release courante. Dans le router, le SSG gagne une option retries pour re-rendre une route en échec avant de faire échouer le build. Deux correctifs à retenir : les URL de redirection non sûres sont rejetées dans les actions et loaders côté client, et une page qui plantait avant d'envoyer du contenu répondait 200 au lieu de 500.
@hono/node-server : un backslash dans le chemin contourne les règles du reverse proxy
Attention si vous servez Hono sur Node derrière nginx, HAProxy ou Envoy. CVE-2026-126210 (CVSS 5.3) : l'adapter transmettait le request-target brut au parseur d'URL WHATWG, qui traite le backslash comme / puis résout les segments ... Une requête vers /public\..\admin/secret arrive à l'application comme /admin/secret, alors que le proxy a appliqué ses règles au chemin d'origine et l'a laissée passer. Le correctif répond 400 Bad Request à tout chemin contenant un backslash brut, en HTTP/1.1, HTTP/2 et pour les upgrades WebSocket. Il est livré dans @hono/node-server 2.1.6 et 1.19.18. Le contrôle d'accès dans l'application, comme un middleware sur /admin/*, n'est pas affecté.
Tendances Notables
TypeScript 7.1 est encore en beta et l'écosystème migre déjà : Storybook exécute docgen sur son API native tout en retirant Babel et jscodeshift du CLI.
Le motif sécurité de la semaine est le désaccord entre couches : le proxy et l'application lisent des chemins différents (@hono/node-server), ou des en-têtes X-Forwarded validés un par un (Astro). Si votre contrôle d'accès vit au niveau du proxy, vérifiez ce que l'application voit réellement.
Journée calme pour les releases stables : l'essentiel se passe dans les pre-releases (Node 27 alpha, Vue 3.6 RC, Qwik 2 RC, Storybook 11 beta), là où se lit la direction de chaque projet.