OutSystems Penetration Testing
Every aggregate and server action behind a screen also becomes its own REST API. We test whether that API, and the role guarding it, still holds without the screen. CREST-certified testers, fixed price from £2,270 for a 2-day single-app scope, quoted within 24 hours.
- Unlimited retesting
- Unlimited pre-retesting
- No hidden fees
“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.”
Anonymous is OutSystems’ built-in role for users who haven’t signed in, and it isn’t just a screen setting. Every aggregate and server action that screen calls generates its own REST method, and giving the screen the Anonymous role opens that generated method to the same public access.
An Anonymous screen makes everything it calls Anonymous too
Every end-user role you create gets a matching Check
OutSystems’ own security guidance is direct about where sensitive data belongs: never store sensitive data in Client Variables, which persist in the browser’s local storage and are shared across every app on that device, and never let one control the flow of the application, because both can be edited with ordinary browser tooling. The same discipline applies to aggregates. Current documentation confirms an aggregate retrieves only the attributes bound to a widget on the screen, and its own advice for sensitive data is to filter that aggregate with Check
An exposed REST API is only as secure as what runs in its authentication pipeline. OutSystems’ own pattern for token-based authentication for exposed REST APIs validates a JWT’s signature and its issuer, audience and expiry claims inside the API’s own logic on every request, and warns against trusting a token’s claims client-side or putting sensitive data in an unencrypted payload. The same platform lets developers extend an app with compiled .NET or Java code through an Integration Studio extension, or with custom JavaScript, and that code runs with the same trust as the platform’s own generated logic rather than under any separate sandbox. Whether the app runs on OutSystems Developer Cloud, OutSystems 11 Cloud or a self-managed OutSystems 11 install changes who owns the infrastructure beneath it, and OutSystems’ shared responsibility model names identifying vulnerabilities through penetration testing as a customer responsibility on its Cloud offerings. We test the application, roles, APIs and extensions you have built, whichever infrastructure they run on, and confirm the current rules of engagement with you during scoping.
SCOPE
What we pen test on an OutSystems application
Server Actions vs Screen-Level Role Checks
Every end-user role generates a Check
Client Variables and Client-Side Logic
Client Variables store data client-side in the browser’s local storage and are shared across every app on the device, and OutSystems’ own guidance says they should never hold sensitive data or control the flow of the application, because both can be edited with ordinary browser tooling. We test what a Client Variable actually holds, whether editing it changes what the app allows, and whether any screen or client action depends on it for access control.
Aggregates and What They Return to the Screen
Aggregates used on a screen are restricted to the attributes bound to a widget on that screen, but a field bound to a widget hidden by a conditional visibility rule is still part of that binding. We test what an aggregate actually returns against what the interface currently displays for a given role, and whether its filters can be bypassed by calling the generated method with different input.
Generated REST APIs Behind Every Aggregate and Action
Every aggregate and server action used at the client side compiles into its own callable REST method, separate from the screen that uses it. We test each generated method directly, with the input parameters it expects, to see what it returns or executes when it isn’t reached through the screen’s own interface.
Exposed REST API Authentication
An exposed REST API validates a caller inside its own authentication logic, and OutSystems’ documented pattern for token-based authentication checks a JWT’s signature plus its issuer, audience and expiry claims on every request rather than trusting anything the client already knows about the token. We test what an exposed method accepts without a valid token, whether an expired or altered token is rejected, and whether the claims it does trust can be forged or replayed.
Anonymous vs Registered End-User Access
A screen set to the Anonymous role is reachable without signing in, and OutSystems’ own guidance is explicit that the REST method generated for any aggregate or server action on that screen becomes public at the same time. We test what an anonymous caller can reach through that generated method alone, and whether an input parameter that decides which records come back can be changed to return someone else’s.
Role Definitions, Public Roles and Role Updates
Roles are created per app and can be marked Public to make them available to other apps and libraries, and a role change made to another user through the Portal or the Grant/Revoke actions takes effect immediately in server-side logic but only at that user’s next token renewal or login on the client side. We test what a downgraded or revoked role can still do in the window before that renewal happens.
Extensions and Custom Code
OutSystems applications can call compiled .NET or Java code added through an Integration Studio extension in OutSystems 11, or custom JavaScript in application logic, and that code runs with the same trust as the platform’s own generated logic rather than any separate sandbox. We review what an extension or custom code block does with the data and permissions it is given, and whether it enforces the same checks the low-code logic around it does.
Reactive Web and Mobile Client-Side Exposure
A Reactive Web or Mobile screen’s client-side resources, including screen and block variables and input parameters, compile into HTML, JavaScript and the app’s client bundle, and OutSystems’ own guidance is to keep anything security-sensitive out of that layer entirely. We test what a Mobile app stores locally between sessions and what a Reactive Web client bundle exposes, on the same basis as the server-side logic behind it.
OutSystems Developer Cloud, O11 Cloud and Self-Managed
OutSystems apps run on OutSystems Developer Cloud, on OutSystems 11 hosted on OutSystems Cloud, or on a self-managed OutSystems 11 install on your own infrastructure, and OutSystems’ published shared responsibility model puts securing your data and roles, and identifying vulnerabilities through penetration testing, on the customer for its Cloud offerings. We test the application layer the same way regardless of hosting, and bring the underlying server and network configuration into scope where you operate it yourself.
OUR PROCESS
OutSystems Application Penetration Testing: From Scope to Attestation
Scope and Role Mapping
We agree the apps, environments, end-user roles, exposed REST APIs and extensions in scope, and catalogue every role, generated API method and custom code module connected to them before testing starts.
Authenticated and Role-Based Testing
We test from accounts across every end-user role in scope, comparing what each role’s screens show against what its server actions, aggregates and generated APIs actually allow when called directly.
Manual Exploitation
A CREST-certified tester manually tests role enforcement, aggregate and API exposure, and extension or custom code behaviour, chaining findings where they compound.
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 OutSystems 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.
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 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 OutSystems Application Penetration Testing Pricing
Pricing depends on the number of roles, integrations and environments in scope. See our pricing page for how we quote.
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 quote3 to 4 testing days
Multi-role SaaS, business application with payment integration. Around 8 to 12 working days from kickoff to report.
Get a fixed quote4 to 6 testing days
Multi-tenant platform, complex authorisation matrix, integration-heavy applications. Around 15 to 20 working days from kickoff to report.
Get a fixed quoteSECTORS
Sectors We Test OutSystems For
Sector-specific scoping for regulated UK organisations.
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 OutSystems Application 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 OutSystems application?
A test account for each end-user role in scope, from the most restricted role up to any administrative one, plus visibility of the exposed REST APIs, extensions and any custom code modules the application calls. We don’t need your Integration Studio or ODC Studio source project directly; a test or staging environment with the same roles and extensions configured is enough.
Will this touch our live data?
No. Wherever a Test, QA or staging stage exists with equivalent roles and data, we test against that. Where only a production environment is available, anything that could alter data is agreed and scoped with you in advance, and read-only checks are logged as they run.
How long does an OutSystems application penetration test take?
A single-app engagement is scoped at 2 testing days as a starting point, rising with the number of end-user roles, exposed REST API methods and extensions connected to the app. Reporting and a walkthrough call follow testing, with a free retest once fixes are deployed.
Is OutSystems Developer Cloud tested differently from OutSystems 11?
The application-layer testing is the same either way: roles, screens, aggregates, exposed REST APIs and any extensions or custom code you have built. What changes is the infrastructure around it. ODC and OutSystems 11 Cloud both run on infrastructure OutSystems operates, while a self-managed OutSystems 11 install runs on infrastructure you operate yourself, which we bring into scope alongside the application when it is yours to secure.
What is out of scope?
OutSystems’ own cloud infrastructure, the ODC and OutSystems 11 Cloud hosting layer, and the Integration Studio or ODC Studio development tools themselves are out of scope; those are covered by OutSystems’ own security programme, not this engagement. We test the applications, roles, screens, aggregates, exposed REST APIs and any extensions or custom code you have built and configured.
Does OutSystems have a policy for customers testing their own applications?
Yes. OutSystems’ published shared responsibility model names identifying application vulnerabilities through penetration testing as a customer responsibility on its Cloud offerings, and OutSystems states separately that customers can penetration test their own applications, typically with coordination and approval so testing does not disrupt shared infrastructure. We confirm the current process and any notice requirements with you, and with OutSystems where needed, during scoping.
Do you test the exposed REST APIs and extensions as well as the screens?
Yes, where they are in scope. Every aggregate and server action used at the client side generates its own callable REST method independent of the screen, and any Integration Studio extension or custom JavaScript your app calls runs with the same trust as the platform’s own logic, so we test all of it directly rather than only through the interface.
20+ CREST-accredited testing services in one place
Web, mobile, API, cloud, AI, infrastructure, red team. Pick the test that fits your environment.
Get a fixed price for your OutSystems application
Every aggregate and server action behind a screen also becomes its own REST API. We test whether that API, and the role guarding it, still holds without the screen. CREST-certified testers, fixed price from £2,270 for a 2-day single-app scope, quoted within 24 hours.



