Illustration technique abstraite sur un fond bleu marine foncé : une large limite translucide englobe une rangée de petits panneaux de serveur minimalistes ; une seule flèche de requête non étiquetée pénètre dans la limite par la gauche, sans jeton d'authentification à côté d'elle, et là où elle franchit la ligne de démarcation, la flèche devient ambre puis se ramifie en de nombreuses fines lignes cyan qui atteignent chaque panneau à l'intérieur, y compris un petit cube dessiné avec un trou de serrure représentant un coffre-fort d'identifiants. En dessous, une seconde flèche de même taille est arrêtée à la limite par une courte barre blanche pleine. Aucun texte, aucune personne ni logo d'organisation n'apparaît. Le logo OrcaRouter est intégré dans le coin inférieur droit.
AI Safety Incidents

Loom for AWS accordait des droits de super-administrateur à chaque requête non authentifiée — CVE-2026-103956

Auteur

Gideon Frost

Date de publication

Derniers modèles · 20Voir tous les modèles →
Benchmarks : Artificial Analysis · mis à jour quotidiennement
Retour à tous les articles

Le 2 octobre 2026, AWS a publié le Bulletin de sécurité 2026-124-AWS, divulguant CVE-2026-103956 dans Loom for AWS, la plateforme open source d'AWS Labs permettant de créer, déployer et gérer des agents d'IA sur Amazon Bedrock AgentCore Runtime. Dans un déploiement où aucun fournisseur d'identité n'avait été configuré, la dépendance d'authentification du backend attribuait une identité de super-administrateur fixe à chaque requête entrante — y compris les requêtes ne comportant aucun en-tête Authorization. Un client distant capable d'atteindre le backend pouvait enregistrer des serveurs d'outils, lire les identifiants d'intégration stockés et réécrire les politiques de rôle IAM attachées aux rôles d'agents gérés : un contrôle administratif total du plan de contrôle des agents, sans aucune authentification. NVD attribue à cette faille un score de 10,0, critique, selon CVSS 3.1 comme selon CVSS 4.0. La découverte a été créditée à Kenneth Cox, dans le cadre d'une divulgation coordonnée. L'avis décrit ce que la faille permettrait ; il ne décrit pas ce que quiconque en a fait.

Ce que la dépendance d’authentification faisait réellement

Le défaut se trouvait dans la dépendance d'authentification du backend. Selon l'avis de sécurité GitHub GHSA-vgmj-998f-r8mp, le chemin de code dans la dépendance d'authentification du backend — la fonction get_current_user dans le backend Loom — renvoyait une identité d'administrateur codée en dur, un compte super-admin dans le groupe g-admins-super, chaque fois qu'aucun pool d'utilisateurs Amazon Cognito ni aucun fournisseur d'identité externe actif n'existait. Il ne vérifiait pas si l'appelant avait présenté un jeton. Il ne débouchait pas sur un rejet. Il renvoyait quand même l'identité d'administrateur.

Le bulletin AWS décrit la conséquence de la même manière : la faille permettait à n'importe quel client réseau d'obtenir une autorité administrative complète sur le plan de contrôle des agents. CVE-2026-103956 est associée à CWE-306 (authentification manquante pour une fonction critique) et CWE-1188 (initialisation par défaut non sécurisée d'une ressource). Le vecteur CVSS 3.1 du NVD est AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — accessible via le réseau, de faible complexité, sans privilèges, sans interaction de l'utilisateur, portée modifiée, impact total sur la confidentialité, l'intégrité et la disponibilité.

Le point de cadrage important, et ce qui explique pourquoi un score CVSS 10.0 a été attribué à un petit projet open source, c'est qu'un déploiement sans IdP n'a rien d'exotique. Une installation récente de Loom qui n'a pas encore connecté Cognito se trouve exactement dans cet état, tout comme un déploiement dont la configuration du fournisseur d'identité n'a jamais été définie ou a cessé de résoudre. L'avis traite cela comme une condition courante plutôt que comme une mauvaise configuration que l'opérateur aurait lui-même provoquée.

Ce qu'un client non authentifié pourrait atteindre

• Inscriptions d’agents et serveurs d’outils : le client pouvait enregistrer ou modifier les serveurs d’outils qu’un agent est autorisé à appeler, ce qui, dans une architecture d’appel d’outils, fait la différence entre un agent qui lit un ticket et un agent qui exécute quelque chose.

• Identifiants d'intégration stockés : la plateforme stocke les identifiants des systèmes externes auxquels ses agents et ses serveurs d'outils se connectent, et le bulletin indique que ceux-ci étaient lisibles.

• Politiques de rôle IAM sur les rôles d'agents gérés : l'avis décrit la réécriture des politiques de rôle IAM attachées aux rôles que Loom gère pour ses agents, ce qui constitue l'étape qui transforme le contrôle de la couche d'orchestration en contrôle de ce que les agents peuvent faire à l'intérieur du compte AWS.

• Tout le reste est géré par la plateforme : les agents, les mémoires, la configuration de l’autoriseur et de la sécurité, les paramètres — et l’invocation de tout agent exécuté par le déploiement.

Ces quatre éléments constituent la propre liste de l’avis de ce à quoi donne accès un accès administratif complet, et non une reconstitution. Il n’est pas affirmé qu’une exploitation ait eu recours à l’un d’entre eux.

Établi, et non établi

Établi. La vulnérabilité existait et est documentée dans des sources primaires convenues : le bulletin de sécurité AWS 2026-124-AWS du 2 octobre 2026, l'avis GitHub GHSA-vgmj-998f-r8mp publié le même jour, et l'enregistrement CVE-2026-103956 de la NVD. Les versions affectées (antérieures à 1.6.1), les scores CVSS, les correspondances CWE, la version corrigée et le crédit concordent d'une source à l'autre. L'enregistrement d'archive pour cet incident est classé avec une confiance A, non contesté, et contient real_harm avec la valeur false.

Les champs propres au dossier situent la divulgation au 2 octobre 2026, avec une précision au jour près, et décrivent une revendication publique de preuve de concept comme non vérifiée ; ni le bulletin ni l’avis ne contient de preuve d’une attaque. Le dossier public de NVD pour CVE-2026-103956 indique que le catalogue des vulnérabilités exploitées connues de la CISA est vide pour ce CVE, et le dossier d’archive indique real_harm comme false. Donc : une faille qu’un client réseau non authentifié pourrait utiliser, sans aucune preuve dans les sources que quiconque l’ait fait.

HTML card titled 'What the record establishes — and what it does not', kicked 'Record 2026-10-02-loom-aws-agent-control-plane-cve-2026-103956' and subtitled with the source list: AWS Security Bulletin 2026-124-AWS, GHSA-vgmj-998f-r8mp and the NVD record, all published 2 October 2026, with the archive classification confidence A, not disputed, real harm recorded as false. Two columns run side by side. The left column, headed 'Established' in cyan, lists six items: CVSS 10.0 critical under both CVSS 3.1 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) and CVSS 4.0; CWE-306 and CWE-1188 — missing authentication for a critical function and insecure default initialization of a resource; affected versions before 1.6.1, where the auth dependency returned a fixed super-admin identity when no Cognito pool or external identity provider was configured; reach by any network client that could reach the backend, including registering tool servers, reading stored integration credentials and rewriting IAM role policies on managed agent roles; fixed in Loom 1.6.1, released 4 August 2026, about two months before the bulletin named the CVE; and credit to Kenneth Cox through coordinated disclosure. The right column, headed 'Not established' in amber, lists six items: no confirmed exploitation in the wild, with the AWS bulletin and the GitHub advisory both silent on attacks; a public proof-of-concept claim that is unverified in the record and could not be corroborated from the cited sources; no CISA KEV entry for CVE-2026-103956 in the NVD record; no statement about whether the fixed release is deployed across the installed base of forks and derivative code; no estimate of exposed deployments, since nothing in the cited sources says how many Loom instances ran IdP-less and network-reachable; and the note that severity measures what the flaw allowed, not what happened, with no harm recorded for this entry. A footer reads 'Facts as published by AWS (Security Bulletin 2026-124-AWS), the Loom maintainers (GHSA-vgmj-998f-r8mp) and NVD. Card rendered by OrcaRouter.' The OrcaRouter logo is composited in the bottom-right corner.

À distinguer, là aussi. Le score CVSS de 10,0 mesure ce que la faille permettrait de faire, et non ce qu’elle a fait. Un 10,0 sans exploitation et sans dommage enregistré est un incident évité de justesse, et c’est ainsi que l’archive le classe.

Le correctif, et les deux mois d'écart avant qu'il ne soit nommé

AWS a corrigé le problème dans Loom 1.6.1, publié le 4 août 2026. Cette date a son importance : la version est sortie environ deux mois avant le bulletin, et le numéro CVE existait publiquement. Les notes de version 1.6.1 décrivent la modification sans nommer de CVE — le contournement de l'authentification exige désormais une activation explicite ainsi qu'un client loopback, et échoue sinon en mode fermé avec un code 401 — de sorte que la gravité de la faille et sa désignation n'étaient visibles que pour les utilisateurs de Loom qui suivaient les trackers, et non pour quiconque lisait les seules notes de version. La même version a ajouté un renforcement SSRF pour les requêtes de découverte OAuth.

HTML card titled 'Two months between the fix and the name', kicked 'CVE-2026-103956' and subtitled with the point: the code was patched in August, but nothing in the 1.6.1 release notes pointed a Loom operator at a CVSS 10.0 authentication bypass. Four dated rows run down a vertical timeline. 4 August 2026: Loom 1.6.1 ships the fix, and the release notes describe the change without naming a CVE, with the local-dev no-IdP bypass now requiring an explicit opt-in plus a loopback client and otherwise failing closed with a 401; the same release adds SSRF hardening for OAuth discovery. 4 August to 2 October 2026: roughly two months of unstated severity, with the patch public and the defect gone but the CVE number and the 10.0 score not yet existing, so a Loom user reading release notes alone sees a security hardening rather than a critical advisory with a remediation deadline. 2 October 2026, 12:00 PM PDT: AWS Security Bulletin 2026-124-AWS is published, naming CVE-2026-103956 for Loom before 1.6.1 alongside CVE-2026-103957 and CVE-2026-103958, both fixed in 1.7.0, and CVE-2026-104019 in Amazon SageMaker Unified Studio. 2 October 2026: the GitHub advisory and the NVD record follow, with GHSA-vgmj-998f-r8mp published the same day and NVD publishing CVE-2026-103956 with CVSS 3.1 and CVSS 4.0 base scores of 10.0, critical. A footer reads 'Dates as published by the Loom 1.6.1 release notes, AWS Security Bulletin 2026-124-AWS, GHSA-vgmj-998f-r8mp and the NVD record. The cited sources do not state the release date of Loom 1.7.0. Card rendered by OrcaRouter.' The OrcaRouter logo is composited in the bottom-right corner.

Pour les déploiements déjà exposés, les recommandations préalables à la mise à niveau d'AWS consistent à disposer d'un pool d'utilisateurs Amazon Cognito ou d'un fournisseur d'identité externe actif entièrement configuré avant que le backend ne soit joignable au-delà de l'interface de bouclage, à confirmer que LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV n'est pas défini en dehors du développement local, et à restreindre l'accès réseau ou par groupe de sécurité au backend entre-temps. Le bulletin précise explicitement que la restriction réseau réduit le risque d'accès non intentionnel mais ne résout pas le problème sans la mise à niveau, et que les forks et le code dérivé doivent également être corrigés.

Même bulletin, défauts différents

Le résumé de la fiche indique que 2026-124-AWS ne concerne pas uniquement cette CVE. Deux autres failles Loom ont été divulguées le même jour et corrigées dans Loom 1.7.0 : CVE-2026-103957, une SSRF dans la gestion de la découverte OAuth2 qui pourrait envoyer des secrets clients OAuth2 ou le jeton d’accès d’un autre utilisateur vers un point de terminaison contrôlé par un attaquant (CVSS 3.1 6,2, CVSS 4.0 8,2), et CVE-2026-103958, une SSRF dans la gestion des connexions au serveur d’outils et à l’agent distant qui pourrait atteindre des adresses internes arbitraires, y compris le point de terminaison de distribution d’identifiants du conteneur, et lire les réponses (CVSS 3.1 7,6, CVSS 4.0 8,3). Les deux nécessitaient un utilisateur authentifié disposant de la portée mcp:write ou a2a:write. Le bulletin couvre également CVE-2026-104019, une injection de commandes OS dans le script de validation de démarrage de Studio Space utilisé par Amazon SageMaker Unified Studio, notée 9,0 critique selon CVSS 3.1, qu’AWS dit avoir corrigée côté serveur au moyen d’une modification globale d’assainissement appliquée au prochain redémarrage de Space.

Après la mise à niveau, AWS demande aux opérateurs de renouveler les secrets client OAuth2 pour les intégrations MCP et A2A, de révoquer et de réémettre les jetons qui étaient actifs pendant la fenêtre concernée et, si les identifiants de rôle du conteneur ont été compromis, de renouveler les identifiants de session du rôle IAM et de consulter CloudTrail.

Pourquoi cet enregistrement est dans l'archive

Abstract technical illustration on a dark navy field: three stacked horizontal layers. The top layer is a loose cluster of small abstract agent glyphs. Thin filaments run down from them into the middle layer, a clearly bounded cyan-outlined slab containing three small icons — two overlapping identity discs, a rectangular socket representing a tool registration, and a padlock on a folded document representing a policy. Every filament passes through those three icons. A single thick bundle leaves the middle slab and fans out across the bottom layer, a wide plain of large rectangular blocks. On the right edge of the middle slab, a short section of its outline is drawn as a dashed amber line, marking a boundary that is not intact. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

CVE-2026-103956 est enregistrée comme une vulnérabilité, pas comme un incident : trouvée, pas nécessairement exploitée, INFRA et CRED, GLOBAL, gravité élevée, confiance élevée. Sa valeur dans l'ensemble d'enregistrements tient à son statut de cas limite pour toute la catégorie des plans de contrôle d'agents. Le rôle de Loom est de conserver les identités, les enregistrements de serveurs d'outils ainsi que leurs identifiants d'intégration, et les politiques IAM qui déterminent ce que les agents peuvent toucher — la couche qui relie une plateforme d'agents au compte cloud dans lequel elle réside. Une vérification manquante dans cette couche ne dégrade pas un agent ; elle transfère le patrimoine. Un enregistrement frère dans l'archive, la divulgation AgentCorruption du 8 octobre 2026 visant Amazon Bedrock AgentCore, décrit la même couche atteinte par une autre voie, une chaîne SSRF depuis un agent exposé publiquement.

L’archive répertorie chaque incident d’agent documenté qu’elle contient, chacun avec ses propres sources, son niveau de gravité, son degré de confiance et son indicateur de contestation, aux côtés de celui-ci. Cet article porte sur un seul enregistrement de cet ensemble, et c’est dans cet enregistrement que réside la classification complète champ par champ.

Il s'agit d'une fiche, étudiée et rapportée par d'autres, et citée ici en leur nom. La couche propre à Loom — identités, enregistrements de serveurs d'outils et politiques IAM qui déterminent ce que les agents peuvent toucher — est la couche que les entrées sœurs de l'archive des incidents d'IA atteignent aussi, et chacune de ces fiches comporte ses propres sources, sa gravité, son degré de confiance et son indicateur de contestation.