!

Security Insight

Fighting the Slopdemic: Are AI‑generated junk reports slowing you down?

How it works

From paste to tier — every step, transparently.

VulnRap doesn't score reports with a single black-box model. It runs them through a small pipeline of focused engines, each one cheap to explain and cheap to audit. Pick a sample below and hit Play to watch each step light up.

A side cross-section of a glowing transparent conduit with a glowing document travelling left-to-right through five colored chambers, suggesting a multi-stage refinement pipeline.
Live walkthrough
Confident-sounding but evidence-free.
Critical RCE in api/login. The endpoint suffers from a classic deserialization flaw which a sophisticated attacker could leverage to execute arbitrary code on the server, leading to a complete compromise of the underlying system. CVSS 9.8.
idle
Verdict: Likely AI slop
score 14/100 · tier rejected

Each step, in plain English

Every report is run through a redaction pass before it reaches any engine, model, or storage layer. Emails, IPs, JWTs, AWS keys, GitHub tokens, and a curated list of secret-shaped strings are replaced with structural placeholders like ⟨email⟩ or ⟨jwt⟩.

The placeholders preserve shape so downstream engines can still tell that "a token was here" without ever seeing the token. This is also what we hash and store — the original text is dropped on the floor.

on this sample: fired
Privacy & redaction

A pattern bank of hype phrases ("sophisticated attacker", "complete compromise", "leverages a classic flaw"), hedge-stacking, and pacing markers feeds a small classifier that scores how much the text reads like a generated security writeup vs. a human one.

High score here is suspicious but never sufficient — plenty of real engineers write in formal English. It only earns weight when the next two engines agree something is off.

on this sample: fired(0.78)
Methodology blog

The substance engine is a structural reader: it counts code fences, HTTP request lines, stack frames, file paths with line numbers, version ranges, and CVE/CWE/CVSS strings — and divides by total tokens to get a density score.

Low density on a long report is the single strongest "this is hot air" signal we have. A short report with high density is fine.

on this sample: fired(0.12)
Substance engine deep-dive

For each CWE the reporter claims (or that we infer), this engine checks whether the surrounding evidence makes sense for that weakness class. CWE-502 (deserialization) without a sink, payload, or class name is incoherent. CWE-601 (open redirect) with a curl repro and observed 302 is coherent.

Each CWE family has its own checklist of "what should be present if this is real." Mismatches dock the score; clean matches reinforce it.

on this sample: fired(0.18)
CWE coherence write-up

AVRI splits the report into assertions ("RCE", "any user", "complete compromise") and reproductions (commands, requests, observed responses, version constraints). The gap between the two is the AVRI score.

A wide gap (lots of claims, little repro) is the classic shape of generated reports. A narrow gap is a healthy "I claim X and here's exactly how to see X."

on this sample: fired(0.22)
Transparency report

The three weighted engine scores (AI Authorship 5, Technical Substance 60, CWE Coherence 35) are combined with the active sensitivity preset applied (e.g. strict-triage upweights substance and AVRI; research is more permissive). The output is a 0–100 score and a tier: rejected, needs-review, or accept.

Fusion is intentionally boring: it's a transparent weighted sum, not a black-box model. You can replay any score by hand from the three engine scores and their weights.

on this sample: fired(14/100)
Ready to try it on a real report?
Paste your own — or browse the public corpus to see scored examples.