Reg. No. 40203410806 VAT LV40203410806

Theme

Book a consultation Book

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.

01

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.

02

Aurenta Group — Customer Portal & API

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

Sample report OFFSEQ-2026-0042 TLP:AMBER+STRICT Confidential
Grey-box

Aurenta Group

Customer Portal & API Security Engagement

April 17, 2026 v1.0 OFFSEQ-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
6 Findings
  • Critical 1
  • High 1
  • Medium 1
  • Low 2
  • Info 1

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

Severity Found Acceptable Verdict
Critical 1 0 Unacceptable
High 1 ≤ 1 Within tolerance
Medium 1 ≤ 3 Within tolerance
Low 2 ≤ 7 Within tolerance
Info 1

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:2025 Broken Access Control IDOR on /v1/invoices Fail
  • A02:2025 Security Misconfiguration Missing CSP, short HSTS Fail
  • A03:2025 Software Supply Chain Failures End-of-life React 16.13.1 Fail
  • A04:2025 Cryptographic Failures Pass
  • A05:2025 Injection SQL injection in auth API Fail
  • A06:2025 Insecure Design Pass
  • A07:2025 Authentication Failures Pass
  • A08:2025 Software or Data Integrity Failures Pass
  • A09:2025 Logging & Alerting Failures Out of scope for this engagement N/A
  • A10:2025 Mishandling of Exceptional Conditions Pass

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
Host IP Note
portal.aurenta.example 203.0.113.10 Primary portal · behind Cloudflare
api.aurenta.example 203.0.113.11 Public API
admin.aurenta.example 203.0.113.12 Direct origin access — bypasses WAF
status.aurenta.example 203.0.113.13 Status 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

    Critical Open A05:2025 CWE-89

    CVSS 3.1 9.8 CVSS: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)

    High Open A01:2025 CWE-639

    CVSS 3.1 8.1 CVSS: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

    Medium Hardening required A02:2025 CWE-693

    CVSS 3.1 4.0 CVSS: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

    Low Recommended update A03:2025 CWE-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

    Low Hardening required A02:2025 CWE-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

    Info Informational

    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.

01 Reconnaissance

Map the attack surface

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

admin.aurenta.example exposed

02 Initial access

Bypass authentication

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

Auth bypass · CVSS 9.8

03 Credential 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

04 Broken 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

05 Impact

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.