Ruby on Rails Penetration Testing

Ruby on Rails Penetration Testing

Ruby on Rails penetration testing looks where the conventions were bent, because Rails does so much for you. One permit! or an unscoped find(params[:id]) hands a user another user’s records. CREST-certified testers, fixed price from £2,590 for a 2-day single-framework scope, quoted within 24 hours.

  • Unlimited retesting
  • No rescheduling or cancellation fees
  • Fixed quote within 24 hours
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 Member
Verified accreditation
10
Rails-specific test areas
FREE Retest
Until the finding is closed
24h
Scope to active testing
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
permit!

Strong parameters, CSRF tokens and escaped output come as standard, so the interesting findings are the exceptions. A controller that permits everything to make a form work. A model attribute that should never have been client controlled. An action that skips the before filter because it was easier during development.

Convention protects Rails applications until someone takes a shortcut

The failure modes are specific and repeatable. params.permit! in a controller that creates users. Project.find(params[:id]) with no current_user scope. A secret_key_base committed to the repository, so the session cookie can be forged. config.hosts left empty in production. A skip_before_action :require_login that covers more actions than it should.

The Rails security guide shows the risk: Project.find(params[:id]) lets a user change the id to 42 and read a project they may not see, where current_user.projects.find would refuse. And permit! allows all current and future model attributes to be mass assigned, so an admin or role field in the body is accepted. The Rails security guide covers the lookup.

We test it as one user against another. With two accounts we swap every ID on every route that takes one, post extra attributes such as role or admin to each create and update, send a forged Host header, and call actions that skip the login filter without a session. ISO 27001, SOC 2, PCI DSS and Cyber Essentials Plus audits accept manual penetration test evidence. Scan-only evidence is generally insufficient.

RAILS SPECIFICS

What We Actually Test in a Rails Application

Ten test areas that apply because the application is Rails, on top of the standard application checks. Every finding is verified, reproducible and mapped to OWASP, CWE and CVSS 3.1.

RB-01

Strong parameters and mass assignment

Permitted attributes per controller, nested parameters, and fields such as role or account identifier accepted from the client.

RB-02

Secret key base and sessions

Key strength and reuse, cookie store contents, session forging, and rotation after exposure.

RB-03

Deserialisation

YAML and Marshal reached from request data, cache and job payloads, and serialised columns.

RB-04

Active Record injection

Order, group, pluck and raw conditions built from parameters, and search or filter interfaces.

RB-05

Authorisation

Policies and abilities not enforced on every action, nested resources, and scopes that filter by parameter rather than by user.

RB-06

Rendering and templates

Inline rendering, dynamic template selection, and output marked as safe that should not be.

RB-07

Redirects and callbacks

Redirects built from parameters, skipped before actions, and format handling that changes the code path.

RB-08

Active Storage and uploads

Direct upload signing, content type handling, variant processing and public blob URLs.

RB-09

Background jobs

Job dashboards published without authentication, and arguments that cross a trust boundary into the worker.

RB-10

Gems and versions

Known issues in the installed gemset, unsupported Rails versions, and monkey patches that change framework behaviour.

METHODOLOGY

SAMPLE FINDING

What a Rails 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.

HighCVSS 7.5 · CWE-22 · Illustrative example

Accept header manipulation returns arbitrary files from the application server

Affected
A Ruby on Rails application at [redacted] using dynamic template rendering on a dashboard action.
What we found
A crafted Accept header caused the view layer to treat a traversal path as a template name and return the file contents in the response. We retrieved the encrypted credentials file and the master key that decrypts it.
Why it matters
Disclosure of the master key, which unlocks every credential in the repository, including the production database password and the third party payment key.
Fix
Upgrade Rails, stop rendering templates from dynamic input, rotate the master key and all credentials it protected, and restrict the application user so it cannot read files outside its own directory.

Reconstructed from public research: CVE-2019-5418, file content disclosure in Action View.

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

01

Reconnaissance

Application mapping, technology fingerprinting, content discovery, parameter enumeration, authentication-flow analysis, role-matrix construction.

02

Vulnerability Assessment

Authenticated and unauthenticated automated scanning across every user role, plus targeted manual checks for known weakness patterns.

03

Manual Exploitation

Hands-on testing by a CREST-certified pentester. Business-logic exploitation, chained vulnerabilities, privilege escalation, impact validation.

04

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 Rails 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,590 for a small, single-scope engagement, agreed up front. Most engagements run £3,970 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 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 Rails 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.

✦ 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,590–£3,970
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
£6,180–£9,340
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

Part 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:

Full UK pen test cost guide

WHY EJN LABS

What You Get From Rails 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 API-only Rails applications?

Yes. Those scope as API tests, where object level authorisation and parameter handling carry most of the risk.

Our Rails version is old. Is that a problem?

It is a reason to test. We will tell you which findings are fixed by upgrading and which are in your own code.

Can you test Hotwire or Turbo applications?

Yes. Turbo streams and frames are endpoints like any other, and we test what they return for each role.

Do you need the repository?

No. A code review is a separate service, and it is the better tool for deserialisation and gadget hunting.

Will you test Sidekiq or the admin dashboards?

Yes, when they are in scope. They are often reachable and often unauthenticated.

What about the database?

Injection paths are in scope. Database hardening sits with the internal infrastructure test.

We use permit! in a few controllers. Is that a problem?

It permits an entire hash without checking the values, and the Rails guide says it allows all current and future model attributes to be mass assigned. If the model has a role, admin or account_id column, a signed-in user can set it in the request. We post those attributes to every controller that calls it. See the Action Controller strong parameters section.

Our config.hosts is empty in production. Is that safe?

It is the default. Outside development, Rails.application.config.hosts is empty and no Host header checks are done. That means the Host header is trusted as sent, so we send requests with altered values and look at what the application builds from them, such as links and redirects. See the config.hosts documentation.

Our Active Storage service is set to public: true. Is that a problem?

By default Active Storage assumes private access and generates signed, single-use URLs. With public: true in config/storage.yml, blobs become publicly accessible. We check whether anything private, such as invoices or identity documents, is stored on a public service. See the Active Storage public access section.

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 your Rails application tested properly

Send us the application and the roles. You will have a fixed scope and a number within 24 hours.