Beast403
An accuracy-first 403 bypass scanner. Most 403 bypass tools judge success by a single shallow signal (status code or response length) and drown you in false positives. Beast403's whole point is the opposite: it verifies every candidate against live, per-target oracles and reports only the bypasses that survive, each with a confidence score and a plain-English reason.
⚠️ Authorized testing only. Use Beast403 exclusively against systems you are explicitly permitted to test (in-scope bug-bounty / pentest engagements). You are responsible for complying with the law and program rules.
Why it's different
A bypass is a parser differential: the guard (proxy/WAF) and the backend normalize the same request differently, so a path the guard reads as "not the blocked one" is normalized by the backend back into the protected resource. Tools that fire those tricks are common. The hard part is not getting fooled by:
200responses whose body says Forbidden / Login (soft blocks)- redirects to the home or login page
- SPA / catch-all sites where every path returns the same
200shell - custom
404pages served with status200 - dynamic content (tokens, dates) that shifts response length
Beast403 kills these by building a reference set first and classifying every response against it.
How it works (pipeline)
URL → fingerprint → oracles → techniques → responses → features → verdicts
- Fingerprint the stack (server / WAF) to pick which tricks are worth firing.
- Calibrate oracles — measured live, per target:
- baseline: the target path as-is (usually
403) - not-found: a few random garbage paths (also detects SPA/catch-all)
- public: a known-public path (home/root)
- authorized (optional): with
--auth-header, the shape of real success
- baseline: the target path as-is (usually
- Generate techniques — paths, headers, methods, encoding (~87 probes), gated by the fingerprint. A technique only generates candidates; it never judges success.
- Verify each response with a five-rung ladder that compares its structure (a SimHash of the tag skeleton, not its size) to the oracles: matches the block page → reject; matches not-found / SPA → reject; matches the public page → reject; has denial markers → reject; otherwise score a transparent, additive confidence and report it.
Installation
git clone https://github.com/sand8storm/Beast403.git
cd Beast403
# use a virtual environment (required on Kali/Debian due to PEP 668)
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# install as a package -> gives you the `beast403` command, runnable anywhere
pip install -e .
Requires Python 3.10+. After pip install -e . you can run either:
beast403 https://target.com /admin # console command
python -m beast403.cli https://target.com /admin # equivalent
Usage
# basic scan
python -m beast403.cli https://target.com /admin
# markdown PoC to a file
python -m beast403.cli https://target.com /admin -o markdown --out-file poc.md
# JSON, only findings above 60% confidence
python -m beast403.cli https://target.com /admin -o json --min-confidence 0.6
# supply an authorized baseline (O4 oracle) for higher accuracy
python -m beast403.cli https://target.com /admin --auth-header "Cookie: session=..."
# see every raw 200 (pre-verifier) to understand the false-positive problem
python -m beast403.run https://target.com /admin
Benchmark (the point of the project)
Prove the false-positive claim with numbers. Build a labeled file from your lab:
{
"base": "https://localhost:8443",
"targets": [
{"path": "/admin", "bypassable": true},
{"path": "/nope", "bypassable": false}
]
}
python -m beast403.bench ground_truth.json --min-confidence 0.5
# -> precision / recall / false-positive-rate
Project layout
beast403/
├── cli.py full pipeline + options (main entry)
├── run.py raw pre-verifier dump (debugging / teaching)
├── bench.py precision / recall / FP-rate vs ground truth
├── core/ models (data contracts) + async engine
├── recon/ stack/WAF fingerprinting
├── oracle/ oracle calibration + SPA detection
├── techniques/ paths · headers · methods · encoding · registry
├── analysis/ features · similarity (SimHash) · verifier
└── report/ json · markdown PoC
Known limitations
- Raw paths (solved): clients like httpx normalize the URL (collapsing
..,//, re-encoding) or reject mangled paths, silently defeating path tricks. Beast403 ships a raw socket sender (--engine raw, the default) that puts the exact request-target bytes on the wire, so/admin/..;/,/%2fadmin, and/./admin/./are sent as written. Use--engine httpxfor the normalizing client if you ever need it. - Thresholds (
SAME, confidence weights) ship with sensible defaults; calibrate them on your own labeled data withbench.py. - HTTP/2 and protocol-level differentials are out of scope for v1.
- The adaptive mutation engine (learning which payloads to try from feedback) is future work.
Troubleshooting
ModuleNotFoundError: No module named 'beast403'
You're running from the wrong directory, or the package isn't installed. The
permanent fix is pip install -e . from the repo root (then beast403 works
from anywhere). Without installing, you must run python -m beast403.cli from
the directory that contains the beast403/ package folder.
error: externally-managed-environment (Kali/Debian)
PEP 668 blocks system-wide pip. Use a virtualenv (shown in Installation), or as
a last resort pip install -e . --break-system-packages.
beast403: command not found
The console command only exists after pip install -e . inside an active
virtualenv. Re-activate it with source .venv/bin/activate.
The tool finds nothing / paths look normalized
Make sure you're on the default --engine raw. The httpx engine normalizes
paths and can hide path-based bypasses.
License
MIT — see LICENSE.
Metadata
Release files for beast403 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| beast403-0.1.0.tar.gz | 33.7 kB | Without provenance | Details for beast403-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| beast403-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for beast403-0.1.0-py3-none-any.whl |
Total release size: 75.0 kB
Release files / beast403-0.1.0.tar.gz
| Download URL | beast403-0.1.0.tar.gz |
|---|---|
| Size | 33.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b0f50a6ea7a7d56e82ed56c7a427c66e7158f1dc0bf92f8c03ef45e3fd90555
|
|
BLAKE2b-256 checksum How to use checksums |
a6288f74602cb89232c02a7143fc8f15b70a2dcc4129690feb17787b864d4387
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / beast403-0.1.0-py3-none-any.whl
| Download URL | beast403-0.1.0-py3-none-any.whl |
|---|---|
| Size | 41.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ba1a35a6305f3f965ac73728bf1db01f0c0ac8fcda1ee73223409872e43dce18
|
|
BLAKE2b-256 checksum How to use checksums |
423635fb4c72446896d7277c3400e24168e92fefb4afe41b8df2d9616f6d66cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Security for beast403 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.