{"id":"CVE-2025-2000","kind":"vulnerability","aliases":["CVE-2025-2000","GHSA-6m2c-76ff-6vrf"],"related":[],"title":"Qiskit allows arbitrary code execution decoding QPY format versions < 13","description":"### Impact\n\nA maliciously crafted QPY file can potentially execute arbitrary-code embedded in the payload without privilege escalation when deserializing QPY formats < 13. A python process calling Qiskit's `qiskit.qpy.load()` function could potentially execute any arbitrary Python code embedded in the correct place in the binary file as part of a specially constructed payload.\n\n### Patches\n\nFixed in Qiskit 1.4.2 and in Qiskit 2.0.0rc2","summary":"Qiskit's qpy.load() function deserializes QPY formats below version 13 without safe checks, so a malicious QPY file can embed Python code that runs when a process loads it. An attacker who gets a crafted file to a loading process runs code with that process's permissions.","severity":"critical","cvss":9.8,"epss":0.0081,"exploited":false,"exploited_at":null,"products":[{"name":"qiskit-terra","fixed":[],"affected":">= 0.18.0, <= 0.46.3","ecosystem":"pypi"},{"name":"qiskit","fixed":["1.4.2"],"affected":"<= 1.4.1","ecosystem":"pypi"},{"name":"qiskit","fixed":["2.0.0rc2"],"affected":"= 2.0.0rc1","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["cwe-502","package","python","qiskit","quantum-computing"],"not_affected_if":["no-qpy-load","trusted-files-only"],"how_to_check":"- Run `pip show qiskit` and `pip show qiskit-terra` to see installed versions.\n- Search your code and pipelines for calls to `qiskit.qpy.load()` that read files from untrusted sources.","fix":"- `qiskit` upgrade to `1.4.2` or later (1.x line)\n- `qiskit` `2.0.0rc1` upgrade to `2.0.0rc2`\n- `qiskit-terra` fixed version unknown","status":"open","published_at":"2025-03-14T19:56:14+00:00","first_seen_at":"2026-11-04T16:29:22+00:00","triaged_at":"2026-11-04T16:30:34+00:00","updated_at":"2026-11-04T16:30:34+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-04T16:30:34Z","model":"claude-haiku-5-5","output":{"fix":"- `qiskit` upgrade to `1.4.2` or later (1.x line)\n- `qiskit` `2.0.0rc1` upgrade to `2.0.0rc2`\n- `qiskit-terra` fixed version unknown","reach":"local","title":"Qiskit: a crafted QPY file runs arbitrary Python when loaded","impact":"high","summary":"Qiskit's qpy.load() function deserializes QPY formats below version 13 without safe checks, so a malicious QPY file can embed Python code that runs when a process loads it. An attacker who gets a crafted file to a loading process runs code with that process's permissions.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","qiskit","quantum-computing"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"arbitrary Python code runs inside the loading process","analyst_note":"Confirm the fixed version for qiskit-terra (listed as unknown) and whether the GHSA advisory names a fixed version for the qiskit-terra line.","how_to_check":"- Run `pip show qiskit` and `pip show qiskit-terra` to see installed versions.\n- Search your code and pipelines for calls to `qiskit.qpy.load()` that read files from untrusted sources.","plain_action":"","needs_analyst":true,"not_affected_if":["no-qpy-load","trusted-files-only"],"who_is_affected":"Any Python process that calls qiskit.qpy.load() on a QPY file it did not create itself is exposed, since the file can carry code that runs during deserialization. Programs that only write QPY files, or that load files only they produced, are less exposed. Teams that never call the QPY loader can skip it.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.000753,"input_tokens":4346,"output_tokens":636,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2000':13A,21A '-2025':12A,20A '-502':28B '1.4.2':141C '13':10A,44B,105C '2.0.0':145C '6m2c':16A '6vrf':18A '76ff':17A 'allow':2A 'arbitrari':3A,92C,118C 'arbitrary-cod':91C 'attack':65B 'binari':128C 'call':109C 'check':47B 'code':4A,56B,76B,93C,120C 'comput':34B 'construct':135C 'correct':124C 'could':114C 'craft':69B,85C 'cve':11A,19A 'cwe':27B 'decod':6A 'deseri':39B,102C 'emb':54B 'embed':94C,121C 'escal':100C 'execut':5A,90C,116C 'file':52B,70B,87C,129C 'fix':138C 'format':8A,41B,104C 'function':38B,113C 'get':67B 'ghsa':15A 'ghsa-6m2c-76ff-6vrf':14A 'impact':82C 'load':62B,73B 'malici':50B,84C 'packag':29B 'part':131C 'patch':137C 'payload':97C,136C 'permiss':81B 'place':125C 'potenti':89C,115C 'privileg':99C 'process':61B,74B,79B,108C 'python':30B,55B,107C,119C 'qiskit':1A,23A,25A,26A,31B,35B,110C,140C,144C 'qiskit-terra':22A 'qiskit.qpy.load':112C 'qpi':7A,40B,51B,86C,103C 'qpy.load':37B 'quantum':33B 'quantum-comput':32B 'rc2':146C 'run':58B,75B 'safe':46B 'special':134C 'terra':24A 'version':9A,43B 'without':45B,98C","nicknames":[],"mitigations":[],"who_affected":"Any Python process that calls qiskit.qpy.load() on a QPY file it did not create itself is exposed, since the file can carry code that runs during deserialization. Programs that only write QPY files, or that load files only they produced, are less exposed. Teams that never call the QPY loader can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["qiskit","qiskitterra"],"ptokens":["qiskit","terra"],"labels":["critical","cwe502","package","pypi","python","qiskit","quantumcomputing"],"campaign_type":null,"first_public_at":"2025-03-14T19:56:14+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-6m2c-76ff-6vrf","url":"https://github.com/advisories/GHSA-6m2c-76ff-6vrf","severity":"critical","published_at":"2025-03-14T19:56:14+00:00","modified_at":"2026-11-04T16:26:24+00:00","first_seen_at":"2026-11-04T16:29:22+00:00","fetched_at":"2026-11-04T16:39:44+00:00","note":null}],"documents":[{"id":68530,"url":"https://api.github.com/repos/Qiskit/qiskit/security-advisories/GHSA-6m2c-76ff-6vrf","title":"Maintainer's advisory: api.github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: api.github.com"},{"id":68531,"url":"https://github.com/Qiskit/qiskit/security/advisories/GHSA-6m2c-76ff-6vrf","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}