plexavo 0.4.3__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.3 → plexavo-0.4.4}/PKG-INFO +101 -42
- {plexavo-0.4.3 → plexavo-0.4.4}/README.md +100 -41
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/__init__.py +1 -1
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/PKG-INFO +101 -42
- {plexavo-0.4.3 → plexavo-0.4.4}/pyproject.toml +1 -1
- {plexavo-0.4.3 → plexavo-0.4.4}/LICENSE +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/__main__.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/attack_paths.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/auth.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/aws_profile_setup.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/__init__.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/encryption.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/iam.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/iam_hygiene.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/logging.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/network.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/storage.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/usage.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/cli.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/findings.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/interactive.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/principals.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/__init__.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/ai_narration.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/html_report.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/json_report.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/pdf.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/templates/report.html.j2 +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/scoring.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/SOURCES.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/dependency_links.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/entry_points.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/requires.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/top_level.txt +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/setup.cfg +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_ai_narration_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_attack_paths_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_auth_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_cli_entrypoint.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_encryption_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_fail_on_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_iam_hygiene_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_iam_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_json_report_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_logging_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_network_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_report_offline.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_scoring.py +0 -0
- {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_storage_offline.py +0 -0
- {plexavo-0.4.3 → 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,16 +183,30 @@ 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
|
|
@@ -195,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
195
228
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
196
229
|
same skill, just without automatic updates.
|
|
197
230
|
|
|
198
|
-
##
|
|
231
|
+
## Running it on a schedule
|
|
199
232
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
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).
|
|
204
236
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
</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.
|
|
208
239
|
|
|
209
|
-
##
|
|
240
|
+
## Want to help?
|
|
210
241
|
|
|
211
|
-
|
|
212
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
213
|
-
Anthropic account.
|
|
242
|
+
You don't need to understand the whole codebase to contribute.
|
|
214
243
|
|
|
215
|
-
|
|
216
|
-
scan with `--explain` typically costs a few cents.
|
|
244
|
+
There are several ways to help:
|
|
217
245
|
|
|
218
|
-
|
|
219
|
-
|
|
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
|
|
220
251
|
|
|
221
|
-
|
|
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.
|
|
222
257
|
|
|
223
|
-
|
|
224
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
225
|
-
cd plexavo
|
|
226
|
-
uv pip install -e .
|
|
227
|
-
```
|
|
258
|
+
### Pick a way to contribute
|
|
228
259
|
|
|
229
|
-
|
|
230
|
-
|
|
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 |
|
|
231
268
|
|
|
232
|
-
|
|
269
|
+
You don't need to be a Plexavo expert.
|
|
233
270
|
|
|
234
|
-
|
|
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.
|
|
235
287
|
|
|
236
288
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
237
289
|
|
|
238
290
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
239
|
-
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.
|
|
240
294
|
|
|
241
295
|
**No bounty. Public credit only.**
|
|
242
296
|
|
|
243
297
|
> [!TIP]
|
|
244
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.
|
|
245
299
|
|
|
246
|
-
##
|
|
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
|
|
247
306
|
|
|
248
307
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
249
308
|
own AWS account (that's the tool working correctly)?
|
|
250
309
|
|
|
251
310
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
252
311
|
|
|
253
|
-
##
|
|
312
|
+
## License
|
|
254
313
|
|
|
255
314
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
256
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,16 +154,30 @@ 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
|
|
@@ -166,62 +199,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
166
199
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
167
200
|
same skill, just without automatic updates.
|
|
168
201
|
|
|
169
|
-
##
|
|
202
|
+
## Running it on a schedule
|
|
170
203
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
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).
|
|
175
207
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
</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.
|
|
179
210
|
|
|
180
|
-
##
|
|
211
|
+
## Want to help?
|
|
181
212
|
|
|
182
|
-
|
|
183
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
184
|
-
Anthropic account.
|
|
213
|
+
You don't need to understand the whole codebase to contribute.
|
|
185
214
|
|
|
186
|
-
|
|
187
|
-
scan with `--explain` typically costs a few cents.
|
|
215
|
+
There are several ways to help:
|
|
188
216
|
|
|
189
|
-
|
|
190
|
-
|
|
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
|
|
191
222
|
|
|
192
|
-
|
|
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.
|
|
193
228
|
|
|
194
|
-
|
|
195
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
196
|
-
cd plexavo
|
|
197
|
-
uv pip install -e .
|
|
198
|
-
```
|
|
229
|
+
### Pick a way to contribute
|
|
199
230
|
|
|
200
|
-
|
|
201
|
-
|
|
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 |
|
|
202
239
|
|
|
203
|
-
|
|
240
|
+
You don't need to be a Plexavo expert.
|
|
204
241
|
|
|
205
|
-
|
|
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.
|
|
206
258
|
|
|
207
259
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
208
260
|
|
|
209
261
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
210
|
-
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.
|
|
211
265
|
|
|
212
266
|
**No bounty. Public credit only.**
|
|
213
267
|
|
|
214
268
|
> [!TIP]
|
|
215
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.
|
|
216
270
|
|
|
217
|
-
##
|
|
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
|
|
218
277
|
|
|
219
278
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
220
279
|
own AWS account (that's the tool working correctly)?
|
|
221
280
|
|
|
222
281
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
223
282
|
|
|
224
|
-
##
|
|
283
|
+
## License
|
|
225
284
|
|
|
226
285
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
227
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,16 +183,30 @@ 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
|
|
@@ -195,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
|
|
|
195
228
|
(`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
|
|
196
229
|
same skill, just without automatic updates.
|
|
197
230
|
|
|
198
|
-
##
|
|
231
|
+
## Running it on a schedule
|
|
199
232
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
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).
|
|
204
236
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
</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.
|
|
208
239
|
|
|
209
|
-
##
|
|
240
|
+
## Want to help?
|
|
210
241
|
|
|
211
|
-
|
|
212
|
-
with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
|
|
213
|
-
Anthropic account.
|
|
242
|
+
You don't need to understand the whole codebase to contribute.
|
|
214
243
|
|
|
215
|
-
|
|
216
|
-
scan with `--explain` typically costs a few cents.
|
|
244
|
+
There are several ways to help:
|
|
217
245
|
|
|
218
|
-
|
|
219
|
-
|
|
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
|
|
220
251
|
|
|
221
|
-
|
|
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.
|
|
222
257
|
|
|
223
|
-
|
|
224
|
-
git clone https://github.com/plexavo/plexavo.git
|
|
225
|
-
cd plexavo
|
|
226
|
-
uv pip install -e .
|
|
227
|
-
```
|
|
258
|
+
### Pick a way to contribute
|
|
228
259
|
|
|
229
|
-
|
|
230
|
-
|
|
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 |
|
|
231
268
|
|
|
232
|
-
|
|
269
|
+
You don't need to be a Plexavo expert.
|
|
233
270
|
|
|
234
|
-
|
|
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.
|
|
235
287
|
|
|
236
288
|
[**Report it →**](../../issues/new?template=break-plexavo.yml)
|
|
237
289
|
|
|
238
290
|
Every confirmed, genuinely new finding gets fixed and shipped, and you
|
|
239
|
-
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.
|
|
240
294
|
|
|
241
295
|
**No bounty. Public credit only.**
|
|
242
296
|
|
|
243
297
|
> [!TIP]
|
|
244
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.
|
|
245
299
|
|
|
246
|
-
##
|
|
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
|
|
247
306
|
|
|
248
307
|
Found a vulnerability in the tool itself, not a misconfiguration in your
|
|
249
308
|
own AWS account (that's the tool working correctly)?
|
|
250
309
|
|
|
251
310
|
See [`SECURITY.md`](SECURITY.md) for a private reporting path.
|
|
252
311
|
|
|
253
|
-
##
|
|
312
|
+
## License
|
|
254
313
|
|
|
255
314
|
AGPL-3.0, see [`LICENSE`](LICENSE).
|
|
256
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
|