workerd v1.20260922.1: las llamadas RPC a Durable Objects se reclaman antes del dispatch
El runtime de Cloudflare Workers sigue con su cadencia diaria. Esta build trae [STOR-5489] Claim Durable Object RPC calls before dispatch, además de ajustes de testing en bazel y deflaking de los tests de connect-handler.
Nada que te rompa el día, pero si estás peleando con condiciones de carrera en RPC contra Durable Objects, este es el cambio que te interesa mirar.
NestJS v12.0.4: microservices deja de colgar requests al cerrar el cliente
Patch enfocado casi entero en microservices: el cliente Kafka ahora reintenta después de un connect fallido (#17816), y las requests pendientes de RabbitMQ y NATS fallan explícitamente cuando se cierra el cliente en vez de quedar colgadas para siempre.
Si tenés un graceful shutdown que nunca termina de apagarse, esta es probablemente tu causa. Actualizá y fijate.
Drizzle ORM 0.45.3 suma driver oficial de Netlify DB
Nuevo entrypoint drizzle-orm/netlify-db, mantenido por el equipo de Netlify. Llamando a drizzle() sin argumentos lee NETLIFY_DB_URL y NETLIFY_DB_DRIVER del entorno; también podés pasar la URL directo o inyectar tu propio client para controlar el driver. Va acompañado de [email protected].
Buena señal de adopción: cuando el proveedor de la plataforma mantiene el driver, dejás de depender de un wrapper comunitario que se desactualiza.
Uber rediseña el sharding de M3DB con subclusters para acotar el radio de falla
En el modelo de placement original de M3DB, la caída de un nodo podía afectar hasta (n-1)/n del cluster: con tres zonas y factor de replicación 3, un solo nodo compartía datos con el 66,67% del cluster, lo que obligaba a serializar el mantenimiento. Uber introdujo subclusters de tamaño fijo que particionan los nodos en grupos aislados, cada uno dueño de shards que no se solapan — un cluster de 12 nodos con RF 3 se parte en dos subclusters de 6.
El algoritmo hace ordenamiento O(S log S) y simulación O(S × N), y permite como máximo un subcluster parcial a la vez durante el escalado. Acá el concepto importa más que M3DB: estás comprando blast radius acotado a cambio de flexibilidad de placement. Ese tradeoff aplica a cualquier sistema distribuido que tengas.
Amazon ECS agrega observabilidad de deployments en tiempo real en la consola
La consola de ECS ahora muestra el estado de los service deployments en tiempo real para las estrategias nativas Linear, Canary y Blue/Green.
Suena chico, pero si venías armando dashboards a mano para ver en qué paso está tu canary, esto te saca trabajo de encima. Lo importante es que las tres estrategias ya son nativas: si todavía estás scripteando blue/green a mano sobre ECS, ponete las pilas y revisá lo que hay.
Cloudflare propone el Agent Development Lifecycle para reemplazar al SDLC tradicional
El argumento de Cloudflare es que el SDLC tradicional depende de reviews a paso humano y pipelines lineales, y que eso se convierte en cuello de botella al escalar agentes. Su ADLC propone un sistema programático, horizontalmente escalable y orientado a eventos: preview deployments por agente contra producción, feedback loops autoalimentados con datos reales, cambios atómicos y remediación autónoma de fallas. Se apoya en Workflows, @cloudflare/ci, dashboards de observabilidad y el Agent Access Model.
Acá va mi lectura, y no es la de ellos: la idea de preview deployments por agente y cambios atómicos es buena ingeniería independientemente de los agentes. Pero «el humano deja de revisar cada fase» es exactamente donde hay que frenar y pensar. Nosotros dirigimos, la máquina ejecuta. Leé la propuesta, quedate con las partes de infraestructura, y no entregues el criterio.
pnpm v11.27.1: pn, pnpx y pnx dejan de invocar un pnpm ajeno del PATH
Backport a la línea 11. Los shims pn, pnpx y pnx ahora ejecutan el pnpm instalado junto a ellos, en vez de buscarlo en el PATH. Antes, si el directorio que los contenía no estaba en el PATH, la llamada se iba silenciosamente a un pnpm sin relación (#14803). Además, @zkochan/cmd-shim pasa a llamarse @pnpm/bins.cmd-shim y pnpm cache list-registries ahora imprime la URL del registry.
Los bugs que fallan en silencio son los peores. Si en CI tenías builds que usaban una versión de pnpm distinta a la que creías, acá está el porqué.
nginx-ignition: creación de cuenta admin sin autenticar por race condition en el onboarding
GHSA-pxcx-fv34-x9p5, CVSS v3 8.1. El endpoint POST /api/users/onboarding/finish está registrado como anónimo y crea un usuario con permisos admin ReadWrite completos. El handler usa un patrón check-then-act (TOCTOU) entre la verificación de «¿ya se completó el onboarding?» y la escritura del usuario, sin guard atómico.
Traducción: cualquier atacante remoto no autenticado que alcance una instancia en estado pre-onboarding se hace administrador. Es el clásico TOCTOU y sigue apareciendo en 2026 — si tu código chequea una condición y después actúa sobre ella sin una transacción o un lock, ahí tenés el mismo bug esperando.
Hatchet: CSRF de OAuth state por colisión de string vacío en ValidateOAuthState
GHSA-phg3-3g28-wq9v, CVSS v3 7.1, afecta a Hatchet v0.86.26 e inferiores, parcheado en 0.91.1. El código vulnerable limpia el valor de sesión oauth_state_<integration> dejándolo como string vacío tras un callback exitoso, en vez de eliminar la clave. El chequeo de igualdad posterior acepta entonces un ?state= vacío en cualquier callback futuro, habilitando login CSRF y fijación de cuenta.
Mirá la diferencia: set(key, "") contra delete(key). Un caracter de diferencia conceptual, y te abre un bypass de autenticación. Por eso los estados de sesión se borran, no se vacían.
zot: un token bearer de push puede borrar manifests y blobs arbitrarios
GHSA-qg67-7m6v-qg25, CVSS v3 8.1, parcheado en 2.1.18. El handler de autenticación bearer mapea todos los métodos HTTP que no sean GET o HEAD — incluido DELETE — a la acción push, y el middleware DistSpecAuthzHandler queda completamente bypasseado para requests autenticadas por bearer.
O sea: le diste permiso de publicar imágenes a tu CI y le diste permiso de borrar el registry. Si corrés zot como registry de contenedores, actualizá ya.
nginx-ignition: amplificación de CPU ~75x vía header Accept-Language
GHSA-jr34-h97m-9hpx, CVSS v3 7.5. El middleware i18n de gin corre delante de cada request y llama a golang.org/x/text/language.ParseAcceptLanguage sobre el header Accept-Language crudo, sin filtro de tamaño ni de forma. El parser tiene comportamiento cuadrático con listas largas de tags malformados, y el guard de CVE-2022-32149 solo limita la cantidad de caracteres -: usando _ como separador se lo esquiva.
Lección de diseño: un guard que tapa un caracter no es una defensa, es un parche. Si el parser es cuadrático, el límite va sobre el tamaño de la entrada, punto.
Tendencias Destacadas
La resiliencia dejó de ser un problema de zonas y pasó a ser un problema geopolítico: AWS declaró irrecuperable una región entera, y multi-AZ dentro de un radio de 100 km ya no alcanza como plan de continuidad.
Tres de las cuatro vulnerabilidades de la semana son errores de autorización básicos — TOCTOU, state vacío tratado como válido, DELETE mapeado a push. No hace falta criptografía rota para perder un tenant; alcanza con un check mal ubicado.
El browser sigue absorbiendo lo que antes era terreno exclusivo de los frameworks: el streaming HTML fuera de orden pasa a ser declarativo y estándar, después de diecisiete años viviendo en runtimes propietarios.
workerd v1.20260922.1: Durable Object RPC calls claimed before dispatch
The Cloudflare Workers runtime keeps its daily cadence. This build lands [STOR-5489] Claim Durable Object RPC calls before dispatch, plus bazel testing tweaks and deflaking of the connect-handler tests.
Nothing that breaks your day, but if you are fighting race conditions in RPC against Durable Objects, this is the change worth reading.
NestJS v12.0.4: microservices stop hanging requests on client close
A patch focused almost entirely on microservices: the Kafka client now retries after a failed connect (#17816), and pending RabbitMQ and NATS requests now fail explicitly on client close instead of hanging forever.
If your graceful shutdown never actually finishes shutting down, this is probably your cause. Upgrade and check.
Drizzle ORM 0.45.3 adds an official Netlify DB driver
A new drizzle-orm/netlify-db entrypoint, maintained by the Netlify team. Calling drizzle() with no arguments reads NETLIFY_DB_URL and NETLIFY_DB_DRIVER from the environment; you can also pass the URL directly or inject your own client to control the driver. Shipped alongside [email protected].
Good adoption signal: when the platform vendor maintains the driver, you stop depending on a community wrapper that drifts out of date.
Uber redesigns M3DB sharding with subclusters to limit failure impact
In M3DB's original placement model, one node failure could affect up to (n-1)/n of the cluster: with three zones and replication factor 3, a single node shared data with 66.67% of the cluster, forcing serialized maintenance. Uber introduced fixed-size subclusters partitioning nodes into isolated groups, each owning non-overlapping shards — a 12-node cluster at RF 3 splits into two subclusters of six.
The algorithm does O(S log S) sorting and O(S × N) simulation, and permits at most one partial subcluster at a time during scaling. The concept matters more than M3DB here: you are buying a bounded blast radius in exchange for placement flexibility. That tradeoff applies to any distributed system you own.
Amazon ECS adds real-time deployment observability in the console
The ECS console now shows real-time service deployment status for the native Linear, Canary and Blue/Green strategies.
Sounds small, but if you were hand-rolling dashboards to see which step your canary is on, that work goes away. The real point is that all three strategies are now native: if you are still scripting blue/green by hand on ECS, go read what ships out of the box.
Cloudflare introduces the Agent Development Lifecycle to replace the traditional SDLC
Cloudflare's argument is that the traditional SDLC relies on human-paced reviews and linear pipelines, and that this bottlenecks once you scale agents. Their ADLC proposes a programmatic, horizontally scalable, event-driven system: per-agent preview deployments against production, self-improving feedback loops driven by production data, atomic changes and autonomous failure remediation. It leans on Workflows, @cloudflare/ci, observability dashboards and the Agent Access Model.
My reading, not theirs: per-agent preview deployments and atomic changes are good engineering regardless of agents. But humans stop reviewing each phase is exactly where you should stop and think. We direct, the machine executes. Read the proposal, keep the infrastructure parts, and do not hand over your judgment.
pnpm v11.27.1: pn, pnpx and pnx stop invoking an unrelated pnpm from PATH
A backport to the 11 line. The pn, pnpx and pnx shims now run the pnpm installed alongside them instead of looking it up on PATH. Previously, when the directory holding them was not on PATH, the call silently went to an unrelated pnpm (#14803). Also, @zkochan/cmd-shim becomes @pnpm/bins.cmd-shim, and pnpm cache list-registries now prints the registry URL.
Bugs that fail silently are the worst kind. If CI builds were using a different pnpm than you thought, here is your why.
nginx-ignition: unauthenticated admin account creation via onboarding race condition
GHSA-pxcx-fv34-x9p5, CVSS v3 8.1. The POST /api/users/onboarding/finish endpoint is registered as anonymous and creates a user with full ReadWrite admin permissions. The handler uses a check-then-act (TOCTOU) pattern between the onboarding already completed? check and the user-creation write, with no atomic guard.
Translation: any remote unauthenticated attacker who can reach an instance in its pre-onboarding state becomes an administrator. Classic TOCTOU, still shipping in 2026 — if your code checks a condition and then acts on it without a transaction or a lock, you have the same bug waiting.
Hatchet: unauthenticated OAuth state CSRF via empty-state collision
GHSA-phg3-3g28-wq9v, CVSS v3 7.1, affects Hatchet v0.86.26 and below, patched in 0.91.1. The vulnerable code clears the oauth_state_<integration> session value to an empty string after a successful callback rather than removing the key. The subsequent state-equality check then accepts an empty ?state= on any later callback, enabling login CSRF and account fixation.
Look at the difference: set(key, "") versus delete(key). One conceptual character apart, and it opens an authentication bypass. That is why session state gets deleted, not blanked.
zot: a push-only bearer token can delete arbitrary manifests and blobs
GHSA-qg67-7m6v-qg25, CVSS v3 8.1, patched in 2.1.18. The bearer authentication handler maps all non-GET/HEAD HTTP methods — including DELETE — to the push action, and the DistSpecAuthzHandler middleware is bypassed entirely for bearer-authenticated requests.
Meaning: you granted your CI permission to publish images and you granted it permission to wipe the registry. If you run zot as your container registry, upgrade now.
nginx-ignition: ~75x CPU amplification via the Accept-Language header
GHSA-jr34-h97m-9hpx, CVSS v3 7.5. The gin i18n middleware runs in front of every request and calls golang.org/x/text/language.ParseAcceptLanguage on the raw Accept-Language header with no size or shape filter. The parser is quadratic on long lists of malformed tags, and the CVE-2022-32149 guard only caps the number of - characters — using _ as the separator sidesteps it.
Design lesson: a guard that plugs one character is not a defense, it is a patch. If the parser is quadratic, the limit goes on the input size, full stop.
Notable Trends
Resilience stopped being a zone problem and became a geopolitical one: AWS declared an entire region unrecoverable, and multi-AZ within a 100 km radius no longer counts as a continuity plan.
Three of this week's four vulnerabilities are basic authorization mistakes — TOCTOU, an empty state treated as valid, DELETE mapped to push. You do not need broken cryptography to lose a tenant; a misplaced check is enough.
The browser keeps absorbing what used to be framework-only territory: out-of-order HTML streaming becomes declarative and standard, after seventeen years living inside proprietary runtimes.
workerd v1.20260922.1 : les appels RPC Durable Object réclamés avant dispatch
Le runtime Cloudflare Workers garde sa cadence quotidienne. Cette build apporte [STOR-5489] Claim Durable Object RPC calls before dispatch, plus des ajustements bazel et le deflaking des tests connect-handler.
Si vous luttez contre des conditions de course en RPC sur des Durable Objects, c'est le changement à regarder.
NestJS v12.0.4 : les microservices ne bloquent plus les requêtes à la fermeture du client
Un patch presque entièrement centré sur microservices : le client Kafka réessaie après un connect raté (#17816), et les requêtes RabbitMQ et NATS en attente échouent explicitement à la fermeture du client au lieu de rester suspendues.
Si votre graceful shutdown ne se termine jamais, c'est probablement la cause.
Drizzle ORM 0.45.3 ajoute un driver officiel Netlify DB
Nouveau point d'entrée drizzle-orm/netlify-db, maintenu par l'équipe Netlify. Appeler drizzle() sans argument lit NETLIFY_DB_URL et NETLIFY_DB_DRIVER depuis l'environnement ; vous pouvez aussi passer l'URL directement ou injecter votre propre client. Livré avec [email protected].
Uber repense le sharding de M3DB avec des sous-clusters pour limiter l'impact des pannes
Dans le modèle de placement original de M3DB, la panne d'un nœud pouvait affecter jusqu'à (n-1)/n du cluster : avec trois zones et un facteur de réplication 3, un seul nœud partageait des données avec 66,67% du cluster. Uber a introduit des sous-clusters de taille fixe possédant des shards disjoints — un cluster de 12 nœuds en RF 3 se divise en deux sous-clusters de six.
L'algorithme fait un tri O(S log S) et une simulation O(S × N), avec au plus un sous-cluster partiel à la fois pendant le scaling.
Amazon ECS ajoute l'observabilité des déploiements en temps réel dans la console
La console ECS affiche désormais l'état des déploiements de services en temps réel pour les stratégies natives Linear, Canary et Blue/Green.
Si vous construisiez des dashboards à la main pour suivre votre canary, ce travail disparaît. Les trois stratégies sont maintenant natives.
Cloudflare propose l'Agent Development Lifecycle pour remplacer le SDLC traditionnel
L'argument de Cloudflare : le SDLC traditionnel repose sur des revues au rythme humain et des pipelines linéaires, ce qui devient un goulot d'étranglement à l'échelle des agents. Leur ADLC propose un système programmatique, scalable horizontalement et orienté événements : preview deployments par agent, boucles de rétroaction auto-améliorantes, changements atomiques et remédiation autonome des pannes.
Mon avis : gardez les parties infrastructure, mais ne déléguez pas votre jugement.
pnpm v11.27.1 : pn, pnpx et pnx n'invoquent plus un pnpm étranger du PATH
Backport sur la ligne 11. Les shims pn, pnpx et pnx exécutent désormais le pnpm installé à côté d'eux au lieu de le chercher dans le PATH. Auparavant, si leur répertoire n'était pas dans le PATH, l'appel partait silencieusement vers un pnpm sans rapport (#14803).
Les bugs qui échouent en silence sont les pires.
nginx-ignition : création de compte admin non authentifiée via une race condition d'onboarding
GHSA-pxcx-fv34-x9p5, CVSS v3 8.1. L'endpoint POST /api/users/onboarding/finish est enregistré comme anonyme et crée un utilisateur avec des permissions admin ReadWrite complètes, via un patron check-then-act (TOCTOU) sans garde atomique.
Tout attaquant distant non authentifié atteignant une instance en état pré-onboarding devient administrateur.
Hatchet : CSRF OAuth state via collision d'état vide
GHSA-phg3-3g28-wq9v, CVSS v3 7.1, affecte Hatchet v0.86.26 et antérieures, corrigé en 0.91.1. Le code vide la valeur de session oauth_state_<integration> en chaîne vide au lieu de supprimer la clé. Le contrôle d'égalité accepte ensuite un ?state= vide sur tout callback ultérieur.
C'est pourquoi un état de session se supprime, il ne se vide pas.
zot : un token bearer push peut supprimer des manifests et blobs arbitraires
GHSA-qg67-7m6v-qg25, CVSS v3 8.1, corrigé en 2.1.18. Le handler d'authentification bearer mappe toutes les méthodes HTTP non-GET/HEAD — y compris DELETE — sur l'action push, et le middleware DistSpecAuthzHandler est entièrement contourné.
Si vous utilisez zot comme registry de conteneurs, mettez à jour immédiatement.
nginx-ignition : amplification CPU ~75x via l'en-tête Accept-Language
GHSA-jr34-h97m-9hpx, CVSS v3 7.5. Le middleware i18n de gin s'exécute devant chaque requête et appelle golang.org/x/text/language.ParseAcceptLanguage sur l'en-tête brut, sans filtre de taille. Le parser est quadratique sur de longues listes de tags malformés, et la garde de CVE-2022-32149 ne limite que les caractères - — utiliser _ la contourne.
Si le parser est quadratique, la limite porte sur la taille de l'entrée.
Tendances Notables
La résilience n'est plus un problème de zones mais un problème géopolitique : AWS a déclaré une région entière irrécupérable, et le multi-AZ dans un rayon de 100 km ne suffit plus comme plan de continuité.
Trois des quatre vulnérabilités de la semaine sont des erreurs d'autorisation élémentaires — TOCTOU, un état vide considéré valide, DELETE mappé sur push. Pas besoin de cryptographie cassée pour perdre un tenant.
Le navigateur continue d'absorber ce qui relevait des frameworks : le streaming HTML hors ordre devient déclaratif et standard, après dix-sept ans dans des runtimes propriétaires.