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.
Files changed (122) hide show
  1. redveil-0.1.0/.gitignore +53 -0
  2. redveil-0.1.0/CHANGELOG.md +92 -0
  3. redveil-0.1.0/LICENSE +21 -0
  4. redveil-0.1.0/PKG-INFO +182 -0
  5. redveil-0.1.0/README.md +153 -0
  6. redveil-0.1.0/USER_GUIDE.md +531 -0
  7. redveil-0.1.0/docs/architecture.md +388 -0
  8. redveil-0.1.0/examples/scope.authenticated.yaml +91 -0
  9. redveil-0.1.0/examples/scope.multi-principal.yaml +110 -0
  10. redveil-0.1.0/examples/scope.oob.yaml +93 -0
  11. redveil-0.1.0/examples/scope.staging.yaml +101 -0
  12. redveil-0.1.0/examples/scope.yaml +36 -0
  13. redveil-0.1.0/examples/smoke_check.py +28 -0
  14. redveil-0.1.0/pyproject.toml +82 -0
  15. redveil-0.1.0/reports/.gitkeep +0 -0
  16. redveil-0.1.0/src/redveil/__init__.py +11 -0
  17. redveil-0.1.0/src/redveil/checks/__init__.py +1 -0
  18. redveil-0.1.0/src/redveil/checks/bfla.py +201 -0
  19. redveil-0.1.0/src/redveil/checks/bola.py +750 -0
  20. redveil-0.1.0/src/redveil/checks/command_injection.py +218 -0
  21. redveil-0.1.0/src/redveil/checks/cors.py +373 -0
  22. redveil-0.1.0/src/redveil/checks/disclosure.py +306 -0
  23. redveil-0.1.0/src/redveil/checks/graphql.py +357 -0
  24. redveil-0.1.0/src/redveil/checks/headers_security.py +235 -0
  25. redveil-0.1.0/src/redveil/checks/http_methods.py +412 -0
  26. redveil-0.1.0/src/redveil/checks/mass_assignment.py +218 -0
  27. redveil-0.1.0/src/redveil/checks/path_traversal.py +228 -0
  28. redveil-0.1.0/src/redveil/checks/redirect.py +192 -0
  29. redveil-0.1.0/src/redveil/checks/session_cookie.py +694 -0
  30. redveil-0.1.0/src/redveil/checks/source_maps.py +218 -0
  31. redveil-0.1.0/src/redveil/checks/sqli.py +206 -0
  32. redveil-0.1.0/src/redveil/checks/ssrf.py +506 -0
  33. redveil-0.1.0/src/redveil/checks/xss.py +223 -0
  34. redveil-0.1.0/src/redveil/cli.py +265 -0
  35. redveil-0.1.0/src/redveil/config.py +261 -0
  36. redveil-0.1.0/src/redveil/core/__init__.py +44 -0
  37. redveil-0.1.0/src/redveil/core/event_bus.py +117 -0
  38. redveil-0.1.0/src/redveil/core/lifecycle.py +84 -0
  39. redveil-0.1.0/src/redveil/core/orchestrator.py +389 -0
  40. redveil-0.1.0/src/redveil/core/renderer.py +74 -0
  41. redveil-0.1.0/src/redveil/core/scope.py +202 -0
  42. redveil-0.1.0/src/redveil/discovery/__init__.py +1 -0
  43. redveil-0.1.0/src/redveil/discovery/crawler.py +390 -0
  44. redveil-0.1.0/src/redveil/discovery/subdomain_finder.py +267 -0
  45. redveil-0.1.0/src/redveil/evidence/__init__.py +1 -0
  46. redveil-0.1.0/src/redveil/evidence/evidence.py +63 -0
  47. redveil-0.1.0/src/redveil/evidence/sanitizer.py +74 -0
  48. redveil-0.1.0/src/redveil/findings/__init__.py +1 -0
  49. redveil-0.1.0/src/redveil/findings/confidence.py +12 -0
  50. redveil-0.1.0/src/redveil/findings/deduplicator.py +37 -0
  51. redveil-0.1.0/src/redveil/findings/finding.py +84 -0
  52. redveil-0.1.0/src/redveil/findings/severity.py +20 -0
  53. redveil-0.1.0/src/redveil/http/__init__.py +35 -0
  54. redveil-0.1.0/src/redveil/http/client.py +264 -0
  55. redveil-0.1.0/src/redveil/http/rate_limit.py +79 -0
  56. redveil-0.1.0/src/redveil/http/request.py +68 -0
  57. redveil-0.1.0/src/redveil/http/response.py +50 -0
  58. redveil-0.1.0/src/redveil/http/session.py +143 -0
  59. redveil-0.1.0/src/redveil/knowledge/__init__.py +0 -0
  60. redveil-0.1.0/src/redveil/knowledge/vuln_descriptions.py +3903 -0
  61. redveil-0.1.0/src/redveil/plugins/__init__.py +1 -0
  62. redveil-0.1.0/src/redveil/plugins/base.py +237 -0
  63. redveil-0.1.0/src/redveil/plugins/discovery/__init__.py +1 -0
  64. redveil-0.1.0/src/redveil/plugins/discovery/subdomain.py +344 -0
  65. redveil-0.1.0/src/redveil/plugins/loader.py +94 -0
  66. redveil-0.1.0/src/redveil/plugins/registry.py +60 -0
  67. redveil-0.1.0/src/redveil/reporting/__init__.py +1 -0
  68. redveil-0.1.0/src/redveil/reporting/html_report.py +469 -0
  69. redveil-0.1.0/src/redveil/reporting/json_report.py +25 -0
  70. redveil-0.1.0/src/redveil/reporting/markdown.py +198 -0
  71. redveil-0.1.0/src/redveil/util/__init__.py +0 -0
  72. redveil-0.1.0/src/redveil/util/urls.py +38 -0
  73. redveil-0.1.0/src/redveil/validation/__init__.py +1 -0
  74. redveil-0.1.0/tests/__init__.py +0 -0
  75. redveil-0.1.0/tests/fixtures/scope.yaml +20 -0
  76. redveil-0.1.0/tests/lab/README.md +94 -0
  77. redveil-0.1.0/tests/lab/__init__.py +5 -0
  78. redveil-0.1.0/tests/lab/app.py +583 -0
  79. redveil-0.1.0/tests/lab/data/config.ini +4 -0
  80. redveil-0.1.0/tests/lab/data/notes.txt +2 -0
  81. redveil-0.1.0/tests/lab/data/users.json +5 -0
  82. redveil-0.1.0/tests/lab/requirements.txt +1 -0
  83. redveil-0.1.0/tests/lab/run.sh +6 -0
  84. redveil-0.1.0/tests/lab/scope.yaml +22 -0
  85. redveil-0.1.0/tests/test_auth.py +194 -0
  86. redveil-0.1.0/tests/test_check_bfla.py +119 -0
  87. redveil-0.1.0/tests/test_check_bola.py +639 -0
  88. redveil-0.1.0/tests/test_check_command_injection.py +115 -0
  89. redveil-0.1.0/tests/test_check_cors.py +385 -0
  90. redveil-0.1.0/tests/test_check_disclosure.py +111 -0
  91. redveil-0.1.0/tests/test_check_graphql.py +337 -0
  92. redveil-0.1.0/tests/test_check_headers_security.py +88 -0
  93. redveil-0.1.0/tests/test_check_http_methods.py +444 -0
  94. redveil-0.1.0/tests/test_check_mass_assignment.py +117 -0
  95. redveil-0.1.0/tests/test_check_path_traversal.py +113 -0
  96. redveil-0.1.0/tests/test_check_redirect.py +93 -0
  97. redveil-0.1.0/tests/test_check_session_cookie.py +458 -0
  98. redveil-0.1.0/tests/test_check_source_maps.py +85 -0
  99. redveil-0.1.0/tests/test_check_sqli.py +125 -0
  100. redveil-0.1.0/tests/test_check_subdomain.py +344 -0
  101. redveil-0.1.0/tests/test_check_xss.py +116 -0
  102. redveil-0.1.0/tests/test_cli.py +55 -0
  103. redveil-0.1.0/tests/test_config.py +198 -0
  104. redveil-0.1.0/tests/test_crawler.py +608 -0
  105. redveil-0.1.0/tests/test_deduplicator.py +78 -0
  106. redveil-0.1.0/tests/test_event_bus.py +171 -0
  107. redveil-0.1.0/tests/test_evidence.py +67 -0
  108. redveil-0.1.0/tests/test_finding.py +67 -0
  109. redveil-0.1.0/tests/test_html_report.py +266 -0
  110. redveil-0.1.0/tests/test_http_client.py +383 -0
  111. redveil-0.1.0/tests/test_lifecycle.py +143 -0
  112. redveil-0.1.0/tests/test_orchestrator.py +367 -0
  113. redveil-0.1.0/tests/test_plugin_loader.py +60 -0
  114. redveil-0.1.0/tests/test_plugin_registry.py +113 -0
  115. redveil-0.1.0/tests/test_rate_limit.py +122 -0
  116. redveil-0.1.0/tests/test_reporting.py +102 -0
  117. redveil-0.1.0/tests/test_request.py +82 -0
  118. redveil-0.1.0/tests/test_response.py +66 -0
  119. redveil-0.1.0/tests/test_sanitizer.py +120 -0
  120. redveil-0.1.0/tests/test_scope.py +310 -0
  121. redveil-0.1.0/tests/test_subdomain_finder.py +244 -0
  122. redveil-0.1.0/tests/test_vuln_descriptions.py +189 -0
@@ -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](https://img.shields.io/badge/status-Phase_1--5_complete-brightgreen)](#status)
42
+ [![checks](https://img.shields.io/badge/built--in_checks-17-blue)](#plugins)
43
+ [![python](https://img.shields.io/badge/python-3.12%20%7C%203.13-blue)](#installation)
44
+ [![license](https://img.shields.io/badge/license-MIT-green)](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.
@@ -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](https://img.shields.io/badge/status-Phase_1--5_complete-brightgreen)](#status)
13
+ [![checks](https://img.shields.io/badge/built--in_checks-17-blue)](#plugins)
14
+ [![python](https://img.shields.io/badge/python-3.12%20%7C%203.13-blue)](#installation)
15
+ [![license](https://img.shields.io/badge/license-MIT-green)](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.