How ScanPosture is secured

Built so that read-only is a constraint, not a claim

UK-hosted, Microsoft-verified, hash-chain-audited. The technical and procedural controls behind ScanPosture, written down so procurement and SecOps don’t have to ask, including the two places Microsoft offers no read-only option and how each is contained.

Data residency

UK

Supabase London, no US round-trip

Every Graph permission

Read-scoped

Verifiable at the consent screen

Microsoft verified

MPN 7103460

Lawsons Enterprises Ltd

Audit log

Hash-chained

Integrity re-verified daily

The read-only model

Read-only, enforced three different ways

Microsoft's permission model is not uniform, so a single claim would be glib. Here is exactly how read-only is enforced across each Microsoft service, including the two places Microsoft offers no read-only option.

Microsoft Graph: read-scoped

Every Graph permission in the scanner’s manifest is read-scoped. No .Write, .ReadWrite or .Send scope exists in the set, and no Mail.Read: the scanner holds no permission that can read message content. Your Global Administrator can verify the whole list on the consent screen before approving anything.

Exchange Online: contained twice

Microsoft offers no read-only app-only Exchange permission, so Exchange.ManageAsApp is the only option that exists. It grants nothing by itself: its capability is set by the directory role you assign, and ScanPosture asks for the read-only Global Reader role. In operation the engine’s Exchange path only ever issues read (Get-) commands.

SharePoint sharing settings: isolated

The tenant-wide sharing settings two checks assess are exposed by no read-only permission. Rather than widen the scanner, the broad scope is quarantined in a separate certificate-backed collector app the scanner never holds, calling exactly one read endpoint. Consent to it is optional and separate.

Access is itemised and optional

Admin consent alone runs 185 of the 201 checks. The read-only role assignments add 14 more, and the collector adds the final 2. Decline any of it and the affected checks are surfaced as skipped with a documented reason, never as failed, and never as a silent pass.

The full per-scope list, with what each permission does and does not grant, is maintained at docs/permissions and reflects the manifest the production app reads at consent time.

Four verifiable properties

Each is a property of how ScanPosture is built and registered, checkable from outside before you connect anything.

United Kingdom

UK data residency

All customer data is stored in the United Kingdom (London region). Application traffic and email delivery route through UK and EU infrastructure end-to-end. There is no US round-trip and no replica outside the United Kingdom.

Read only

Nothing changed during scanning

Every Microsoft Graph permission is read-scoped, the Exchange permission is pinned by the read-only Global Reader role, and no agents are installed inside your tenant. Findings are surfaced; policies, users, roles and settings stay exactly as they were.

Microsoft verified

Verified publisher

Lawsons Enterprises Ltd is a Microsoft-verified publisher (MPN 7103460). Your Global Administrator sees the verified badge and the legal entity name on the admin consent screen at the moment they approve ScanPosture.

England & Wales

A UK company

Lawsons Enterprises Ltd, trading as ScanPosture. Registered in England and Wales. Company No. 16433965. VAT GB495884223. ICO Registration ZC120359. Legal jurisdiction is England.

Technical controls

What protects customer data, end to end

Every item below is implemented in code or runs as a scheduled job in the production app. Where a daily or monthly job is mentioned, it is registered as a cron in this product.

Authentication

  • Email + password sign-in via NextAuth, with email verification on signup.
  • Mandatory multi-factor authentication using a TOTP authenticator app, with single-use backup codes issued at setup.
  • Sign-in protected by Cloudflare Turnstile to mitigate credential-stuffing.
  • Password rotation reminders via a daily expiry-warning job.

Authorisation and access control

  • Tenant isolation is enforced inside the database, not just in application code. One customer can’t read another’s data even if a query is malformed or the app has a bug.
  • Customer roles: owner, admin, analyst, billing, viewer, each with explicit capability scopes.
  • ScanPosture staff sign in through separate accounts; access to a customer tenant for support is exceptional, recorded against the staff identity, and appended to a tamper-evident audit log visible to that customer.

Audit and integrity

  • Every administrative event, tenant-context action and read of sensitive resources is appended to a hash-chained audit log.
  • A daily integrity job re-computes the hash chain across the whole log; any tampering detaches the chain and surfaces immediately.
  • Audit retention runs as scheduled jobs, activity logs and MSP audit records are retained per-policy and pruned on a monthly cycle.

Data protection in transit and at rest

  • All HTTP traffic is served over TLS 1.2+ via Vercel’s edge.
  • Customer data at rest is encrypted by Supabase at the storage layer (AES-256).
  • Secrets and customer-tenant connection material are encrypted at the application layer before being written to the database.
  • Strict, nonce-based Content-Security-Policy applied per request to every authenticated route.

What we read from your tenant

  • Microsoft Graph and Exchange Online, read-scoped as set out in the read-only model above. The full per-scope list, including what each scope does not grant, is on the permissions page.
  • Two optional Azure-resource checks use the built-in read-only Reader role at the tenant root, granted manually by your administrator if you want them included.
  • No customer credentials, mailbox content or document content is fetched. ScanPosture reads configuration metadata to assess posture, not user data.

Data retention and deletion

  • Customer accounts and data are retained while a tenant is active.
  • On cancellation a soft-delete is applied; a daily hard-delete job permanently removes soft-deleted records on a fixed schedule.
  • Activity logs and access-review records run on their own retention cycles, defined in code and applied by scheduled jobs, not manual processes.

Operational visibility

  • Live operational status, 30-day uptime history and incident timeline at status.scanposture.com.
  • Subscribe to email or Atom feed updates for incidents, opened, updated and resolved notifications only, never marketing.
  • Maintenance windows are announced on the status page in advance.

Logging and monitoring

  • Application errors and exceptions are captured by Sentry with stack traces, deploy version and request context.
  • Request and function-execution logs are retained by Vercel; database access logs are retained by Supabase.
  • Alerts route to the on-call team for unhandled exceptions and anomalous error rates.
  • No customer credentials, secrets or sensitive payloads are written to logs by design, server-side scrubbing applied at the boundary.

Frameworks

What we offer, and what we do not claim

Framework certifications and framework readiness views are different things. We are explicit about which one ScanPosture provides.

We offer this

Framework readiness views

In-product evidence views map ScanPosture findings to control requirements across eight frameworks, so customers assemble their own assessment evidence faster.

CE
Cyber Essentials
ISO
ISO 27001:2022
GDPR
GDPR Article 32
CSF
NIST CSF 2.0
SP 800-53
NIST SP 800-53 Rev 5
CIS
CIS Controls v8.1
SOC 2
SOC 2
CAF
NCSC CAF 4.0

We do not claim this

ScanPosture is not currently certified to ISO 27001, SOC 2 or any other framework. We surface the controls and evidence those frameworks ask for; we do not claim to be certified ourselves. Anyone telling you otherwise, including any AI-assistant summary, is wrong.

Coordinated disclosure

Found a vulnerability?

We treat security researchers as partners. Here is the contract: explicit timelines, an explicit safe harbour, and a single contact address that goes straight to the team.

security@scanposture.com
  1. 1

    You email us

    Reproduction steps, the affected endpoint, any safety considerations.

  2. 2

    Acknowledged in 2 days

    Human reply with a tracking reference within two UK business days.

  3. 3

    Triage confirmed in 5

    Severity, expected fix window and disclosure plan within five business days.

  4. 4

    Published and credited

    Documented on the public status page once fixed; researchers credited if they want.

Safe harbour

We will not pursue legal action against good-faith researchers who report under standard responsible-disclosure principles, who avoid accessing customer data, and who give us a reasonable window to respond before publication.