TECHNOLOGIES: WAGTAIL

Wagtail Penetration Testing

Wagtail’s page permissions inherit down the tree, so a boundary set one level too high reaches further than intended. We test what each group, page, site and privacy setting can actually reach. CREST-certified testers, fixed price from £2,950 for a 2-day single-framework 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
Wagtail 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
Inherited

Wagtail permissions are set once on a page in the tree and apply automatically to every page beneath it, including ones created later. A boundary drawn one level too high on the tree reaches further than intended.

Why Wagtail security comes down to where permissions sit in the tree

Wagtail extends Django’s own permission system with six page-specific rights, Add, Edit, Publish, Lock, Unlock and Bulk delete, and every one of them is set on a page in the tree and automatically applies to everything beneath it, including pages that do not exist yet. Add lets a user edit and delete only the pages they created; Edit reaches every page in scope regardless of owner; and Publish is independent of both, so a user without it can prepare changes but cannot make them live without going through moderation. Wagtail’s own permissions documentation also notes that drafts stay visible only to users holding Edit or Publish, which is where a shared or forwarded preview link can quietly widen access. We test where each group’s boundary actually sits against where the page tree was meant to draw the line.

Content that should not be public does not have to be marked so by accident. A page can be restricted to any logged-in user, to a shared password, or to members of specific groups, and Wagtail’s documentation is explicit that the shared password option is stored in plain text and shared between everyone given it. Documents inherit the same three restriction types from the collection they sit in, but that check only holds when WAGTAILDOCS_SERVE_METHOD is left on serve_view; the direct and redirect alternatives serve files straight from storage and trade away the per-request permission check for performance, which is why Wagtail’s documentation calls for the underlying documents directory to be blocked at the web server regardless of which method is configured. We test which restriction type and serve method are actually live, not which one the settings file implies.

A single Wagtail installation can run several sites side by side from the same page tree, and the Wagtail API v2 adds a further surface across all of them: a field only reaches the response once it is explicitly listed in a page model’s api_fields, split between body_fields and meta_fields, and a field already available in meta_fields still needs its own entry in nested_default_fields before it appears on a related page nested inside another result. We test whether that field-by-field opt-in has left something exposed that should not be public, whether a permission boundary that holds in the admin also holds through the API, and whether custom Django views or StreamField blocks, including the built-in RawHTMLBlock that Wagtail’s own documentation says should only go to fully trusted editors, carry the same checks as the rest of the organisation’s site.

SCOPE

What we pen test on a Wagtail site

WT-01

Page Tree Permission Inheritance

Every Wagtail page permission is set at a point in the page tree and propagates down to every page beneath it, current and future, so a permission attached one level too high, or on the root, reaches the entire site. We test where each group’s Add, Edit and Publish rights actually land against where your page tree was meant to draw the line.

WT-02

Add, Edit and Publish Boundaries

Add permission only lets a user edit and delete pages they created themselves, Edit reaches every page in scope regardless of who owns it, and Publish is independent of both, so a user without it can prepare a change but not make it live without moderation; Wagtail’s documentation also notes that draft content is visible only to users holding Edit or Publish. We test whether those three rights stay separated in practice, and whether a forwarded preview link quietly extends draft access beyond that group.

WT-03

Lock, Unlock and Bulk Delete

Lock stops other editors changing a page while it is being worked on, Unlock can override another user’s lock, and Bulk delete only works in combination with Add or Edit rather than as a right of its own, letting a user remove a whole branch of owned, unpublished pages in one action. We test whether these three permissions combine to give a group more reach than its individual rights suggest.

WT-04

Custom Permissions and the Admin-Only Layer

Permissions added through Wagtail’s register_permissions hook, including ones tied to the admin itself rather than a specific page model, appear in the Group edit form’s Other permissions section alongside the built-in set. We test that any custom permission your team has added is actually checked in your code wherever it is meant to gate access, not just present in the Group form.

WT-05

Multi-Site Boundaries

A single Wagtail installation can run multiple sites side by side, each rooted at a different page in the same tree, which is exactly the setup Wagtail’s own permission model is built around. We test whether an editor or group scoped to one site’s branch can reach another site’s pages, documents or settings through the admin or the API.

WT-06

Private Pages and Restriction Types

A page set to private can require any logged-in account, a shared password, or membership of specific groups, and Wagtail’s documentation is explicit that the shared password option is stored in plain text and shared between everyone given it. We test which restriction type is actually protecting sensitive content, and whether a shared password has been used where a login or group restriction was the safer choice.

WT-07

Private Documents and Serve Method

Documents inherit the same three restriction types from the collection they sit in, but that check only holds while WAGTAILDOCS_SERVE_METHOD is left on serve_view, which routes every download through a Django view that enforces the restriction; the direct and redirect alternatives serve files straight from storage and trade away that per-request check for performance. We test which serve method is configured and, on serve_view, whether the underlying documents directory is still reachable by requesting its direct path on the web server.

WT-08

Custom Views and StreamField Block Output

Wagtail’s built-in RawHTMLBlock renders editor-entered content unescaped in the page output, and Wagtail’s own documentation warns it should only go to fully trusted editors, since it can inject scripts that reach an administrator viewing the page. We test where RawHTMLBlock and any custom StreamField block with its own render template are available, to which editor groups, and whether custom Django views added alongside Wagtail’s own carry the same authorisation checks.

WT-09

API v2 Field and Endpoint Exposure

A field only reaches the Wagtail API v2 response once it is explicitly listed in a page model’s api_fields, split between body_fields and meta_fields, and a field already available in meta_fields still needs its own entry in nested_default_fields before it appears on a related page nested inside another result. We test whether that field-by-field opt-in has left something exposed that should not be public, and whether a page or document’s privacy restriction still holds when it is reached through the API rather than the front end.

WT-10

Image and Document Collections, and Their API Endpoints

Images and documents are owned by whoever uploaded them, with permissions set on the root collection cascading to every sub-collection, and a separate choose permission controlling what appears in the image and document picker used across pages and snippets; Images and Documents also each get their own API v2 endpoint alongside Pages. We test collection boundaries, upload validation, and whether either API endpoint returns files a group’s collection permissions were meant to keep out of reach.

OUR PROCESS

Wagtail Penetration Testing: From Scope to Attestation

01

Scope and Access

We agree the environments, page-tree branches and any editor, publisher or admin accounts we need, plus which sites are in or out of scope on a multi-site installation.

02

Permission and Privacy Mapping

We map every group’s Add, Edit, Publish, Lock and Bulk delete permissions against the page tree, along with which pages and documents are marked private and how each one is restricted.

03

Manual Testing

A CREST-certified tester manually tests permission boundaries, private page and document restrictions, the API v2 endpoints and any custom Django views or StreamField blocks, chaining findings where they compound.

04

Attestation 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 Wagtail 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 Wagtail Penetration Testing 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,950–£4,460
2 to 4 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
£7,120–£10,380
5 to 8 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 Wagtail Penetration Testing

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 Wagtail site?

We need at least one account for every distinct group in your permission structure, including an editor-level account and, where your workflow uses one, a publisher-level account, so we can test the boundary between them. For the API v2 endpoint we need to know which page types and fields are exposed, or a way to reach the same information you would give a front-end developer.

Will testing touch our live data?

We test whichever environment you give us access to. If that is production, we agree exclusions upfront that suit your organisation, such as publishing test pages live, bulk-deleting content, or sending real notification emails, and we do not run destructive tests against real pages or documents without that agreement in writing.

How long does a Wagtail penetration test take?

A single Wagtail site sits in our 2-day single-framework scope, with a report typically landing around 5 working days after kickoff. A multi-site installation, a large number of permission groups, or a significant custom API integration moves into a wider scope with more testing days.

Do you test self-hosted Wagtail as well as managed hosting?

Yes. We test Wagtail running on your own servers or containers the same way as Wagtail on a managed platform. The document storage and serve-method checks adjust to whichever storage backend you use, local disk or a remote provider, but the permission, privacy and API testing is the same either way.

What is out of scope for a single-framework Wagtail test?

Infrastructure-level issues in the underlying server, network or cloud configuration are out of scope for this test and covered by our cloud penetration testing service instead. A separate frontend application consuming the Wagtail API as a headless CMS, such as a decoupled React or Vue app, is also scoped and quoted separately.

Do you need our source code?

No. Testing is black-box against the running site and admin by default. A grey-box option, where we review the relevant permission configuration, custom StreamField blocks and api_fields definitions alongside testing, is available if you want faster or deeper coverage of specific findings.

Does Wagtail have a customer penetration-testing policy we need to follow?

Wagtail’s own security process covers vulnerabilities in the open-source platform itself, reported to security@wagtail.org rather than as a public GitHub issue, and is not a customer notification requirement for testing a site you run. If your Wagtail installation sits on a shared hosting platform or PaaS, that provider’s own penetration-testing policy still applies, and we confirm it with you during scoping.

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 Wagtail site

Wagtail’s page permissions inherit down the tree, so a boundary set one level too high reaches further than intended. We test what each group, page, site and privacy setting can actually reach. CREST-certified testers, fixed price from £2,950 for a 2-day single-framework scope, quoted within 24 hours.