with one click
cdn-waf-fingerprinter
Identifies CDNs (Cloudflare, Akamai, Fastly) and WAFs
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Identifies CDNs (Cloudflare, Akamai, Fastly) and WAFs
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Systematic IDOR / BOLA hunting methodology. Use when testing any endpoint that accepts an ID, UUID, slug, filename, or reference to a user-owned object.
SQL injection hunting methodology across error-based, union, blind boolean, and time-based variants. Use when testing any input that might reach a database.
SSRF hunting methodology with OOB detection via interactsh, cloud metadata targets, and blind SSRF techniques. Use on any feature that accepts a URL, hostname, or external reference.
XSS hunting methodology — reflected, stored, and DOM — with context-aware payloads. Use when testing any input that could reach a browser.
OWASP Top 10 (2021) and API Top 10 (2023) quick reference with attack patterns, test ideas, and CWE mappings. Load when hunting, code-reviewing for security, or writing bug bounty reports.
Bug bounty report generation — structure, triager-friendly writing, CVSS scoring, and chain reporting. Use when finalizing a finding for submission.
| name | cdn-waf-fingerprinter |
| description | Identifies CDNs (Cloudflare, Akamai, Fastly) and WAFs |
| tools | Read, Grep |
| model | inherit |
| hooks | {"PostToolUse":[{"matcher":"Read","hooks":[{"type":"command","command":"../../../hooks/skills/post_output_validation_hook.sh"}]}]} |
Identify Content Delivery Networks (CDNs), Web Application Firewalls (WAFs), and DDoS protection services from HTTP headers, DNS records, and TLS fingerprints.
Raw signals from Phase 2:
http_signals - CDN/WAF-specific headers, cookiesdns_signals - CDN CNAME delegationsip_signals - CDN IP rangestls_signals - JARM fingerprints, certificate issuers| CDN | Detection Signals | Weight |
|---|---|---|
| Cloudflare | CF-RAY header, cf-* cookies, cloudflare-nginx server | 45 |
| Akamai | X-Akamai-, Akamai- headers, akamaiedge.net CNAME | 45 |
| Fastly | X-Served-By: cache-*, Fastly headers | 45 |
| AWS CloudFront | X-Amz-Cf-Id, cloudfront.net CNAME | 45 |
| Azure CDN | X-Azure-Ref, azureedge.net CNAME | 40 |
| Google Cloud CDN | Via: google, X-GFE-* headers | 40 |
| Cloudinary | cloudinary.com URLs | 35 |
| imgix | imgix.net URLs | 35 |
| KeyCDN | X-Edge-IP, keycdn.com | 35 |
| StackPath | X-HW headers, stackpath.com | 35 |
| BunnyCDN | X-Bunny-* headers | 35 |
| WAF | Detection Signals | Weight |
|---|---|---|
| Cloudflare WAF | CF-RAY, cf_clearance cookie | 40 |
| AWS WAF | X-Amz-Cf-Id with WAF rules | 35 |
| Akamai Kona | Akamai-* WAF headers | 40 |
| Imperva/Incapsula | X-Iinfo, incap_ses_* cookies | 45 |
| Sucuri | X-Sucuri-ID, sucuri.net | 40 |
| ModSecurity | Server: Apache + ModSecurity patterns | 35 |
| F5 BIG-IP | BIGipServer cookie | 40 |
| Barracuda | barra_counter_session cookie | 35 |
| Fortinet FortiWeb | FORTIWAFSID cookie | 40 |
| Service | Detection Signals | Weight |
|---|---|---|
| Cloudflare | CF-RAY, __cf_bm cookie | 40 |
| AWS Shield | CloudFront + Shield indicators | 35 |
| Akamai Prolexic | Akamai headers | 35 |
| Arbor Networks | Specific patterns | 30 |
| Project Shield | Google infrastructure | 35 |
| Service | Detection Signals | Weight |
|---|---|---|
| Cloudflare Bot Management | __cf_bm cookie | 40 |
| PerimeterX | _px* cookies | 40 |
| DataDome | datadome cookie | 40 |
| Shape Security | Shape patterns | 35 |
| Kasada | Kasada patterns | 35 |
| Arkose Labs | Arkose patterns | 35 |
{
"headers": {
"CF-RAY": true,
"CF-Cache-Status": true,
"Server": "cloudflare"
},
"cookies": [
"__cfduid",
"cf_clearance",
"__cf_bm"
],
"cname_patterns": [
"cdn.cloudflare.net"
],
"ip_ranges": "103.21.244.0/22, 103.22.200.0/22, ...",
"jarm_hash": "29d29d15d29d29d00042d42d000000cd19c7d2c21d91e77fcb9e7a8d6d1d8c"
}
{
"headers": {
"X-Akamai-Transformed": true,
"X-Akamai-Session-Info": true,
"X-Akamai-Pragma-Client-IP": true,
"Akamai-Origin-Hop": true
},
"cname_patterns": [
"edgekey.net",
"edgesuite.net",
"akamaiedge.net",
"akamaized.net"
]
}
{
"headers": {
"X-Served-By": "cache-",
"X-Cache": true,
"X-Cache-Hits": true,
"Fastly-Debug-Digest": true,
"X-Timer": true
},
"cname_patterns": [
"fastly.net",
"fastlylb.net"
]
}
{
"headers": {
"X-Amz-Cf-Id": true,
"X-Amz-Cf-Pop": true,
"Via": "CloudFront"
},
"cname_patterns": [
"cloudfront.net"
]
}
{
"headers": {
"X-Iinfo": true,
"X-CDN": "Incapsula"
},
"cookies": [
"incap_ses_*",
"visid_incap_*",
"nlbi_*"
]
}
def fingerprint_cdn_waf(signals):
results = []
# Header-based Detection
for cdn in CDN_PATTERNS:
matches = 0
evidence = []
for header, expected in cdn.headers.items():
if header in signals.http_signals.headers:
if expected == True or expected in signals.http_signals.headers[header]:
matches += 1
evidence.append({
"type": "http_header",
"value": f"{header}: {signals.http_signals.headers[header]}"
})
if matches > 0:
results.append({
"name": cdn.name,
"category": cdn.category,
"signals": evidence,
"total_weight": cdn.base_weight + (matches * 5)
})
# Cookie-based Detection
for waf in WAF_PATTERNS:
for cookie in signals.http_signals.cookies:
for waf_cookie in waf.cookies:
if waf_cookie in cookie or fnmatch(cookie, waf_cookie):
results.append({
"name": waf.name,
"category": "WAF",
"signals": [{
"type": "cookie",
"value": f"Cookie pattern: {cookie}"
}],
"total_weight": waf.weight
})
break
# CNAME-based Detection
for cname in signals.dns_signals.cname_records:
for cdn in CDN_PATTERNS:
for pattern in cdn.cname_patterns:
if pattern in cname.target:
add_if_not_exists(results, cdn.name, "CDN", {
"type": "dns_cname",
"value": f"CNAME → {cname.target}"
}, cdn.weight)
# JARM Fingerprint Detection
if signals.tls_signals.jarm_hash:
for cdn in JARM_DATABASE:
if signals.tls_signals.jarm_hash == cdn.jarm_hash:
add_if_not_exists(results, cdn.name, cdn.category, {
"type": "jarm_fingerprint",
"value": f"JARM match: {signals.tls_signals.jarm_hash}"
}, 40)
return results
{
"skill": "cdn_waf_fingerprinter",
"results": {
"technologies": [
{
"name": "Cloudflare",
"category": "CDN",
"signals": [
{
"type": "http_header",
"value": "CF-RAY: 7a1b2c3d4e5f6g7h-IAD",
"weight": 40
},
{
"type": "http_header",
"value": "Server: cloudflare",
"weight": 35
},
{
"type": "cookie",
"value": "__cf_bm cookie present",
"weight": 30
}
],
"total_weight": 105,
"additional_services": ["Bot Management", "DDoS Protection"]
},
{
"name": "Cloudflare WAF",
"category": "WAF",
"signals": [
{
"type": "cookie",
"value": "cf_clearance cookie present",
"weight": 35
}
],
"total_weight": 35
}
],
"security_summary": {
"cdn_provider": "Cloudflare",
"waf_enabled": true,
"waf_provider": "Cloudflare WAF",
"ddos_protection": "Cloudflare",
"bot_management": "Cloudflare Bot Management"
},
"cache_behavior": {
"cache_status_header": "CF-Cache-Status",
"observed_statuses": ["HIT", "MISS", "DYNAMIC"]
}
}
}
Cloudflare (CDN + WAF) → Origin Server
- All traffic passes through Cloudflare
- WAF rules applied at edge
- Origin IP potentially hidden
CDN1 (Cloudflare) → CDN2 (CloudFront) → Origin
- Possible for different purposes
- Content caching vs security