CONFIDENTIAL · AIR-GAPPED ASSESSMENT

Adversarial Assurance Report

Proof-of-exploit penetration test & regulatory attestation

Client / TargetVAmPI (third-party target)
Operation IDOP-20260913-033940
Report Generated (UTC)2026-09-13T03:39:46Z
Assessment ModeAir-gapped · shadow-range · production financial ceiling S$0
ClassificationConfidential — restricted to authorized recipients

This document contains confidential security findings intended solely for the named client and its authorized advisors. Distribution, reproduction, or disclosure to any other party without written consent is prohibited. Handle in accordance with the client's information classification policy.

Executive Summary

12
Confirmed weaknesses
5
Critical
3
High
12
Endpoints in scope
0
False positives
CRITICAL 5HIGH 3MEDIUM 3LOW 1

This engagement confirmed 12 exploitable weaknesses across the VAmPI (third-party target) attack surface, of which 5 critical and 3 high-severity findings present immediate risk to the business. The highest-priority issue, AXM-API2-006, (Forgeable session tokens: JWT signed with a weak, guessable secret) enables full account takeover and was independently re-executed to eliminate doubt about its validity. Collectively, the confirmed defects place the following business outcomes within reach of an unauthenticated or low-privileged attacker: customer data exposure, privilege escalation, account takeover, account integrity loss. Every finding in this report was proven by exploitation and re-verified by independent replay; 0 false positives were reported. Each entry carries a cryptographically sealed evidence capsule that verifies offline.

Methodology. Testing followed NIST SP 800-115 (Technical Guide to Information Security Testing and Assessment) and the OWASP Web Security Testing Guide (WSTG) with mapping to the OWASP API Security Top 10 (2023). Findings are admitted only after proof-by-exploitation and independent replay verification; unconfirmed candidates are discarded rather than reported.

Findings Register

Findings are ordered by attacker priority (descending). Each entry is a self-contained, independently reproducible proof of exploitation.

AXM-API2-006

Forgeable session tokens: JWT signed with a weak, guessable secret

CRITICAL CVSS 9.8 Attacker priority 99 API2:2023 Broken Authentication
Business impactFull Account Takeover
Affected asset/me
Weakness classAPI2:2023 Broken Authentication
Attacker outcomeany identity (incl. admin) forgeable
MITRE ATT&CK
T1552T1078
Proof of Exploit
Exploit transcript
1POST /users/v1/login -> 200
2GET /me -> 200
Observed evidence
JWT signing secret guessed ('random'); forged token for 'admin' accepted at /me (privileged access)
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) fd9f8db7c4be0346b7c7ec94b0cf6b9662123cbc9a21b2b9b689f64e9b37e89c
Remediation
Use a long, random, secret-managed signing key; rotate it; reject 'alg:none'.
AXM-API1-003

BOLA account takeover: any user can reset another user's password

CRITICAL CVSS 9.4 Attacker priority 97 API1:2023 Broken Object Level Authorization
Business impactAccount Takeover
Affected asset/users/v1/{victim}/password
Weakness classAPI1:2023 Broken Object Level Authorization
Attacker outcomefull account takeover
MITRE ATT&CK
T1190T1078
Proof of Exploit
Exploit transcript
1POST /users/v1/register -> 200
2POST /users/v1/register -> 200
3POST /users/v1/login -> 200
4PUT /users/v1/bola_b_457c17/password -> 204
5POST /users/v1/login -> 200
Observed evidence
account takeover: user 'bola_a_0c8317' set user 'bola_b_457c17' password; login as 'bola_b_457c17' with new password succeeded
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 66d2ba751edaac3d82882c906e9c8cc6fccd9f41ea1a93ba61b11ff5ccddf334
Remediation
Enforce object ownership: the acting principal must own the target object.
AXM-API1-004

BOLA: any user can change another user's email

CRITICAL CVSS 9.4 Attacker priority 97 API1:2023 Broken Object Level Authorization
Business impactAccount Integrity Loss
Affected asset/users/v1/{victim}/email
Weakness classAPI1:2023 Broken Object Level Authorization
Attacker outcomevictim email rewritten
MITRE ATT&CK
T1190T1078
Proof of Exploit
Exploit transcript
1POST /users/v1/register -> 200
2POST /users/v1/register -> 200
3POST /users/v1/login -> 200
4PUT /users/v1/bola_b_cb664f/email -> 204
Observed evidence
user 'bola_a_21c174' modified user 'bola_b_cb664f' via PUT /users/v1/bola_b_cb664f/email (204)
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 443debe0cbded1c0efd32b98f637a1ac08bbc82696219c58d94fecac7df4c216
Remediation
Enforce object ownership: the acting principal must own the target object.
AXM-API8-005

SQL injection at /users/v1/

CRITICAL CVSS 9.1 Attacker priority 95 API8:2023 Injection
Business impactData Exfiltration
Affected asset/users/v1/
Weakness classAPI8:2023 Injection
Attacker outcomedatabase query manipulable
MITRE ATT&CK
T1190
Proof of Exploit
Exploit transcript
1GET /users/v1/name1' -> 500
Observed evidence
payload broke the SQL query at /users/v1/ — DB error surfaced: sqlalchemy
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 0a598ae98b3810cbe4c992ce5d88259dd23f13d8f8be49498b82abfb4e0ee89b
Remediation
Use parameterised queries / an ORM binding; never string-format user input into SQL.
AXM-API6-002

Mass assignment allows self-granting 'admin' on registration

CRITICAL CVSS 8.8 Attacker priority 90 API6:2023 Mass Assignment
Business impactPrivilege Escalation
Affected asset/users/v1/register
Weakness classAPI6:2023 Mass Assignment
Attacker outcomeattacker becomes admin
MITRE ATT&CK
T1078
Proof of Exploit
Exploit transcript
1POST /users/v1/register -> 200
2GET /users/v1/_debug -> 200
Observed evidence
registered user 'ma_3346d85b' with admin=true accepted by server (privilege escalation)
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) a710f3c8e70d6d0005e7cb06729daac9d718b218273f54f03374741f2cf46246
Remediation
Whitelist bindable fields; never accept 'admin' from client input.
AXM-API3-001

Sensitive data exposed without authentication at /users/v1/_debug

HIGH CVSS 7.5 Attacker priority 82 API3:2023 Excessive Data Exposure
Business impactCustomer Data Exposure
Affected asset/users/v1/_debug
Weakness classAPI3:2023 Excessive Data Exposure
Attacker outcomepassword exposed
MITRE ATT&CK
T1213
Proof of Exploit
Exploit transcript
1GET /users/v1/_debug -> 200
Observed evidence
unauthenticated GET /users/v1/_debug returned sensitive fields: password
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 3029f9db89791380186d9dd94ab93af5460a26318df0c40c50b56bad1b691660
Remediation
Require authentication and strip sensitive fields (password/token) from responses.
AXM-API8-007

Debug mode enabled: verbose stack traces / interactive debugger exposed

HIGH CVSS 7.2 Attacker priority 68 API8:2023 Security Misconfiguration
Business impactInformation Disclosure
Affected asset/users/v1/name1'
Weakness classAPI8:2023 Security Misconfiguration
Attacker outcomeinternals + potential RCE via debugger
MITRE ATT&CK
T1592
Proof of Exploit
Exploit transcript
1GET /users/v1/name1' -> 500
Observed evidence
server returned a verbose stack trace / interactive debugger at /users/v1/name1' (Werkzeug Debugger)
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) a6c1bdd458ad8fb697cab1b9c3b54da9c113f6e440d8a30ac659696bb7a3267b
Remediation
Disable debug mode in production; return generic error pages.
AXM-API9-009

Undocumented / legacy endpoint reachable: /users/v1/_debug

HIGH CVSS 7.1 Attacker priority 62 API9:2023 Improper Inventory Management
Business impactSensitive Data Exposure
Affected asset/users/v1/_debug
Weakness classAPI9:2023 Improper Inventory Management
Attacker outcomepassword exposed
MITRE ATT&CK
T1590T1213
Proof of Exploit
Exploit transcript
1GET /users/v1/_debug -> 200
Observed evidence
undocumented/legacy endpoint /users/v1/_debug reachable without auth and leaks sensitive fields: password
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 3c56b88931022fc7f2305566720617c184d12bc606793569c0090eb036924f75
Remediation
Maintain an authoritative API inventory; decommission legacy/debug endpoints or gate them behind auth and network controls.
AXM-API4-008

No rate limiting on /users/v1/login — brute-force / credential-stuffing enabler

MEDIUM CVSS 5.3 Attacker priority 55 API4:2023 Unrestricted Resource Consumption
Business impactBrute-force & Resource Exhaustion
Affected asset/users/v1/login
Weakness classAPI4:2023 Unrestricted Resource Consumption
Attacker outcome15 rapid attempts, 0 throttled
MITRE ATT&CK
T1110T1499
Proof of Exploit
Exploit transcript
1POST /users/v1/login -> 200
2POST /users/v1/login -> 200
3POST /users/v1/login -> 200
4POST /users/v1/login -> 200
5POST /users/v1/login -> 200
6POST /users/v1/login -> 200
7POST /users/v1/login -> 200
8POST /users/v1/login -> 200
9POST /users/v1/login -> 200
10POST /users/v1/login -> 200
11POST /users/v1/login -> 200
12POST /users/v1/login -> 200
13POST /users/v1/login -> 200
14POST /users/v1/login -> 200
15POST /users/v1/login -> 200
Observed evidence
fired 15 rapid unauthenticated requests at /users/v1/login; 0 rate-limited (429) or lockout responses (status distribution: 200x15)
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) deae612a2053b9ed08ba8108a0379a0107d565a09509a5e7812c0b04b05ba379
Remediation
Enforce per-IP/per-account rate limiting and progressive lockout on authentication endpoints.
AXM-API9-010

Undocumented / legacy endpoint reachable: /console

MEDIUM CVSS 5.3 Attacker priority 48 API9:2023 Improper Inventory Management
Business impactAttack Surface Exposure
Affected asset/console
Weakness classAPI9:2023 Improper Inventory Management
Attacker outcomehidden endpoint reachable
MITRE ATT&CK
T1590T1213
Proof of Exploit
Exploit transcript
1GET /console -> 200
Observed evidence
undocumented/legacy endpoint /console reachable (200) — path pattern indicates it should not be publicly exposed
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) ee30d05a247be0cf2e7ba4aee31bd3d809deab568fe57f462b3f5491ad43579a
Remediation
Maintain an authoritative API inventory; decommission legacy/debug endpoints or gate them behind auth and network controls.
AXM-API8-011

Missing HTTP security headers

MEDIUM CVSS 4.3 Attacker priority 40 API8:2023 Security Misconfiguration
Business impactClickjacking / MITM / MIME-sniffing Exposure
Affected asset/
Weakness classAPI8:2023 Security Misconfiguration
Attacker outcomemissing: HSTS, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options
MITRE ATT&CK
T1592
Proof of Exploit
Exploit transcript
1GET / -> 200
Observed evidence
response from / is missing security headers: HSTS, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 37d0bc35678e65af284fefa6572ab37a1a11475d9a9db2c826505d98f002e4f9
Remediation
Set Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options and X-Frame-Options on all responses.
AXM-API8-012

Verbose server/version banner disclosure

LOW CVSS 3.7 Attacker priority 28 API8:2023 Security Misconfiguration
Business impactInformation Disclosure (fingerprinting)
Affected asset/
Weakness classAPI8:2023 Security Misconfiguration
Attacker outcomeserver: Werkzeug/2.2.3 Python/3.11.15
MITRE ATT&CK
T1592.002
Proof of Exploit
Exploit transcript
1GET / -> 200
Observed evidence
response from / discloses software/version banners: server: Werkzeug/2.2.3 Python/3.11.15
Independently re-executed 3/3 times — confirmed.
Evidence capsule digest (SHA-256) 119f8578815bc34f98675bef657cdc5fdf87c62a903f70ccf30638b2cc13587b
Remediation
Suppress or genericise Server/X-Powered-By and framework version headers.

Regulatory Attestation

A single, independently verified evidence base is mapped to the control clauses of each applicable regime below. One proof of exploitation satisfies the evidentiary requirement across multiple frameworks simultaneously.

FrameworkClause / ControlWeakness IDInvariantFinding
OWASP APIAPI3:2023AXM-API3-001API3:2023 Excessive Data ExposureSensitive data exposed without authentication at /users/v1/_debug
API6:2023AXM-API6-002API6:2023 Mass AssignmentMass assignment allows self-granting 'admin' on registration
API1:2023AXM-API1-003API1:2023 Broken Object Level AuthorizationBOLA account takeover: any user can reset another user's password
API1:2023AXM-API1-004API1:2023 Broken Object Level AuthorizationBOLA: any user can change another user's email
API8:2023AXM-API8-005API8:2023 InjectionSQL injection at /users/v1/
API2:2023AXM-API2-006API2:2023 Broken AuthenticationForgeable session tokens: JWT signed with a weak, guessable secret
API8:2023AXM-API8-007API8:2023 Security MisconfigurationDebug mode enabled: verbose stack traces / interactive debugger exposed
API4:2023AXM-API4-008API4:2023 Unrestricted Resource ConsumptionNo rate limiting on /users/v1/login — brute-force / credential-stuffing enabler
API9:2023AXM-API9-009API9:2023 Improper Inventory ManagementUndocumented / legacy endpoint reachable: /users/v1/_debug
API9:2023AXM-API9-010API9:2023 Improper Inventory ManagementUndocumented / legacy endpoint reachable: /console
API8:2023AXM-API8-011API8:2023 Security MisconfigurationMissing HTTP security headers
API8:2023AXM-API8-012API8:2023 Security MisconfigurationVerbose server/version banner disclosure
PDPAProtectionAXM-API3-001API3:2023 Excessive Data ExposureSensitive data exposed without authentication at /users/v1/_debug
MAS TRM8.4AXM-API6-002API6:2023 Mass AssignmentMass assignment allows self-granting 'admin' on registration
13.2.4AXM-API1-003API1:2023 Broken Object Level AuthorizationBOLA account takeover: any user can reset another user's password
13.2.4AXM-API1-004API1:2023 Broken Object Level AuthorizationBOLA: any user can change another user's email
9.1AXM-API2-006API2:2023 Broken AuthenticationForgeable session tokens: JWT signed with a weak, guessable secret
13.2.4AXM-API4-008API4:2023 Unrestricted Resource ConsumptionNo rate limiting on /users/v1/login — brute-force / credential-stuffing enabler
13.1.1AXM-API9-009API9:2023 Improper Inventory ManagementUndocumented / legacy endpoint reachable: /users/v1/_debug
13.1.1AXM-API9-010API9:2023 Improper Inventory ManagementUndocumented / legacy endpoint reachable: /console
PCI DSS 4.06.2.4AXM-API1-003API1:2023 Broken Object Level AuthorizationBOLA account takeover: any user can reset another user's password
6.2.4AXM-API1-004API1:2023 Broken Object Level AuthorizationBOLA: any user can change another user's email
6.2.4AXM-API8-005API8:2023 InjectionSQL injection at /users/v1/
8.3AXM-API2-006API2:2023 Broken AuthenticationForgeable session tokens: JWT signed with a weak, guessable secret
6.2.4AXM-API8-007API8:2023 Security MisconfigurationDebug mode enabled: verbose stack traces / interactive debugger exposed
6.2.4AXM-API8-011API8:2023 Security MisconfigurationMissing HTTP security headers
6.2.4AXM-API8-012API8:2023 Security MisconfigurationVerbose server/version banner disclosure

Evidence Integrity

Every finding above is bound into a hash-chained evidence ledger, sealed to a hardware/software root of trust. The chain and its signature verify entirely offline, without contacting the tester or any external service.

Merkle root hashd08073c33ad3adc392f1e67095f0e84f0bddc5ad441d70e62384e9ee98991c87
Root of trustsoftware (Ed25519) — POC only
Signing device serialSOFT-KEY-0001
Signature007435816bff12c42db43c33cf80bc5d…

The evidence chain and cryptographic signature verify offline: any tampering with a finding, transcript, or digest invalidates the root hash and the signature over it.