Reg. No. 40203410806VAT LV40203410806

Theme

Book a consultationBook

A report you can act on — not a wall of scanner output

Every engagement ends with a deliverable that both engineers and decision-makers can use: evidence of impact, defensible risk ratings and a clear remediation path. Below is a complete sample report for the fictional Aurenta Group.

The value of a penetration test depends on the quality of its deliverable. Raw tool output and CVSS spreadsheets rarely lead to effective remediation; clear findings, reproducible evidence and specific recommendations do.

Our reports are produced with an in-house reporting system, giving every engagement a consistent, version-controlled and bilingual (EN/LV) structure. One document serves two audiences: a plain-language executive summary for decision-makers and full technical detail — requests, responses, test inputs and screenshots — for the engineers responsible for remediation.

What’s in every OffSeq report

A consistent structure for every engagement, with optional chapters that adapt from a focused penetration test to a full red team operation.

  1. 01

    Cover & engagement metadata

    Client, project, document ID, version, test type and TLP classification — traceable and ready for audit use.

  2. 02

    Executive summary

    Background, key findings, recommendations and a clear readiness conclusion in plain language for leadership.

  3. 03

    Scope & methodology

    Exactly what was in and out of scope, the testing window and the standards followed (OSSTMM, PTES and OWASP WSTG).

  4. 04

    Severity & risk model

    CVSS 3.1/4.0 scoring, a severity ramp and acceptance thresholds — so a number means the same thing every time.

  5. 05

    Reconnaissance

    The public attack surface we mapped — subdomains, exposed hosts and information leakage.

  6. 06

    Findings with evidence

    For each issue: description, impact, technical detail, HTTP requests and responses, test inputs, screenshots and remediation guidance.

  7. 07

    OWASP & compliance mapping

    Findings mapped to the OWASP Top 10 (2025) and, where relevant, NIS2 / ISO 27001 controls.

  8. 08

    Attack-path summary

    How individual findings combine into a demonstrable compromise, sequenced by business impact.

  9. 09

    Remediation roadmap

    Prioritised, actionable fixes — what to do first, and what can wait.

  10. 10

    Re-test & verification

    A follow-up assessment that verifies whether each finding has been resolved and records its updated status.

Aurenta Group — Customer Portal & API

Fictional client · illustrative data · rendered to match a real OffSeq deliverable

Sample reportOFFSEQ-2026-0042TLP:AMBER+STRICTConfidential
Grey-box

Aurenta Group

Customer Portal & API Security Engagement

April 17, 2026v1.0OFFSEQ-2026-0042

Test window
23 Mar – 16 Apr 2026
Test type
Grey-box web application & API
Targets
portal.aurenta.example · api.aurenta.example
Standards
OWASP WSTG · PTES · OSSTMM
Specialists
2 (certified)
Classification
TLP:AMBER+STRICT

01

Executive summary

Background

OffSeq performed a grey-box security assessment of the Aurenta Customer Portal and its public API. Testing combined automated analysis with manual validation and controlled exploitation. The authenticated area was accessed using temporary portal credentials provided by the client.

Key findings

  • A critical, unauthenticated SQL injection in the login API allows full authentication bypass and read access to the user store.
  • A broken access-control flaw (IDOR) allows any authenticated user to download other customers’ invoices, creating a path to large-scale data exposure.
  • Defence-in-depth gaps include no Content Security Policy, an HSTS duration below one year and an end-of-life React version in production.

Priority recommendations

  • Parameterise all database queries and use least-privilege database accounts. Treat the SQL injection as a Priority 1 remediation item.
  • Enforce object-level authorisation for every API resource and use identifiers that cannot be readily enumerated.
  • Deploy a CSP, first in report-only mode and then in enforcement mode; extend HSTS to at least one year and assess preload readiness; and plan the React upgrade.
Findings by severity
6Findings
  • Critical1
  • High1
  • Medium1
  • Low2
  • Info1

At a glance

Six findings were identified: one Critical, one High, one Medium, two Low and one Informational. The Critical and High findings can be chained to expose customer personal and financial records at scale.

Conclusion

The portal should not be approved for production launch until the Critical SQL injection and High-severity IDOR have been remediated and verified by re-testing. The remaining findings concern defence-in-depth hardening.

02

Vulnerability summary

SeverityFoundAcceptableVerdict
Critical10Unacceptable
High1≤ 1Within tolerance
Medium1≤ 3Within tolerance
Low2≤ 7Within tolerance
Info1

Overall verdict

Remediation required

One Critical finding exceeds the acceptance threshold, resulting in an overall “remediation required” verdict regardless of the remaining categories.

03

OWASP Top 10 (2025) coverage

  • A01:2025Broken Access ControlIDOR on /v1/invoicesFail
  • A02:2025Security MisconfigurationMissing CSP, short HSTSFail
  • A03:2025Software Supply Chain FailuresEnd-of-life React 16.13.1Fail
  • A04:2025Cryptographic FailuresPass
  • A05:2025InjectionSQL injection in auth APIFail
  • A06:2025Insecure DesignPass
  • A07:2025Authentication FailuresPass
  • A08:2025Software or Data Integrity FailuresPass
  • A09:2025Logging & Alerting FailuresOut of scope for this engagementN/A
  • A10:2025Mishandling of Exceptional ConditionsPass

04

Reconnaissance

Passive reconnaissance mapped the portal’s public attack surface. Three subdomains point to the portal origin behind Cloudflare, while one administrative host resolves directly and bypasses the WAF.

Subdomain inventory
HostIPNote
portal.aurenta.example203.0.113.10Primary portal · behind Cloudflare
api.aurenta.example203.0.113.11Public API
admin.aurenta.example203.0.113.12Direct origin access — bypasses WAF
status.aurenta.example203.0.113.13Status page · verbose build metadata
  • The status page publishes verbose build metadata (git SHA, build date).
  • Two staging subdomains (stg-*) were accessible during the testing window.

05

Findings

Six representative findings, ordered by severity. Each is reproducible and mapped to a fix.

  1. OS-01

    Unauthenticated SQL injection in the portal authentication API

    CriticalOpenA05:2025CWE-89

    CVSS 3.19.8CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

    The `email` field of the login endpoint is concatenated directly into a SQL query without parameterisation. A time-based blind injection confirms the flaw and allows authentication bypass and arbitrary read access to the `users` table, including e-mail addresses, roles and bcrypt password hashes.

    Affected

    • POST https://api.aurenta.example/v1/auth/login

    Impact

    An unauthenticated attacker could sign in as any user, including an administrator, and extract the customer identity store. This could lead to account takeover and a personal-data breach requiring assessment under the GDPR notification rules.

    Technical detail

    A five-second delay for the test input below, compared with an immediate response to the control request, confirms time-based blind SQL injection:

    HTTP request

    POST /v1/auth/login HTTP/2
    Host: api.aurenta.example
    Content-Type: application/json
    
    {"email":"x' OR (SELECT 1 FROM (SELECT SLEEP(5))a)-- -","password":"x"}
    

    HTTP response

    HTTP/2 200
    content-type: application/json
    x-response-time: 5024ms
    
    {"token":"eyJhbG...","role":"admin"}
    

    Evidence

    sqlmap identified the following injection point:
    Parameter: email (JSON)
        Type: time-based blind
        Title: MySQL >= 5.0.12 AND time-based blind (SLEEP)
    available databases [2]: aurenta_portal, information_schema
    Database: aurenta_portal  Table: users  [48,213 entries]
    
    sqlmap confirmation (redacted)

    Remediation

    Replace string-built SQL with parameterised statements or prepared queries. Run the application under a least-privilege database account, validate input against an allowlist and deploy a temporary WAF rule until the code fix is released. Rotate any credentials that may have been exposed.

  2. OS-02

    Broken access control exposes every customer’s invoices (IDOR)

    HighOpenA01:2025CWE-639

    CVSS 3.18.1CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N

    Invoice records use sequential integer IDs and are returned without an ownership check. Any authenticated user can change the identifier to enumerate and download invoices belonging to other customers, including names, addresses and payment summaries.

    Affected

    • GET https://api.aurenta.example/v1/invoices/{id}

    Impact

    A single low-privilege account could retrieve the invoice history of the entire customer base, exposing personal and financial data at scale and potentially triggering GDPR notification obligations.

    HTTP request

    GET /v1/invoices/100245 HTTP/2
    Host: api.aurenta.example
    Authorization: Bearer <attacker-session>
    

    HTTP response

    HTTP/2 200
    content-type: application/pdf
    content-disposition: attachment; filename="invoice-100245.pdf"
    
    %PDF-1.7  (invoice for a *different* customer)
    

    Evidence

    for id in $(seq 100240 100260); do
      curl -s -o "inv-$id.pdf" -w "%{http_code}\n" \
        -H "Authorization: Bearer $T" \
        https://api.aurenta.example/v1/invoices/$id
    done
    # 21/21 returned HTTP 200 — none belonged to the test account.
    
    Enumeration loop (proof of scale)

    Remediation

    Enforce object-level authorisation on every request by verifying server-side that the authenticated principal may access the requested resource. Replace sequential IDs with non-enumerable identifiers such as UUIDv4 and apply deny-by-default access control.

  3. OS-03

    Content Security Policy (CSP) is not implemented

    MediumHardening requiredA02:2025CWE-693

    CVSS 3.14.0CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N

    The application returns no `Content-Security-Policy` header on any page observed during testing.

    Affected

    • https://portal.aurenta.example/
    • https://portal.aurenta.example/users/sign_in
    • https://portal.aurenta.example/admin/*

    Impact

    Without a CSP, the browser cannot restrict the effects of reflected or stored XSS, unauthorised third-party script loading or data exfiltration after a successful injection. This removes an important defence-in-depth control.

    HTTP response

    HTTP/2 200
    content-type: text/html; charset=utf-8
    strict-transport-security: max-age=15552000
    x-frame-options: DENY
    x-content-type-options: nosniff
    (no Content-Security-Policy header)
    

    Remediation

    Deploy a strict CSP, starting with the sign-in and administration pages. Begin in `Content-Security-Policy-Report-Only` mode, review violations and then enforce the policy. Avoid `unsafe-inline` for scripts; use nonces or hashes.

  4. OS-04

    Outdated JavaScript library — React 16.13.1

    LowRecommended updateA03:2025CWE-1104

    The production bundle includes React 16.13.1 (March 2020), which is no longer supported. Even where no directly applicable CVE is known, unsupported frameworks and their transitive dependencies increase maintenance and security risk.

    Affected

    • https://portal.aurenta.example/assets/application-90283b17.js

    Impact

    Running an unsupported framework increases the likelihood of an unpatched vulnerability entering production via a transitive dependency.

    Remediation

    Adopt continuous dependency review (Dependabot / Renovate), add software composition analysis (SCA) to CI, and plan a migration to React 18/19.

  5. OS-05

    HSTS max-age is below one year

    LowHardening requiredA02:2025CWE-16

    The `Strict-Transport-Security` header uses `max-age=15552000` (180 days), below the one-year duration commonly required before a domain is eligible for HSTS preload.

    Affected

    • https://portal.aurenta.example/

    Impact

    A shorter `max-age` reduces the period during which the browser refuses plain HTTP after its last secure visit, slightly increasing exposure to SSL-stripping attacks.

    Remediation

    After confirming that all subdomains support HTTPS, set `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` and then consider submitting the domain to the HSTS preload list.

  6. OS-06

    Publicly accessible recursive DNS resolver

    InfoInformational

    The portal host answers recursive DNS queries for foreign zones from unauthorised source addresses (RD+RA flags set).

    Affected

    • 203.0.113.10:53

    Impact

    Open resolvers can be abused for amplification in reflected DDoS attacks against third parties. No direct impact on Aurenta data was demonstrated; the issue is included for completeness.

    Remediation

    Restrict UDP/TCP 53 at the perimeter to authorised clients, or disable recursion for the public interface.

06

How the findings chain into a breach

Individual findings matter less than what they enable together. This is the sequence we demonstrated — from mapping the surface to mass data exposure.

01Reconnaissance

Map the attack surface

Mapped the portal, public API and an administrative host that resolves directly, bypassing the Cloudflare WAF.

admin.aurenta.example exposed

02Initial access

Bypass authentication

A blind SQL injection in the login API returns a valid administrator session without valid credentials.

Auth bypass · CVSS 9.8

03Credential access

Extract the user store

The same injection reads the users table — e-mails, roles and password hashes — straight from the database.

48,000 records exposed

04Broken access control

Enumerate invoices

Sequential invoice IDs with no ownership check let any session enumerate and download every customer’s invoice.

Mass PII / financial data

05Impact

Exfiltrate data at scale

Together, the findings provide an initial foothold and an automatable path to extract customer records at scale.

Potentially reportable GDPR breach

Demonstrated chain · OS-01 → OS-02 · grey-box engagement, April 2026

07

Social engineering (phishing campaign)

A pretext-based phishing campaign targeted Aurenta employees using a cloned portal sign-in page. Submitted credentials were discarded immediately on the server and were not retained.

Employees targeted
700
Credentials entered
154 (22%)
Reported to IT
38 (5%)

A 22% credential-submission rate indicates a material awareness gap. We recommend quarterly reinforcement and targeted follow-up for employees who repeatedly interact with simulations.

Representative excerpt — the full deliverable runs 30–60+ pages

Want a report like this for your systems?

Define the scope of a focused penetration test or a broader engagement. You will receive the same evidence-based reporting for your own attack surface.