TECHNOLOGIES: SANITY

Sanity Integration Security Review

A Sanity token’s role decides what it can read, not the query used with it. We test where your tokens live, what role they hold, and how preview access exposes drafts. CREST-certified testers, fixed price from £2,540 for a 2-day single-platform scope, quoted within 24 hours.

  • Unlimited retesting
  • Unlimited pre-retesting
  • No hidden fees
Accredited & recognised
Cyber Essentials certified Cyber Essentials Plus certified IASME certifying body ISO 27001 certified ISO 9001 certified Crown Commercial Service supplier UK Cyber Security Council member
CREST
Approved Provider
10
Sanity Test Areas
FREE
Retest Until Closed
24h
Scope to Active Test
CLIENT REFERENCE
“I would highly recommend EJN Labs to any organisation seeking reliable, detailed, and well-managed penetration testing services, particularly for government or enterprise-level projects.”
SquareOneImran SaghirProject Lead, SquareOneRead the SquareOne case study →
CLIENT REFERENCE
“There wasn’t another company we could find that could deliver what we needed in the timeframe we needed. The client loved it, and we got instant ROI from the engagement.”
CelloriDan WilcocksonFounder, CelloriRead the Cellori case study →
See all case studies →
WHY IT MATTERS
Robot

A robot is Sanity’s own term for a token or service account, and any role, including the built-in Administrator role, can be assigned to one. Sanity’s own guidance is to build a custom role scoped to the job a robot actually does, not reach for Administrator because it is quicker to set up.

Why Sanity access comes down to tokens and roles

A Sanity project can hold several datasets, and each one is set to public or private independently. Sanity’s own documentation confirms that a public dataset lets anyone query it without authorisation, while a private one only answers to an authenticated request or a valid token. Drafts and content release versions carry a dot in their document ID, and an unauthenticated request to a public dataset cannot read either, whatever perspective it asks for. We test what each dataset in scope actually returns once a real token, not just an anonymous request, is added to the query.

Every API token is issued under a role, the same Administrator, Viewer, Editor, Developer or Contributor roles a human project member gets, or a custom role built through Sanity’s Access API on Enterprise plans. A role is flagged to apply to human users, to robots, or both, and Sanity’s own guidance warns against handing a CI robot the built-in Administrator role rather than a custom one scoped to the single permission the job needs, such as deploying the Studio. We test which role each token actually holds and whether that role fits the job the token does.

Permissions apply to documents, not to the query written against them, so once a token can read a document, any GROQ query that token runs, count() and other aggregations included, can return it. That risk compounds in a preview integration built on the drafts perspective, since draft content only stays hidden from requests that carry no token at all, and again in a webhook endpoint that processes an event without checking the signed secret Sanity attaches to it. We test the queries, preview routes and webhook handlers your team has built around these tokens, not Sanity’s Content Lake itself.

SCOPE

What we pen test on a Sanity project

SY-01

Dataset Visibility: Public and Private Datasets

Every dataset in a Sanity project is set to public or private independently, and a public dataset answers any unauthenticated query while a private one only responds to an authenticated request or a valid token. We test what each dataset in scope actually returns to an anonymous request against what your front end is meant to expose.

SY-02

Draft and Release Version Exposure

Draft documents are stored as drafts. and content release copies as versions.., and Sanity excludes both from an unauthenticated request to a public dataset regardless of the perspective it asks for. We test whether that same protection holds once a token, a preview route or a Content Releases workflow is added to the picture.

SY-03

API Token Roles and Scope

Every token is issued under a role, the same Administrator, Viewer, Editor, Developer or Contributor roles a human project member holds, or a custom role built on Enterprise plans. We test which role each token in scope actually carries and whether it matches the single job the integration uses it for.

SY-04

Where Tokens Live

A token shipped into a front-end bundle or a public repository is readable by anyone who opens it, and Sanity’s own guidance is to keep a token that needs write access, or reads a private dataset, behind a server you control rather than in browser-side code. We check every environment variable, build artefact and client-side request for a token that has ended up somewhere it should not be.

SY-05

GROQ Query Boundaries and Aggregations

A token’s permissions apply to the documents it can reach, not to the query used to reach them, so once a token can read a document, any GROQ query it runs, count() and other aggregations included, can return it. We test the queries your application actually sends for scope wider than the page or feature they serve.

SY-06

CORS Origins and Allow Credentials

Each CORS origin registered against a project is set to allow credentials or not, and an origin allowed to send credentials can make authenticated requests using the token or session of whoever is logged in to it. We test which origins are registered, whether each one genuinely needs credentials enabled, and what a script on that origin could do with them.

SY-07

Preview Integrations, Draft Mode and Perspectives

A preview or draft-mode integration reads content using the drafts perspective and a token that can read unpublished content, so the integration’s own access check, not the dataset’s public or private flag, becomes what keeps drafts from a general visitor. We test the preview route, its secret and the token behind it for exactly that gap.

SY-08

Custom Roles and the Access API

On Enterprise plans, a custom role is built from content resources that filter by document type or by document ID path, with cumulative access levels of Read, Update and create, or Publish, and a flag deciding whether the role applies to human users, to robots, or both. We test whether a custom role actually restricts a user or token to what it was built for.

SY-09

Webhook Signature Verification

A Sanity webhook can carry a secret that is hashed into the request’s headers, and Sanity models the signing and verification on the same standard Stripe uses for its own webhooks. We test whether your endpoint actually verifies that signature, rejects an unsigned or replayed delivery, and handles the GROQ filter and projection driving the payload safely.

SY-10

Studio Hosting and Deploy Permissions vs the Managed Content Lake

The Content Lake, the datastore and API behind every project, is run by Sanity and cannot be self-hosted, while the Studio, the editing interface, can be deployed on Sanity’s own hosting or your own infrastructure through a specific deploy permission. Where your team deploys the Studio itself, we review that CI pipeline and the role its deploy token holds; the Content Lake infrastructure itself is Sanity’s to secure.

OUR PROCESS

Sanity Integration Security Review: From Scope to Attestation

01

Scope and Project Mapping

We agree the environments, datasets and accounts in scope, then map every dataset, role, token, CORS origin and webhook configured in the project before testing begins.

02

Dataset and Token Access Testing

We test dataset visibility, token role scope and GROQ query boundaries across every account in play, from an anonymous request through to your highest-privilege robot token.

03

Manual Exploitation

A CREST-certified tester manually tests preview and draft-mode routes, custom role filters, CORS credential handling and webhook signature verification, chaining findings where they compound.

04

Reporting and Retest

You get a technical report with CVSS scores and reproduction steps, a walkthrough call, a free retest once fixes are deployed, and an attestation letter for auditors.

CREDENTIALS

Verified Accreditations Auditors Accept

Every credential below is independently verifiable. UK procurement teams, FCA supervisors, ISO 27001 / SOC 2 auditors, and cyber insurance underwriters all recognise these standards.

GET YOUR QUOTE

Get a CREST Sanity pen test quote in 24 hours

A fixed-price quote back in one business day, from a named CREST assessor. No sales pipeline, no chasing.

  • CREST and IASME accredited. Testing your auditors and clients already recognise.
  • Fast-track testing within 24 hours where required. Free retest of every fix included.
  • Live findings via your client portal, not a four-week PDF.
  • Fixed price from £3,500 for a single-role, single-app scope, agreed up front. Most engagements run £5,000 and up. No day-rate surprises.
What clients say
There wasn’t another company we could find that could deliver what we needed in the timeframe we needed. The client loved it, and we got instant ROI from the engagement.
CelloriDan WilcocksonFounder, Cellori

Under NDA Further named references available on a scoping call.

What happens next
  1. We reply within one business day with a fixed-price quote from a named CREST assessor.
  2. You approve the scope and we book a start date, usually within 24 hours.
  3. Live findings land in your client portal as we test, with a free retest of every fix.
Accredited & recognised
CREST member Cyber Essentials certified Cyber Essentials Plus certified IASME certifying body ISO 27001 certified ISO 9001 certified UK Cyber Security Council Crown Commercial Service supplier

Get your fixed pen test quote in 24 hours

⚡24h reply ✓CREST tester ↻Free retests

or book a 20-min scoping call first

We reply within one business day. Your data stays with us. No newsletter signup.

COMPLIANCE READY

Reports Mapped to Every Framework

Findings are written so your team can reference the report against each framework without translation work.

ISO 27001:2022

Annex A.8.8 management of technical vulnerabilities plus A.5.15-5.18 and A.8.2-8.5 access control validation.

SOC 2 Type I & II

CC6 logical access, CC7 system operations, CC8 change management evidence.

PCI DSS

Requirement 11.4 application penetration testing across cardholder data environments, including ecommerce penetration testing for online retail platforms.

FCA SYSC

SYSC 4.1.1R, 6.1.1R, 13 mapped to each finding for FCA-regulated firms.

UK GDPR

Article 32 effectiveness testing, customer-data security controls, ICO-acceptable evidence.

Cyber Essentials Plus

Direct certification through our IASME body status, single-vendor delivery.

PRICING

Transparent Sanity Integration Security Review Pricing

Pricing depends on the number of roles, integrations and environments in scope. See our pricing page for how we quote.

✦ ALWAYS · ON EVERY TIER · NO EXCEPTIONS ✦
✓Free retests, no time limit
✓Free rescheduling
✓No cancellation fees
✓24-hour scope to active testing
✓Live findings to client portal
✓Executive + technical report
✓60-min walkthrough call
✓Letter of attestation
SMALL / SMB
£2,540–£3,730
2 to 3 testing days

Single user role, basic CRUD application, marketing website with auth. Around 5 working days from kickoff to report.

Get a fixed quote
ENTERPRISE
£5,970–£9,090
5 to 7 testing days

Multi-tenant platform, complex authorisation matrix, integration-heavy applications. Around 15 to 20 working days from kickoff to report.

Get a fixed quote

Full UK pen test cost guide

WHY EJN LABS

What You Get From Sanity Integration Security Review

Six concrete differentiators competitors don’t all match.

CREST-Certified Testers, Verifiable

Every test by a CREST-certified pen tester (CRT, CCT APP, CCT INF where applicable). Verify our company status at crest-approved.org.

24-Hour Startup, Where Required

From signed scope to active testing in a single business day for incident response, audit deadlines, or regulator-driven timelines.

Live Findings, Not 4-Week PDFs

Critical issues reported during testing through your client portal. Your team remediates while testing continues.

Audit-Ready Reports

Executive summary plus full technical report with CVSS scores and explicit framework mappings (ISO 27001, SOC 2, PCI DSS, FCA SYSC).

Free Retests, Standard

Verify remediation of every finding before close-out. Letter of attestation for audit submission included. Most competitors charge £1,500-£3,000 per retest.

UK-Based CREST Testers

Every engagement performed by vetted, UK-based CREST-certified testers, matched to your needs, security clearance, and compliance scope.

FAQ

Frequently Asked

What access do you need to test our Sanity project?

A token created for testing and scoped to a role you control, ideally a custom role or one of Sanity’s built-in Viewer or Editor roles rather than Administrator, plus visibility of any preview routes and the CORS origins configured for the project. We do not need your production Administrator token; a scoped robot is enough for the great majority of checks.

Does this touch our live data?

No. We test against a staging or duplicate dataset wherever one exists, created with the Sanity CLI or copied through the management console. Where only a production dataset is available, any check that could create, edit or publish content is agreed and scoped in advance, and read-only checks are logged as they happen.

How long does a Sanity project test take?

A single-platform engagement like this one is scoped at 2 testing days as a starting point, rising with the number of datasets, roles, tokens and integrations in play. Reporting and a walkthrough call follow testing, with a free retest once fixes are in.

Is a self-hosted Studio tested differently from a Sanity-hosted one?

The Content Lake, the datastore and API behind every project, is always run by Sanity; there is no self-hosted option for it. What varies is the Studio, the editing interface, which can be deployed through Sanity’s own hosting or your own infrastructure and CI pipeline, and where your team deploys it themselves we review that pipeline and the deploy token’s role alongside everything else.

What is out of scope?

Sanity’s Content Lake infrastructure and API servers, since that is Sanity’s platform to secure rather than something your project configuration changes. Third-party plugins or integrations you have not built, and any infrastructure outside the Sanity project, unless you scope a wider cloud review alongside it.

Does Sanity have a policy for reporting security issues?

Yes. Sanity asks that vulnerabilities in its own platform be reported to security@sanity.io, which it acknowledges within one business day, and it does not run a paid bug bounty programme. That covers issues in Sanity itself, not the datasets, roles, tokens and integration code you have configured, which is what this engagement tests; because every project runs on Sanity’s shared, managed Content Lake, we also confirm Sanity’s current terms for customer testing with you during scoping.

Do you test the GROQ queries and integration code we’ve written, or just the project’s settings?

Both, and the code matters more. We test the GROQ queries your application sends, the server code that holds your tokens, your webhook handler and any preview route, alongside the dataset visibility, roles, tokens and CORS origins configured for the project itself.

EXPLORE EVERY SERVICE

20+ CREST-accredited testing services in one place

Web, mobile, API, cloud, AI, infrastructure, red team. Pick the test that fits your environment.

Penetration testing services
READY TO START

Get a fixed price for your Sanity project

A Sanity token’s role decides what it can read, not the query used with it. We test where your tokens live, what role they hold, and how preview access exposes drafts. CREST-certified testers, fixed price from £2,540 for a 2-day single-platform scope, quoted within 24 hours.