plexavo 0.2.3__tar.gz → 0.2.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- plexavo-0.2.5/PKG-INFO +180 -0
- plexavo-0.2.5/README.md +151 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/__init__.py +1 -1
- plexavo-0.2.5/plexavo.egg-info/PKG-INFO +180 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/pyproject.toml +1 -1
- plexavo-0.2.3/PKG-INFO +0 -324
- plexavo-0.2.3/README.md +0 -295
- plexavo-0.2.3/plexavo.egg-info/PKG-INFO +0 -324
- {plexavo-0.2.3 → plexavo-0.2.5}/LICENSE +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/__main__.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/auth.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/aws_profile_setup.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/__init__.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/encryption.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/iam.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/iam_hygiene.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/logging.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/network.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/storage.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/checks/usage.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/cli.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/findings.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/interactive.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/principals.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/__init__.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/ai_narration.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/html_report.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/pdf.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/report/templates/report.html.j2 +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo/scoring.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo.egg-info/SOURCES.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo.egg-info/dependency_links.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo.egg-info/entry_points.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo.egg-info/requires.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/plexavo.egg-info/top_level.txt +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/setup.cfg +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_ai_narration_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_auth_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_cli_entrypoint.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_encryption_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_iam_hygiene_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_iam_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_logging_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_network_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_report_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_scoring.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_storage_offline.py +0 -0
- {plexavo-0.2.3 → plexavo-0.2.5}/tests/test_usage_offline.py +0 -0
plexavo-0.2.5/PKG-INFO
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: plexavo
|
|
3
|
+
Version: 0.2.5
|
|
4
|
+
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
|
+
Author: Kavee
|
|
6
|
+
License: AGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/plexavo/Plexavo
|
|
8
|
+
Project-URL: Issues, https://github.com/plexavo/Plexavo/issues
|
|
9
|
+
Project-URL: Security, https://github.com/plexavo/Plexavo/blob/main/SECURITY.md
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: boto3>=1.34
|
|
18
|
+
Requires-Dist: python-dateutil>=2.9
|
|
19
|
+
Requires-Dist: rich>=13.7
|
|
20
|
+
Requires-Dist: jinja2>=3.1
|
|
21
|
+
Requires-Dist: markupsafe>=2.1
|
|
22
|
+
Requires-Dist: fpdf2>=2.8
|
|
23
|
+
Provides-Extra: ai
|
|
24
|
+
Requires-Dist: anthropic>=0.116; extra == "ai"
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
27
|
+
Requires-Dist: pypdf>=4.0; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
<div align="center">
|
|
31
|
+
<picture>
|
|
32
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/plexavo-logo-dark.png">
|
|
33
|
+
<img src="assets/plexavo-logo-light.png" alt="Plexavo" height="115">
|
|
34
|
+
</picture>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
# Plexavo
|
|
38
|
+
|
|
39
|
+
<div align="center">
|
|
40
|
+
<img src="assets/demo.gif" alt="Plexavo interactive scan demo" width="800">
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
Plexavo is an open-source cloud security tool that audits AWS accounts
|
|
44
|
+
for real-world misconfigurations. It runs entirely with your own local
|
|
45
|
+
AWS credentials, the same way you'd run `aws s3 ls`, so nothing about
|
|
46
|
+
your account is ever handed to anyone else. Each scan produces a 0-100
|
|
47
|
+
security score and a plain-English report: what's wrong, what an
|
|
48
|
+
attacker would actually do with it, and the exact command to fix it.
|
|
49
|
+
|
|
50
|
+
Detection is pure Python/boto3, never AI. Claude only rewrites
|
|
51
|
+
already-found technical findings into something a non-security founder
|
|
52
|
+
can read, and it's entirely optional. See [Cost](#cost).
|
|
53
|
+
|
|
54
|
+
## What it checks
|
|
55
|
+
|
|
56
|
+
31 checks across 6 categories, run against real AWS accounts:
|
|
57
|
+
|
|
58
|
+
- **IAM**: privilege escalation paths, wildcard admin, cross-account
|
|
59
|
+
trust, root usage, dormant credentials
|
|
60
|
+
- **Network**: security groups and RDS instances exposed to the
|
|
61
|
+
internet
|
|
62
|
+
- **Storage**: public S3 buckets, via ACLs, bucket policies, or missing
|
|
63
|
+
Block Public Access
|
|
64
|
+
- **Encryption**: unencrypted EBS volumes, RDS instances, S3 buckets
|
|
65
|
+
- **Logging**: CloudTrail coverage and encryption, GuardDuty status
|
|
66
|
+
- **Usage**: permissions granted but never used, roles nobody has
|
|
67
|
+
assumed in 90+ days
|
|
68
|
+
|
|
69
|
+
See the `docs/*-TEST-MATRIX.md` files for exactly how each check was
|
|
70
|
+
verified.
|
|
71
|
+
|
|
72
|
+
## Installation
|
|
73
|
+
|
|
74
|
+
Every path below installs Plexavo into its own isolated environment.
|
|
75
|
+
|
|
76
|
+
### macOS & Linux
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
80
|
+
uv tool install plexavo
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Prefer [pipx](https://pipx.pypa.io/)? `pipx install plexavo` works the
|
|
84
|
+
same way.
|
|
85
|
+
|
|
86
|
+
### Windows
|
|
87
|
+
|
|
88
|
+
`uv`/`pipx` still work, but the launcher they put on your PATH is
|
|
89
|
+
unsigned, and Windows Smart App Control blocks it. Run Plexavo through
|
|
90
|
+
Python instead, two options:
|
|
91
|
+
|
|
92
|
+
**Option 1, uv (recommended)**
|
|
93
|
+
|
|
94
|
+
```powershell
|
|
95
|
+
uv tool install plexavo
|
|
96
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
97
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
98
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Open a new terminal. `plexavo` now works exactly like it does on
|
|
102
|
+
macOS/Linux, routed through uv's signed Python instead of the blocked
|
|
103
|
+
launcher.
|
|
104
|
+
|
|
105
|
+
**Option 2, plain venv**
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
py -m venv plexavo-venv
|
|
109
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
110
|
+
python -m pip install plexavo
|
|
111
|
+
python -m plexavo
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
115
|
+
`plexavo.exe` are unsigned as well, only `python.exe` is signed.
|
|
116
|
+
|
|
117
|
+
### AI narration (optional)
|
|
118
|
+
|
|
119
|
+
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
120
|
+
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
121
|
+
|
|
122
|
+
## Using Plexavo
|
|
123
|
+
|
|
124
|
+
Run it with no arguments and it walks you through everything: picking an
|
|
125
|
+
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
126
|
+
with every finding.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
plexavo # macOS/Linux, and Windows Option 1
|
|
130
|
+
python -m plexavo # Windows Option 2
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
<div align="center">
|
|
134
|
+
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
## The report
|
|
138
|
+
|
|
139
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
140
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
141
|
+
narration is offered automatically only when an `ANTHROPIC_API_KEY` is
|
|
142
|
+
detected, see [Cost](#cost).
|
|
143
|
+
|
|
144
|
+
<div align="center">
|
|
145
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
Severity, confidence, and evidence are always shown as separate signals.
|
|
149
|
+
A low-confidence Critical never reads the same as a high-confidence
|
|
150
|
+
Medium.
|
|
151
|
+
|
|
152
|
+
## Cost
|
|
153
|
+
|
|
154
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
155
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
156
|
+
Anthropic account. Plexavo never sees your key and never calls the API
|
|
157
|
+
without it. A full scan with `--explain` typically costs a few cents.
|
|
158
|
+
|
|
159
|
+
## Contributing
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
163
|
+
cd plexavo
|
|
164
|
+
uv pip install -e .
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
|
|
168
|
+
new check.
|
|
169
|
+
|
|
170
|
+
## Security
|
|
171
|
+
|
|
172
|
+
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
173
|
+
own AWS account (that's the tool working correctly)? See
|
|
174
|
+
[`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
AGPL-3.0, see [`LICENSE`](LICENSE). Use, run, and modify it freely. If
|
|
179
|
+
you run a modified version as a hosted service, you're required to
|
|
180
|
+
publish those modifications too.
|
plexavo-0.2.5/README.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/plexavo-logo-dark.png">
|
|
4
|
+
<img src="assets/plexavo-logo-light.png" alt="Plexavo" height="115">
|
|
5
|
+
</picture>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
# Plexavo
|
|
9
|
+
|
|
10
|
+
<div align="center">
|
|
11
|
+
<img src="assets/demo.gif" alt="Plexavo interactive scan demo" width="800">
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
Plexavo is an open-source cloud security tool that audits AWS accounts
|
|
15
|
+
for real-world misconfigurations. It runs entirely with your own local
|
|
16
|
+
AWS credentials, the same way you'd run `aws s3 ls`, so nothing about
|
|
17
|
+
your account is ever handed to anyone else. Each scan produces a 0-100
|
|
18
|
+
security score and a plain-English report: what's wrong, what an
|
|
19
|
+
attacker would actually do with it, and the exact command to fix it.
|
|
20
|
+
|
|
21
|
+
Detection is pure Python/boto3, never AI. Claude only rewrites
|
|
22
|
+
already-found technical findings into something a non-security founder
|
|
23
|
+
can read, and it's entirely optional. See [Cost](#cost).
|
|
24
|
+
|
|
25
|
+
## What it checks
|
|
26
|
+
|
|
27
|
+
31 checks across 6 categories, run against real AWS accounts:
|
|
28
|
+
|
|
29
|
+
- **IAM**: privilege escalation paths, wildcard admin, cross-account
|
|
30
|
+
trust, root usage, dormant credentials
|
|
31
|
+
- **Network**: security groups and RDS instances exposed to the
|
|
32
|
+
internet
|
|
33
|
+
- **Storage**: public S3 buckets, via ACLs, bucket policies, or missing
|
|
34
|
+
Block Public Access
|
|
35
|
+
- **Encryption**: unencrypted EBS volumes, RDS instances, S3 buckets
|
|
36
|
+
- **Logging**: CloudTrail coverage and encryption, GuardDuty status
|
|
37
|
+
- **Usage**: permissions granted but never used, roles nobody has
|
|
38
|
+
assumed in 90+ days
|
|
39
|
+
|
|
40
|
+
See the `docs/*-TEST-MATRIX.md` files for exactly how each check was
|
|
41
|
+
verified.
|
|
42
|
+
|
|
43
|
+
## Installation
|
|
44
|
+
|
|
45
|
+
Every path below installs Plexavo into its own isolated environment.
|
|
46
|
+
|
|
47
|
+
### macOS & Linux
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
51
|
+
uv tool install plexavo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Prefer [pipx](https://pipx.pypa.io/)? `pipx install plexavo` works the
|
|
55
|
+
same way.
|
|
56
|
+
|
|
57
|
+
### Windows
|
|
58
|
+
|
|
59
|
+
`uv`/`pipx` still work, but the launcher they put on your PATH is
|
|
60
|
+
unsigned, and Windows Smart App Control blocks it. Run Plexavo through
|
|
61
|
+
Python instead, two options:
|
|
62
|
+
|
|
63
|
+
**Option 1, uv (recommended)**
|
|
64
|
+
|
|
65
|
+
```powershell
|
|
66
|
+
uv tool install plexavo
|
|
67
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
68
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
69
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Open a new terminal. `plexavo` now works exactly like it does on
|
|
73
|
+
macOS/Linux, routed through uv's signed Python instead of the blocked
|
|
74
|
+
launcher.
|
|
75
|
+
|
|
76
|
+
**Option 2, plain venv**
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
py -m venv plexavo-venv
|
|
80
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
81
|
+
python -m pip install plexavo
|
|
82
|
+
python -m plexavo
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
86
|
+
`plexavo.exe` are unsigned as well, only `python.exe` is signed.
|
|
87
|
+
|
|
88
|
+
### AI narration (optional)
|
|
89
|
+
|
|
90
|
+
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
91
|
+
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
92
|
+
|
|
93
|
+
## Using Plexavo
|
|
94
|
+
|
|
95
|
+
Run it with no arguments and it walks you through everything: picking an
|
|
96
|
+
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
97
|
+
with every finding.
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
plexavo # macOS/Linux, and Windows Option 1
|
|
101
|
+
python -m plexavo # Windows Option 2
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
<div align="center">
|
|
105
|
+
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
## The report
|
|
109
|
+
|
|
110
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
111
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
112
|
+
narration is offered automatically only when an `ANTHROPIC_API_KEY` is
|
|
113
|
+
detected, see [Cost](#cost).
|
|
114
|
+
|
|
115
|
+
<div align="center">
|
|
116
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
Severity, confidence, and evidence are always shown as separate signals.
|
|
120
|
+
A low-confidence Critical never reads the same as a high-confidence
|
|
121
|
+
Medium.
|
|
122
|
+
|
|
123
|
+
## Cost
|
|
124
|
+
|
|
125
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
126
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
127
|
+
Anthropic account. Plexavo never sees your key and never calls the API
|
|
128
|
+
without it. A full scan with `--explain` typically costs a few cents.
|
|
129
|
+
|
|
130
|
+
## Contributing
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
134
|
+
cd plexavo
|
|
135
|
+
uv pip install -e .
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
|
|
139
|
+
new check.
|
|
140
|
+
|
|
141
|
+
## Security
|
|
142
|
+
|
|
143
|
+
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
144
|
+
own AWS account (that's the tool working correctly)? See
|
|
145
|
+
[`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
146
|
+
|
|
147
|
+
## License
|
|
148
|
+
|
|
149
|
+
AGPL-3.0, see [`LICENSE`](LICENSE). Use, run, and modify it freely. If
|
|
150
|
+
you run a modified version as a hosted service, you're required to
|
|
151
|
+
publish those modifications too.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: plexavo
|
|
3
|
+
Version: 0.2.5
|
|
4
|
+
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
|
+
Author: Kavee
|
|
6
|
+
License: AGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/plexavo/Plexavo
|
|
8
|
+
Project-URL: Issues, https://github.com/plexavo/Plexavo/issues
|
|
9
|
+
Project-URL: Security, https://github.com/plexavo/Plexavo/blob/main/SECURITY.md
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: boto3>=1.34
|
|
18
|
+
Requires-Dist: python-dateutil>=2.9
|
|
19
|
+
Requires-Dist: rich>=13.7
|
|
20
|
+
Requires-Dist: jinja2>=3.1
|
|
21
|
+
Requires-Dist: markupsafe>=2.1
|
|
22
|
+
Requires-Dist: fpdf2>=2.8
|
|
23
|
+
Provides-Extra: ai
|
|
24
|
+
Requires-Dist: anthropic>=0.116; extra == "ai"
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
27
|
+
Requires-Dist: pypdf>=4.0; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
<div align="center">
|
|
31
|
+
<picture>
|
|
32
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/plexavo-logo-dark.png">
|
|
33
|
+
<img src="assets/plexavo-logo-light.png" alt="Plexavo" height="115">
|
|
34
|
+
</picture>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
# Plexavo
|
|
38
|
+
|
|
39
|
+
<div align="center">
|
|
40
|
+
<img src="assets/demo.gif" alt="Plexavo interactive scan demo" width="800">
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
Plexavo is an open-source cloud security tool that audits AWS accounts
|
|
44
|
+
for real-world misconfigurations. It runs entirely with your own local
|
|
45
|
+
AWS credentials, the same way you'd run `aws s3 ls`, so nothing about
|
|
46
|
+
your account is ever handed to anyone else. Each scan produces a 0-100
|
|
47
|
+
security score and a plain-English report: what's wrong, what an
|
|
48
|
+
attacker would actually do with it, and the exact command to fix it.
|
|
49
|
+
|
|
50
|
+
Detection is pure Python/boto3, never AI. Claude only rewrites
|
|
51
|
+
already-found technical findings into something a non-security founder
|
|
52
|
+
can read, and it's entirely optional. See [Cost](#cost).
|
|
53
|
+
|
|
54
|
+
## What it checks
|
|
55
|
+
|
|
56
|
+
31 checks across 6 categories, run against real AWS accounts:
|
|
57
|
+
|
|
58
|
+
- **IAM**: privilege escalation paths, wildcard admin, cross-account
|
|
59
|
+
trust, root usage, dormant credentials
|
|
60
|
+
- **Network**: security groups and RDS instances exposed to the
|
|
61
|
+
internet
|
|
62
|
+
- **Storage**: public S3 buckets, via ACLs, bucket policies, or missing
|
|
63
|
+
Block Public Access
|
|
64
|
+
- **Encryption**: unencrypted EBS volumes, RDS instances, S3 buckets
|
|
65
|
+
- **Logging**: CloudTrail coverage and encryption, GuardDuty status
|
|
66
|
+
- **Usage**: permissions granted but never used, roles nobody has
|
|
67
|
+
assumed in 90+ days
|
|
68
|
+
|
|
69
|
+
See the `docs/*-TEST-MATRIX.md` files for exactly how each check was
|
|
70
|
+
verified.
|
|
71
|
+
|
|
72
|
+
## Installation
|
|
73
|
+
|
|
74
|
+
Every path below installs Plexavo into its own isolated environment.
|
|
75
|
+
|
|
76
|
+
### macOS & Linux
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
80
|
+
uv tool install plexavo
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Prefer [pipx](https://pipx.pypa.io/)? `pipx install plexavo` works the
|
|
84
|
+
same way.
|
|
85
|
+
|
|
86
|
+
### Windows
|
|
87
|
+
|
|
88
|
+
`uv`/`pipx` still work, but the launcher they put on your PATH is
|
|
89
|
+
unsigned, and Windows Smart App Control blocks it. Run Plexavo through
|
|
90
|
+
Python instead, two options:
|
|
91
|
+
|
|
92
|
+
**Option 1, uv (recommended)**
|
|
93
|
+
|
|
94
|
+
```powershell
|
|
95
|
+
uv tool install plexavo
|
|
96
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
97
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
98
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Open a new terminal. `plexavo` now works exactly like it does on
|
|
102
|
+
macOS/Linux, routed through uv's signed Python instead of the blocked
|
|
103
|
+
launcher.
|
|
104
|
+
|
|
105
|
+
**Option 2, plain venv**
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
py -m venv plexavo-venv
|
|
109
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
110
|
+
python -m pip install plexavo
|
|
111
|
+
python -m plexavo
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
115
|
+
`plexavo.exe` are unsigned as well, only `python.exe` is signed.
|
|
116
|
+
|
|
117
|
+
### AI narration (optional)
|
|
118
|
+
|
|
119
|
+
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
120
|
+
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
121
|
+
|
|
122
|
+
## Using Plexavo
|
|
123
|
+
|
|
124
|
+
Run it with no arguments and it walks you through everything: picking an
|
|
125
|
+
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
126
|
+
with every finding.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
plexavo # macOS/Linux, and Windows Option 1
|
|
130
|
+
python -m plexavo # Windows Option 2
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
<div align="center">
|
|
134
|
+
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
## The report
|
|
138
|
+
|
|
139
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
140
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
141
|
+
narration is offered automatically only when an `ANTHROPIC_API_KEY` is
|
|
142
|
+
detected, see [Cost](#cost).
|
|
143
|
+
|
|
144
|
+
<div align="center">
|
|
145
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
Severity, confidence, and evidence are always shown as separate signals.
|
|
149
|
+
A low-confidence Critical never reads the same as a high-confidence
|
|
150
|
+
Medium.
|
|
151
|
+
|
|
152
|
+
## Cost
|
|
153
|
+
|
|
154
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
155
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
156
|
+
Anthropic account. Plexavo never sees your key and never calls the API
|
|
157
|
+
without it. A full scan with `--explain` typically costs a few cents.
|
|
158
|
+
|
|
159
|
+
## Contributing
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
163
|
+
cd plexavo
|
|
164
|
+
uv pip install -e .
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
|
|
168
|
+
new check.
|
|
169
|
+
|
|
170
|
+
## Security
|
|
171
|
+
|
|
172
|
+
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
173
|
+
own AWS account (that's the tool working correctly)? See
|
|
174
|
+
[`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
AGPL-3.0, see [`LICENSE`](LICENSE). Use, run, and modify it freely. If
|
|
179
|
+
you run a modified version as a hosted service, you're required to
|
|
180
|
+
publish those modifications too.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plexavo"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.5"
|
|
8
8
|
description = "Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "AGPL-3.0-or-later" }
|