Human
Machine
REPRO-2026-00100 HIGH RCE
Verified
systeminformation: Command Injection via locate Output
systeminformation (npm) Feb 19, 2026
What's the vulnerability?
Inside the versions() function, when detecting the PostgreSQL version on Linux, the code does this:
// lib/osinfo.js — lines 770-776
exec('locate bin/postgres', (error, stdout) => {
if (!error) {
const postgresqlBin = stdout.toString().split('\n').sort();
if (postgresqlBin.length) {
exec(postgresqlBin[postgresqlBin.length - 1] + ' -V', (error, stdout) => {
// parses version string...
});
}
}
});
Here's what happens step by step:
- It runs
locate bin/postgresto search the filesystem for PostgreSQL binaries - It splits the output by newline and sorts the results alphabetically
- It takes the last element (highest alphabetically)
- It concatenates that path directly into a new
exec()call with+ ' -V'
No sanitizeShellString(). No path validation. No execFile(). Raw string concatenation into exec().
The locate command reads from a system-wide database (plocate.db or mlocate.db) that indexes all filenames on the system. If any indexed filename contains shell metacharacters — specifically semicolons — those characters will be interpreted by the shell when passed to exec().
Root Cause Analysis
One Command
Verify with pruva-verify
Run the Pruva CLI to automatically fetch and execute the reproduction script.
pruva-verify REPRO-2026-00100 or
pruva-verify GHSA-5vv4-hvf7-2h46 or
pruva-verify CVE-2026-26318 Install:
curl -fsSL https://pruva.dev/install.sh | sh Or Run Manually
1
Download the script
curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00100/artifacts/repro/reproduction_steps.sh 2
Make executable
chmod +x reproduction_steps.sh 3
Run the script
./reproduction_steps.sh Run in a VM, container, or disposable environment. This exploits a real vulnerability.
How Pruva Reproduced This
Watch the AI agent's step-by-step process.
Loading session...
Artifacts
repro/rca_report.md8.9 KBrepro/reproduction_steps.sh10.8 KBbundle/ticket.md8.9 KBbundle/source.json11.2 KBbundle/ticket.json20.8 KBlogs/direct_test_output.log0.5 KBlogs/test_injection.js1.8 KBlogs/test_vuln_behavior.js1.7 KBlogs/variant_vuln_clone.log0.7 KBlogs/test3_regex_patterns.log1.0 KBlogs/updatedb.log0.0 KBlogs/test_fixed_behavior.js2.1 KBlogs/clone.log0.7 KBlogs/locate_output.log0.1 KBlogs/direct_test.js2.8 KBlogs/test1_vuln_behavior.log0.5 KBlogs/test_output.log1.0 KBlogs/variant_fixed_clone.log0.7 KBlogs/test_regex_patterns.js1.9 KBlogs/test2_fixed_behavior.log0.5 KB