{"id":"CVE-2026-103956","kind":"vulnerability","aliases":["CVE-2026-103956"],"related":[],"title":"Loom for AWS: missing auth lets any network client take admin control","description":"CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS\n\n### CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS\n\nBulletin ID: 2026-124-AWS Scope: AWS Content Type: Important (requires attention) Publication Date: 10/02/2026 12:00 PM PDT\n\nDescription:\n\nLoom is an AWS Labs open-source AI agent orchestration platform. We have identified and addressed three issues in Loom for AWS, described below. We recommend upgrading to the latest version (1.7.0) and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\n- CVE-2026-103956 — Authentication bypass in Loom for AWS (CWE-306, CWE-1188) An issue in the authentication dependency in Loom for AWS versions <1.6.1 allowed any network client to obtain full administrative authority over the agent control plane — including registering tool servers, reading stored integration credentials, and rewriting IAM role policies attached to managed agent roles — via any request to the application API in a deployment where no identity provider was configured. This issue was addressed in version 1.6.1, released 2026-08-04.\n- CVE-2026-103957 — OAuth2 token and credential disclosure via outbound request handling in Loom for AWS (CWE-918, CWE-201) An issue in the OAuth2 discovery handling in Loom for AWS versions <1.7.0 allowed an authenticated user with the mcp:write or a2a:write scope to configure a well-known discovery URL whose document directed the backend to send OAuth2 client secrets or another user's access token to a third-party-controlled endpoint. The 1.6.1 release blocked internal-address reach for this code path but did not fully address the token disclosure. This issue was fully addressed in version 1.7.0.\n- CVE-2026-103958 — Outbound request handling issue in tool server and remote agent connections in Loom for AWS (CWE-918) An issue in the tool server (MCP) and remote agent (A2A) connection handling in Loom for AWS versions <1.7.0 allowed an authenticated user with the mcp:write or a2a:write scope to direct connection requests to arbitrary internal network locations — including the container's credential-vending endpoint — and read the responses. This issue was addressed in version 1.7.0.\n\nResolution:\n\nThese issues have been addressed in Loom version 1.7.0. CVE-2026-103956 was independently addressed in version 1.6.1. We recommend upgrading to the latest version and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\nUntil upgrading:\n\n- For CVE-2026-103956: Ensure a Cognito user pool or an active external identity provider is fully configured before the backend is reachable beyond loopback, and confirm LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV is unset in any deployed (non-local-dev) environment.\n- For CVE-2026-103957 and CVE-2026-103958: Restrict the mcp:write, and a2a:write scopes (i.e., g-admins-super, g-admins-mcp, g-admins-a2a, g-admins-demo group membership) to trusted administrators only. This reduces the likelihood of these issues being triggered but does not fully close the issue without the code fix.\n\nAfter upgrading:\n\n1. Rotate any OAuth2 client secrets configured for MCP/A2A integrations\n2. Revoke and re-issue any access tokens that were active during the affected window\n3. If container role credentials were accessed, rotate the IAM role's session credentials and review CloudTrail for unintended usage.\n\nReferences:\n\n- CVE-2026-103956\n- CVE-2026-103957\n- CVE-2026-103958\n- GHSA-vgmj-998f-r8mp\n- GHSA-jcxf-gpf4-58hm\n- GHSA-w6g6-h8pv-6mc7\n\nAcknowledgement:\n\nWe would like to thank Kenneth Cox for collaborating on this issue through the coordinated disclosure process.\n\n Please email aws-security@amazon.com with any security questions or concerns.","summary":"Loom for AWS, an AI agent orchestration platform, skipped authentication on its application API when no identity provider was configured. An attacker on the network can gain full administrative control of the agent control plane, including registering tool servers, reading stored integration credentials, and rewriting IAM role policies.","severity":"critical","cvss":10.0,"epss":0.01695,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-agents","ai-tooling","aws","lab-disclosure","loom","mcp","self-hosted"],"not_affected_if":["auth-configured","loopback-only","upgraded-1.6.1"],"how_to_check":"- Confirm `LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV` is unset in every deployed environment.\n- Confirm a Cognito user pool or external identity provider is configured for the backend.\n- Check the installed Loom version; anything below `1.6.1` is affected.","fix":"- Upgrade Loom for AWS to `1.7.0`, which also contains fixes for CVE-2026-103957 and CVE-2026-103958.\n- Patch any forked or derivative Loom code with the same fixes.\n- Rotate OAuth2 client secrets for MCP/A2A integrations and revoke tokens active during the exposure window.\n- If container role credentials were reachable, rotate the IAM role session credentials and review CloudTrail.","status":"open","published_at":"2026-10-02T19:16:39+00:00","first_seen_at":"2026-10-24T19:28:15+00:00","triaged_at":"2026-10-25T02:58:19+00:00","updated_at":"2026-10-25T12:38:49+00:00","category":"ai-tooling","confidence":0.85,"triage":{"at":"2026-10-25T02:58:19Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Loom for AWS to `1.7.0`, which also contains fixes for CVE-2026-103957 and CVE-2026-103958.\n- Patch any forked or derivative Loom code with the same fixes.\n- Rotate OAuth2 client secrets for MCP/A2A integrations and revoke tokens active during the exposure window.\n- If container role credentials were reachable, rotate the IAM role session credentials and review CloudTrail.","reach":"network","title":"Loom for AWS: missing auth lets any network client take admin control","impact":"high","summary":"Loom for AWS, an AI agent orchestration platform, skipped authentication on its application API when no identity provider was configured. An attacker on the network can gain full administrative control of the agent control plane, including registering tool servers, reading stored integration credentials, and rewriting IAM role policies.","category":"ai-tooling","nicknames":[],"who_cares":["aws","loom","ai-agents","mcp","self-hosted"],"confidence":0.85,"needs_auth":"no","worst_case":"Attacker gains full admin control, reads stored credentials, rewrites IAM policies","analyst_note":"Confirm the fixed version boundary and whether 1.6.1 is the only fixed release for this CVE; check the GHSA advisories linked in the AWS bulletin 2026-124-AWS for exploit details.","how_to_check":"- Confirm `LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV` is unset in every deployed environment.\n- Confirm a Cognito user pool or external identity provider is configured for the backend.\n- Check the installed Loom version; anything below `1.6.1` is affected.","needs_analyst":true,"not_affected_if":["auth-configured","loopback-only","upgraded-1.6.1"],"who_is_affected":"Deployments of Loom for AWS below 1.6.1 that run without a configured identity provider, and that are reachable beyond loopback, are exposed. Teams that have a Cognito user pool or external identity provider fully set up and enforced, or that run only on localhost, are less exposed. Forks and derivative code must be patched separately.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"critical"},"cost_usd":0.000865,"input_tokens":4735,"output_tokens":783,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-04':262C '-08':261C '-103956':15A,18A,84C,99C,181C,458C,491C,640C '-103957':87C,102C,265C,533C,643C '-103958':91C,106C,369C,537C,646C '-1188':191C '-124':115C '-201':282C '-2026':14A,17A,83C,86C,90C,98C,101C,105C,180C,264C,368C,457C,490C,532C,536C,639C,642C,645C '-306':189C '-918':280C,386C '00':128C '1':591C '1.6.1':203C,258C,340C,464C '1.7.0':164C,295C,366C,405C,445C,455C '10/02/2026':126C '12':127C '2':601C '2026':114C,260C '3':617C '58hm':656C '6mc7':661C '998f':650C 'a2a':305C,397C,415C,543C,558C 'access':330C,608C,623C 'acknowledg':662C 'activ':499C,612C 'address':148C,255C,345C,355C,363C,442C,451C,461C 'admin':11A,549C,553C,557C,561C 'administr':62B,211C,567C 'affect':615C 'agent':21B,39B,66B,141C,215C,234C,379C,396C 'ai':20B,23B,38B,140C 'ai-ag':19B 'ai-tool':22B 'allow':204C,296C,406C,516C 'anoth':327C 'api':47B,242C 'applic':46B,241C 'arbitrari':423C 'attach':231C 'attack':55B 'attent':123C 'auth':5A 'authent':43B,182C,196C,298C,408C 'author':212C 'aw':3A,25B,36B,96C,111C,116C,118C,135C,154C,187C,201C,278C,293C,384C,403C 'aws-security@amazon.com':682C 'backend':320C,508C 'beyond':511C 'block':342C 'bulletin':112C 'bypass':183C 'client':9A,207C,324C,595C 'close':582C 'cloudtrail':633C 'code':171C,349C,478C,587C 'cognito':494C 'collabor':671C 'concern':688C 'configur':53B,251C,309C,505C,597C 'confirm':514C 'connect':380C,398C,420C 'contain':429C,619C 'content':119C 'control':12A,63B,67B,216C,337C 'coordin':677C 'cox':669C 'credenti':76B,225C,269C,432C,621C,630C 'credential-vend':431C 'cve':13A,16A,82C,85C,89C,97C,100C,104C,179C,263C,367C,456C,489C,531C,535C,638C,641C,644C 'cwe':188C,190C,279C,281C,385C 'date':125C 'demo':562C 'depend':197C 'deploy':245C,524C 'deriv':170C,477C 'describ':155C 'descript':131C 'dev':519C,528C 'direct':318C,419C 'disclosur':28B,270C,358C,678C 'discoveri':288C,314C 'document':317C 'email':681C 'endpoint':338C,434C 'ensur':166C,473C,492C 'environ':529C 'extern':500C 'fix':178C,485C,588C 'fork':168C,475C 'full':61B,210C 'fulli':354C,362C,504C,581C 'g':548C,552C,556C,560C 'g-admins-a2a':555C 'g-admins-demo':559C 'g-admins-mcp':551C 'g-admins-sup':547C 'gain':60B 'ghsa':648C,653C,658C 'ghsa-jcxf-gpf4-58hm':652C 'ghsa-vgmj-998f-r8mp':647C 'ghsa-w6g6-h8pv-6mc7':657C 'gpf4':655C 'group':563C 'h8pv':660C 'handl':274C,289C,372C,399C 'host':33B 'i.e':546C 'iam':79B,228C,626C 'id':113C 'ident':50B,248C,501C 'identifi':146C 'import':121C 'includ':69B,218C,427C 'incorpor':175C,482C 'independ':460C 'integr':75B,224C,600C 'intern':344C,424C 'internal-address':343C 'issu':92C,107C,150C,193C,253C,284C,360C,373C,388C,440C,448C,575C,584C,606C,674C 'jcxf':654C 'kenneth':668C 'known':313C 'lab':27B,136C 'lab-disclosur':26B 'latest':162C,470C 'let':6A 'like':665C 'likelihood':572C 'local':518C,527C 'locat':426C 'loom':1A,29B,34B,94C,109C,132C,152C,185C,199C,276C,291C,382C,401C,453C,515C 'loopback':512C 'manag':233C 'mcp':30B,302C,393C,412C,540C,554C 'mcp/a2a':599C 'membership':564C 'miss':4A 'network':8A,58B,206C,425C 'new':177C,484C 'non':526C 'non-local-dev':525C 'oauth2':266C,287C,323C,594C 'obtain':209C 'open':138C 'open-sourc':137C 'orchestr':40B,142C 'outbound':272C,370C 'parti':336C 'patch':173C,480C 'path':350C 'pdt':130C 'plane':68B,217C 'platform':41B,143C 'pleas':680C 'pm':129C 'polici':81B,230C 'pool':496C 'process':679C 'provid':51B,249C,502C 'public':124C 'question':686C 'r8mp':651C 're':605C 're-issu':604C 'reach':346C 'reachabl':510C 'read':73B,222C,436C 'recommend':158C,466C 'reduc':570C 'refer':637C 'regist':70B,219C 'releas':259C,341C 'remot':378C,395C 'request':238C,273C,371C,421C 'requir':122C 'resolut':446C 'respons':438C 'restrict':538C 'review':632C 'revok':602C 'rewrit':78B,227C 'role':80B,229C,235C,620C,627C 'rotat':592C,624C 'scope':117C,307C,417C,545C 'secret':325C,596C 'secur':685C 'self':32B 'self-host':31B 'send':322C 'server':72B,221C,376C,392C 'session':629C 'skip':42B 'sourc':139C 'store':74B,223C 'super':550C 'take':10A 'thank':667C 'third':335C 'third-party-control':334C 'three':149C 'token':267C,331C,357C,609C 'tool':24B,71B,220C,375C,391C 'trigger':577C 'trust':566C 'type':120C 'unauthent':517C 'unintend':635C 'unset':521C 'upgrad':159C,467C,487C,590C 'url':315C 'usag':636C 'user':299C,328C,409C,495C 'vend':433C 'version':163C,202C,257C,294C,365C,404C,444C,454C,463C,471C 'vgmj':649C 'via':236C,271C 'w6g6':659C 'well':312C 'well-known':311C 'whose':316C 'window':616C 'without':585C 'would':664C 'write':303C,306C,413C,416C,541C,544C","nicknames":[],"mitigations":[],"who_affected":"Deployments of Loom for AWS below 1.6.1 that run without a configured identity provider, and that are reachable beyond loopback, are exposed. Teams that have a Cognito user pool or external identity provider fully set up and enforced, or that run only on localhost, are less exposed. Forks and derivative code must be patched separately.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-02T19:16:39+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"ff89ba41-3aa1-4d27-914a-91399e9639e5","poc_count":0,"sources":[{"source":"lab","external_id":"https://aws.amazon.com/security/security-bulletins/rss/2026-124-aws/#CVE-2026-103956","url":"https://aws.amazon.com/security/security-bulletins/rss/2026-124-aws/","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T19:28:15+00:00","fetched_at":"2026-10-25T08:14:50+00:00","note":"AWS: CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS"},{"source":"nvd","external_id":"CVE-2026-103956","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-103956","severity":null,"published_at":"2026-10-02T19:16:39+00:00","modified_at":"2026-10-06T14:49:40+00:00","first_seen_at":"2026-10-24T20:15:27+00:00","fetched_at":"2026-10-24T20:15:27+00:00","note":null},{"source":"epss","external_id":"CVE-2026-103956","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-103956","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-25T12:38:49+00:00","fetched_at":"2026-10-25T12:38:49+00:00","note":null}],"documents":[{"id":2947,"url":"https://aws.amazon.com/security/security-bulletins/rss/2026-124-aws/","title":"AWS: CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS","kind":"advisory","source":"lab","text":"CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS\n\n### CVE-2026-103956, CVE-2026-103957, and CVE-2026-103958 - Issues in Loom for AWS\n\nBulletin ID: 2026-124-AWS Scope: AWS Content Type: Important (requires attention) Publication Date: 10/02/2026 12:00 PM PDT\n\nDescription:\n\nLoom is an AWS Labs open-source AI agent orchestration platform. We have identified and addressed three issues in Loom for AWS, described below. We recommend upgrading to the latest version (1.7.0) and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\n- CVE-2026-103956 — Authentication bypass in Loom for AWS (CWE-306, CWE-1188) An issue in the authentication dependency in Loom for AWS versions <1.6.1 allowed any network client to obtain full administrative authority over the agent control plane — including registering tool servers, reading stored integration credentials, and rewriting IAM role policies attached to managed agent roles — via any request to the application API in a deployment where no identity provider was configured. This issue was addressed in version 1.6.1, released 2026-08-04.\n- CVE-2026-103957 — OAuth2 token and credential disclosure via outbound request handling in Loom for AWS (CWE-918, CWE-201) An issue in the OAuth2 discovery handling in Loom for AWS versions <1.7.0 allowed an authenticated user with the mcp:write or a2a:write scope to configure a well-known discovery URL whose document directed the backend to send OAuth2 client secrets or another user's access token to a third-party-controlled endpoint. The 1.6.1 release blocked internal-address reach for this code path but did not fully address the token disclosure. This issue was fully addressed in version 1.7.0.\n- CVE-2026-103958 — Outbound request handling issue in tool server and remote agent connections in Loom for AWS (CWE-918) An issue in the tool server (MCP) and remote agent (A2A) connection handling in Loom for AWS versions <1.7.0 allowed an authenticated user with the mcp:write or a2a:write scope to direct connection requests to arbitrary internal network locations — including the container's credential-vending endpoint — and read the responses. This issue was addressed in version 1.7.0.\n\nResolution:\n\nThese issues have been addressed in Loom version 1.7.0. CVE-2026-103956 was independently addressed in version 1.6.1. We recommend upgrading to the latest version and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\nUntil upgrading:\n\n- For CVE-2026-103956: Ensure a Cognito user pool or an active external identity provider is fully configured before the backend is reachable beyond loopback, and confirm LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV is unset in any deployed (non-local-dev) environment.\n- For CVE-2026-103957 and CVE-2026-103958: Restrict the mcp:write, and a2a:write scopes (i.e., g-admins-super, g-admins-mcp, g-admins-a2a, g-admins-demo group membership) to trusted administrators only. This reduces the likelihood of these issues being triggered but does not fully close the issue without the code fix.\n\nAfter upgrading:\n\n1. Rotate any OAuth2 client secrets configured for MCP/A2A integrations\n2. Revoke and re-issue any access tokens that were active during the affected window\n3. If container role credentials were accessed, rotate the IAM role's session credentials and review CloudTrail for unintended usage.\n\nReferences:\n\n- CVE-2026-103956\n- CVE-2026-103957\n- CVE-2026-103958\n- GHSA-vgmj-998f-r8mp\n- GHSA-jcxf-gpf4-58hm\n- GHSA-w6g6-h8pv-6mc7\n\nAcknowledgement:\n\nWe would like to thank Kenneth Cox for collaborating on this issue through the coordinated disclosure process.\n\n Please email aws-security@amazon.com with any security questions or concerns.","published_at":null,"relation":"advisory","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}