SlopScore
10 crowdincl. 1 critic

whiterabbit

Grade the security posture of a deployed web app in one command. Built for the gaps agent-written code tends to ship with.
Open repo on GitHubgithub.com/ajauch/whiterabbit
Python · ★ 2 · 1 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)security
listed 59 minutes ago by ajauch · last checked 59 minutes ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-24: Grade the security posture of a deployed web app in one command. Built for the gaps agent-written code tends t; its own README says "WhiteRabbit was itself built with Claude Code — the CLAUDE". 2 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as ajauch. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
Grade the security posture of a deployed web app in one command. Built for the gaps agent-written code tends to ship with.
topics
ai-generated-codeappsecdevsecopsnucleipythonsecuritysecurity-scannertlsweb-security
created
2026-08-18 · pushed 2 hours ago · 85 commits · 3 contributors
languages
Python 97%HTML 3%
paperwork
code of conductcode of conduct filecontributingpull request templatelicensereadme 100% health
dependencies
✓ 6 deps, none with known advisories · OSV.dev, checked 59 minutes ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
security
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
htmlpython
topic (detected)
ai-generated-codeappsecdevsecopsnucleipythonsecuritysecurity-scannertlsweb-security
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: Grade the security posture of a deployed web app in one command. Built for the gaps agent-written code tends t; its own README says "WhiteRabbit was itself built with Claude Code — the CLAUDE". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

WhiteRabbit

CI

Grade the security posture of a web application — deployed or in source — in one command.

Agent-written code ships fast, but it ships with a predictable set of security gaps: missing headers, outdated JavaScript libraries, TLS misconfigurations, exposed admin panels, vulnerable dependencies, OWASP Top 10 code flaws. WhiteRabbit runs best-in-class scanners against a live target or a source repository and distills the results into a single letter grade (A+ through F) with actionable remediation for every finding.

# Scan a live web target
whiterabbit scan example.com

# Scan a GitHub repo for dependency CVEs and OWASP issues
whiterabbit scanrepo https://github.com/owner/repo

Why this exists

Automated code generation is accelerating how fast applications get deployed. The security fundamentals — transport encryption, header hardening, dependency hygiene — are exactly the things that slip through when speed is the priority. WhiteRabbit exists to catch those gaps post-deployment, before an attacker does.

WhiteRabbit was itself built with Claude Code — the CLAUDE.md in this repo is the real file used during development, not a demo. A scanner for agent-written code that was agent-written is the honest version of eating your own dogfood.

Installation

pip install -e ".[dev]"

External dependencies

Most scanners are pure Python. Several require external binaries:

Binary Required by Install
Nuclei nuclei web scanner go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
testssl.sh testssl web scanner Clone the repo or install via package manager
Semgrep owasp repo scanner pip install semgrep or brew install semgrep
Trivy trivy repo scanner brew install trivy or GitHub releases
TruffleHog secret repo scanner brew install trufflehog or go install github.com/trufflesecurity/trufflehog/v3@latest
Bandit bandit repo scanner pip install bandit

testssl.sh on Windows: WhiteRabbit invokes testssl.sh through Git Bash. It searches PATH first, then falls back to the path in the WHITERABBIT_TESTSSL_PATH environment variable (default: C:/Tools/testssl/testssl.sh). Set this variable if your testssl.sh lives elsewhere:

set WHITERABBIT_TESTSSL_PATH=D:/path/to/testssl.sh

Usage

Web scanning

# Scan a target (runs all available scanners)
whiterabbit scan example.com

# Quick scan (SSL + headers only)
whiterabbit scan example.com --quick

# Run specific scanners
whiterabbit scan example.com --scanners ssl,headers

# Output to HTML report
whiterabbit scan example.com -o report.html

# Output as JSON
whiterabbit scan example.com --format json

# JSON to file
whiterabbit scan example.com --format json -o report.json

# Verbose output
whiterabbit scan example.com -v

# Custom timeout (per scanner, in seconds)
whiterabbit scan example.com --timeout 60

# List available scanners
whiterabbit list-scanners

# Check scanner dependencies
whiterabbit check-deps

Repository scanning

# Scan a GitHub repo (clones, scans, cleans up)
whiterabbit scanrepo https://github.com/owner/repo

# Scan a local directory
whiterabbit scanrepo ./my-project

# Specific branch
whiterabbit scanrepo https://github.com/owner/repo --branch dev

# Run only the CVE scanner
whiterabbit scanrepo ./my-project --scanners cve

# Full clone (default is shallow, depth=1)
whiterabbit scanrepo https://github.com/owner/repo --depth 0

# Keep the cloned repo after scanning
whiterabbit scanrepo https://github.com/owner/repo --keep-clone

# Output to HTML or JSON
whiterabbit scanrepo ./my-project -o report.html
whiterabbit scanrepo ./my-project --format json -o report.json

# List available repo scanners
whiterabbit list-repo-scanners

# Check repo scanner dependencies
whiterabbit check-repo-deps

Grading

Grade Criteria
A+ No findings
A Info-only findings
B Low severity, no medium+
C Medium findings, no high+
D High findings, no critical
F Any critical finding

Available scanners

Web scanners (whiterabbit scan)

Scanner What it checks Dependencies
ssl Certificate validation, protocol support, cipher suites, Heartbleed, ROBOT None (SSLyze, pure Python)
headers HSTS, CSP, cookie flags, CORS, HTTPS redirect, and 15+ other HTTP headers None (httpx, pure Python)
nuclei Misconfiguration, exposure, and technology detection via community templates Nuclei
retirejs Known-vulnerable JavaScript libraries against the retire.js database None (pure Python)
testssl Deep TLS/SSL analysis: BEAST, POODLE, DROWN, FREAK, Logjam, SWEET32, Ticketbleed testssl.sh

Repo scanners (whiterabbit scanrepo)

Scanner What it checks Dependencies
cve Known vulnerabilities in project dependencies via the OSV.dev API. Parses requirements.txt, pyproject.toml, package.json, and package-lock.json. None (pure Python)
owasp OWASP Top 10 code vulnerabilities via static analysis with the Semgrep p/owasp-top-ten ruleset Semgrep
trivy Dependency CVEs across 15+ ecosystems, IaC misconfigurations, and license compliance Trivy
secret Committed secrets and credentials detection with verification TruffleHog
bandit Python-specific security linting (hardcoded passwords, unsafe deserialization, weak crypto, etc.) Bandit
slopsquat Detects hallucinated and slopsquatted packages in dependency manifests. Checks PyPI and npm registries and scores existing packages against 8 threat signals (description, author, source repo, license, release count, age, downloads, classifiers). Non-existent packages are CRITICAL; existing packages are scored from MEDIUM to CRITICAL based on signal count. None (pure Python)
pinning Detects unpinned or loosely pinned dependencies that create supply-chain risk. Flags bare names and */latest (HIGH), loose constraints like >=, ^, ~ (LOW), and missing lockfiles (MEDIUM). Parses requirements.txt, pyproject.toml, and package.json. None (pure Python)
logleak Detects logging statements that may expose sensitive data — passwords, API keys, tokens, PII, and full request bodies. Distinguishes variable references from string literals to minimize false positives. Supports Python, JS/TS, Java, Go, Ruby, and PHP. CWE-532. None (pure Python)
malware Flags dependencies that appear in the DataDog malicious-software-packages-dataset or have OSSF MAL- advisories via OSV.dev. Checks PyPI and npm packages; fetches both sources fresh at scan time. None (pure Python)

Architecture

Both pipelines share the same pattern: scanners run concurrently via asyncio.TaskGroup with per-scanner timeouts. Every scanner is contractually forbidden from raising — it catches its own exceptions and returns a ScanResult with error set. This means a single broken or timed-out scanner never takes down the run or corrupts other results.

CLI (cli.py)
 ├─ scan command
 │   └─ ScanRunner (runner.py)
 │       └─ asyncio.TaskGroup
 │           ├─ SSLScanner        → ScanResult
 │           ├─ HeaderScanner     → ScanResult
 │           ├─ NucleiScanner     → ScanResult
 │           ├─ RetireJSScanner   → ScanResult
 │           └─ TestSSLScanner    → ScanResult
 │
 └─ scanrepo command
     ├─ clone_repo() (temp dir, auto-cleanup)
     └─ RepoScanRunner (repo_runner.py)
         └─ asyncio.TaskGroup
             ├─ CVEScanner        → ScanResult
             ├─ OWASPScanner      → ScanResult
             ├─ TrivyScanner      → ScanResult
             ├─ SecretScanner     → ScanResult
             ├─ BanditScanner     → ScanResult
             ├─ SlopsquatScanner  → ScanResult
             ├─ MalwareScanner   → ScanResult
             ├─ PinningScanner    → ScanResult
             └─ LogLeakScanner    → ScanResult
                     │
                     ▼
             ScanReport (aggregated findings + letter grade)

Each scanner is a single class implementing async scan(target, config) -> ScanResult. Repo scanners follow the same contract but take a local directory path instead of a URL, and use RepoScanConfig instead of ScanConfig.

For remote repos, scanrepo clones into a temporary directory (shallow by default) and cleans up automatically after the scan completes.

Nuclei template selection

Nuclei is restricted by tag selection, not by a "passive-only" flag. The DEFAULT_TAGS are exposure, misconfig, and tech. The EXCLUDED_TAGS block: fuzz, exploit, intrusive, dos, brute, sqli, xss, rce, auth-bypass.

This is policy, not a guarantee — a community template tagged exposure that behaves intrusively would still run. Review your template set if this matters for your environment.

TLS certificate verification

The header scanner and retire.js scanner disable TLS certificate verification (verify=False) on target-probing requests. This is intentional: a security scanner that refuses to connect to misconfigured hosts cannot assess misconfigured hosts.

The retire.js scanner uses a separate client with TLS certificate verification enabled to download its vulnerability database from GitHub (raw.githubusercontent.com).

Responsible use

Web scanning sends real HTTP requests and invokes external tools against the target. Only scan targets you own or have explicit permission to test. Unauthorized scanning may violate laws and terms of service.

Repository scanning is static analysis — it reads local files and queries public vulnerability databases (OSV.dev, PyPI, npm registry). No traffic is sent to the scanned application itself. You still need appropriate access rights to the source code.

Branch protection

The master branch enforces the following rules:

Control Status
CI must pass (tests, lint, type check) Runs on every push and PR; not yet a required status check
Pull request review Required — 1 approving review, stale reviews dismissed on new pushes
Signed commits Not required
Force pushes Blocked
Admin bypass Admins can bypass the above rules

CI runs across a 2×3 matrix (Ubuntu + Windows, Python 3.11–3.13) and gates on pytest (≥80 % coverage), ruff check, ruff format, and mypy.

Adding a scanner

See CONTRIBUTING.md for instructions on adding new web scanners or repo scanners.

License

MIT

Read the rest on GitHub

Scan report · 2026-09-24
  • Prohibited terms or links
  • Repository eligibility
  • slopscore.md paperwork
  • Content policy
  • Risk review

From the balcony · 1 of 4 clapped

  1. Crusoeclapped
    No vulnerable dependencies, clear security-focused purpose, no credential requests or telemetry concerns, and transparent about its AI-generated nature.

Cap'm Slop, Princess and Schnitzel read it and passed. Their reasons are on the balcony, with every other verdict.

Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

0 comments

log in to comment.

report this listinglog in to report