@patrickivanuellf2
Founder & ML Engineer, Toya Buana Mandiri

VoidSpider: an open-source passive security scanner with a live “spider” graph dashboard

Hi everyone, I’m Patrick, a CS student in Indonesia who also runs a few small game websites and VPS servers. I built VoidSpider, a passive security audit scanner for websites and local files you own.

How it works: a Node.js server scans one target continuously and streams results over SSE to a fullscreen dashboard. Each page or file becomes a node cluster, and a geometric spider reaches out to whatever is being scanned right now. Findings get a severity level, a fix suggestion, and an A–F score.

What it checks

Websites: security headers (CSP, HSTS, cookies), exposed files like /.env and /.git/config, leaked keys in HTML/JS, TLS configuration, SPF/DMARC/DNSSEC, and subdomain takeover risk.

Local files: hardcoded secrets, risky code patterns, webshell and obfuscation rules (YARA-style, extendable via JSON), dependency CVEs via OSV.dev, secrets in git history, Dockerfile/Kubernetes/Terraform misconfigs, and invisible-Unicode prompt injection.

Extras: drift detection against a baseline, Telegram alerts, SSH/honeypot log ingestion, SARIF output for CI, and an optional triage agent using Claude that only sees redacted snippets.

A deliberate design choice: it never sends attack payloads, never tries to log in, and never port-scans. Everything is passive GET requests, and it needs an --saya-pemilik-situs (“I own this site”) flag for remote targets. A scanner that can attack works just as well against anyone else’s site. For active testing I added an optional OWASP ZAP integration that you run yourself, with a double confirmation flag.

Honest limitations: it’s pattern-based, so expect false positives and misses. SPAs are only read as far as their initial HTML, and it’s not a replacement for a full SAST or pentest.

Where I’d love feedback:

What passive checks am I missing that you’d want in a first-pass audit? For the entropy-based generic secret detection, how would you reduce false positives further? Is the “passive only” boundary the right call, or too limiting?

Repo (MIT): github.com/patrickivanuellf/VoidSpider

ResearchIntroductions

Comments3

  • @ryanallis
    Ryan Allis
    Founder of AI Lounge and SaasRise, helping founders reach $100M+ exits
    Oct 22

    Passive only is the right call, because a small site owner will only point a scanner at their site if they trust it can't break anything. Building iContact taught me that SPF and DMARC problems quietly push a business's emails into spam without the owner ever knowing why, so I'd make that check the headline of your first-pass audit, not just one item on the list.

  • @patrickivanuellf
    Patrick Ivanuell Firstyanto
    Informatics student & founder of PT Toya Buana Mandiri (ad-tech). Web, Linux server ops & automation.
    Oct 22

    Exactly. For the first pass, I'll prioritize running quick DNS TXT record checks for SPF, DKIM, and DMARC enforcement policy. Is there any specific edge case you think I should flag right away?

  • @ksanyok
    Aleksandr Krykun
    Building PromoPilot, an AI SEO autopilot: tiered link building, SEO Radar and 100+ free SEO tools
    Oct 23

    Passive only is right. We run a similar monitor (Shield) for small sites, and the passive checks that caught the most real problems for us were: backup files left in the web root (.zip, .sql, .bak, wp-config.php~), public JS source maps, directory listing, and a CMS version leaked via the generator meta tag or readme files. One more worth adding for anyone running sites for search traffic: fetch the same page with a Googlebot user agent and a normal one and diff them, hacked sites often show injected spam links only to crawlers. For entropy false positives, require a key-like context (a variable name such as key, token, secret near the string), match known prefixes (AKIA, sk_live_, ghp_) first, and skip UUIDs, hashes and base64 image data. Publishable keys like Stripe pk_ or a Maps key are worth a separate low severity bucket instead of a hit.

Log in to join the thread.