TECHNOLOGIES: OUTSYSTEMS

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
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
OutSystems 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
Anonymous

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 CheckRole() function, and OutSystems’ own documentation confirms it is available in both client and server logic, with a lighter icon marking the client-side version. Restricting a screen through its Accessible by and Authorization settings controls who can open that screen, but restricting what a signed-in user can do inside an action still depends on someone adding an If element with CheckRole() to the server-side logic itself. We test every role against both surfaces: what a screen’s Authorization setting allows a user to open, and what the server actions and aggregates behind that screen will still execute or return if the same request is made directly by a user who was never meant to reach it.

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 CheckRole() or GetUserId() rather than trust anything the client sends back, reinforced by a server-side check. We test what a screen’s generated REST methods actually return, independent of what the interface currently displays, and whether an aggregate’s filter can be bypassed by calling that method with different input.

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

OU-01

Server Actions vs Screen-Level Role Checks

Every end-user role generates a CheckRole() function that OutSystems’ own documentation confirms works in both client and server logic, so calling it from a screen’s client-side condition only ever hides an element, not the underlying action. We test whether the server actions and aggregates a screen calls still enforce that same role check when reached directly, independent of what the screen’s Authorization setting shows.

OU-02

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.

OU-03

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.

OU-04

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.

OU-05

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.

OU-06

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.

OU-07

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.

OU-08

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.

OU-09

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.

OU-10

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

01

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.

02

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.

03

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.

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 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.
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 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.

✦ 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,270–£3,340
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,330–£8,130
4 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 quote

Full UK pen test cost guide

WHY 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.

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 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.