PenScannerauthorized · non-destructive · audited

How we keep your data safe

PenScanner runs security scans against customer infrastructure, so we hold ourselves to the bar we expect of the targets we test.

Authorization is non-negotiable

Every registered asset requires a signed authorization-of-record before any scan can run. Scans re-verify scope, rate limits, and tenant-wide emergency stop at every adapter boundary, not just at submission time. An admin can engage emergency stop from settings; in-flight scans abort at the next safe checkpoint.

Safe adapters only

The scanner is restricted to a fixed allow-list of non-destructive adapters: DNS lookups, HTTP availability, TLS certificate inspection, response-header analysis, robots.txt / sitemap reading, OWASP ZAP baseline (passive), and Nuclei restricted to non-destructive tags. No payloads, no exploitation, no credential-stuffing.

Authentication & access control

  • BCrypt password hashing with per-user salt.
  • JWT bearer tokens with configurable TTL.
  • RFC 6238 TOTP two-factor authentication, with a QR-code-friendly setup flow.
  • Google SSO (OAuth 2.0 Authorization Code) with optional hosted-domain restriction.
  • Three role tiers (Admin / User / Auditor) plus a separate cross-tenant operator role for our staff.
  • Plan-enforced team-seat caps prevent over-invitation.

Defense in depth

  • HMAC-SHA256 signed webhooks so receivers can verify origin.
  • Stripe webhook signature verification (we verify every event before processing).
  • Idempotent webhook handling — duplicate Stripe deliveries are dropped via a stored event-id table.
  • SSRF guards on outbound tenant-controlled URLs (Jira integration rejects loopback, RFC1918, link-local, and cloud-metadata addresses).
  • HtmlEncoded output everywhere user-supplied data lands in a rendered document.
  • CSP-injection-safe watermarks on shared reports — input is stripped of backslashes and control characters before being put into a CSS string.
  • Atomic credit deduction via row-locked UPDATE so concurrent over-quota scans can't drive the balance negative.

Audit logging

Every action that mutates state — asset approval, scan submission, emergency stop, plan upgrade, credit grant, operator override — writes an immutable row to the audit log with actor, target, and detail. The log is exportable as CSV from the audit page; admins can search or filter it directly.

GDPR and data retention

  • Right to data portability (Art. 20): one-click JSON export of every record we hold for your tenant.
  • Right to erasure (Art. 17): scheduled tenant deletion with a 14-day grace period during which the tenant is read-only and auto-engaged emergency-stop. Cancellable.
  • Retention windows are plan-driven: 30 / 180 / 730 days. Beyond retention, scan history is automatically purged.

Operational transparency

  • Public /status page with subsystem health and queue depth.
  • Status page polls every 15 seconds; an external uptime monitor can hit the same endpoint.
  • Cross-tenant operator metrics expose scan failures, blocked scans, and review-order backlog so we can act on issues before customers see them.

What we don't do (yet)

We hold ourselves to publishing what's not in scope so you aren't surprised:

  • SOC 2 Type II audit — in progress.
  • SCIM / SAML SSO — Google OAuth is supported today.
  • Bring-your-own-key (BYOK) at-rest encryption — talk to us if you need this.

Found something concerning? Email security@penscanner.io — we run a private disclosure process and respond within one business day.