GHSA-7648-jmwf-vw7j - systeminformation has prototype pollution in `networkStats()` via the interface name
## Summary
`networkStats()` keeps a per interface cache for computing `rx_sec` / `tx_sec` between calls.
The cache is a plain JavaScript object and is indexed with the interface name the caller
supplied. Passing the name `__proto__` makes every cache write land on `Object.prototype`
instead of the cache, polluting every object in the Node.js process.
An application is affected if it passes untrusted input as the `ifaces` argument of
`si.networkStats()` and runs on FreeBSD, OpenBSD or NetBSD.
## Details
### The vulnerable code
`lib/network.js` declares the cache as a plain object:
```js
const _network = {};
```
`calcNetworkSpeed()` writes into it, keyed by the interface name:
```js
} else {
if (!_network[iface]) {
_network[iface] = {};
}
_network[iface].rx_bytes = rx_bytes;
_network[iface].tx_bytes = tx_bytes;
_network[iface].rx_sec = null;
_network[iface].tx_sec = null;
_network[iface].ms = Date.now();
_network[iface].last_ms = 0;
_network[iface].operstate = operstate;
}
```
With `iface === '__proto__'` this misbehaves twice:
1. `_network['__proto__']` does not read a missing own property โ it invokes the inherited
`__proto__` getter and returns `Object.prototype`, which is truthy. The
`if (!_network[iface])` guard therefore never creates the `{}` placeholder.
2. Each following assignment writes onto `Object.prototype`.
After one call, `rx_bytes`, `tx_bytes`, `rx_sec`, `tx_sec`, `ms`, `last_ms` and `operstate`
are visible on **every** object in the process. A second call takes the other branch
(`_network['__proto__'].ms` is now truthy) and keeps them updated.
### Why the existing sanitizing does not help
The interface name does pass through `util.sanitizeString(iface, true)` before it is used as
the cache key. That function is a **shell metacharacter** filter, built to stop command
injection in the `netstat` / `ifconfig` invocations โ a different threat. Property names made
of letters and underscores are legi
MEDIUM
Severity & confidence
Source severitymedium
Platform severitymedium
Confidenceconfirmed
Exploitationunknown
CVSS6.5
Affected
VendorssysteminformationRed Hat
Productssysteminformation
Reporting sources (3)
GitHub Security Advisories
Red Hat - CVE Feed
NIST NVD - National Vulnerability Database
Timeline & provenance
Published2026-10-28T21:13:32
Last updated2026-10-30T22:59:15
Ingested2026-10-28T21:27:23
FreshnessNEAR-REAL-TIME
Threat typeadvisory
Recommended action
Review the advisory and upgrade affected packages to the first patched version.
Next steps
- Identify affected systems in your environment.
- Apply the vendor patch or mitigation guidance.
- Review logs for indicators described in the advisory.
- Follow the affected vendor/product to track updates.
Confidence explanation
This object is reported by 3 independent sources.
Source type: vendor ยท Original: GitHub Security Advisories