{"id":"CVE-2026-127046","kind":"vulnerability","aliases":["CVE-2026-127046"],"related":[],"title":"MISP Modules: external tools endpoint leaks stored API keys without login","description":"The MISP Modules website component contains an information disclosure vulnerability in the external tools management interface. The /external_tools/list endpoint returned stored API keys (the api_key field) in its JSON response via the ExternalTools model serializer. Additionally, the browser-based edit form pre-populated the API key input field with the stored credential value, exposing it in the DOM.\n\nThe /external_tools/list endpoint is accessible without authentication (the regression tests verify the response for both authenticated and unauthenticated clients), meaning any network-reachable client could retrieve the API keys for all configured external tools. These keys are used by the server to authenticate submissions to external analysis or enrichment services, so their disclosure allows an attacker to impersonate the MISP instance or directly access those external services.\n\nThe vulnerability also affected the edit workflow: the change_config endpoint previously required the API key to be present and non-empty on every save, forcing the key to round-trip through the client. The browser JavaScript stored the key in a reactive state object and updated the in-memory tool list with the credential value, further increasing the window of exposure in client-side memory and network traffic.\n\nAffected component: the website sub-application of MISP Modules, specifically the external_tools module (serializer in models.py, list endpoint, and the external_tools_index.html template). The impact is limited to confidentiality of the stored API keys; no integrity or availability impact on the MISP Modules website itself is indicated by the patch.","summary":"The MISP Modules website returns the stored API keys of configured external tools in the JSON from /external_tools/list, and the edit form puts the key into the page. An unauthenticated network client can read those keys and use them to impersonate the MISP instance or access the external services.","severity":"critical","cvss":9.2,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"misp-modules","fixed":[],"affected":"<= 3.1.4 (before commit 61c27893); first affected version unknown","ecosystem":"pypi"}],"ecosystems":[],"tags":["misp","misp-modules","package","self-hosted"],"not_affected_if":["no-external-tools-configured","website-not-network-exposed"],"how_to_check":"- Request /external_tools/list without credentials on the MISP Modules website; if the JSON contains an api_key field, you are exposed.\n- Run 'git log' on your checkout: exposed if it does not contain commit 61c27893066cee80d9711649765ebc2bccd0e4af. v3.1.4 and earlier do not contain it.\n- If the website was reachable by untrusted clients, rotate the API keys stored for external tools.","fix":"No released version yet: the fix is commit 61c27893 on main (2026-11-12), after v3.1.4 (2026-11-08). Run a build that includes it, or the next release after v3.1.4. Until then, keep the MISP Modules website off the network or behind an authenticating proxy, and rotate API keys of configured external tools if it was reachable.","status":"open","published_at":"2026-11-12T12:18:23+00:00","first_seen_at":"2026-11-12T12:38:18+00:00","triaged_at":"2026-11-12T12:40:27+00:00","updated_at":"2026-11-12T12:40:54+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-12T12:40:27Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"network","title":"MISP Modules: external tools endpoint leaks stored API keys without login","impact":"medium","summary":"The MISP Modules website returns the stored API keys of configured external tools in the JSON from /external_tools/list, and the edit form puts the key into the page. An unauthenticated network client can read those keys and use them to impersonate the MISP instance or access the external services.","audience":"businesses","category":"package","nicknames":[],"who_cares":["misp","misp-modules","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Attacker reads API keys for external enrichment services and impersonates MISP.","analyst_note":"Confirm the fixed MISP Modules version from the linked patch on github.com and the NVD record.","how_to_check":"- Request `/external_tools/list` without credentials on the MISP Modules website and look for an `api_key` field in the JSON.\n- Check the MISP Modules version in use against the fixed release in the patch link; the sources do not give a version number.","plain_action":"","product_name":"","needs_analyst":true,"not_affected_if":["no-external-tools-configured","website-not-network-exposed"],"who_is_affected":"Teams that run the MISP Modules website sub-application with external tools configured are exposed, since the list endpoint is reachable without authentication. Deployments that do not expose the website to the network, or that have no external tool API keys configured, are less exposed. The sources do not name a fixed version; the linked patch is the only fix reference.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000773,"input_tokens":4925,"output_tokens":561,"severity_before":"critical"},"analyst_status":"done","analyst_note":"Confirm the fixed MISP Modules version from the linked patch on github.com and the NVD record.","search":"'-127046':14A,17A '-2026':13A,16A '/external_tools/list':46B,95C,140C 'access':74B,143C,203C 'addit':114C 'affect':210C,280C 'allow':193C 'also':209C 'analysi':186C 'api':8A,36B,99C,102C,125C,167C,221C,313C 'applic':286C 'attack':195C 'authent':145C,154C,182C 'avail':318C 'base':118C 'browser':117C,244C 'browser-bas':116C 'chang':215C 'client':60B,157C,163C,242C,274C 'client-sid':273C 'compon':82C,281C 'confidenti':309C 'config':216C 'configur':39B,171C 'contain':83C 'could':164C 'credenti':132C,264C 'cve':12A,15A 'direct':202C 'disclosur':86C,192C 'dom':138C 'edit':49B,119C,212C 'empti':229C 'endpoint':5A,96C,141C,217C,299C 'enrich':188C 'everi':231C 'expos':134C 'exposur':271C 'extern':3A,40B,76B,90C,172C,185C,205C,292C 'external_tools_index.html':302C 'externaltool':111C 'field':104C,128C 'forc':233C 'form':50B,120C 'host':28B 'impact':305C,319C 'imperson':69B,197C 'in-memori':257C 'increas':267C 'indic':327C 'inform':85C 'input':127C 'instanc':72B,200C 'integr':316C 'interfac':93C 'javascript':245C 'json':44B,107C 'key':9A,37B,53B,64B,100C,103C,126C,168C,175C,222C,235C,248C,314C 'leak':6A 'limit':307C 'list':261C,298C 'login':11A 'manag':92C 'mean':158C 'memori':259C,276C 'misp':1A,19A,21B,23B,30B,71B,79C,199C,288C,322C 'misp-modul':22B 'misp-modules':18A 'model':112C 'models.py':297C 'modul':2A,24B,31B,80C,289C,294C,323C 'modules':20A 'network':59B,161C,278C 'network-reach':160C 'non':228C 'non-empti':227C 'object':253C 'packag':25B 'page':56B 'patch':330C 'popul':123C 'pre':122C 'pre-popul':121C 'present':225C 'previous':218C 'put':51B 'reachabl':162C 'reactiv':251C 'read':62B 'regress':147C 'requir':219C 'respons':108C,151C 'retriev':165C 'return':33B,97C 'round':238C 'round-trip':237C 'save':232C 'self':27B 'self-host':26B 'serial':113C,295C 'server':180C 'servic':77B,189C,206C 'side':275C 'specif':290C 'state':252C 'store':7A,35B,98C,131C,246C,312C 'sub':285C 'sub-appl':284C 'submiss':183C 'templat':303C 'test':148C 'tool':4A,41B,91C,173C,260C,293C 'traffic':279C 'trip':239C 'unauthent':58B,156C 'updat':255C 'use':66B,177C 'valu':133C,265C 'verifi':149C 'via':109C 'vulner':87C,208C 'websit':32B,81C,283C,324C 'window':269C 'without':10A,144C 'workflow':213C","nicknames":[],"mitigations":[],"who_affected":"Teams that run the MISP Modules website sub-application with external tools configured are exposed, since the list endpoint is reachable without authentication. Deployments that do not expose the website to the network, or that have no external tool API keys configured, are less exposed. The sources do not name a fixed version; the linked patch is the only fix reference.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"pkeys":["mispmodules"],"ptokens":["misp","modules"],"labels":["critical","misp","mispmodules","package","selfhosted"],"campaign_type":null,"search_a":"'-127046':14A,17A '-2026':13A,16A 'api':8A 'cve':12A,15A 'endpoint':5A 'extern':3A 'key':9A 'leak':6A 'login':11A 'misp':1A,19A 'misp-modules':18A 'modul':2A 'modules':20A 'store':7A 'tool':4A 'without':10A","search_b":"'/external_tools/list':46B 'access':74B 'api':36B 'client':60B 'configur':39B 'edit':49B 'extern':40B,76B 'form':50B 'host':28B 'imperson':69B 'instanc':72B 'json':44B 'key':37B,53B,64B 'misp':21B,23B,30B,71B 'misp-modul':22B 'modul':24B,31B 'network':59B 'packag':25B 'page':56B 'put':51B 'read':62B 'return':33B 'self':27B 'self-host':26B 'servic':77B 'store':35B 'tool':41B 'unauthent':58B 'use':66B 'websit':32B","search_c":"'/external_tools/list':95C,140C 'access':143C,203C 'addit':114C 'affect':210C,280C 'allow':193C 'also':209C 'analysi':186C 'api':99C,102C,125C,167C,221C,313C 'applic':286C 'attack':195C 'authent':145C,154C,182C 'avail':318C 'base':118C 'browser':117C,244C 'browser-bas':116C 'chang':215C 'client':157C,163C,242C,274C 'client-sid':273C 'compon':82C,281C 'confidenti':309C 'config':216C 'configur':171C 'contain':83C 'could':164C 'credenti':132C,264C 'direct':202C 'disclosur':86C,192C 'dom':138C 'edit':119C,212C 'empti':229C 'endpoint':96C,141C,217C,299C 'enrich':188C 'everi':231C 'expos':134C 'exposur':271C 'extern':90C,172C,185C,205C,292C 'external_tools_index.html':302C 'externaltool':111C 'field':104C,128C 'forc':233C 'form':120C 'impact':305C,319C 'imperson':197C 'in-memori':257C 'increas':267C 'indic':327C 'inform':85C 'input':127C 'instanc':200C 'integr':316C 'interfac':93C 'javascript':245C 'json':107C 'key':100C,103C,126C,168C,175C,222C,235C,248C,314C 'limit':307C 'list':261C,298C 'manag':92C 'mean':158C 'memori':259C,276C 'misp':79C,199C,288C,322C 'model':112C 'models.py':297C 'modul':80C,289C,294C,323C 'network':161C,278C 'network-reach':160C 'non':228C 'non-empti':227C 'object':253C 'patch':330C 'popul':123C 'pre':122C 'pre-popul':121C 'present':225C 'previous':218C 'reachabl':162C 'reactiv':251C 'regress':147C 'requir':219C 'respons':108C,151C 'retriev':165C 'return':97C 'round':238C 'round-trip':237C 'save':232C 'serial':113C,295C 'server':180C 'servic':189C,206C 'side':275C 'specif':290C 'state':252C 'store':98C,131C,246C,312C 'sub':285C 'sub-appl':284C 'submiss':183C 'templat':303C 'test':148C 'tool':91C,173C,260C,293C 'traffic':279C 'trip':239C 'unauthent':156C 'updat':255C 'use':177C 'valu':133C,265C 'verifi':149C 'via':109C 'vulner':87C,208C 'websit':81C,283C,324C 'window':269C 'without':144C 'workflow':213C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T12:18:23+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/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":"5a6e4751-2f3f-4070-9419-94fb35b644e8","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-127046","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-127046","severity":null,"published_at":"2026-11-12T12:18:23+00:00","modified_at":"2026-11-12T12:18:23+00:00","first_seen_at":"2026-11-12T12:38:18+00:00","fetched_at":"2026-11-12T12:38:18+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-127046:3730","url":"https://github.com/MISP/misp-modules/releases","severity":null,"published_at":"2026-11-12T12:40:54+00:00","modified_at":"2026-11-12T12:40:54+00:00","first_seen_at":"2026-11-12T12:40:54+00:00","fetched_at":"2026-11-12T12:40:54+00:00","note":"Commit 61c2789 (2026-11-12, main) removes api_key from the serializer and makes the edit field write-only. Latest release v3.1.4 (2026-11-08) predates it; no fixed release found. Companion commits 28c27e3 'authorize external tool management' and 2c10e9a (CSRF) landed the same day. Auth-less claim comes from NVD text, not tested. Left unverified.","cites":["https://github.com/MISP/misp-modules/releases"]}],"documents":[{"id":134730,"url":"https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":134867,"url":"https://github.com/MISP/misp-modules/releases","title":"MISP Modules releases (latest v3.1.4, 2026-11-08)","kind":"release","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"mentions","confidence":null,"note":null}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}