Python Penetration Testing for Django, Flask and FastAPI
Python applications tend to be built fast and shipped early, and the flaws follow the framework: template injection, permission classes that were never tightened, and settings that were fine in development. CREST-certified testers, fixed price from £2,950, scoped in 24 hours.
- Unlimited retesting
- No rescheduling or cancellation fees
- Fixed quote within 24 hours
“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.”
“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.”
Django and Flask both ship sensible defaults. The findings come from the places where the defaults were changed, or never applied. Debug mode still on behind a load balancer. A permission class left at the framework default so every authenticated user reaches every object. A queryset that filters on a parameter rather than on the caller.
The framework does the work, so test what the framework was told
Template rendering is the second area. When a template is built from user data rather than filled with it, Python template engines will evaluate what they are given, and expression evaluation in Python reaches the interpreter. That is a short path from a text box to a shell.
Third, the things around the application. Pickle in a cache or a queue, YAML loaded unsafely, a task broker reachable from somewhere it should not be, and a signed session cookie protected by a secret key that was committed to the repository two years ago.
ISO 27001, SOC 2, PCI DSS and Cyber Essentials Plus audits accept manual penetration test evidence. Scan-only evidence is generally insufficient.
PYTHON SPECIFICS
What We Actually Test in a Python Application
Ten test areas that apply because the application is Python, on top of the standard application checks. Every finding is verified, reproducible and mapped to OWASP, CWE and CVSS 3.1.
Template injection
Templates constructed from user input in Jinja2, Django templates or Mako, and how far evaluation reaches from there.
Deserialisation
Pickle in caches, sessions and queues, unsafe YAML loading, and any endpoint that accepts a serialised object.
Framework settings
Debug mode, allowed hosts, cookie flags, admin interface exposure, and the difference between the documented settings and the deployed ones.
Permission classes and querysets
Default permission classes, object level permissions, and whether querysets are scoped to the caller rather than filtered by a parameter.
Session handling
Signed cookie sessions, secret key strength and reuse across environments, session forging, and logout behaviour.
ORM and raw SQL
Raw and extra queries, text queries, ordering and filtering parameters, and aggregation built from request data.
Server side request forgery
Outbound requests to user supplied URLs, webhook and import features, redirect handling, and cloud metadata reachability.
Command execution and file processing
Subprocess calls with shell semantics, and conversion pipelines such as image or document processing that accept hostile files.
Workers and queues
Broker exposure, task arguments that cross a trust boundary, and monitoring dashboards published without authentication.
Dependencies and packaging
Unpinned requirements, typosquatting exposure, packages that execute at install time, and known issues in what is actually deployed.
METHODOLOGY
What a Python finding looks like
Written the way a finding appears in our reports. The example below is reconstructed from publicly documented research, with hosts, paths and identifiers redacted. We do not republish client findings, named or anonymised.
User controlled sort parameter reaches the ORM and yields SQL injection
- Affected
- The reporting list view at [redacted], Django on PostgreSQL, reachable without authentication.
- What we found
- The view took a sort field from the request and passed it straight to the queryset ordering call. On the Django release in use this allowed injection through a crafted related field name, and we recovered the user table including password hashes.
- Why it matters
- Read access to the whole reporting database from an unauthenticated request, covering personal data for roughly [redacted] individuals, which is reportable under UK GDPR.
- Fix
- Upgrade Django, map the sort parameter through an allow list of permitted column names, and never pass request data into ordering, extra or raw query calls.
Reconstructed from public research: CVE-2021-35042, SQL injection via QuerySet.order_by in Django, fixed in the 3.1.13 and 3.2.5 security releases.
Python Penetration Testing: From Scope to Attestation
CREST-aligned methodology built on OWASP Web Security Testing Guide, OWASP ASVS, NIST SP 800-115, and PTES. Each finding maps to all four standards plus your specific compliance regime.
Reconnaissance
Application mapping, technology fingerprinting, content discovery, parameter enumeration, authentication-flow analysis, role-matrix construction.
Vulnerability Assessment
Authenticated and unauthenticated automated scanning across every user role, plus targeted manual checks for known weakness patterns.
Manual Exploitation
Hands-on testing by a CREST-certified pentester. Business-logic exploitation, chained vulnerabilities, privilege escalation, impact validation.
Reporting + Retest
Executive summary, technical report with CVSS scores and reproduction steps, walkthrough call, free retest after remediation, attestation letter.
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 Python application 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 £2,950 for a small, single-scope engagement, agreed up front. Most engagements run £4,460 and up. No day-rate surprises.
Under NDA Further named references available on a scoping call.
- We reply within one business day with a fixed-price quote from a named CREST assessor.
- You approve the scope and we book a start date, usually within 24 hours.
- Live findings land in your client portal as we test, with a free retest of every fix.
Get your fixed pen test quote in 24 hours
Quote request received
We will reply within one business day with your fixed-price quote from a named CREST assessor.
Your data stays with us. No newsletter signup.
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 explicitly tagged to the relevant control reference. Your audit team submits the report directly 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 Python Penetration Testing Pricing
Pricing depends on app complexity, user-role count, business-logic depth, and integration surface. The day count flexes; the included deliverables stay the same across all engagements.
2 to 4 days
Single user role, basic CRUD application, marketing website with auth. Typically 5-day engagement.
Get a fixed quote4 to 5 days
Multi-role SaaS, business application with payment integration. Typically 8-12 day engagement.
Get a fixed quote5 to 8 days
Multi-tenant platform, complex authorisation matrix, integration-heavy applications. 15-20 day engagement.
Get a fixed quotePart of Technologies We Pen Test. These are examples of the stacks we publish pages for, not a complete list. If yours is not here we still test it. Related pages:
BY SECTOR
Python Penetration Testing for Your Sector
Sector-specialist scoping for UK businesses with sector-specific compliance regimes and threat models.
Fintech & FCA-Regulated
FCA SYSC, Open Banking FAPI 1.0, PSD2 SCA, payment-flow scrutiny, KYC/AML testing.
Fintech sector pageSaaS Companies
SOC 2 Type I & II evidence, multi-tenant boundaries, role escalation, customer-tenant isolation.
SaaS sector pageLaw Firms
SRA Cyber Standard, privileged data, conveyancing fraud defence, partner-tier procurement.
Law firm sector pageHealthcare
NHS DTAC, DSP Toolkit v6, UK GDPR Article 32, EHR systems, telehealth platforms.
Healthcare sector pageInsurance
FCA / PRA Operational Resilience, cyber underwriting, claims data, broker portals.
Insurance sector pagePublic Sector
CCS / G-Cloud framework, NCSC-aligned, citizen-facing services, PSN-compliance scrutiny.
Public sector pageWHY EJN LABS
What You Get From Python 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
Do you test FastAPI as well as Django and Flask?
Yes. FastAPI scopes as an API test, with dependency injection and the authentication scheme getting particular attention.
Can you test a machine learning or data service?
Yes. The model itself is a different engagement on the AI testing page. This page covers the service around it: the API, the queue, the storage and the pipeline that accepts files.
Is the Django admin in scope?
Ask us to include it. It is often reachable, often on a guessable path, and the accounts attached to it are usually the most privileged in the system.
We run background workers. Should they be in scope?
If a worker consumes anything that a user can influence, yes. Queue arguments are a trust boundary that rarely gets tested.
Do you need the code?
No. A code review is a separate service that pairs well with this one, particularly for template and deserialisation issues.
Python 2 legacy. Can you still test it?
Yes, and we will say plainly which findings have no patch path.
What is included in the price?
Scoping, testing, the executive summary, the technical report, a walkthrough call and free retests until the finding is closed. One scope, one number, no follow-up invoices.
How fast can you start?
Scope to active testing in 24 hours once the scope is agreed, subject to tester availability in your window.
Are your testers CREST certified?
Yes. EJN Labs is a CREST member company and testing is delivered by CREST-qualified testers. The membership is verifiable on the CREST marketplace.
20+ CREST-accredited testing services in one place
Web, mobile, API, cloud, AI, infrastructure, red team. Pick the test that fits your environment.
Get your Python application tested properly
Send us the application and the roles. You will have a fixed scope and a number within 24 hours.



