redveil 0.1.0__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.
- redveil-0.1.0/.gitignore +53 -0
- redveil-0.1.0/CHANGELOG.md +92 -0
- redveil-0.1.0/LICENSE +21 -0
- redveil-0.1.0/PKG-INFO +182 -0
- redveil-0.1.0/README.md +153 -0
- redveil-0.1.0/USER_GUIDE.md +531 -0
- redveil-0.1.0/docs/architecture.md +388 -0
- redveil-0.1.0/examples/scope.authenticated.yaml +91 -0
- redveil-0.1.0/examples/scope.multi-principal.yaml +110 -0
- redveil-0.1.0/examples/scope.oob.yaml +93 -0
- redveil-0.1.0/examples/scope.staging.yaml +101 -0
- redveil-0.1.0/examples/scope.yaml +36 -0
- redveil-0.1.0/examples/smoke_check.py +28 -0
- redveil-0.1.0/pyproject.toml +82 -0
- redveil-0.1.0/reports/.gitkeep +0 -0
- redveil-0.1.0/src/redveil/__init__.py +11 -0
- redveil-0.1.0/src/redveil/checks/__init__.py +1 -0
- redveil-0.1.0/src/redveil/checks/bfla.py +201 -0
- redveil-0.1.0/src/redveil/checks/bola.py +750 -0
- redveil-0.1.0/src/redveil/checks/command_injection.py +218 -0
- redveil-0.1.0/src/redveil/checks/cors.py +373 -0
- redveil-0.1.0/src/redveil/checks/disclosure.py +306 -0
- redveil-0.1.0/src/redveil/checks/graphql.py +357 -0
- redveil-0.1.0/src/redveil/checks/headers_security.py +235 -0
- redveil-0.1.0/src/redveil/checks/http_methods.py +412 -0
- redveil-0.1.0/src/redveil/checks/mass_assignment.py +218 -0
- redveil-0.1.0/src/redveil/checks/path_traversal.py +228 -0
- redveil-0.1.0/src/redveil/checks/redirect.py +192 -0
- redveil-0.1.0/src/redveil/checks/session_cookie.py +694 -0
- redveil-0.1.0/src/redveil/checks/source_maps.py +218 -0
- redveil-0.1.0/src/redveil/checks/sqli.py +206 -0
- redveil-0.1.0/src/redveil/checks/ssrf.py +506 -0
- redveil-0.1.0/src/redveil/checks/xss.py +223 -0
- redveil-0.1.0/src/redveil/cli.py +265 -0
- redveil-0.1.0/src/redveil/config.py +261 -0
- redveil-0.1.0/src/redveil/core/__init__.py +44 -0
- redveil-0.1.0/src/redveil/core/event_bus.py +117 -0
- redveil-0.1.0/src/redveil/core/lifecycle.py +84 -0
- redveil-0.1.0/src/redveil/core/orchestrator.py +389 -0
- redveil-0.1.0/src/redveil/core/renderer.py +74 -0
- redveil-0.1.0/src/redveil/core/scope.py +202 -0
- redveil-0.1.0/src/redveil/discovery/__init__.py +1 -0
- redveil-0.1.0/src/redveil/discovery/crawler.py +390 -0
- redveil-0.1.0/src/redveil/discovery/subdomain_finder.py +267 -0
- redveil-0.1.0/src/redveil/evidence/__init__.py +1 -0
- redveil-0.1.0/src/redveil/evidence/evidence.py +63 -0
- redveil-0.1.0/src/redveil/evidence/sanitizer.py +74 -0
- redveil-0.1.0/src/redveil/findings/__init__.py +1 -0
- redveil-0.1.0/src/redveil/findings/confidence.py +12 -0
- redveil-0.1.0/src/redveil/findings/deduplicator.py +37 -0
- redveil-0.1.0/src/redveil/findings/finding.py +84 -0
- redveil-0.1.0/src/redveil/findings/severity.py +20 -0
- redveil-0.1.0/src/redveil/http/__init__.py +35 -0
- redveil-0.1.0/src/redveil/http/client.py +264 -0
- redveil-0.1.0/src/redveil/http/rate_limit.py +79 -0
- redveil-0.1.0/src/redveil/http/request.py +68 -0
- redveil-0.1.0/src/redveil/http/response.py +50 -0
- redveil-0.1.0/src/redveil/http/session.py +143 -0
- redveil-0.1.0/src/redveil/knowledge/__init__.py +0 -0
- redveil-0.1.0/src/redveil/knowledge/vuln_descriptions.py +3903 -0
- redveil-0.1.0/src/redveil/plugins/__init__.py +1 -0
- redveil-0.1.0/src/redveil/plugins/base.py +237 -0
- redveil-0.1.0/src/redveil/plugins/discovery/__init__.py +1 -0
- redveil-0.1.0/src/redveil/plugins/discovery/subdomain.py +344 -0
- redveil-0.1.0/src/redveil/plugins/loader.py +94 -0
- redveil-0.1.0/src/redveil/plugins/registry.py +60 -0
- redveil-0.1.0/src/redveil/reporting/__init__.py +1 -0
- redveil-0.1.0/src/redveil/reporting/html_report.py +469 -0
- redveil-0.1.0/src/redveil/reporting/json_report.py +25 -0
- redveil-0.1.0/src/redveil/reporting/markdown.py +198 -0
- redveil-0.1.0/src/redveil/util/__init__.py +0 -0
- redveil-0.1.0/src/redveil/util/urls.py +38 -0
- redveil-0.1.0/src/redveil/validation/__init__.py +1 -0
- redveil-0.1.0/tests/__init__.py +0 -0
- redveil-0.1.0/tests/fixtures/scope.yaml +20 -0
- redveil-0.1.0/tests/lab/README.md +94 -0
- redveil-0.1.0/tests/lab/__init__.py +5 -0
- redveil-0.1.0/tests/lab/app.py +583 -0
- redveil-0.1.0/tests/lab/data/config.ini +4 -0
- redveil-0.1.0/tests/lab/data/notes.txt +2 -0
- redveil-0.1.0/tests/lab/data/users.json +5 -0
- redveil-0.1.0/tests/lab/requirements.txt +1 -0
- redveil-0.1.0/tests/lab/run.sh +6 -0
- redveil-0.1.0/tests/lab/scope.yaml +22 -0
- redveil-0.1.0/tests/test_auth.py +194 -0
- redveil-0.1.0/tests/test_check_bfla.py +119 -0
- redveil-0.1.0/tests/test_check_bola.py +639 -0
- redveil-0.1.0/tests/test_check_command_injection.py +115 -0
- redveil-0.1.0/tests/test_check_cors.py +385 -0
- redveil-0.1.0/tests/test_check_disclosure.py +111 -0
- redveil-0.1.0/tests/test_check_graphql.py +337 -0
- redveil-0.1.0/tests/test_check_headers_security.py +88 -0
- redveil-0.1.0/tests/test_check_http_methods.py +444 -0
- redveil-0.1.0/tests/test_check_mass_assignment.py +117 -0
- redveil-0.1.0/tests/test_check_path_traversal.py +113 -0
- redveil-0.1.0/tests/test_check_redirect.py +93 -0
- redveil-0.1.0/tests/test_check_session_cookie.py +458 -0
- redveil-0.1.0/tests/test_check_source_maps.py +85 -0
- redveil-0.1.0/tests/test_check_sqli.py +125 -0
- redveil-0.1.0/tests/test_check_subdomain.py +344 -0
- redveil-0.1.0/tests/test_check_xss.py +116 -0
- redveil-0.1.0/tests/test_cli.py +55 -0
- redveil-0.1.0/tests/test_config.py +198 -0
- redveil-0.1.0/tests/test_crawler.py +608 -0
- redveil-0.1.0/tests/test_deduplicator.py +78 -0
- redveil-0.1.0/tests/test_event_bus.py +171 -0
- redveil-0.1.0/tests/test_evidence.py +67 -0
- redveil-0.1.0/tests/test_finding.py +67 -0
- redveil-0.1.0/tests/test_html_report.py +266 -0
- redveil-0.1.0/tests/test_http_client.py +383 -0
- redveil-0.1.0/tests/test_lifecycle.py +143 -0
- redveil-0.1.0/tests/test_orchestrator.py +367 -0
- redveil-0.1.0/tests/test_plugin_loader.py +60 -0
- redveil-0.1.0/tests/test_plugin_registry.py +113 -0
- redveil-0.1.0/tests/test_rate_limit.py +122 -0
- redveil-0.1.0/tests/test_reporting.py +102 -0
- redveil-0.1.0/tests/test_request.py +82 -0
- redveil-0.1.0/tests/test_response.py +66 -0
- redveil-0.1.0/tests/test_sanitizer.py +120 -0
- redveil-0.1.0/tests/test_scope.py +310 -0
- redveil-0.1.0/tests/test_subdomain_finder.py +244 -0
- redveil-0.1.0/tests/test_vuln_descriptions.py +189 -0
redveil-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
MANIFEST
|
|
23
|
+
|
|
24
|
+
# Virtual environments
|
|
25
|
+
.venv/
|
|
26
|
+
venv/
|
|
27
|
+
env/
|
|
28
|
+
ENV/
|
|
29
|
+
|
|
30
|
+
# Testing
|
|
31
|
+
.pytest_cache/
|
|
32
|
+
.coverage
|
|
33
|
+
htmlcov/
|
|
34
|
+
.tox/
|
|
35
|
+
.mypy_cache/
|
|
36
|
+
.ruff_cache/
|
|
37
|
+
|
|
38
|
+
# IDE
|
|
39
|
+
.idea/
|
|
40
|
+
.vscode/
|
|
41
|
+
*.swp
|
|
42
|
+
*.swo
|
|
43
|
+
.DS_Store
|
|
44
|
+
|
|
45
|
+
# Reports (user-generated)
|
|
46
|
+
reports/*/
|
|
47
|
+
!reports/.gitkeep
|
|
48
|
+
!reports/**/.gitkeep
|
|
49
|
+
|
|
50
|
+
# Local config
|
|
51
|
+
.env
|
|
52
|
+
.env.local
|
|
53
|
+
*.local.yaml
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to redveil are documented in this file. The format is
|
|
4
|
+
based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
|
|
5
|
+
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [0.1.0] - 2026-08-31
|
|
8
|
+
|
|
9
|
+
The first public release of redveil. A defensive web application security
|
|
10
|
+
framework that runs an auditable discover → detect → safely validate →
|
|
11
|
+
collect evidence → assess → report pipeline against a target web
|
|
12
|
+
application.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **17 security check plugins** registered through the entry-point group
|
|
17
|
+
`redveil.checks`:
|
|
18
|
+
- `security-headers` — checks for missing or misconfigured HTTP security
|
|
19
|
+
headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, etc.).
|
|
20
|
+
- `information-disclosure` — fingerprints server versions, framework
|
|
21
|
+
signatures, debug endpoints, and config leaks.
|
|
22
|
+
- `cors-policy` — tests CORS configuration including the
|
|
23
|
+
`Access-Control-Allow-Origin: *` plus
|
|
24
|
+
`Access-Control-Allow-Credentials: true` anti-pattern.
|
|
25
|
+
- `http-methods` — enumerates supported HTTP methods, flags dangerous
|
|
26
|
+
ones (PUT, DELETE) where inappropriate.
|
|
27
|
+
- `open-redirect-indicator` — passive indicator of redirect handling
|
|
28
|
+
weakness. Flags parameter shapes known to enable open redirects.
|
|
29
|
+
- `source-map-exposure` — checks for `.js.map` and `X-SourceMap` header
|
|
30
|
+
leaks that disclose application source.
|
|
31
|
+
- `subdomain-finder` — web-crawler-based subdomain enumeration via
|
|
32
|
+
in-scope links and external resource references.
|
|
33
|
+
- `xss-reflected` — passive and low-impact detection of reflected XSS
|
|
34
|
+
sinks. Active payload execution is out of scope.
|
|
35
|
+
- `sqli-time-based` — time-based blind SQL injection detection. Never
|
|
36
|
+
extracts data; measures response delays only.
|
|
37
|
+
- `ssrf` — server-side request forgery detection via the operator's OOB
|
|
38
|
+
callback domain. Never targets internal IP ranges.
|
|
39
|
+
- `command-injection` — time-based blind command injection detection.
|
|
40
|
+
Never executes commands; measures response delays only.
|
|
41
|
+
- `path-traversal` — passive and low-impact path traversal indicator.
|
|
42
|
+
Detection only; never attempts to read sensitive files.
|
|
43
|
+
- `bola-idor` — multi-principal IDOR detection. Replays the same request
|
|
44
|
+
as each configured test principal and compares outcomes.
|
|
45
|
+
- `bfla` — broken function level authorization. Compares admin-only routes
|
|
46
|
+
across principal roles.
|
|
47
|
+
- `graphql` — GraphQL introspection, depth limits, batching, and field
|
|
48
|
+
authorization checks.
|
|
49
|
+
- `mass-assignment` — detects endpoints that bind user-supplied input to
|
|
50
|
+
sensitive fields without filtering.
|
|
51
|
+
- `session-cookie` — flags missing `Secure`, `HttpOnly`, `SameSite`,
|
|
52
|
+
and overly broad cookie path or domain scopes.
|
|
53
|
+
- **Plugin system with entry-point discovery.** Subclass
|
|
54
|
+
`redveil.plugins.base.Check` and register through
|
|
55
|
+
`[project.entry-points."redveil.checks"]` in `pyproject.toml`.
|
|
56
|
+
- **Scope controller** with strict host allowlist, path glob matching,
|
|
57
|
+
exclude-list-beats-allow-list semantics, destructive-path heuristics,
|
|
58
|
+
and per-hop redirect-chain re-validation.
|
|
59
|
+
- **Async HTTP client** with token-bucket rate limiting, hard request
|
|
60
|
+
caps, response-size truncation, manual redirect following, and unique
|
|
61
|
+
request IDs for evidence pairing.
|
|
62
|
+
- **Event bus** with a closed `EventType` enum and a Rich console renderer
|
|
63
|
+
for live, color-coded progress.
|
|
64
|
+
- **Vulnerability knowledge base** with 50+ entries linking each issue to
|
|
65
|
+
attack scenarios, code examples (Python / Node / Go / Java / Ruby /
|
|
66
|
+
PHP), CWE and OWASP tags, and remediation guidance.
|
|
67
|
+
- **Markdown, JSON, and HTML report rendering.** One scan produces
|
|
68
|
+
`summary.md`, `findings.json`, per-finding `findings/<id>.md`, and a
|
|
69
|
+
self-contained `report.html`.
|
|
70
|
+
- **Local vulnerable Flask lab** for end-to-end testing. Binds to
|
|
71
|
+
`127.0.0.1` by default; no real exploits, no destructive functionality.
|
|
72
|
+
- **Subdomain discovery** via the web crawler. Confined to
|
|
73
|
+
in-scope hosts and `allowed_hosts`.
|
|
74
|
+
- **900+ unit and integration tests** covering configuration, scope,
|
|
75
|
+
lifecycle, plugins, HTTP transport, event bus, rate limiting,
|
|
76
|
+
reporting, and every check plugin.
|
|
77
|
+
|
|
78
|
+
### Safety
|
|
79
|
+
|
|
80
|
+
- No destructive payloads.
|
|
81
|
+
- No data extraction (SQLi and CMDi are time-based only).
|
|
82
|
+
- No internal IP targeting (SSRF uses the operator's OOB domain only).
|
|
83
|
+
- ACTIVE profile requires explicit `acknowledged_safety_terms=true`.
|
|
84
|
+
- No reverse shells, no persistence, no credential extraction, no
|
|
85
|
+
denial-of-service primitives — by design and going forward.
|
|
86
|
+
|
|
87
|
+
### Notes
|
|
88
|
+
|
|
89
|
+
This release targets Python 3.12 and 3.13. The CLI entry point is
|
|
90
|
+
`redveil`. The framework ships as a single package with optional
|
|
91
|
+
`[dev]` extras for testing, linting, and type checking. See
|
|
92
|
+
[USER_GUIDE.md](USER_GUIDE.md) for installation and usage.
|
redveil-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Security Research Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
redveil-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: redveil
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Production-quality web vulnerability PoC & evidence framework for authorized security testing
|
|
5
|
+
Author: Security Research Team
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: bug-bounty,evidence,pentest,poc,security,vdp,vulnerability
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Information Technology
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Topic :: Security
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Requires-Dist: httpx>=0.27
|
|
17
|
+
Requires-Dist: pydantic-settings>=2.2
|
|
18
|
+
Requires-Dist: pydantic>=2.6
|
|
19
|
+
Requires-Dist: pyyaml>=6.0
|
|
20
|
+
Requires-Dist: rich>=13.7
|
|
21
|
+
Requires-Dist: typer>=0.12
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: mypy>=1.8; extra == 'dev'
|
|
24
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
27
|
+
Requires-Dist: ruff>=0.3; extra == 'dev'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# redveil
|
|
31
|
+
|
|
32
|
+
> **Evidence-first web vulnerability PoC framework. Not an exploit toolkit.**
|
|
33
|
+
|
|
34
|
+
redveil is a defensive security assessment framework that runs an auditable
|
|
35
|
+
*discover → detect → safely validate → collect evidence → assess → report*
|
|
36
|
+
pipeline against a target web application. Every outbound HTTP request passes
|
|
37
|
+
through a strict scope controller, every component reports progress through
|
|
38
|
+
an in-process event bus, and every finding ships with reproducible request
|
|
39
|
+
artifacts and step-by-step reproduction procedures.
|
|
40
|
+
|
|
41
|
+
[](#status)
|
|
42
|
+
[](#plugins)
|
|
43
|
+
[](#installation)
|
|
44
|
+
[](LICENSE)
|
|
45
|
+
|
|
46
|
+
## What it is
|
|
47
|
+
|
|
48
|
+
redveil is a CLI-first framework for authorized web security assessments.
|
|
49
|
+
You give it a scope file describing where it is allowed to send requests
|
|
50
|
+
and what credentials to use, and it produces a Markdown / JSON / HTML
|
|
51
|
+
report of every finding it can prove — without writing a single exploit
|
|
52
|
+
payload. Every finding includes a sanitized cURL command that reproduces
|
|
53
|
+
it on demand, the captured response excerpt, the CWE / OWASP taxonomy
|
|
54
|
+
tags, attack scenarios, code examples across multiple frameworks, and
|
|
55
|
+
ordered remediation steps.
|
|
56
|
+
|
|
57
|
+
## What it is NOT
|
|
58
|
+
|
|
59
|
+
- Not an exploit framework. No reverse shells, no persistence primitives,
|
|
60
|
+
no credential extraction, no data exfiltration, no denial-of-service.
|
|
61
|
+
- Not a destructive payload toolkit. SQLi and CMDi are time-based blind
|
|
62
|
+
probes only — they never extract rows, never execute commands.
|
|
63
|
+
- Not a public-internet scanner. The framework enforces a strict host
|
|
64
|
+
allowlist and is intended for authorized assessment only.
|
|
65
|
+
|
|
66
|
+
## Safety
|
|
67
|
+
|
|
68
|
+
Every check declares its required safety profile. The runtime refuses to
|
|
69
|
+
execute any check that exceeds the operator's chosen profile. The
|
|
70
|
+
profiles are PASSIVE (observation only), LOW_IMPACT (safe probes), and
|
|
71
|
+
ACTIVE (authenticated IDOR, time-based blind SQLi, OOB SSRF via the
|
|
72
|
+
operator's callback domain, time-based CMDi detection — each bounded
|
|
73
|
+
and non-destructive).
|
|
74
|
+
|
|
75
|
+
The ACTIVE profile requires explicit `acknowledged_safety_terms=true`
|
|
76
|
+
in the scope file. The framework will not include reverse shells,
|
|
77
|
+
persistence, credential extraction, denial-of-service, or data
|
|
78
|
+
destruction — by design and going forward.
|
|
79
|
+
|
|
80
|
+
**Use only against systems you own or have explicit written authorization
|
|
81
|
+
to test.** The authors disclaim all responsibility for unauthorized use.
|
|
82
|
+
|
|
83
|
+
## Quick example
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Install
|
|
87
|
+
git clone https://github.com/your-org/redveil.git
|
|
88
|
+
cd redveil
|
|
89
|
+
python3.12 -m venv .venv
|
|
90
|
+
source .venv/bin/activate
|
|
91
|
+
pip install -e ".[dev]"
|
|
92
|
+
|
|
93
|
+
# Scan a public surface with default (PASSIVE) checks
|
|
94
|
+
redveil scan https://staging.example.com --scope examples/scope.staging.yaml
|
|
95
|
+
|
|
96
|
+
# List all built-in check plugins
|
|
97
|
+
redveil list-checks
|
|
98
|
+
|
|
99
|
+
# Re-render a report from an existing findings.json
|
|
100
|
+
redveil report reports/staging.example.com
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Reports land under `reports/<target-name>/` as `summary.md`,
|
|
104
|
+
`findings.json`, per-finding `findings/<id>.md`, and a self-contained
|
|
105
|
+
`report.html`.
|
|
106
|
+
|
|
107
|
+
## Status
|
|
108
|
+
|
|
109
|
+
All five development phases are complete:
|
|
110
|
+
|
|
111
|
+
- **Phase 1** — Configuration, scope controller, rate-limited HTTP client,
|
|
112
|
+
plugin registry, event bus, lifecycle state machine, CLI.
|
|
113
|
+
- **Phase 2** — Finding model, evidence store with sanitization,
|
|
114
|
+
vulnerability knowledge base, deduplicator, report renderers.
|
|
115
|
+
- **Phase 3** — Discovery (crawler, subdomain finder) and passive check
|
|
116
|
+
plugins (security headers, CORS, methods, disclosure, source maps,
|
|
117
|
+
open redirect indicator, session cookie).
|
|
118
|
+
- **Phase 4** — Low-impact check plugins (reflected XSS, source map
|
|
119
|
+
fingerprinting, additional disclosure heuristics).
|
|
120
|
+
- **Phase 5** — Active check plugins (time-based blind SQLi, OOB SSRF,
|
|
121
|
+
time-based CMDi, path traversal indicator, BOLA / IDOR across
|
|
122
|
+
multiple test principals, BFLA, GraphQL introspection, mass
|
|
123
|
+
assignment).
|
|
124
|
+
|
|
125
|
+
The release ships with **17 built-in check plugins** and **900+ unit and
|
|
126
|
+
integration tests**. The local vulnerable Flask lab under `tests/lab/`
|
|
127
|
+
exercises the full pipeline end-to-end.
|
|
128
|
+
|
|
129
|
+
## Architecture
|
|
130
|
+
|
|
131
|
+
The package is organized into focused subpackages:
|
|
132
|
+
|
|
133
|
+
- `core` — orchestration, scope control, event bus, lifecycle
|
|
134
|
+
- `http` — async HTTP client, request/response abstractions, rate limiter
|
|
135
|
+
- `discovery` — crawling, endpoint and parameter enumeration
|
|
136
|
+
- `checks` — 17 built-in vulnerability check plugins
|
|
137
|
+
- `validation` — safe-in-place validators and PoC executors
|
|
138
|
+
- `evidence` — request/response capture, hashing, sanitization
|
|
139
|
+
- `findings` — finding model, severity scoring, deduplication
|
|
140
|
+
- `reporting` — report renderers (Markdown, JSON, HTML)
|
|
141
|
+
- `plugins` — plugin discovery and the `Check` base class
|
|
142
|
+
- `cli` — Typer-based command-line interface
|
|
143
|
+
|
|
144
|
+
## Plugins
|
|
145
|
+
|
|
146
|
+
Every check is a plugin. Adding a new check means subclassing
|
|
147
|
+
`redveil.plugins.base.Check`, declaring metadata (id, name, category,
|
|
148
|
+
safety profile, CWE / OWASP tags), and registering through the
|
|
149
|
+
`redveil.checks` entry-point group:
|
|
150
|
+
|
|
151
|
+
```toml
|
|
152
|
+
[project.entry-points."redveil.checks"]
|
|
153
|
+
my-check = "my_pkg.checks.my_check:MyCheck"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The orchestrator wires each plugin with the framework's HTTP client and
|
|
157
|
+
scope controller. Plugins cannot instantiate their own HTTP client —
|
|
158
|
+
`bind()` validates that the supplied client is bound to the
|
|
159
|
+
orchestrator's scope.
|
|
160
|
+
|
|
161
|
+
## Documentation
|
|
162
|
+
|
|
163
|
+
- [USER_GUIDE.md](USER_GUIDE.md) — installation, concepts, CLI reference,
|
|
164
|
+
scope configuration examples, output interpretation, safety, and
|
|
165
|
+
troubleshooting.
|
|
166
|
+
- [CHANGELOG.md](CHANGELOG.md) — version history and release notes.
|
|
167
|
+
- [docs/architecture.md](docs/architecture.md) — internal architecture,
|
|
168
|
+
request lifecycle, safety model, plugin contract, event taxonomy, and
|
|
169
|
+
testing strategy.
|
|
170
|
+
- [examples/](examples/) — runnable scope file templates for staging,
|
|
171
|
+
authenticated, multi-principal, and OOB scenarios.
|
|
172
|
+
|
|
173
|
+
## License
|
|
174
|
+
|
|
175
|
+
MIT — see [LICENSE](LICENSE).
|
|
176
|
+
|
|
177
|
+
## Disclaimer
|
|
178
|
+
|
|
179
|
+
This tool is provided for defensive security testing only. The authors
|
|
180
|
+
disclaim all responsibility for any unauthorized or unlawful use. Always
|
|
181
|
+
obtain explicit, written authorization before testing any system you do
|
|
182
|
+
not own.
|
redveil-0.1.0/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# redveil
|
|
2
|
+
|
|
3
|
+
> **Evidence-first web vulnerability PoC framework. Not an exploit toolkit.**
|
|
4
|
+
|
|
5
|
+
redveil is a defensive security assessment framework that runs an auditable
|
|
6
|
+
*discover → detect → safely validate → collect evidence → assess → report*
|
|
7
|
+
pipeline against a target web application. Every outbound HTTP request passes
|
|
8
|
+
through a strict scope controller, every component reports progress through
|
|
9
|
+
an in-process event bus, and every finding ships with reproducible request
|
|
10
|
+
artifacts and step-by-step reproduction procedures.
|
|
11
|
+
|
|
12
|
+
[](#status)
|
|
13
|
+
[](#plugins)
|
|
14
|
+
[](#installation)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
|
|
17
|
+
## What it is
|
|
18
|
+
|
|
19
|
+
redveil is a CLI-first framework for authorized web security assessments.
|
|
20
|
+
You give it a scope file describing where it is allowed to send requests
|
|
21
|
+
and what credentials to use, and it produces a Markdown / JSON / HTML
|
|
22
|
+
report of every finding it can prove — without writing a single exploit
|
|
23
|
+
payload. Every finding includes a sanitized cURL command that reproduces
|
|
24
|
+
it on demand, the captured response excerpt, the CWE / OWASP taxonomy
|
|
25
|
+
tags, attack scenarios, code examples across multiple frameworks, and
|
|
26
|
+
ordered remediation steps.
|
|
27
|
+
|
|
28
|
+
## What it is NOT
|
|
29
|
+
|
|
30
|
+
- Not an exploit framework. No reverse shells, no persistence primitives,
|
|
31
|
+
no credential extraction, no data exfiltration, no denial-of-service.
|
|
32
|
+
- Not a destructive payload toolkit. SQLi and CMDi are time-based blind
|
|
33
|
+
probes only — they never extract rows, never execute commands.
|
|
34
|
+
- Not a public-internet scanner. The framework enforces a strict host
|
|
35
|
+
allowlist and is intended for authorized assessment only.
|
|
36
|
+
|
|
37
|
+
## Safety
|
|
38
|
+
|
|
39
|
+
Every check declares its required safety profile. The runtime refuses to
|
|
40
|
+
execute any check that exceeds the operator's chosen profile. The
|
|
41
|
+
profiles are PASSIVE (observation only), LOW_IMPACT (safe probes), and
|
|
42
|
+
ACTIVE (authenticated IDOR, time-based blind SQLi, OOB SSRF via the
|
|
43
|
+
operator's callback domain, time-based CMDi detection — each bounded
|
|
44
|
+
and non-destructive).
|
|
45
|
+
|
|
46
|
+
The ACTIVE profile requires explicit `acknowledged_safety_terms=true`
|
|
47
|
+
in the scope file. The framework will not include reverse shells,
|
|
48
|
+
persistence, credential extraction, denial-of-service, or data
|
|
49
|
+
destruction — by design and going forward.
|
|
50
|
+
|
|
51
|
+
**Use only against systems you own or have explicit written authorization
|
|
52
|
+
to test.** The authors disclaim all responsibility for unauthorized use.
|
|
53
|
+
|
|
54
|
+
## Quick example
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Install
|
|
58
|
+
git clone https://github.com/your-org/redveil.git
|
|
59
|
+
cd redveil
|
|
60
|
+
python3.12 -m venv .venv
|
|
61
|
+
source .venv/bin/activate
|
|
62
|
+
pip install -e ".[dev]"
|
|
63
|
+
|
|
64
|
+
# Scan a public surface with default (PASSIVE) checks
|
|
65
|
+
redveil scan https://staging.example.com --scope examples/scope.staging.yaml
|
|
66
|
+
|
|
67
|
+
# List all built-in check plugins
|
|
68
|
+
redveil list-checks
|
|
69
|
+
|
|
70
|
+
# Re-render a report from an existing findings.json
|
|
71
|
+
redveil report reports/staging.example.com
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Reports land under `reports/<target-name>/` as `summary.md`,
|
|
75
|
+
`findings.json`, per-finding `findings/<id>.md`, and a self-contained
|
|
76
|
+
`report.html`.
|
|
77
|
+
|
|
78
|
+
## Status
|
|
79
|
+
|
|
80
|
+
All five development phases are complete:
|
|
81
|
+
|
|
82
|
+
- **Phase 1** — Configuration, scope controller, rate-limited HTTP client,
|
|
83
|
+
plugin registry, event bus, lifecycle state machine, CLI.
|
|
84
|
+
- **Phase 2** — Finding model, evidence store with sanitization,
|
|
85
|
+
vulnerability knowledge base, deduplicator, report renderers.
|
|
86
|
+
- **Phase 3** — Discovery (crawler, subdomain finder) and passive check
|
|
87
|
+
plugins (security headers, CORS, methods, disclosure, source maps,
|
|
88
|
+
open redirect indicator, session cookie).
|
|
89
|
+
- **Phase 4** — Low-impact check plugins (reflected XSS, source map
|
|
90
|
+
fingerprinting, additional disclosure heuristics).
|
|
91
|
+
- **Phase 5** — Active check plugins (time-based blind SQLi, OOB SSRF,
|
|
92
|
+
time-based CMDi, path traversal indicator, BOLA / IDOR across
|
|
93
|
+
multiple test principals, BFLA, GraphQL introspection, mass
|
|
94
|
+
assignment).
|
|
95
|
+
|
|
96
|
+
The release ships with **17 built-in check plugins** and **900+ unit and
|
|
97
|
+
integration tests**. The local vulnerable Flask lab under `tests/lab/`
|
|
98
|
+
exercises the full pipeline end-to-end.
|
|
99
|
+
|
|
100
|
+
## Architecture
|
|
101
|
+
|
|
102
|
+
The package is organized into focused subpackages:
|
|
103
|
+
|
|
104
|
+
- `core` — orchestration, scope control, event bus, lifecycle
|
|
105
|
+
- `http` — async HTTP client, request/response abstractions, rate limiter
|
|
106
|
+
- `discovery` — crawling, endpoint and parameter enumeration
|
|
107
|
+
- `checks` — 17 built-in vulnerability check plugins
|
|
108
|
+
- `validation` — safe-in-place validators and PoC executors
|
|
109
|
+
- `evidence` — request/response capture, hashing, sanitization
|
|
110
|
+
- `findings` — finding model, severity scoring, deduplication
|
|
111
|
+
- `reporting` — report renderers (Markdown, JSON, HTML)
|
|
112
|
+
- `plugins` — plugin discovery and the `Check` base class
|
|
113
|
+
- `cli` — Typer-based command-line interface
|
|
114
|
+
|
|
115
|
+
## Plugins
|
|
116
|
+
|
|
117
|
+
Every check is a plugin. Adding a new check means subclassing
|
|
118
|
+
`redveil.plugins.base.Check`, declaring metadata (id, name, category,
|
|
119
|
+
safety profile, CWE / OWASP tags), and registering through the
|
|
120
|
+
`redveil.checks` entry-point group:
|
|
121
|
+
|
|
122
|
+
```toml
|
|
123
|
+
[project.entry-points."redveil.checks"]
|
|
124
|
+
my-check = "my_pkg.checks.my_check:MyCheck"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The orchestrator wires each plugin with the framework's HTTP client and
|
|
128
|
+
scope controller. Plugins cannot instantiate their own HTTP client —
|
|
129
|
+
`bind()` validates that the supplied client is bound to the
|
|
130
|
+
orchestrator's scope.
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
- [USER_GUIDE.md](USER_GUIDE.md) — installation, concepts, CLI reference,
|
|
135
|
+
scope configuration examples, output interpretation, safety, and
|
|
136
|
+
troubleshooting.
|
|
137
|
+
- [CHANGELOG.md](CHANGELOG.md) — version history and release notes.
|
|
138
|
+
- [docs/architecture.md](docs/architecture.md) — internal architecture,
|
|
139
|
+
request lifecycle, safety model, plugin contract, event taxonomy, and
|
|
140
|
+
testing strategy.
|
|
141
|
+
- [examples/](examples/) — runnable scope file templates for staging,
|
|
142
|
+
authenticated, multi-principal, and OOB scenarios.
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
MIT — see [LICENSE](LICENSE).
|
|
147
|
+
|
|
148
|
+
## Disclaimer
|
|
149
|
+
|
|
150
|
+
This tool is provided for defensive security testing only. The authors
|
|
151
|
+
disclaim all responsibility for any unauthorized or unlawful use. Always
|
|
152
|
+
obtain explicit, written authorization before testing any system you do
|
|
153
|
+
not own.
|