Attacker obtains code execution in sd-viewer VM partially mitigated
THREATQW1
· Partially mitigated: Some controls are in place, but the risk is still too high.
· Defined in catalog.py:2977
- Risk
- High impact × Medium likelihood = 9 high
- After mitigations
- Low impact × Low likelihood = 2 low
An attacker submits malware to a SecureDrop instance exploiting an unpatched vulnerability in the software running on the sd-viewer VM
Mitigations
| Mitigation | Status |
|---|---|
| Use non-networked disposible VMs for opening all decrypted files. MITIGQW18 | implemented |
| sd-proxy has server hardcoded MITIGQW36 | proposed |
Possible further mitigations
- grsecurity in all Debian templates MITIGQW3 implemented
- Limiting size of journalist replies. MITIGQW37 proposed
- Logging exfiltration attempts. MITIGQW38 proposed
- Throttling. MITIGQW39 proposed
Residual risk
Full attack surface of a Linux host. Attacker can exfiltrate documents via replies to sources.
Related threats
This threat is part of: Vulnerability introduced in provisioning code THREATQW15
Smaller threats that make up this one:
- Privilege escalation (Xen vulnerability) THREATQW11 accepted
- Vulnerability in the QubesOS management layer THREATQW27 transferred
Where it applies
Applies to 1 component in 2 scenarios.
Workstation: reading submissions · sd-viewer (disposable VMs)
Workstation: export and print · sd-viewer (disposable VMs)
Notes
Existing mitigations: Display VM is a disposable VM and is recreated for each submission (MITIGQW18), Qubes uses Xen-based PVH virtualization for VMs. Display VM does not have network access. Exfiltration of documents can only occur via sd-proxy (MITIGQW36). Further mitigations: Use a hardened template VM for the DisplayVM: grsecurity (MITIGQW3) and apparmor would help protect against unknown vulnerabilities or if the template was improperly patched. Limiting size of journalist replies (MITIGQW37). Logging exfiltration attempts (MITIGQW38). Throttling (MITIGQW39).
How this threat is matched
Listed for these components. A boundary covers every component inside it.