Rekon

Penetration Test Report

Client[Company Name]
Target[app.example.com]
EngagementREKON-2026-001
Date2026-03-01 — 2026-03-15
TierProfessional
Versionv1.0
CONFIDENTIAL
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
00

Document Control

Version History

VersionDateAuthorChanges
1.02026-03-15Rekon Security TeamInitial release
0.92026-03-14Rekon Security TeamDraft — internal review

Distribution

NameRoleAccess
[CTO Name]CTOFull report
[CISO Name]CISOFull report
[Dev Lead Name]Engineering LeadFindings + remediation

Confidentiality Notice

This document contains confidential information belonging to [Company Name]. The findings, data, and recommendations herein are intended solely for the authorized recipients listed above. Unauthorized reproduction, distribution, or disclosure of this report or its contents is strictly prohibited. This report must be stored with encryption at rest and transmitted only via secure channels.

Methodology Standards

OWASP WSTG v4.2PTESNIST SP 800-115MITRE ATT&CK v15CWE Top 25
Rekon · rekon.sh 2 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
01

Table of Contents

1 Executive Summary 4
2 Scope & Methodology 5
3 Risk Summary 6
4 Findings 7
4.1 REKON-F001 — Zero Rate Limiting on OTP Validation 7
4.2 REKON-F002 — Cognito Self-Registration Enabled 8
4.3 REKON-F003 — postMessage Origin Bypass 9
5 Remediation Plan 10
6 Attack Chains 11
7 Defense Analysis 12
8 Evidence Index 13
9 Disclaimer 14
Rekon · rekon.sh 3 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
02

Executive Summary

Score Card

Total findings24
Critical2
High5
Medium9
Low6
Info2

Risk Assessment

The assessment of [app.example.com] revealed 2 critical and 5 high severity vulnerabilities that pose immediate risk to user accounts and financial data. The most severe finding (REKON-F001) allows complete account takeover via OTP brute force in approximately 3.2 hours due to absent rate limiting on the authentication endpoint.

A multi-step attack chain combining three individual findings enables extraction of payment card data (PAN + CVV) from the digital wallet, representing a direct financial and compliance risk (PCI DSS violation).

Top Findings

CRIT F001 Zero Rate Limiting on OTP — account takeover
CRIT F002 Cognito Self-Registration — unauthorized API access
HIGH F003 postMessage Origin Bypass — wallet data exfiltration
HIGH F005 CORS Wildcard on Auth Endpoints — credential theft

Recommendation

Implement server-side OTP rate limiting within 72 hours and disable Cognito self-registration immediately. Schedule a retest after remediation of all critical and high findings.

Rekon · rekon.sh 4 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
03

Scope & Methodology

Scope

AssetTypeApproach
app.example.comWeb ApplicationBlack-box
api.example.comREST APIGray-box (Swagger docs)
auth.example.comAuth Service (Cognito)Black-box
*.example.com/adminAdmin PanelAuthenticated

Testing Window

Start2026-03-01 09:00 UTC
End2026-03-12 18:00 UTC
Duration10 business days
Hours~80 person-hours

Methodology

Testing followed OWASP Web Security Testing Guide (WSTG v4.2) and the Penetration Testing Execution Standard (PTES). Each finding is mapped to CWE identifiers and OWASP Top 10 2021 categories. CVSS v3.1 scoring with full vector strings. All evidence artifacts are SHA-256 hashed for integrity verification.

Tools

Burp Suite Professional 2025.12 Nuclei v3.3.x + custom templates ffuf v2.x (content discovery) sqlmap 1.8.x (SQL injection) Custom Python/Go scripts Browser DevTools (Chrome 130+)

Exclusions

× Denial of Service (DoS) testing
× Social engineering / phishing
× Physical security assessment
× Third-party integrations (Stripe, SendGrid)
× Mobile applications (iOS/Android)
Rekon · rekon.sh 5 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
04

Risk Summary

Findings by Severity

2

CRITICAL

5

HIGH

9

MEDIUM

6

LOW

2

INFO

Findings by Category

Category (OWASP)CriticalHighMediumLowTotal
A07 — Identification & Auth Failures21216
A01 — Broken Access Control2316
A05 — Security Misconfiguration1225
A02 — Cryptographic Failures1113
A03 — Injection112
A09 — Security Logging Failures2

Overall Risk Rating

HIGH RISK The application presents a high overall risk due to the presence of 2 critical findings with active exploitability and a confirmed multi-step attack chain leading to financial data exfiltration. Immediate remediation is required before production traffic increases.
Rekon · rekon.sh 6 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
05

Findings

CRITICAL REKON-F001

Zero Rate Limiting on OTP Validation — Account Takeover

CVSS9.8CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-307 — Improper Restriction of Excessive Authentication Attempts
OWASPA07:2021 — Identification and Authentication Failures
TargetPOST /api/auth/validate-otp

Description

The OTP validation endpoint accepts unlimited authentication attempts without server-side rate limiting, account lockout, or exponential backoff. Testing confirmed that 20 consecutive requests with incorrect OTP codes all returned HTTP 401 with consistent response times (31-56ms), with no indication of throttling or quota enforcement.

Evidence

POST /api/auth/validate-otp HTTP/2 Host: auth.example.com Content-Type: application/json Authorization: Bearer eyJhbGci...truncated {"email":"target@example.com","code":"000000"} ← HTTP/2 401  31ms  {"code":"INVALID_OTP"} ← HTTP/2 401  42ms  {"code":"INVALID_OTP"} ← HTTP/2 401  38ms  {"code":"INVALID_OTP"} ← HTTP/2 401  56ms  {"code":"INVALID_OTP"} ... 16 additional attempts — no QUOTA_EXCEEDED, no lockout

Impact

Any user account can be compromised via OTP brute force (~3.2 hours with HTTP/2 multiplexing for a 6-digit code). This grants full access to orders, shipping addresses, payment methods, and wallet balance. Estimated exposure: all active user accounts.

Remediation

IMMEDIATE: Server-side OTP attempt counter — max 5 per code lifetime

SHORT TERM: Account lockout after 10 failed attempts per hour with notification

LONG TERM: Migrate to TOTP (RFC 6238) or push-based MFA

Rekon · rekon.sh 7 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
CRITICAL REKON-F002

Cognito Self-Registration Enabled — Unauthorized API Access

CVSS9.1CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-287 — Improper Authentication
OWASPA07:2021 — Identification and Authentication Failures
TargetAWS Cognito User Pool (us-east-1_XXXXXXX)

Description

The AWS Cognito User Pool has self-registration enabled via the SignUp API. Any unauthenticated user can register a new account by sending a direct SignUp request to Cognito, bypassing the application's intended registration flow. The newly created account receives valid JWT tokens that grant access to authenticated API endpoints.

Evidence

aws cognito-idp sign-up \ --client-id 3abc...xyz \ --username attacker@evil.com \ --password P@ssw0rd123! # Response: UserConfirmed: true, UserSub: "a1b2c3..." aws cognito-idp initiate-auth \ --auth-flow USER_PASSWORD_AUTH \ --client-id 3abc...xyz \ --auth-parameters Username=attacker@evil.com,Password=P@ssw0rd123! # Response: AccessToken, IdToken, RefreshToken → valid

Impact

Attackers can create unlimited accounts with valid session tokens, gaining access to authenticated API endpoints. This serves as the entry point for the REKON-C001 attack chain that leads to wallet data exfiltration.

Remediation

IMMEDIATE: Disable AllowSelfSignUp in Cognito User Pool configuration

SHORT TERM: Implement pre-signup Lambda trigger for domain validation

Rekon · rekon.sh 8 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
HIGH REKON-F003

postMessage Origin Bypass — Wallet Data Exfiltration

CVSS8.1CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
CWECWE-346 — Origin Validation Error
OWASPA01:2021 — Broken Access Control
Targetapp.example.com/wallet (postMessage handler)

Description

The wallet iframe communicates with the parent window via postMessage but does not validate the message origin. An attacker-controlled page can embed the wallet iframe and extract sensitive payment data (PAN, CVV, expiry) by sending crafted postMessage requests.

Evidence

// Attacker-controlled page const iframe = document.createElement('iframe'); iframe.src = 'https://app.example.com/wallet'; document.body.appendChild(iframe); window.addEventListener('message', (e) => { console.log('Exfiltrated:', e.data); // { pan: "4111...1111", cvv: "123", exp: "12/28" } }); iframe.contentWindow.postMessage( { action: 'getCardDetails' }, '*' );

Impact

Combined with F002 (Cognito self-registration), an attacker can create an authenticated session and extract payment card data from any user's wallet. Direct PCI DSS compliance violation.

Remediation

IMMEDIATE: Validate event.origin against allowlist in postMessage handler

SHORT TERM: Replace postMessage with server-side token exchange for sensitive data

Rekon · rekon.sh 9 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
06

Remediation Plan

PriorityIDFindingActionEffort
IMMEDIATEF001OTP Rate LimitingServer-side attempt counter — max 5/codeHours
IMMEDIATEF002Cognito Self-RegistrationDisable AllowSelfSignUp in User PoolHours
SHORT TERMF003postMessage OriginValidate event.origin against allowlistDays
SHORT TERMF005CORS WildcardRestrict Access-Control-Allow-OriginDays
MEDIUM TERMF008Source Maps ExposedRemove .map files from production CDNDays
MEDIUM TERMF012Session FixationRegenerate session ID after authenticationWeeks
LONG TERMF015Missing CSP HeadersImplement Content-Security-PolicyWeeks
LONG TERMF018WebAuthn AdoptionImplement passkeys for admin accountsMonths

Priority Definitions

PriorityCriteriaSLA
IMMEDIATEActively exploitable, critical business risk24–72 hours
SHORT TERMHigh risk, requires architectural change1–2 weeks
MEDIUM TERMModerate risk, schedulable sprint work1–3 months
LONG TERMLow risk, strategic security improvement3–6 months
Rekon · rekon.sh 10 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
07

Attack Chains

REKON-C001 Cognito to Wallet Exfiltration

Combined CVSS: 9.8 · Chain of 3 findings · Full attack path verified

Step 1: Cognito Self-Registration (F002) — CRITICAL Attacker registers via AWS Cognito SignUp API → Receives valid AccessToken + IdToken Step 2: Authenticated API Access (F002 cont.) — HIGH Valid JWT grants access to /api/v2/* endpoints → Can enumerate users, access wallet iframe Step 3: postMessage Origin Bypass (F003) — HIGH Attacker page embeds wallet iframe postMessage handler lacks origin validation → Sends { action: "getCardDetails" } RESULT: PAN + CVV + Expiry extracted from wallet Full financial data exfiltration confirmed BREAK POINT: Disable Cognito self-registration (F002) Eliminates attacker's ability to obtain valid tokens

Chain Impact Assessment

This chain demonstrates how three individual vulnerabilities (two critical, one high) combine to create a complete financial data exfiltration path. While each finding is independently exploitable, the chain amplifies the business impact from unauthorized access to direct PCI DSS violation and potential regulatory fines. Remediating the break point (F002) severs the chain entirely.

Rekon · rekon.sh 11 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
08

Defense Analysis

Security Controls

ControlStatusEffectivenessNotes
WAF (Cloudflare)PresentHighBlocked common OWASP payloads
TLS ConfigurationPresentHighTLS 1.3 enforced, HSTS enabled
Bot ProtectionPresentPartialBypassed with custom User-Agent rotation
Input ValidationPresentMediumServer-side validation on most endpoints
Rate LimitingMissingN/ANo rate limiting on auth endpoints
MFA EnforcementPartialLowOTP-only, no backup method
CSP HeadersMissingN/ANo Content-Security-Policy header
Security LoggingPartialLowAuth events logged, no alert pipeline

Negative Tests (Passed)

Test VectorResultNotes
SQL Injection (all input points)Not vulnerableParameterized queries confirmed
HTTP Request SmugglingNot vulnerableCloudflare proxy prevents
Web Cache DeceptionNot vulnerableCache-Control headers correct
XXE InjectionNot vulnerableJSON-only APIs, no XML parsing
SSRF (out-of-band)Not vulnerableURL parsing with allowlist
Prototype PollutionNot vulnerableObject.freeze on config objects
Rekon · rekon.sh 12 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
09

Evidence Index

All evidence artifacts are stored in the accompanying REKON-2026-001-EVIDENCE.zip archive. SHA-256 hashes ensure integrity verification.

IDTypeFindingDescriptionTimestamp (UTC)SHA-256
E001 HTTP F001 OTP brute force — 20 sequential requests 2026-03-05 14:22 a1b2c3d4e5f6...
E002 HTTP F001 Timing analysis — consistent 31-56ms response 2026-03-05 14:25 b2c3d4e5f6a7...
E003 HTTP F002 Cognito SignUp API — account creation 2026-03-06 09:41 c3d4e5f6a7b8...
E004 HTTP F002 JWT token — authenticated API access 2026-03-06 09:43 d4e5f6a7b8c9...
E005 Script F003 postMessage PoC — wallet exfiltration 2026-03-07 16:12 e5f6a7b8c9d0...
E006 Screenshot F003 Console output — PAN/CVV data 2026-03-07 16:14 f6a7b8c9d0e1...
E007 Video C001 Full attack chain PoC — 4m22s 2026-03-08 11:30 a7b8c9d0e1f2...
E008 HTTP F005 CORS wildcard response headers 2026-03-09 13:55 b8c9d0e1f2a3...
E009 Screenshot F008 Source map file listing on CDN 2026-03-10 10:18 c9d0e1f2a3b4...

File Naming Convention

REKON-2026-001-REPORT-v1.pdf REKON-2026-001-EVIDENCE.zip REKON-2026-001-EXECUTIVE-SUMMARY.pdf Format: REKON-[ENGAGEMENT_ID]-[TYPE]-v[VERSION].[EXT]
Rekon · rekon.sh 13 / 14
CONFIDENTIAL — [COMPANY NAME] REKON-2026-001
10

Disclaimer

Point-in-Time Assessment

This report represents a point-in-time assessment conducted during the testing window specified in Section 2. The security posture of the application may change after the assessment due to code deployments, configuration changes, or newly disclosed vulnerabilities. Findings are valid as of the testing end date and should be reverified during the retest window.

Scope Limitations

Testing was limited to the assets and methodologies defined in the Rules of Engagement (ROE) signed prior to the engagement. This assessment does not guarantee the absence of all vulnerabilities. Areas outside the defined scope, including but not limited to third-party services, mobile applications, and physical security, were not evaluated.

Liability

Rekon performed this assessment with reasonable skill and care in accordance with industry standards (PTES, OWASP WSTG v4.2, NIST SP 800-115). Rekon's liability is limited to the terms specified in the Master Service Agreement (MSA) and Statement of Work (SOW). Rekon is not responsible for any damages resulting from the exploitation of vulnerabilities identified in this report.

Retest Policy

TierRetestsWindow
Starter130 days
Professional260 days
EnterpriseUnlimited90 days

Confidentiality

This document is classified as CONFIDENTIAL. Distribution is restricted to the authorized recipients listed in the Document Control section. Any unauthorized reproduction, distribution, or use of this report is strictly prohibited and may result in legal action.

Rekon · rekon.sh · hello@rekon.sh
Rekon · rekon.sh 14 / 14