pathbreak-audit
See the abusable IAM permissions your principals hold, so you can tighten them before an attacker does.
pathbreak-audit is a free, read-only command line tool for defenders. Point it at an AWS account and it tells you which IAM roles and users hold dangerous permissions and toxic combinations, with the least-privilege fix for each. It is a point-in-time, single-account check that reads IAM and nothing else. Your credentials and your findings never leave your machine.
It is built and maintained by the team behind Pathbreak, and the checks come from the same catalogue as the AWS Privilege Escalation Map.
What it finds
- Direct abusable permissions. A single action that lets a principal escalate, persist, or evade logging, for example
iam:CreateAccessKeyon another user, oriam:AttachUserPolicy. - Toxic combinations. Permissions that are only dangerous together, which a one-policy-at-a-time review tends to miss, for example
iam:PassRoleplusec2:RunInstances. - The fix. Every finding comes with the least-privilege change that removes it, and a link to the full write-up on the attack map.
Findings are labelled direct or toxic combination, ordered worst first, with the ATT&CK tactic and a link to the full write-up.
Install
pip install pathbreak-audit
Or from source:
git clone https://github.com/pathbreak-io/pathbreak-audit
cd pathbreak-audit
pip install .
Try it with no AWS account
pathbreak-audit --demo
This runs against a bundled example account so you can see the output immediately:
Run it against your account
Use any AWS credentials with read access to IAM. The AWS managed policies SecurityAudit or ViewOnlyAccess both cover it:
pathbreak-audit --profile my-profile
Useful options:
pathbreak-audit --profile my-profile --format json --out findings.json
pathbreak-audit --profile my-profile --principal admin # filter by name
pathbreak-audit --profile my-profile --include-admins # also show full-admin principals
pathbreak-audit --profile my-profile --include-default-roles # also show AWS default roles
pathbreak-audit --profile my-profile --include-access # also show broad read-all / invoke-any / assume-any
pathbreak-audit --profile my-profile --exit-code # non-zero exit if anything is found (CI)
pathbreak-audit --profile my-profile --no-color # plain output
Colour turns itself off when the output is piped or written to a file, so saved reports stay clean.
What is left out by default (to keep the signal clean)
- Full-admin principals. Anyone already allowed
*trips every check and is admin by design.--include-adminsshows them. - AWS default roles. Service-linked, SSO reserved, Control Tower, Organizations, StackSets.
--include-default-rolesshows them. - Broad access actions. Reading secrets and data,
lambda:InvokeFunction,sts:AssumeRole, SSM sessions. These only matter if the resource they reach is privileged, which this tool cannot know, so they are hidden by default to keep the signal clean.--include-accessshows them where the principal can do them to everything (read all secrets, invoke any function, assume any role); reading or invoking one scoped resource is left out as intended. Which of these reach something sensitive is Pathbreak's job. Escalation, persistence, logging tampering and destruction are always shown.
How it works, and what it does not do
pathbreak-audit reads the policies attached to each role and user (managed, inline, and for users the policies they inherit from groups), works out the actions each principal is allowed, and matches that against the catalogue of dangerous permissions and combinations.
This is a static grant analysis, the same shape as tools like Cloudsplaining and PMapper. Be clear on the limits:
- It reads what policies allow. It does not fully resolve conditions, permission boundaries, or Service Control Policies. For escalation checks it does not resolve resource scope, so a narrowly scoped grant can still show up. Broad access actions (reads, invoke, assume) are hidden unless you pass
--include-access, and even then are shown only when granted on Resource*. It honours an explicitDenyon an action, and treats anAllowonNotActionas broad. - It is point in time and single account. It does not watch for drift and it does not traverse cross-account trust.
- It tells you a permission could be abused. It does not prove that the permission actually chains into a path that reaches something sensitive.
Treat the output as a prioritized starting point for tightening IAM, not a finished risk picture.
pathbreak-audit and Pathbreak
pathbreak-audit shows the permissions that could be abused, principal by principal.
Pathbreak shows which of those actually chain into a validated path that reaches your sensitive data, ranks them by blast radius across every account, and hands back the single change that breaks the most paths, continuously. If this tool is useful, that is the next step.
Permissions needed
Read-only IAM and STS. Either of these AWS managed policies is enough:
SecurityAuditViewOnlyAccess
Privacy
Everything runs locally. The tool makes only read calls to the IAM and STS APIs, writes nothing to your account, and sends nothing anywhere. There is no telemetry.
For maintainers
pathbreak_audit/data/checks.json is generated from the Pathbreak catalogue. To rebuild it:
python3 scripts/build_checks.py path/to/attack_primitives.yaml
Only public fields ship. Engine internals are not included. Run the tests with:
python3 -m pytest # or: PYTHONPATH=. python3 tests/test_evaluate.py
License
MIT. See LICENSE.
Metadata
Release files for pathbreak-audit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pathbreak_audit-0.1.0.tar.gz | 47.1 kB | Without provenance | Details for pathbreak_audit-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pathbreak_audit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for pathbreak_audit-0.1.0-py3-none-any.whl |
Total release size: 92.9 kB
Release files / pathbreak_audit-0.1.0.tar.gz
| Download URL | pathbreak_audit-0.1.0.tar.gz |
|---|---|
| Size | 47.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0dac3e63644be92c175e610a6e52b523a4f65ee4c4cb6401fcbf42b205eaf1d5
|
|
BLAKE2b-256 checksum How to use checksums |
8cf289f35b7fe1e90cece8589bc5c1e3f3bbd00085d7682854d25255c9b827e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / pathbreak_audit-0.1.0-py3-none-any.whl
| Download URL | pathbreak_audit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 45.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b2d235b2d666db94c0295e5e4b72e297e2da53302e676a5d782ae56e0bea0993
|
|
BLAKE2b-256 checksum How to use checksums |
6b4afc3aa83d0e2fb1c70db3bcf2c5667860a2a2007ccd2f8358d72363985b89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Security for pathbreak-audit 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.