Find Linux privilege escalation paths by modeling permissions as a graph.
Project description
privmap
Find Linux privilege escalation paths by modeling permissions as a graph.
privmap reads the live configuration of a Linux system: users, groups, sudo rules, file permissions, cron jobs, systemd units, capabilities, and running processes. It assembles them into a directed property graph, then traces concrete escalation paths from each non-privileged user to root and other high-value sinks.
[CRITICAL] 2 escalation paths found for user: www-data
Path 1: www-data -> root (4 hops)
www-data
MEMBER_OF group: adm
CAN_WRITE file: /etc/logrotate.d/nginx (mode: 0664)
EXECUTES cron: /etc/cron.daily (runs-as: root)
-> root
Risk: Writable logrotate config executed by root daily cron
Remediation: chmod 644 /etc/logrotate.d/nginx; chown root:root /etc/logrotate.d/nginx
Where flat-list scanners like LinPEAS report "this file is world-writable" and "this cron job runs as root" as separate observations, privmap connects them into the single chain that actually represents the escalation.
Install
pip install privmap
Requires Python 3.8 or later. From source: git clone … && pip install -e ..
Run
sudo privmap # full scan, every user
sudo privmap --user www-data --user bob # specific users
sudo privmap --min-severity high # filter by severity
sudo privmap --output json > report.json # SIEM ingestion
sudo privmap --exit-code --min-severity critical # CI/CD gate
For offline / forensic analysis, run the collector on the target and analyze the snapshot on your workstation:
sudo ./collect.sh # on target
privmap --snapshot ./privmap_snapshot_target_20260507.tar.gz # on analyst host
The collector is POSIX-compliant and has no runtime dependencies on the target host.
Documentation
Full documentation lives at https://privmap.readthedocs.io/. Start with the quickstart, or jump straight to the graph model, CLI reference, scoring rules, CI/CD integration, or known limitations.
Scope
privmap is a structural analysis tool for local Linux privilege relationships. It does not perform network enumeration, run exploits, cover Windows or macOS, or match binary versions against a CVE database. Pair it with a vulnerability scanner for full coverage.
Use cases
- System hardening. Validate least-privilege configurations and catch unintended escalation paths after changes.
- Penetration testing. Replace manual enumeration with deterministic path mapping.
- Incident response. Reconstruct how an attacker may have escalated privileges on a compromised host.
- Education and CTF. Visualise permission chains that are hard to reason about manually.
Contributing
Issues and pull requests are welcome. See CONTRIBUTING for development setup. For security vulnerabilities, see SECURITY.md.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file privmap-1.0.8.tar.gz.
File metadata
- Download URL: privmap-1.0.8.tar.gz
- Upload date:
- Size: 45.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f075abd06a6b6783b711a0cfb6b5eb3010416993c1b8801d56cac22413ec6ca0
|
|
| MD5 |
84f0b4f935836770e3c6c05e5a1a6e8a
|
|
| BLAKE2b-256 |
d4b7b8b363cda79263776c4fe43dd11ab609ff97f2adb6ab90f351bdde170aab
|
File details
Details for the file privmap-1.0.8-py3-none-any.whl.
File metadata
- Download URL: privmap-1.0.8-py3-none-any.whl
- Upload date:
- Size: 41.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fea24c1193d2572d61799a312ad9311686c6c030e3d783da8be5913f48f54d65
|
|
| MD5 |
1266c965e5a7ded4d416a1d99d7c412b
|
|
| BLAKE2b-256 |
4307225e5ee7b0b2e78146d425907f795848227b37c426a11b20b4f947d7442d
|