ML threat prevention
Three-phase engine: decode, attack-family indicators, contextual fusion. No signature wait for JNDI / Spring / Text4Shell class attacks.
xorappsec is a machine-learning reverse-proxy WAF written in Rust. It uses ML (not a remote “AI” API) to decode every request, score attack families, and decide in the context of this application — locally, without sending traffic to a cloud inspector.
The same three claims a serious ML WAF has to earn.
OWASP Top-10 and zero-day class payloads (Log4Shell, Spring4Shell, Text4Shell) are decoded then scored. No CVE pack required for those families.
Per-asset unsupervised learning, trusted sources, and detect-learn → prevent-learn so you do not live in exception YAML.
Declarative policy, Helm, systemd, SIGHUP reload, doctor. Configuration is data, not a console ritual.
The inspection crate runs complementary engines beside the contextual scorer.
Three-phase engine: decode, attack-family indicators, contextual fusion. No signature wait for JNDI / Spring / Text4Shell class attacks.
Same path on JSON and forms. Optional OpenAPI 3 path, method, and required-parameter checks.
JS challenge cookie on configured URIs. Issued tokens expire; the engine never trusts a static header.
Built-in web CVE patterns plus Snort-style content: files so a named CVE can still appear in the log.
Extension, magic bytes (MZ/ELF), polyglot / script-as-image, path elements in filenames.
Per source identity (IP, header, cookie, JWT claim) with longest-URI match.
Local CrowdSec-style IP file. No phone-home; you control the list.
Response scan for PANs (Luhn), keys, PEM; strips or blocks 5xx pages that leak traces.
GitOps YAML. Modes, practices, exceptions, trusted sources, custom block pages. Hot-reload.
These are decode + indicator + floor problems. The shipped basic model already treats them as critical.
${jndi:ldap://…} and nested ${::-j} lookups expand in Phase 1. The JNDI family then cannot be talked down by a Kindergarten baseline.
Bind attacks hide in parameter names (class.module.classLoader…). The decoder scans names, not just values.
${url:…} / ${script:…} interpolation is a lookup family, same expander as Log4Shell.
Bodies are flattened. {"q":"1' OR 1=1--"} is still a SQL-family feature after explode.
First-class: Linux binary, Docker, Kubernetes/Helm, systemd. The data plane is a reverse proxy — sit it in front of the origin, or one hop behind NGINX, Kong, Envoy, or Istio.
Not a cloud model API. Two models plus fusion, on the box.
32-d logistic over family scores, entropy, decode depth. Public basic weights ship in-tree; advanced files load at runtime.
Per-asset URL baselines and an Isolation Forest on benign traffic. Kindergarten → PhD tells you when to prevent.
Weighted mix with floors so a young model cannot allow decoded JNDI. Details on the tech page.
cargo build --release -p xorappsec ./target/release/xorappsec demo
Proxy :8080 · dashboard :9090 · origin :18080
TLS, management tokens, trusted proxies, Helm, systemd, Prometheus, JSON access logs, request IDs, graceful drain.