Deno 2.9.7: traceparent case-insensitive y CA stores respetados
Patch chico pero con dos arreglos que duelen si te tocan: Deno.serve ahora extrae traceparent sin importar el casing del header —si tu gateway manda TraceParent, tu traza distribuida dejaba de encadenarse en silencio— y deno audit por fin honra los CA stores configurados, necesario detrás de proxy corporativo. También arregla completions de bash/zsh y el doble dash antes del entrypoint.
workerd v1.20260923.1: el runtime de Cloudflare sigue con release diario
El runtime open source detrás de Cloudflare Workers publicó otro build diario. Si fijás compatibility_date en tu wrangler.jsonc, acordate de que ese pin es exactamente lo que te aísla de estos cambios: el runtime avanza todos los días, tu worker no. Revisá el diff antes de mover la fecha.
Fastify: un request HTTP/2 con trailers voltea el proceso
Si una ruta registra un trailer con reply.trailer() y se sirve sobre HTTP/2, Fastify agrega incondicionalmente Transfer-Encoding: chunked —prohibido en HTTP/2— y Node tira ERR_HTTP2_INVALID_CONNECTION_HEADERS. La excepción no se captura, escala a uncaughtException y termina el proceso. Un solo request sin autenticar tira todas las requests en vuelo. Corregido en la línea 6.0 alpha; si usás trailers en v5, revisá tu versión.
Traefik: el singleflight de BasicAuth reintrodujo un oráculo de enumeración
Caso de estudio precioso de cómo una optimización rompe seguridad. Traefik coalesce chequeos concurrentes de credenciales con un singleflight.Group para no hashear la misma password mil veces. Desde 3.6.11 la clave de deduplicación dependía del estado del servidor: un usuario inexistente colapsaba a una clave compartida (rápido), uno existente calculaba su propio hash (lento). Resultado: oráculo de timing para enumerar usuarios sin autenticarse. Arreglado en 3.7.13. Moraleja: una cache cuya clave depende de datos secretos es un canal lateral.
Valkey 9.2.0-rc1: snapshots RDB sin fork y ACL DIGEST
El RC trae la feature que muchos esperábamos: snapshots RDB sin fork, opt-in vía forkless-infrastructure-enabled y bgsave-default-method, con campos nuevos en INFO persistence reportando método y progreso. Adiós al pico de memoria copy-on-write en instancias grandes. Suma ACL DIGEST para verificar qué reglas quedaron aplicadas tras un ACL LOAD, y los comandos de stream XACKDEL/XDELEX con modos KEEPREF, DELREF y ACKED. Urgencia de upgrade: baja, es un RC.
Amazon CloudWatch Omni GA: OpenTelemetry multi-cloud
AWS llevó a GA una plataforma de observabilidad que centraliza telemetría entre cuentas, regiones, Azure y otros proveedores sobre OpenTelemetry, con descubrimiento automático de servicios y mapeo de dependencias. Lo interesante para backend: extensiones locales para VS Code, Cursor y Kiro que funcionan sin cuenta de AWS, y observabilidad de agentes que instrumenta cada prompt, llamada al modelo e invocación de tool. Arranca en N. Virginia, Oregon e Irlanda.
Google libera AX, un orquestador estilo Kubernetes para agentes
Google publicó AX en abierto: un orquestador para cargas de agentes autónomos construido sobre primitivas al estilo Kubernetes. Más allá del hype de agentes, lo que vale mirar acá es el patrón: reconciliación declarativa aplicada a workloads no deterministas. Si te toca diseñar scheduling de tareas de larga duración, el modelo de recursos es la parte que te va a servir aunque nunca corras un agente.
Un await faltante desactiva por completo un chequeo de permisos (CVSS 7.1)
Este merece que pares cinco minutos. En Unleash, POST /api/admin/segments/strategies declara permission: NONE a nivel de ruta y hace el chequeo a mano con this.accessService.hasPermission(). Le faltaba el await. Como la función es async, la variable siempre recibe una Promise — que es truthy — y el if (!hasPermission) nunca dispara. Autorización completamente anulada, más un IDOR cross-project en la misma tanda. Parcheado en 8.0.3.
¿Y sabés por qué pasa esto? Porque TypeScript te deja: Promise<boolean> en un contexto booleano compila sin chistar. La regla que atrapa esto es @typescript-eslint/no-misused-promises con checksConditionals, y su hermana no-floating-promises. Si no las tenés prendidas en tu backend, ponete las pilas: no es un lint cosmético, es tu capa de autorización.
pnpm 12.6.0: autoDedupe, node_modules relocatable y --save-types
Tres cosas que te cambian el día. autoDedupe deduplica versiones compatibles durante el install (los installs frozen no tocan el lockfile, tranquilo). En macOS y Linux, node_modules y los bin shims ahora sobreviven a que muevas o copies el proyecto: el primer comando detecta la nueva ubicación y reescribe. Y pnpm add --save-types agrega el @types/* correspondiente a devDependencies, salteando paquetes que ya traen tipos. Encima, los manifests package.yaml por fin se pueden editar desde la CLI preservando comentarios y orden de claves.
Changesets v3: peer deps con patch bump, ESM-only y 88% menos peso
El cambio de comportamiento más importante: actualizar una peer dependency ahora da patch bump a los dependientes en vez de major. Años de reclamos de la comunidad por versionado inflado, resueltos. Además todo pasó a ESM (requiere Node 22.11+, pnpm 10, npm 10.9 o Yarn 4.5.2) y la limpieza bajó el install de 16.1MB a 2.1MB y de 95 a 39 dependencias. Nuevos comandos pack y publish-plan, y Prettier dejó de venir empaquetado: ahora lo detecta en tu proyecto.
Turborepo 2.11.3: limpieza interna y crates separados
Release de mantenimiento, casi todo refactor: se extrajo turborepo-tracing a su propio crate, se movió el spawning de procesos hijos a turborepo-process, se removieron la cache de compilación experimental de Cargo y las Run boundaries. Nada que cambie tu turbo.json, pero vale registrar la dirección: están desacoplando el binario en piezas antes del próximo minor.
Tendencias Destacadas
Dos de los bugs de hoy son el mismo patrón: una optimización que introduce un canal lateral. El singleflight de Traefik cachea por clave derivada del estado del servidor, y OpenBao compara tokens sin tiempo constante. Cuando el camino rápido depende de un secreto, el atacante mide el reloj.
El await faltante de Unleash y el RCE de next/og comparten raíz: confiar en que el lenguaje o el framework te va a frenar. TypeScript acepta una Promise en un if, y next/og acepta lo que le pases al SVG. El tipo no es la validación, y el framework no es tu borde de confianza.
El tooling de monorepo se está adelgazando en serio: Changesets bajó 88% el install y 56 dependencias, y pnpm sumó deduplicación automática. Menos árbol de dependencias es menos superficie de ataque en supply chain — la misma semana en la que un RCE upstream se filtró hasta next/og.
Deno 2.9.7: case-insensitive traceparent and honored CA stores
Small patch with two fixes that hurt when they hit you: Deno.serve now extracts traceparent regardless of header casing — if your gateway sends TraceParent, your distributed trace silently stopped chaining — and deno audit finally honors configured CA stores, which matters behind a corporate proxy. Also fixes bash/zsh completions and the double dash before the entrypoint.
workerd v1.20260923.1: Cloudflare's runtime keeps its daily cadence
The open-source runtime behind Cloudflare Workers shipped another daily build. If you pin compatibility_date in your wrangler.jsonc, remember that pin is exactly what isolates you from these changes: the runtime moves every day, your worker does not. Read the diff before bumping the date.
Fastify: one HTTP/2 request with trailers kills the process
If a route registers a trailer via reply.trailer() and is served over HTTP/2, Fastify unconditionally adds Transfer-Encoding: chunked — forbidden on HTTP/2 — and Node throws ERR_HTTP2_INVALID_CONNECTION_HEADERS. The exception is never caught, escalates to uncaughtException and terminates the process. One unauthenticated request drops every in-flight request. Fixed in the 6.0 alpha line.
Traefik: BasicAuth singleflight reintroduced an enumeration oracle
A beautiful case study in an optimization breaking security. Traefik coalesces concurrent credential checks through a singleflight.Group to avoid hashing the same password many times. Since 3.6.11 the dedup key depended on server state: a non-existent username collapsed onto one shared key (fast) while a configured one computed its own hash (slow). Result: an unauthenticated timing oracle for username enumeration. Fixed in 3.7.13. The lesson: a cache whose key depends on secret data is a side channel.
Valkey 9.2.0-rc1: forkless RDB snapshots and ACL DIGEST
The RC brings the feature many were waiting for: forkless RDB snapshots, opt-in via forkless-infrastructure-enabled and bgsave-default-method, with new INFO persistence fields reporting method and progress. No more copy-on-write memory spikes on large instances. It also adds ACL DIGEST to verify which rules an ACL LOAD actually applied, plus the XACKDEL/XDELEX stream commands with KEEPREF, DELREF and ACKED modes. Upgrade urgency: low, it is an RC.
Amazon CloudWatch Omni GA: multi-cloud OpenTelemetry
AWS took to GA an observability platform that centralizes telemetry across accounts, regions, Azure and other providers on top of OpenTelemetry, with automatic service discovery and dependency mapping. The interesting part for backend folks: local VS Code, Cursor and Kiro extensions that work without an AWS account, and agent observability instrumenting every prompt, model call and tool invocation. Launching in N. Virginia, Oregon and Ireland.
Google open-sources AX, a Kubernetes-style orchestrator for agents
Google open-sourced AX: an orchestrator for autonomous agent workloads built on Kubernetes-style primitives. Past the agent hype, the pattern is what deserves a look: declarative reconciliation applied to non-deterministic workloads. If you design scheduling for long-running tasks, the resource model is the part worth stealing even if you never run an agent.
A missing await fully disables a permission check (CVSS 7.1)
This one deserves five minutes of your attention. In Unleash, POST /api/admin/segments/strategies declares permission: NONE at the route level and does its own check via this.accessService.hasPermission(). The await was missing. Since the function is async, the variable always receives a Promise — which is truthy — so if (!hasPermission) never fires. Authorization fully bypassed, plus a cross-project IDOR in the same batch. Patched in 8.0.3.
And why does this happen? Because TypeScript lets it: a Promise<boolean> in a boolean context compiles without complaint. The rule that catches it is @typescript-eslint/no-misused-promises with checksConditionals, alongside no-floating-promises. If those are off in your backend, turn them on — this is not cosmetic linting, this is your authorization layer.
pnpm 12.6.0: autoDedupe, relocatable node_modules and --save-types
Three things that change your day. autoDedupe deduplicates compatible versions during install (frozen installs leave the lockfile untouched). On macOS and Linux, node_modules and bin shims now survive moving or copying the project: the first command detects the new location and records it. And pnpm add --save-types saves the matching @types/* into devDependencies, skipping packages that bundle their own. On top of that, package.yaml manifests can finally be edited from the CLI with comments and key order preserved.
Changesets v3: patch bumps for peer dependents, ESM-only, 88% lighter
The headline behavioral change: a peer dependency update now gives dependents a patch bump instead of a major. Years of community complaints about inflated versioning, resolved. Everything moved to ESM too (requires Node 22.11+, pnpm 10, npm 10.9 or Yarn 4.5.2) and the cleanup cut install size from 16.1MB to 2.1MB and dependencies from 95 to 39. New pack and publish-plan commands, and Prettier is no longer bundled — it is detected in your project instead.
Turborepo 2.11.3: internal cleanup and split crates
Maintenance release, mostly refactor: turborepo-tracing extracted into its own crate, child-process spawning relocated to turborepo-process, and both the experimental Cargo compile cache and Run boundaries removed. Nothing changes in your turbo.json, but the direction is worth noting: they are decoupling the binary into pieces ahead of the next minor.
Notable Trends
Two of today's bugs are the same pattern: an optimization introducing a side channel. Traefik's singleflight caches under a key derived from server state, and OpenBao compares tokens without constant time. When the fast path depends on a secret, the attacker measures the clock.
Unleash's missing await and the next/og RCE share a root cause: trusting the language or the framework to stop you. TypeScript accepts a Promise inside an if, and next/og accepts whatever you hand its SVG. The type is not the validation, and the framework is not your trust boundary.
Monorepo tooling is getting seriously leaner: Changesets cut install size by 88% and dropped 56 dependencies, while pnpm added automatic deduplication. A smaller dependency tree is less supply-chain attack surface — in the same week an upstream RCE leaked all the way into next/og.
Deno 2.9.7 : traceparent insensible à la casse et CA stores respectés
Petit patch avec deux correctifs sensibles : Deno.serve extrait désormais traceparent quelle que soit la casse de l'en-tête, et deno audit respecte enfin les CA stores configurés, indispensable derrière un proxy d'entreprise. Corrige aussi les complétions bash/zsh.
workerd v1.20260923.1 : le runtime Cloudflare garde sa cadence quotidienne
Le runtime open source derrière Cloudflare Workers publie un nouveau build quotidien. Si vous épinglez compatibility_date dans wrangler.jsonc, ce pin est précisément ce qui vous isole de ces changements. Lisez le diff avant de bouger la date.
Fastify : une requête HTTP/2 avec trailers tue le process
Si une route enregistre un trailer via reply.trailer() et est servie en HTTP/2, Fastify ajoute inconditionnellement Transfer-Encoding: chunked, interdit en HTTP/2, et Node lève ERR_HTTP2_INVALID_CONNECTION_HEADERS. L'exception non capturée devient un uncaughtException et termine le process. Corrigé dans la ligne 6.0 alpha.
Traefik : le singleflight de BasicAuth réintroduit un oracle d'énumération
Belle étude de cas d'une optimisation qui casse la sécurité. Traefik regroupe les vérifications concurrentes via un singleflight.Group. Depuis 3.6.11 la clé de déduplication dépendait de l'état du serveur : un utilisateur inexistant partageait une clé (rapide), un utilisateur existant calculait son propre hash (lent). D'où un oracle temporel d'énumération non authentifié. Corrigé en 3.7.13.
Valkey 9.2.0-rc1 : snapshots RDB sans fork et ACL DIGEST
Le RC apporte les snapshots RDB sans fork, opt-in via forkless-infrastructure-enabled et bgsave-default-method, avec de nouveaux champs INFO persistence. Fini les pics mémoire copy-on-write sur les grosses instances. Ajoute aussi ACL DIGEST et les commandes de stream XACKDEL/XDELEX. Urgence de mise à jour : faible.
Amazon CloudWatch Omni GA : OpenTelemetry multi-cloud
AWS met en GA une plateforme d'observabilité qui centralise la télémétrie entre comptes, régions, Azure et d'autres fournisseurs via OpenTelemetry, avec découverte automatique des services. Point notable : des extensions locales VS Code, Cursor et Kiro fonctionnant sans compte AWS. Disponible en N. Virginia, Oregon et Irlande.
Google ouvre AX, un orchestrateur façon Kubernetes pour agents
Google a ouvert AX : un orchestrateur pour charges d'agents autonomes bâti sur des primitives façon Kubernetes. Au-delà du battage médiatique, le motif mérite le détour : réconciliation déclarative appliquée à des charges non déterministes. Le modèle de ressources reste utile même sans agents.
Un await manquant désactive complètement un contrôle de permissions (CVSS 7.1)
Celui-ci mérite cinq minutes. Dans Unleash, POST /api/admin/segments/strategies déclare permission: NONE au niveau de la route et effectue son propre contrôle via this.accessService.hasPermission(). Le await manquait. La fonction étant async, la variable reçoit toujours une Promise truthy, et le if ne se déclenche jamais. Autorisation entièrement contournée, plus un IDOR inter-projets. Corrigé en 8.0.3.
TypeScript le permet : une Promise<boolean> en contexte booléen compile sans broncher. La règle qui l'attrape est @typescript-eslint/no-misused-promises avec checksConditionals, aux côtés de no-floating-promises.
pnpm 12.6.0 : autoDedupe, node_modules relocalisable et --save-types
Trois nouveautés marquantes. autoDedupe déduplique les versions compatibles pendant l'install (les installs frozen ne touchent pas au lockfile). Sur macOS et Linux, node_modules et les bin shims survivent au déplacement du projet. Et pnpm add --save-types enregistre le @types/* correspondant. Les manifests package.yaml sont enfin éditables depuis la CLI.
Changesets v3 : patch bump pour les peer deps, ESM-only, 88% plus léger
Le changement de comportement majeur : une mise à jour de peer dependency donne désormais un patch bump aux dépendants au lieu d'un major. Tout est passé en ESM (Node 22.11+, pnpm 10, npm 10.9 ou Yarn 4.5.2) et le nettoyage fait passer l'install de 16,1 Mo à 2,1 Mo et les dépendances de 95 à 39. Nouvelles commandes pack et publish-plan.
Turborepo 2.11.3 : nettoyage interne et crates séparés
Version de maintenance, surtout du refactor : turborepo-tracing extrait dans son propre crate, le spawning des processus enfants déplacé vers turborepo-process, et suppression du cache de compilation Cargo expérimental. Rien ne change dans votre turbo.json.
Tendances Notables
Deux bugs du jour relèvent du même motif : une optimisation qui introduit un canal auxiliaire. Le singleflight de Traefik met en cache sous une clé dérivée de l'état du serveur, et OpenBao compare les tokens sans temps constant.
L'await manquant d'Unleash et le RCE de next/og partagent la même racine : faire confiance au langage ou au framework pour vous arrêter. TypeScript accepte une Promise dans un if, et next/og accepte ce qu'on passe à son SVG. Le type n'est pas la validation.
L'outillage monorepo s'allège sérieusement : Changesets réduit l'install de 88% et supprime 56 dépendances, tandis que pnpm ajoute la déduplication automatique. Un arbre de dépendances plus petit, c'est moins de surface d'attaque supply chain.