redveil
web vulnerability scanner. find vulns, validate safely, get a report you can actually send to a dev team.
$ pip install redveil
$ redveil scan https://target.example --scope scope.yaml
$ redveil list-checks
install
pip install redveil
or from source:
git clone https://github.com/FitzyPrjkt/Redveil
cd redveil
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
requires python 3.12+.
quick start
# 1. write a scope file
cat > scope.yaml <<'EOF'
target:
base_url: https://staging.example.com
scope:
allowed_hosts:
- staging.example.com
allowed_paths:
- /api/*
- /account/*
limits:
requests_per_second: 2
max_requests: 500
authorization:
active_testing: false
acknowledged_safety_terms: false
profile: passive
EOF
# 2. scan
redveil scan https://staging.example.com --scope scope.yaml
# 3. results
ls reports/staging.example.com/
cat reports/staging.example.com/summary.md
open reports/staging.example.com/report.html
what you get
- 17 built-in checks — security headers, CORS, info disclosure, HTTP methods, open redirect indicators, source map exposure, XSS (canary reflection), SQLi (time-based), SSRF (OOB), command injection (time-based), path traversal (canary), BOLA/IDOR, BFLA, GraphQL, mass assignment, session/cookie config, subdomain discovery
- multi-format reports — markdown per finding, JSON for tooling, self-contained HTML
- strict scope enforcement — host + path allowlist, redirect chain validation, destructive path heuristic. plugins cannot bypass it
- multi-principal auth for BOLA testing — define Account A + Account B in scope, redveil compares what each can see
- evidence sanitization — JWTs, AWS keys, GitHub tokens, credit cards, cookies, emails all redacted before report
- local lab at
tests/lab/— a Flask app with 17 deliberately vulnerable endpoints for testing without hitting the internet
safety
redveil is a defensive tool. the active checks (XSS, SQLi, SSRF, command injection, path traversal) use bounded non-destructive payloads:
- XSS: alphanumeric canary strings. no
<script>, no execution - SQLi/command injection: time-based delay only (
sleep 3). no data extraction - SSRF: OOB callback to operator's own domain. no internal IP probing
- path traversal: unique canary filenames. no real file reads
runtime assertions in each check verify these constraints on every import. the test suite has explicit safety tests for every check.
you are responsible for authorization. redveil includes guards but they only matter if you actually have permission to test the target.
see SECURITY.md for the full safety model and how to report issues.
CLI
$ redveil scan <url> [--scope FILE] [--profile PROFILE] [--output DIR]
$ redveil check <plugin-id> <url>
$ redveil list-checks
$ redveil findings <report-dir>
$ redveil report <report-dir>
profiles: passive (default, observation only), low_impact (safe probes), active (requires explicit active_testing: true in scope).
writing checks
a check is a Check subclass:
from redveil.plugins.base import Check, CheckCategory, CheckMeta, ...
class MyCheck(Check):
meta = CheckMeta(
id="my-check",
name="My Check",
category=CheckCategory.HEADERS,
safety_profile=SafetyProfile.PASSIVE,
)
async def discover(self, ctx): ...
async def validate(self, ctx, candidate): ...
async def collect_evidence(self, candidate): ...
async def assess(self, candidate): ...
register in pyproject.toml:
[project.entry-points."redveil.checks"]
my-check = "my_pkg.checks:MyCheck"
see CONTRIBUTING.md for the full plugin spec.
files
USER_GUIDE.md— installation, configuration, CLI reference, output interpretationCONTRIBUTING.md— how to add checksPUBLISH.md— how to publish a new releaseSECURITY.md— safety model, how to report issuesCHANGELOG.md— release notesdocs/architecture.md— internal designexamples/— scope files for common scenariostests/lab/— vulnerable Flask app for local testing
status
17 checks, 920 tests passing, 0 known safety violations. actively used against staging environments. not yet battle-tested at scale — feedback and bug reports welcome.
license
MIT. see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file redveil-1.7.0.tar.gz.
File metadata
- Download URL: redveil-1.7.0.tar.gz
- Upload date:
- Size: 287.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab48c8840e12687292aba2a9c39ad2572b8a9d60b7134a0ac8716f5dd635aff2
|
|
| MD5 |
44e2ee4fd3e01be3af9ff87f1ccc8429
|
|
| BLAKE2b-256 |
a1144954ee414bf0c1349a3e8bd23154f37d81f4dba2931013cdd34e8ae05a89
|
File details
Details for the file redveil-1.7.0-py3-none-any.whl.
File metadata
- Download URL: redveil-1.7.0-py3-none-any.whl
- Upload date:
- Size: 232.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fdea1d86f5c20bce9c779f281ccd81bd3100a3825c22ebc687d8e46d2317b40
|
|
| MD5 |
fd19075494fb0b6dc08050de6f662a17
|
|
| BLAKE2b-256 |
4325c22d2b97df89684e65930f9c5f68fd0ef19343dd9159636b17026990f01d
|