plexavo 0.4.2__tar.gz → 0.4.4__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.4.2 → plexavo-0.4.4}/PKG-INFO +107 -46
- {plexavo-0.4.2 → plexavo-0.4.4}/README.md +106 -45
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/__init__.py +1 -1
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/PKG-INFO +107 -46
- {plexavo-0.4.2 → plexavo-0.4.4}/pyproject.toml +1 -1
- {plexavo-0.4.2 → plexavo-0.4.4}/LICENSE +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/__main__.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/attack_paths.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/auth.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/aws_profile_setup.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/__init__.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/encryption.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/iam.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/iam_hygiene.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/logging.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/network.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/storage.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/usage.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/cli.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/findings.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/interactive.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/principals.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/__init__.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/ai_narration.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/html_report.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/json_report.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/pdf.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/templates/report.html.j2 +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/scoring.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/SOURCES.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/dependency_links.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/entry_points.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/requires.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/top_level.txt +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/setup.cfg +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_ai_narration_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_attack_paths_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_auth_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_cli_entrypoint.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_encryption_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_fail_on_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_iam_hygiene_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_iam_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_json_report_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_logging_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_network_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_report_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_scoring.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_storage_offline.py +0 -0
- {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_usage_offline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexavo
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
5
|
Author: Kavee
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -45,7 +45,7 @@ Dynamic: license-file
|
|
|
45
45
|
<img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
|
|
46
46
|
</a>
|
|
47
47
|
<a href="https://github.com/plexavo/plexavo/actions">
|
|
48
|
-
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/
|
|
48
|
+
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
|
|
49
49
|
</a>
|
|
50
50
|
</p>
|
|
51
51
|
|
|
@@ -68,7 +68,7 @@ for real-world misconfigurations, using your own local AWS credentials
|
|
|
68
68
|
the same way `aws s3 ls` does, so nothing about your account ever
|
|
69
69
|
leaves your machine.
|
|
70
70
|
|
|
71
|
-
Each scan produces a **0
|
|
71
|
+
Each scan produces a **0-100 security score** and a plain-English report:
|
|
72
72
|
what's wrong, what an attacker would actually do with it, and the exact
|
|
73
73
|
command to fix it.
|
|
74
74
|
|
|
@@ -83,7 +83,7 @@ command to fix it.
|
|
|
83
83
|
> conversational security briefing. See
|
|
84
84
|
> [Using it from Claude Code](#using-it-from-claude-code).
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## What it checks
|
|
87
87
|
|
|
88
88
|
**32 checks across 6 categories**, run against real AWS accounts:
|
|
89
89
|
|
|
@@ -101,7 +101,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
|
|
|
101
101
|
> [!TIP]
|
|
102
102
|
> **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
|
|
103
103
|
|
|
104
|
-
##
|
|
104
|
+
## How Plexavo works
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
AWS account
|
|
108
|
+
↓
|
|
109
|
+
Plexavo deterministic checks
|
|
110
|
+
↓
|
|
111
|
+
Evidence + findings
|
|
112
|
+
↓
|
|
113
|
+
Severity / confidence / remediation
|
|
114
|
+
↓
|
|
115
|
+
HTML / PDF report
|
|
116
|
+
↓
|
|
117
|
+
Optional AI narration
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The checks alone decide what counts as a finding. AI is optional and
|
|
121
|
+
only helps explain results that already exist.
|
|
122
|
+
|
|
123
|
+
## Installation
|
|
105
124
|
|
|
106
125
|
Every path below installs Plexavo into its own isolated environment.
|
|
107
126
|
|
|
@@ -149,7 +168,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
|
149
168
|
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
150
169
|
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
151
170
|
|
|
152
|
-
##
|
|
171
|
+
## Using Plexavo
|
|
153
172
|
|
|
154
173
|
Run it with no arguments and it walks you through everything: picking an
|
|
155
174
|
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
@@ -164,23 +183,39 @@ python -m plexavo # Windows Option 2
|
|
|
164
183
|
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
165
184
|
</div>
|
|
166
185
|
|
|
167
|
-
|
|
186
|
+
## The report
|
|
168
187
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
188
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
189
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
190
|
+
narration kicks in automatically once an `ANTHROPIC_API_KEY` is
|
|
191
|
+
detected, see [Cost](#cost).
|
|
172
192
|
|
|
173
|
-
>
|
|
174
|
-
|
|
193
|
+
<div align="center">
|
|
194
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
## Cost
|
|
198
|
+
|
|
199
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
200
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
201
|
+
Anthropic account.
|
|
202
|
+
|
|
203
|
+
Plexavo never sees your key and never calls the API without it. A full
|
|
204
|
+
scan with `--explain` typically costs a few cents.
|
|
175
205
|
|
|
176
|
-
|
|
206
|
+
> [!IMPORTANT]
|
|
207
|
+
> **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
|
|
208
|
+
|
|
209
|
+
## Using it from Claude Code
|
|
177
210
|
|
|
178
211
|
Using [Claude Code](https://claude.com/claude-code)? Install the
|
|
179
212
|
`plexavo-scan` plugin, then just ask: "scan my AWS account for security
|
|
180
|
-
issues using Plexavo." It relays exactly what Plexavo found,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
213
|
+
issues using Plexavo." It relays exactly what Plexavo found, shows
|
|
214
|
+
Plexavo's own fix commands word for word, and never runs one itself: you
|
|
215
|
+
do. It only reads your AWS profile names, never your credentials. Don't
|
|
216
|
+
have Plexavo installed yet? It notices, and with a click on a yes/no
|
|
217
|
+
choice at each step installs uv and Plexavo for you, including the Windows
|
|
218
|
+
Smart App Control workaround.
|
|
184
219
|
|
|
185
220
|
```
|
|
186
221
|
/plugin marketplace add plexavo/Plexavo
|
|
@@ -193,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
193
228
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
194
229
|
same skill, just without automatic updates.
|
|
195
230
|
|
|
196
|
-
##
|
|
231
|
+
## Running it on a schedule
|
|
197
232
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
detected, see [Cost](#cost).
|
|
233
|
+
Plexavo can also run unattended from cron or a GitHub Actions workflow,
|
|
234
|
+
and flag a run when something regresses so you get notified without
|
|
235
|
+
opening a report. See [`docs/automation.md`](docs/automation.md).
|
|
202
236
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
</div>
|
|
237
|
+
> [!NOTE]
|
|
238
|
+
> **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
|
|
206
239
|
|
|
207
|
-
##
|
|
240
|
+
## Want to help?
|
|
208
241
|
|
|
209
|
-
|
|
210
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
211
|
-
Anthropic account.
|
|
242
|
+
You don't need to understand the whole codebase to contribute.
|
|
212
243
|
|
|
213
|
-
|
|
214
|
-
scan with `--explain` typically costs a few cents.
|
|
244
|
+
There are several ways to help:
|
|
215
245
|
|
|
216
|
-
|
|
217
|
-
|
|
246
|
+
- **Break Plexavo:** find a security blind spot or confusing result
|
|
247
|
+
- **Add a security check:** extend Plexavo's AWS coverage
|
|
248
|
+
- **Improve test coverage:** add or strengthen a test
|
|
249
|
+
- **Improve documentation:** make Plexavo easier to understand
|
|
250
|
+
- **Suggest an improvement:** tell us what would make a scan more useful
|
|
218
251
|
|
|
219
|
-
|
|
252
|
+
> [!TIP]
|
|
253
|
+
> **First contribution?** Start with issues labeled
|
|
254
|
+
> [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
|
|
255
|
+
> Not sure where to start? Open an issue or comment on an existing one.
|
|
256
|
+
> You don't need to figure out the codebase alone.
|
|
220
257
|
|
|
221
|
-
|
|
222
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
223
|
-
cd plexavo
|
|
224
|
-
uv pip install -e .
|
|
225
|
-
```
|
|
258
|
+
### Pick a way to contribute
|
|
226
259
|
|
|
227
|
-
|
|
228
|
-
|
|
260
|
+
| If you are... | You can... |
|
|
261
|
+
|---|---|
|
|
262
|
+
| A security researcher | Break Plexavo / report a blind spot |
|
|
263
|
+
| A Python developer | Add a check or improve existing logic |
|
|
264
|
+
| A cloud engineer | Test Plexavo against real AWS setups |
|
|
265
|
+
| A tester | Reproduce bugs and improve test coverage |
|
|
266
|
+
| A technical writer | Improve docs and examples |
|
|
267
|
+
| Just curious | Run a scan and tell us what was confusing |
|
|
229
268
|
|
|
230
|
-
|
|
269
|
+
You don't need to be a Plexavo expert.
|
|
231
270
|
|
|
232
|
-
|
|
271
|
+
## Break Plexavo
|
|
272
|
+
|
|
273
|
+
Security tools should be challenged.
|
|
274
|
+
|
|
275
|
+
Run Plexavo and tell us if you find:
|
|
276
|
+
|
|
277
|
+
- a security issue Plexavo misses
|
|
278
|
+
- a false positive
|
|
279
|
+
- a misleading severity
|
|
280
|
+
- incorrect remediation
|
|
281
|
+
- confusing report output
|
|
282
|
+
- an AWS resource Plexavo doesn't understand
|
|
283
|
+
- a case where the evidence isn't clear
|
|
284
|
+
|
|
285
|
+
You don't need to write code. If you find something useful, open an issue
|
|
286
|
+
and explain what happened.
|
|
233
287
|
|
|
234
288
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
235
289
|
|
|
236
290
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
237
|
-
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
|
|
291
|
+
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
|
|
292
|
+
"what doesn't count" list there first, since some gaps are already
|
|
293
|
+
documented.
|
|
238
294
|
|
|
239
295
|
**No bounty. Public credit only.**
|
|
240
296
|
|
|
241
297
|
> [!TIP]
|
|
242
298
|
> **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
|
|
243
299
|
|
|
244
|
-
##
|
|
300
|
+
## Contributing code
|
|
301
|
+
|
|
302
|
+
Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
|
|
303
|
+
the pattern for adding a new check, and how to run the tests.
|
|
304
|
+
|
|
305
|
+
## Security
|
|
245
306
|
|
|
246
307
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
247
308
|
own AWS account (that's the tool working correctly)?
|
|
248
309
|
|
|
249
310
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
250
311
|
|
|
251
|
-
##
|
|
312
|
+
## License
|
|
252
313
|
|
|
253
314
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
254
315
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
|
|
17
17
|
</a>
|
|
18
18
|
<a href="https://github.com/plexavo/plexavo/actions">
|
|
19
|
-
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/
|
|
19
|
+
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
|
|
20
20
|
</a>
|
|
21
21
|
</p>
|
|
22
22
|
|
|
@@ -39,7 +39,7 @@ for real-world misconfigurations, using your own local AWS credentials
|
|
|
39
39
|
the same way `aws s3 ls` does, so nothing about your account ever
|
|
40
40
|
leaves your machine.
|
|
41
41
|
|
|
42
|
-
Each scan produces a **0
|
|
42
|
+
Each scan produces a **0-100 security score** and a plain-English report:
|
|
43
43
|
what's wrong, what an attacker would actually do with it, and the exact
|
|
44
44
|
command to fix it.
|
|
45
45
|
|
|
@@ -54,7 +54,7 @@ command to fix it.
|
|
|
54
54
|
> conversational security briefing. See
|
|
55
55
|
> [Using it from Claude Code](#using-it-from-claude-code).
|
|
56
56
|
|
|
57
|
-
##
|
|
57
|
+
## What it checks
|
|
58
58
|
|
|
59
59
|
**32 checks across 6 categories**, run against real AWS accounts:
|
|
60
60
|
|
|
@@ -72,7 +72,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
|
|
|
72
72
|
> [!TIP]
|
|
73
73
|
> **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
|
|
74
74
|
|
|
75
|
-
##
|
|
75
|
+
## How Plexavo works
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
AWS account
|
|
79
|
+
↓
|
|
80
|
+
Plexavo deterministic checks
|
|
81
|
+
↓
|
|
82
|
+
Evidence + findings
|
|
83
|
+
↓
|
|
84
|
+
Severity / confidence / remediation
|
|
85
|
+
↓
|
|
86
|
+
HTML / PDF report
|
|
87
|
+
↓
|
|
88
|
+
Optional AI narration
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The checks alone decide what counts as a finding. AI is optional and
|
|
92
|
+
only helps explain results that already exist.
|
|
93
|
+
|
|
94
|
+
## Installation
|
|
76
95
|
|
|
77
96
|
Every path below installs Plexavo into its own isolated environment.
|
|
78
97
|
|
|
@@ -120,7 +139,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
|
120
139
|
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
121
140
|
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
122
141
|
|
|
123
|
-
##
|
|
142
|
+
## Using Plexavo
|
|
124
143
|
|
|
125
144
|
Run it with no arguments and it walks you through everything: picking an
|
|
126
145
|
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
@@ -135,23 +154,39 @@ python -m plexavo # Windows Option 2
|
|
|
135
154
|
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
136
155
|
</div>
|
|
137
156
|
|
|
138
|
-
|
|
157
|
+
## The report
|
|
139
158
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
159
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
160
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
161
|
+
narration kicks in automatically once an `ANTHROPIC_API_KEY` is
|
|
162
|
+
detected, see [Cost](#cost).
|
|
143
163
|
|
|
144
|
-
>
|
|
145
|
-
|
|
164
|
+
<div align="center">
|
|
165
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
## Cost
|
|
169
|
+
|
|
170
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
171
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
172
|
+
Anthropic account.
|
|
173
|
+
|
|
174
|
+
Plexavo never sees your key and never calls the API without it. A full
|
|
175
|
+
scan with `--explain` typically costs a few cents.
|
|
146
176
|
|
|
147
|
-
|
|
177
|
+
> [!IMPORTANT]
|
|
178
|
+
> **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
|
|
179
|
+
|
|
180
|
+
## Using it from Claude Code
|
|
148
181
|
|
|
149
182
|
Using [Claude Code](https://claude.com/claude-code)? Install the
|
|
150
183
|
`plexavo-scan` plugin, then just ask: "scan my AWS account for security
|
|
151
|
-
issues using Plexavo." It relays exactly what Plexavo found,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
184
|
+
issues using Plexavo." It relays exactly what Plexavo found, shows
|
|
185
|
+
Plexavo's own fix commands word for word, and never runs one itself: you
|
|
186
|
+
do. It only reads your AWS profile names, never your credentials. Don't
|
|
187
|
+
have Plexavo installed yet? It notices, and with a click on a yes/no
|
|
188
|
+
choice at each step installs uv and Plexavo for you, including the Windows
|
|
189
|
+
Smart App Control workaround.
|
|
155
190
|
|
|
156
191
|
```
|
|
157
192
|
/plugin marketplace add plexavo/Plexavo
|
|
@@ -164,62 +199,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
164
199
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
165
200
|
same skill, just without automatic updates.
|
|
166
201
|
|
|
167
|
-
##
|
|
202
|
+
## Running it on a schedule
|
|
168
203
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
detected, see [Cost](#cost).
|
|
204
|
+
Plexavo can also run unattended from cron or a GitHub Actions workflow,
|
|
205
|
+
and flag a run when something regresses so you get notified without
|
|
206
|
+
opening a report. See [`docs/automation.md`](docs/automation.md).
|
|
173
207
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
</div>
|
|
208
|
+
> [!NOTE]
|
|
209
|
+
> **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
|
|
177
210
|
|
|
178
|
-
##
|
|
211
|
+
## Want to help?
|
|
179
212
|
|
|
180
|
-
|
|
181
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
182
|
-
Anthropic account.
|
|
213
|
+
You don't need to understand the whole codebase to contribute.
|
|
183
214
|
|
|
184
|
-
|
|
185
|
-
scan with `--explain` typically costs a few cents.
|
|
215
|
+
There are several ways to help:
|
|
186
216
|
|
|
187
|
-
|
|
188
|
-
|
|
217
|
+
- **Break Plexavo:** find a security blind spot or confusing result
|
|
218
|
+
- **Add a security check:** extend Plexavo's AWS coverage
|
|
219
|
+
- **Improve test coverage:** add or strengthen a test
|
|
220
|
+
- **Improve documentation:** make Plexavo easier to understand
|
|
221
|
+
- **Suggest an improvement:** tell us what would make a scan more useful
|
|
189
222
|
|
|
190
|
-
|
|
223
|
+
> [!TIP]
|
|
224
|
+
> **First contribution?** Start with issues labeled
|
|
225
|
+
> [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
|
|
226
|
+
> Not sure where to start? Open an issue or comment on an existing one.
|
|
227
|
+
> You don't need to figure out the codebase alone.
|
|
191
228
|
|
|
192
|
-
|
|
193
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
194
|
-
cd plexavo
|
|
195
|
-
uv pip install -e .
|
|
196
|
-
```
|
|
229
|
+
### Pick a way to contribute
|
|
197
230
|
|
|
198
|
-
|
|
199
|
-
|
|
231
|
+
| If you are... | You can... |
|
|
232
|
+
|---|---|
|
|
233
|
+
| A security researcher | Break Plexavo / report a blind spot |
|
|
234
|
+
| A Python developer | Add a check or improve existing logic |
|
|
235
|
+
| A cloud engineer | Test Plexavo against real AWS setups |
|
|
236
|
+
| A tester | Reproduce bugs and improve test coverage |
|
|
237
|
+
| A technical writer | Improve docs and examples |
|
|
238
|
+
| Just curious | Run a scan and tell us what was confusing |
|
|
200
239
|
|
|
201
|
-
|
|
240
|
+
You don't need to be a Plexavo expert.
|
|
202
241
|
|
|
203
|
-
|
|
242
|
+
## Break Plexavo
|
|
243
|
+
|
|
244
|
+
Security tools should be challenged.
|
|
245
|
+
|
|
246
|
+
Run Plexavo and tell us if you find:
|
|
247
|
+
|
|
248
|
+
- a security issue Plexavo misses
|
|
249
|
+
- a false positive
|
|
250
|
+
- a misleading severity
|
|
251
|
+
- incorrect remediation
|
|
252
|
+
- confusing report output
|
|
253
|
+
- an AWS resource Plexavo doesn't understand
|
|
254
|
+
- a case where the evidence isn't clear
|
|
255
|
+
|
|
256
|
+
You don't need to write code. If you find something useful, open an issue
|
|
257
|
+
and explain what happened.
|
|
204
258
|
|
|
205
259
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
206
260
|
|
|
207
261
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
208
|
-
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
|
|
262
|
+
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
|
|
263
|
+
"what doesn't count" list there first, since some gaps are already
|
|
264
|
+
documented.
|
|
209
265
|
|
|
210
266
|
**No bounty. Public credit only.**
|
|
211
267
|
|
|
212
268
|
> [!TIP]
|
|
213
269
|
> **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
|
|
214
270
|
|
|
215
|
-
##
|
|
271
|
+
## Contributing code
|
|
272
|
+
|
|
273
|
+
Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
|
|
274
|
+
the pattern for adding a new check, and how to run the tests.
|
|
275
|
+
|
|
276
|
+
## Security
|
|
216
277
|
|
|
217
278
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
218
279
|
own AWS account (that's the tool working correctly)?
|
|
219
280
|
|
|
220
281
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
221
282
|
|
|
222
|
-
##
|
|
283
|
+
## License
|
|
223
284
|
|
|
224
285
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
225
286
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexavo
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
5
|
Author: Kavee
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -45,7 +45,7 @@ Dynamic: license-file
|
|
|
45
45
|
<img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
|
|
46
46
|
</a>
|
|
47
47
|
<a href="https://github.com/plexavo/plexavo/actions">
|
|
48
|
-
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/
|
|
48
|
+
<img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
|
|
49
49
|
</a>
|
|
50
50
|
</p>
|
|
51
51
|
|
|
@@ -68,7 +68,7 @@ for real-world misconfigurations, using your own local AWS credentials
|
|
|
68
68
|
the same way `aws s3 ls` does, so nothing about your account ever
|
|
69
69
|
leaves your machine.
|
|
70
70
|
|
|
71
|
-
Each scan produces a **0
|
|
71
|
+
Each scan produces a **0-100 security score** and a plain-English report:
|
|
72
72
|
what's wrong, what an attacker would actually do with it, and the exact
|
|
73
73
|
command to fix it.
|
|
74
74
|
|
|
@@ -83,7 +83,7 @@ command to fix it.
|
|
|
83
83
|
> conversational security briefing. See
|
|
84
84
|
> [Using it from Claude Code](#using-it-from-claude-code).
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## What it checks
|
|
87
87
|
|
|
88
88
|
**32 checks across 6 categories**, run against real AWS accounts:
|
|
89
89
|
|
|
@@ -101,7 +101,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
|
|
|
101
101
|
> [!TIP]
|
|
102
102
|
> **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
|
|
103
103
|
|
|
104
|
-
##
|
|
104
|
+
## How Plexavo works
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
AWS account
|
|
108
|
+
↓
|
|
109
|
+
Plexavo deterministic checks
|
|
110
|
+
↓
|
|
111
|
+
Evidence + findings
|
|
112
|
+
↓
|
|
113
|
+
Severity / confidence / remediation
|
|
114
|
+
↓
|
|
115
|
+
HTML / PDF report
|
|
116
|
+
↓
|
|
117
|
+
Optional AI narration
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The checks alone decide what counts as a finding. AI is optional and
|
|
121
|
+
only helps explain results that already exist.
|
|
122
|
+
|
|
123
|
+
## Installation
|
|
105
124
|
|
|
106
125
|
Every path below installs Plexavo into its own isolated environment.
|
|
107
126
|
|
|
@@ -149,7 +168,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
|
|
|
149
168
|
Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
|
|
150
169
|
instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
|
|
151
170
|
|
|
152
|
-
##
|
|
171
|
+
## Using Plexavo
|
|
153
172
|
|
|
154
173
|
Run it with no arguments and it walks you through everything: picking an
|
|
155
174
|
AWS profile, choosing HTML or PDF, then scanning and showing your score
|
|
@@ -164,23 +183,39 @@ python -m plexavo # Windows Option 2
|
|
|
164
183
|
<img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
|
|
165
184
|
</div>
|
|
166
185
|
|
|
167
|
-
|
|
186
|
+
## The report
|
|
168
187
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
188
|
+
Reports are generated as HTML, PDF, or both. Every finding gets a free,
|
|
189
|
+
template-based fix by default, no key, no cost. Full AI-written
|
|
190
|
+
narration kicks in automatically once an `ANTHROPIC_API_KEY` is
|
|
191
|
+
detected, see [Cost](#cost).
|
|
172
192
|
|
|
173
|
-
>
|
|
174
|
-
|
|
193
|
+
<div align="center">
|
|
194
|
+
<img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
## Cost
|
|
198
|
+
|
|
199
|
+
Detection and the free templates always cost nothing. Live AI only runs
|
|
200
|
+
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
201
|
+
Anthropic account.
|
|
202
|
+
|
|
203
|
+
Plexavo never sees your key and never calls the API without it. A full
|
|
204
|
+
scan with `--explain` typically costs a few cents.
|
|
175
205
|
|
|
176
|
-
|
|
206
|
+
> [!IMPORTANT]
|
|
207
|
+
> **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
|
|
208
|
+
|
|
209
|
+
## Using it from Claude Code
|
|
177
210
|
|
|
178
211
|
Using [Claude Code](https://claude.com/claude-code)? Install the
|
|
179
212
|
`plexavo-scan` plugin, then just ask: "scan my AWS account for security
|
|
180
|
-
issues using Plexavo." It relays exactly what Plexavo found,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
213
|
+
issues using Plexavo." It relays exactly what Plexavo found, shows
|
|
214
|
+
Plexavo's own fix commands word for word, and never runs one itself: you
|
|
215
|
+
do. It only reads your AWS profile names, never your credentials. Don't
|
|
216
|
+
have Plexavo installed yet? It notices, and with a click on a yes/no
|
|
217
|
+
choice at each step installs uv and Plexavo for you, including the Windows
|
|
218
|
+
Smart App Control workaround.
|
|
184
219
|
|
|
185
220
|
```
|
|
186
221
|
/plugin marketplace add plexavo/Plexavo
|
|
@@ -193,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
193
228
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
194
229
|
same skill, just without automatic updates.
|
|
195
230
|
|
|
196
|
-
##
|
|
231
|
+
## Running it on a schedule
|
|
197
232
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
detected, see [Cost](#cost).
|
|
233
|
+
Plexavo can also run unattended from cron or a GitHub Actions workflow,
|
|
234
|
+
and flag a run when something regresses so you get notified without
|
|
235
|
+
opening a report. See [`docs/automation.md`](docs/automation.md).
|
|
202
236
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
</div>
|
|
237
|
+
> [!NOTE]
|
|
238
|
+
> **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
|
|
206
239
|
|
|
207
|
-
##
|
|
240
|
+
## Want to help?
|
|
208
241
|
|
|
209
|
-
|
|
210
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
211
|
-
Anthropic account.
|
|
242
|
+
You don't need to understand the whole codebase to contribute.
|
|
212
243
|
|
|
213
|
-
|
|
214
|
-
scan with `--explain` typically costs a few cents.
|
|
244
|
+
There are several ways to help:
|
|
215
245
|
|
|
216
|
-
|
|
217
|
-
|
|
246
|
+
- **Break Plexavo:** find a security blind spot or confusing result
|
|
247
|
+
- **Add a security check:** extend Plexavo's AWS coverage
|
|
248
|
+
- **Improve test coverage:** add or strengthen a test
|
|
249
|
+
- **Improve documentation:** make Plexavo easier to understand
|
|
250
|
+
- **Suggest an improvement:** tell us what would make a scan more useful
|
|
218
251
|
|
|
219
|
-
|
|
252
|
+
> [!TIP]
|
|
253
|
+
> **First contribution?** Start with issues labeled
|
|
254
|
+
> [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
|
|
255
|
+
> Not sure where to start? Open an issue or comment on an existing one.
|
|
256
|
+
> You don't need to figure out the codebase alone.
|
|
220
257
|
|
|
221
|
-
|
|
222
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
223
|
-
cd plexavo
|
|
224
|
-
uv pip install -e .
|
|
225
|
-
```
|
|
258
|
+
### Pick a way to contribute
|
|
226
259
|
|
|
227
|
-
|
|
228
|
-
|
|
260
|
+
| If you are... | You can... |
|
|
261
|
+
|---|---|
|
|
262
|
+
| A security researcher | Break Plexavo / report a blind spot |
|
|
263
|
+
| A Python developer | Add a check or improve existing logic |
|
|
264
|
+
| A cloud engineer | Test Plexavo against real AWS setups |
|
|
265
|
+
| A tester | Reproduce bugs and improve test coverage |
|
|
266
|
+
| A technical writer | Improve docs and examples |
|
|
267
|
+
| Just curious | Run a scan and tell us what was confusing |
|
|
229
268
|
|
|
230
|
-
|
|
269
|
+
You don't need to be a Plexavo expert.
|
|
231
270
|
|
|
232
|
-
|
|
271
|
+
## Break Plexavo
|
|
272
|
+
|
|
273
|
+
Security tools should be challenged.
|
|
274
|
+
|
|
275
|
+
Run Plexavo and tell us if you find:
|
|
276
|
+
|
|
277
|
+
- a security issue Plexavo misses
|
|
278
|
+
- a false positive
|
|
279
|
+
- a misleading severity
|
|
280
|
+
- incorrect remediation
|
|
281
|
+
- confusing report output
|
|
282
|
+
- an AWS resource Plexavo doesn't understand
|
|
283
|
+
- a case where the evidence isn't clear
|
|
284
|
+
|
|
285
|
+
You don't need to write code. If you find something useful, open an issue
|
|
286
|
+
and explain what happened.
|
|
233
287
|
|
|
234
288
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
235
289
|
|
|
236
290
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
237
|
-
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
|
|
291
|
+
get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
|
|
292
|
+
"what doesn't count" list there first, since some gaps are already
|
|
293
|
+
documented.
|
|
238
294
|
|
|
239
295
|
**No bounty. Public credit only.**
|
|
240
296
|
|
|
241
297
|
> [!TIP]
|
|
242
298
|
> **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
|
|
243
299
|
|
|
244
|
-
##
|
|
300
|
+
## Contributing code
|
|
301
|
+
|
|
302
|
+
Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
|
|
303
|
+
the pattern for adding a new check, and how to run the tests.
|
|
304
|
+
|
|
305
|
+
## Security
|
|
245
306
|
|
|
246
307
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
247
308
|
own AWS account (that's the tool working correctly)?
|
|
248
309
|
|
|
249
310
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
250
311
|
|
|
251
|
-
##
|
|
312
|
+
## License
|
|
252
313
|
|
|
253
314
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
254
315
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plexavo"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.4"
|
|
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" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|