{"id":"GHSA-34v3-xxqp-g5g9","kind":"vulnerability","aliases":["GHSA-34v3-xxqp-g5g9"],"related":[],"title":"CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering","description":"CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering\n\n### CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering\n\nBulletin ID: 2026-167-AWS Scope: AWS Content Type: Important (requires attention) Publication Date: 11/03/2026 10:30 AM PST\n\nDescription:\n\nmaplibre-gl-js-amplify is an open-source AWS Amplify library that integrates Amazon Location Service with MapLibre GL JS to render maps, markers, popups, and geofencing controls in web applications. We identified CVE-2026-121652, where a stored cross-site scripting (XSS) issue in the library's popup and geofence-control rendering. Several code paths interpolated user-controlled GeoJSON feature properties (`title`, address, and place_name) and geofence identifiers directly into the DOM via innerHTML without sanitization. An actor who stored a crafted location record or geofence identifier containing an HTML/JavaScript payload could cause that payload to execute in another user's browser when the corresponding map marker or geofence list item was rendered. In an authenticated session this could enable actions such as session hijacking or data exfiltration in the context of the consuming application.\n\nImpacted versions: <= 4.0.2\n\nResolution:\n\nThis issue has been addressed in maplibre-gl-js-amplify version 4.0.3. The fix introduces an escapeHtml() utility that is applied to all affected user-controlled values before they are inserted into the DOM. We recommend upgrading to the latest version and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\nWorkarounds:\n\nThere is no workaround that fully addresses this issue; upgrading to version 4.0.3 or later is required. As defense in depth, applications that cannot upgrade immediately should validate and sanitize all user-supplied location and geofence data (notably title, address, place_name, and geofence identifiers) on input, and apply a restrictive Content Security Policy to limit the impact of injected script.\n\nReferences:\n\n- CVE-2026-121652\n- GHSA-34v3-xxqp-g5g9\n\n Please email aws-security@amazon.com with any security questions or concerns.","summary":"maplibre-gl-js-amplify inserts stored location and geofence fields into the page without escaping. A crafted record can run script in another user's browser when its map marker or geofence item is shown, enabling session hijacking or data theft in an authenticated session.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["amazon-location-service","aws","aws-amplify","lab-disclosure","maplibre","package","web-frontend"],"not_affected_if":["library-not-used","version-4.0.3-or-later"],"how_to_check":"- Check the installed `maplibre-gl-js-amplify` version in `package.json` or the lockfile\n- Search the project and any forked copies for `innerHTML` usage on title, address, place_name or geofence identifiers","fix":"- `maplibre-gl-js-amplify` `4.0.3` or later","status":"open","published_at":null,"first_seen_at":"2026-11-03T19:36:41+00:00","triaged_at":"2026-11-03T19:37:14+00:00","updated_at":"2026-11-03T19:37:14+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-03T19:37:14Z","model":"claude-haiku-5-5","output":{"fix":"- `maplibre-gl-js-amplify` `4.0.3` or later","reach":"internet","title":"AWS Amplify map library: stored XSS in popup rendering","impact":"medium","summary":"maplibre-gl-js-amplify inserts stored location and geofence fields into the page without escaping. A crafted record can run script in another user's browser when its map marker or geofence item is shown, enabling session hijacking or data theft in an authenticated session.","audience":"developers","category":"package","nicknames":[],"who_cares":["aws-amplify","maplibre","web-frontend","amazon-location-service"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"attacker script runs in other users' browsers, hijacking sessions","analyst_note":"","how_to_check":"- Check the installed `maplibre-gl-js-amplify` version in `package.json` or the lockfile\n- Search the project and any forked copies for `innerHTML` usage on title, address, place_name or geofence identifiers","plain_action":"","needs_analyst":false,"not_affected_if":["version-4.0.3-or-later","library-not-used"],"who_is_affected":"Web applications that use maplibre-gl-js-amplify at version 4.0.2 or earlier to render Amazon Location Service markers, popups or geofence lists from user-stored data. Applications not using this library, or using versions 4.0.3 or later, are not affected; forked or copied code needs the same patch.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000763,"input_tokens":4903,"output_tokens":545,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-121652':3A,94C,113C,187C,419C '-167':133C '-2026':2A,93C,112C,186C,418C '10':145C '11/03/2026':144C '2026':132C '30':146C '34v3':22A,27A,422C '4.0.2':294C '4.0.3':308C,366C 'action':277C 'actor':234C 'address':218C,300C,360C,394C 'affect':320C 'amazon':31B,165C 'amazon-location-servic':30B 'amplifi':12A,17A,37B,50B,103C,108C,122C,127C,154C,161C,306C 'anoth':69B,255C 'appli':317C,403C 'applic':182C,291C,375C 'attent':141C 'authent':90B,272C 'aw':11A,34B,36B,102C,121C,134C,136C,160C 'aws-amplifi':35B 'aws-security@amazon.com':427C 'browser':72B,258C 'bulletin':130C 'cannot':377C 'caus':249C 'code':208C,345C 'concern':433C 'consum':290C 'contain':244C 'content':137C,406C 'context':287C 'control':179C,205C,213C,323C 'correspond':261C 'could':248C,275C 'craft':63B,238C 'cross':6A,97C,116C,192C 'cross-sit':5A,96C,115C,191C 'cve':1A,92C,111C,185C,417C 'data':86B,283C,391C 'date':143C 'defens':372C 'depth':374C 'deriv':344C 'descript':149C 'direct':225C 'disclosur':40B 'dom':228C,331C 'email':426C 'enabl':82B,276C 'ensur':340C 'escap':61B 'escapehtml':313C 'execut':253C 'exfiltr':284C 'featur':215C 'field':56B 'fix':310C,352C 'fork':342C 'frontend':45B 'fulli':359C 'g5g9':24A,29A,424C 'geofenc':55B,78B,178C,204C,223C,242C,265C,390C,398C 'geofence-control':203C 'geojson':214C 'ghsa':21A,26A,421C 'ghsa-34v3-xxqp-g5g9':20A,25A,420C 'gl':15A,48B,106C,125C,152C,170C,304C 'hijack':84B,281C 'html/javascript':246C 'id':131C 'identifi':184C,224C,243C,399C 'immedi':379C 'impact':292C,412C 'import':139C 'incorpor':349C 'inject':414C 'innerhtml':230C 'input':401C 'insert':51B,328C 'integr':164C 'interpol':210C 'introduc':311C 'issu':196C,297C,362C 'item':79B,267C 'js':16A,49B,107C,126C,153C,171C,305C 'lab':39B 'lab-disclosur':38B 'later':368C 'latest':337C 'librari':162C,199C 'limit':410C 'list':266C 'locat':32B,53B,166C,239C,388C 'map':75B,174C,262C 'maplibr':14A,41B,47B,105C,124C,151C,169C,303C 'maplibre-gl-js-amplifi':13A,46B,104C,123C,150C,302C 'marker':76B,175C,263C 'name':221C,396C 'new':351C 'notabl':392C 'open':158C 'open-sourc':157C 'packag':42B 'page':59B 'patch':347C 'path':209C 'payload':247C,251C 'place':220C,395C 'pleas':425C 'polici':408C 'popup':18A,109C,128C,176C,201C 'properti':216C 'pst':148C 'public':142C 'question':431C 'recommend':333C 'record':64B,240C 'refer':416C 'render':19A,110C,129C,173C,206C,269C 'requir':140C,370C 'resolut':295C 'restrict':405C 'run':66B 'sanit':232C,383C 'scope':135C 'script':8A,67B,99C,118C,194C,415C 'secur':407C,430C 'servic':33B,167C 'session':83B,91B,273C,280C 'sever':207C 'shown':81B 'site':7A,98C,117C,193C 'sourc':159C 'store':4A,52B,95C,114C,190C,236C 'suppli':387C 'theft':87B 'titl':217C,393C 'type':138C 'upgrad':334C,363C,378C 'user':70B,212C,256C,322C,386C 'user-control':211C,321C 'user-suppli':385C 'util':314C 'valid':381C 'valu':324C 'version':293C,307C,338C,365C 'via':229C 'web':44B,181C 'web-frontend':43B 'without':60B,231C 'workaround':353C,357C 'xss':9A,100C,119C,195C 'xxqp':23A,28A,423C","nicknames":[],"mitigations":[],"who_affected":"Web applications that use maplibre-gl-js-amplify at version 4.0.2 or earlier to render Amazon Location Service markers, popups or geofence lists from user-stored data. Applications not using this library, or using versions 4.0.3 or later, are not affected; forked or copied code needs the same patch.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["amazonlocationservice","aws","awsamplify","labdisclosure","maplibre","medium","package","webfrontend"],"campaign_type":null,"first_public_at":null,"kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"lab","external_id":"https://aws.amazon.com/security/security-bulletins/rss/2026-167-aws/#GHSA-34v3-xxqp-g5g9","url":"https://aws.amazon.com/security/security-bulletins/rss/2026-167-aws/","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-11-03T19:36:41+00:00","fetched_at":"2026-11-03T19:36:41+00:00","note":"AWS: CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering"}],"documents":[{"id":60128,"url":"https://aws.amazon.com/security/security-bulletins/rss/2026-167-aws/","title":"AWS: CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering","kind":"advisory","source":"lab","publisher":"research","text":"CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering\n\n### CVE-2026-121652 - Stored cross-site scripting (XSS) in AWS Amplify maplibre-gl-js-amplify popup rendering\n\nBulletin ID: 2026-167-AWS Scope: AWS Content Type: Important (requires attention) Publication Date: 11/03/2026 10:30 AM PST\n\nDescription:\n\nmaplibre-gl-js-amplify is an open-source AWS Amplify library that integrates Amazon Location Service with MapLibre GL JS to render maps, markers, popups, and geofencing controls in web applications. We identified CVE-2026-121652, where a stored cross-site scripting (XSS) issue in the library's popup and geofence-control rendering. Several code paths interpolated user-controlled GeoJSON feature properties (`title`, address, and place_name) and geofence identifiers directly into the DOM via innerHTML without sanitization. An actor who stored a crafted location record or geofence identifier containing an HTML/JavaScript payload could cause that payload to execute in another user's browser when the corresponding map marker or geofence list item was rendered. In an authenticated session this could enable actions such as session hijacking or data exfiltration in the context of the consuming application.\n\nImpacted versions: <= 4.0.2\n\nResolution:\n\nThis issue has been addressed in maplibre-gl-js-amplify version 4.0.3. The fix introduces an escapeHtml() utility that is applied to all affected user-controlled values before they are inserted into the DOM. We recommend upgrading to the latest version and ensuring any forked or derivative code is patched to incorporate the new fixes.\n\nWorkarounds:\n\nThere is no workaround that fully addresses this issue; upgrading to version 4.0.3 or later is required. As defense in depth, applications that cannot upgrade immediately should validate and sanitize all user-supplied location and geofence data (notably title, address, place_name, and geofence identifiers) on input, and apply a restrictive Content Security Policy to limit the impact of injected script.\n\nReferences:\n\n- CVE-2026-121652\n- GHSA-34v3-xxqp-g5g9\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"}