Web Cache Vulnerability Scanner (WCVS) — a community fork with improved Web Cache Deception coverage, additional unkeyed header tests, and bug fixes.
Based on the original by Hackmanit and Maximilian Hildebrand.
- Unkeyed header poisoning
- Unkeyed parameter poisoning
- Parameter cloaking
- Fat GET
- HTTP response splitting
- HTTP request smuggling
- HTTP header oversize (HHO)
- HTTP meta character (HMC)
- HTTP method override (HMO)
- Parameter pollution
- Path parameter injection — appending static-looking path segments (e.g.,
/.css,/nonexistent.css) - Path traversal — using
/../,/%2e%2e/, double-encoded, and Tomcat-style (/..;/) traversals targeting.css,.js, and/robots.txt - Origin server normalization exploitation — cache keys a path under a static prefix (e.g.,
/static/), while the origin decodes%2F..%2Fand serves the sensitive resource - Single-level encoded path traversal to
/robots.txt— using delimiters like;,?,&,%0A,%09,%00,%3B,%23,%3F,%26followed by%2f%2e%2e%2frobots.txt - Special character delimiters — both encoded (
%0A,%09,%00,%3B,%23,%3F,%26) and literal (;,?,&) before static-looking extensions - Double URL-encoding —
%252e%252e%2Fand%252F..%252Fstyle traversals - Multiple static file extensions —
.css,.js,.png,.ico,.woff2,.svg,.json
- Automatic web cache fingerprinting before testing (adapts strategy per cache type)
- JSON report generation (with optional HTML special-character escaping)
- Built-in URL crawler with configurable depth, domain filtering, and exclusions
- Proxy support (Burp Suite, OWASP ZAP, etc.)
- Rate limiting and multi-threading controls for responsible testing
- CI/CD pipeline-friendly design
| Technique | Example Pattern | Description |
|---|---|---|
| Path parameter | /.css |
Appends a static-looking path segment |
| Path traversal (unencoded) | /../nonexistent.css |
Traverses up using standard .. |
| Path traversal (encoded) | /%2e%2e/nonexistent.css |
Traverses using percent-encoded dots |
| Encoded delimiter + traversal | ;%2f%2e%2e%2frobots.txt |
Semicolon delimiter with encoded traversal to robots.txt |
| Origin normalization | /static/..%2Fmy-account |
Cache keys static path; origin resolves traversal |
| Double URL-encoding | %252e%252e%2Fnonexistent.css |
Bypasses single-decode defences |
| Tomcat-style traversal | /..;/nonexistent.css |
Uses ..; path traversal |
| Special char + extension | %0Anonexistent.css |
Newline or other control chars before extension |
| Query/fragment injection | ?nonexistent.css |
Question mark before static-looking path |
Prebuilt binaries for Linux, macOS, and Windows are available on the releases page.
go install -v github.com/Spondon16/wcvs@latestgit clone https://github.com/Spondon16/wcvs.git
cd wcvs
go build -o wcvs .git clone https://github.com/Spondon16/wcvs.git
cd wcvs
docker build -t wcvs .
docker run -it wcvs /wcvs --helpwcvs -u https://example.comTwo wordlists are required for header and parameter poisoning techniques — one for headers and one for parameters. Place them in the same directory as WCVS, or specify them with --headerwordlist/-hw and --parameterwordlist/-pw:
wcvs -u https://example.com -hw "file:wordlists/header_wordlist.txt" -pw "file:wordlists/parameter_wordlist.txt"| Flag | Short | Description |
|---|---|---|
--cacheheader |
-ch |
Custom cache header to detect hits/misses |
--setcookies |
-sc |
Cookies to add to every request |
--setheaders |
-sh |
Headers to add to every request |
--setparameters |
-sp |
URL parameters to add to every request |
--post |
-post |
Use POST instead of GET |
--setbody |
-sb |
Request body to send (used with -post) |
--contenttype |
-ct |
Value for the Content-Type header |
--useragentchrome |
-uac |
Use a Chrome user-agent string |
wcvs -u https://example.com -sc "PHPSESSID=123"
wcvs -u https://example.com -sh "Referer: localhost"
wcvs -u https://example.com -post -sb "admin=true"wcvs -u https://example.com -gr
wcvs -u https://example.com -gr -gp /home/user/Documentswcvs -u https://example.com -r 5
wcvs -u https://example.com -r 5 -rl 2wcvs -u https://example.com -up
wcvs -u https://example.com -up -purl http://127.0.0.1:8081wcvs -u https://example.com -rr 10
wcvs -u https://example.com -t 50Run wcvs -h for the full list of flags.
Web cache poisoning exploits discrepancies between what a cache stores and what it actually serves to users. By injecting malicious content via unkeyed inputs (headers, parameters, etc.), an attacker can poison a cached response that is then delivered to every subsequent visitor.
Web cache deception tricks a cache into storing a response to a sensitive, authenticated resource by disguising the request URL as a public static file.
- Is Your Application Vulnerable to Web Cache Poisoning?
- Web Cache Vulnerability Scanner (WCVS) - Free, Customizable, Easy-To-Use
WCVS is developed by Hackmanit and Maximilian Hildebrand, and licensed under the Apache License, Version 2.0.
