Local-first VAPT platform. Zero cloud. Encrypted at rest. Runs entirely on your hardware.
Maintained by @mrQhere.
SMP is a penetration testing orchestration platform that runs ~30 open-source scanners, correlates findings across multiple threat-intelligence sources, and produces compliance-mapped reports — all without sending your client data to a third-party cloud.
The core pitch is not tool count. It is:
-
Correlation depth — most scanner wrappers report raw CVSS. SMP cross-references each finding against EPSS (exploitation probability), GreyNoise (active wild scanning), and CISA KEV (known exploited vulnerabilities) to produce a multi-source risk score. See:
intelligence/andtools/risk_scorer.py. -
Provable local-only operation — all four outbound intelligence sources (NVD, EPSS, GreyNoise, CISA KEV) record every network call to
logs/egress_audit.logwith service name, URL, timestamp, and ALLOWED/BLOCKED status. SetSMP_LOCAL_ONLY=1to block all external calls at runtime. See:tools/egress_auditor.py. -
Two deliverables per scan — each completed scan produces a pentest report (HTML + PDF) and a CycloneDX SBOM automatically. See:
tools/sbom_generator.py, wired intotools/report_generator.py. -
Compliance gap analysis — findings are mapped to OWASP Top 10, CIS Controls v8, ISO 27001:2022, SOC 2 Type II, and PCI-DSS v4.0 control IDs. The output distinguishes between "here are 40 vulnerabilities" and "here is what is blocking your SOC 2 audit." See:
tools/compliance_mapper.py. -
SQLCipher encryption, not optional — SMP will not start if
pysqlcipher3is missing. "Encrypted at rest" is unconditionally enforced, not a fallback. See:tools/db_manager.py.
- It is not an AI agent. There is no LLM layer.
- It does not compete on tool count. HexStrike and PentAGI have more scanners. That is not the differentiator here.
- It does not require cloud registration, API keys, or telemetry.
When a CVE or finding is identified, SMP enriches it with:
| Source | What it adds | Code |
|---|---|---|
| NVD | CVSS base score, affected products | intelligence/nvd.py |
| EPSS (FIRST.org) | Exploitation probability score (0–1) | intelligence/epss.py |
| GreyNoise | Is this IP actively scanning the internet right now? | intelligence/greynoise.py |
| CISA KEV | Is this CVE on the Known Exploited Vulnerabilities list? | intelligence/cisa.py |
| MITRE ATT&CK | Tactic and technique mapping | intelligence/mitre_mapper.py |
The composite score is computed in tools/risk_scorer.py.
Three-phase DAG execution. Phase 3 steps activate conditionally based on Phase 1/2 findings:
| Phase | Tools | Trigger |
|---|---|---|
| 1 — Recon | HTTPx, WhatWeb, Subfinder, CRT.sh, HackerTarget, Whois, Wayback, theHarvester, Traceroute | Always |
| 2 — Active | Nmap, SSL, Security Headers, CORS, Nikto, Nuclei, ffuf, SQLMap, Shodan, Gitleaks | Always |
| 3 — Conditional | WPScan, Dalfox, Arjun, DNSx, Katana, Commix, JWT Scanner, Masscan, ParamSpider, Cloud Enum | WordPress detected → WPScan; port 22 open → Hydra; etc. |
Pipeline code: scanners/scan_runner.py, scanners/core/dag.py.
Every finding is mapped to control IDs across five frameworks:
- OWASP Top 10 2021
- CIS Controls v8
- ISO 27001:2022 Annex A
- SOC 2 Type II (Trust Services Criteria CC6–CC9)
- PCI-DSS v4.0 (Requirements 6, 7, 8, 11, 12)
The summary output includes audit_blocking_findings — the specific Critical/High findings that directly violate SOC 2 or PCI-DSS controls. Code: tools/compliance_mapper.py.
# Install dependencies (prebuilt binaries, ~30 seconds for Go tools)
./setup.sh
# Activate venv
source venv/bin/activate
# Run desktop GUI
./run.sh
# Run headless REST API
python main.py --apiSMP_LOCAL_ONLY=1 ./run.shAll intelligence API calls will be blocked and logged as BLOCKED in logs/egress_audit.log.
make docker-build
make docker-run
# API at http://localhost:8000/api/v6/docs| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/v6/auth/token | No | Obtain JWT token |
| GET | /api/v6/health | No | Health check |
| GET | /api/v6/target | Yes | List targets |
| POST | /api/v6/target | Yes | Add target |
| GET | /api/v6/scan | Yes | List scans |
| GET | /api/v6/findings | Yes | Findings for scan |
| GET | /api/v6/cve/stats | Yes | CVE database stats |
| GET | /api/v6/risk/score | Yes | Risk scores |
| GET | /api/v6/version | Yes | Platform version |
Interactive docs: http://localhost:8000/api/v6/docs
- Databases are encrypted at rest using SQLCipher (AES-256). SMP will not start without
pysqlcipher3. - Master password: PBKDF2-SHA256 with 600,000 iterations (NIST 2024 recommendation).
- Raw scan outputs are compressed (gzip) and encrypted with Fernet before storage.
- Python 3.10+
libsqlcipher-dev+pysqlcipher3(hard requirement)- Linux or macOS
Use only against systems you have written authorisation to test.
Maintained by @mrQhere · © mrQhere. See LICENSE.