Pentest Rapport Schrijven met CVSS 4.0

Een goed pentest-rapport is het eindproduct van je beveiligingstest. Het is het document dat de opdrachtgever leest, dat bepaalt welke kwetsbaarheden worden verholpen, en dat de waarde van je werk laat zien. In deze tutorial leer je hoe je een professioneel rapport schrijft, hoe CVSS 4.0 scoring werkt, en hoe je Incompetent Bastard gebruikt om het proces te automatiseren.

Niveau: Beginner

Let op — Een pentest-rapport bevat gevoelige informatie. Behandel het altijd als vertrouwelijk en classificeer het correct (bijv. TLP:RED).

Vereisten

De Structuur van een Pentest-rapport

Standaard rapportstructuur

Een professioneel pentest-rapport volgt een vaste structuur. IB genereert deze structuur automatisch, maar het is belangrijk om te begrijpen waarom elk onderdeel er is.

Sectie Doelgroep Inhoud
Managementsamenvatting Directie/Management Kernboodschap in 1 pagina
Scope en methodologie Projectmanager/CISO Wat is getest en hoe
Risicoinschatting Technisch/Management Uitleg CVSS-scoring
Samenvatting bevindingen Iedereen Overzicht met aantallen per ernst
Bevindingen (detail) Technisch team Elke kwetsbaarheid uitgewerkt
Aanbevelingen overzicht Management/Technisch Tabel met alle aanbevelingen
Bijlagen Technisch team Extra evidence, scans, etc.

Managementsamenvatting

Dit is het belangrijkste onderdeel voor je opdrachtgever. Schrijf het alsof de lezer geen technische kennis heeft.

Richtlijnen:

Voorbeeld:

Tijdens de penetratietest van [applicatie] zijn in totaal 12 kwetsbaarheden
geidentificeerd, waarvan 2 als kritiek en 3 als hoog zijn geclassificeerd.
De kritieke kwetsbaarheden maken het mogelijk om als ongeautoriseerde
gebruiker volledige controle over de applicatie te verkrijgen.

Aanbevolen wordt om de kritieke en hoge kwetsbaarheden binnen 30 dagen
te verhelpen voordat de applicatie in productie gaat.

Scope en Methodologie

Documenteer precies wat er getest is:

IB — In het IB rapport-dashboard (/dashboard/report) kun je de scope, methodologie, testtype en testperiode instellen. IB genereert automatisch de juiste methodologie-tekst op basis van het gekozen testtype (pentest of red team).

CVSS 4.0: Het Scoringssysteem

Wat is CVSS?

Het Common Vulnerability Scoring System (CVSS) is de internationale standaard voor het classificeren van de ernst van kwetsbaarheden. Versie 4.0 is de nieuwste iteratie met verbeterde nauwkeurigheid.

Ernst-classificatie

Classificatie CVSS Score Kleur Verhelp-termijn
Kritiek 9.0 - 10.0 Donkerrood Direct (0-7 dagen)
Hoog 7.0 - 8.9 Rood Snel (7-30 dagen)
Middel 4.0 - 6.9 Oranje Normaal (30-90 dagen)
Laag 0.1 - 3.9 Geel Gepland (90+ dagen)
Informatief 0.0 Groen Optioneel

CVSS 4.0 Base Metrics

CVSS 4.0 kent 11 verplichte base metrics, verdeeld over drie groepen.

Exploitability Metrics (hoe wordt het misbruikt?)

Attack Vector (AV) — Hoe moet de aanvaller het systeem benaderen?

Waarde Betekenis Voorbeeld
Network (N) Via het netwerk Webkwetsbaarheid
Adjacent (A) Zelfde netwerksegment ARP spoofing
Local (L) Lokale toegang nodig Privilege escalation
Physical (P) Fysieke toegang nodig USB-aanval

Attack Complexity (AC) — Hoe complex is de aanval?

Waarde Betekenis
Low (L) Standaard condities, geen speciale voorbereiding
High (H) Vereist specifieke condities of voorkennis

Attack Requirements (AT) — Nieuw in CVSS 4.0! Zijn er vereisten buiten de controle van de aanvaller?

Waarde Betekenis
None (N) Geen extra vereisten
Present (P) Specifieke condities moeten aanwezig zijn

Privileges Required (PR) — Welke rechten heeft de aanvaller nodig?

Waarde Betekenis
None (N) Geen authenticatie nodig
Low (L) Standaard gebruikersrechten
High (H) Administratorrechten nodig

User Interaction (UI) — Moet een gebruiker iets doen?

Waarde Betekenis
None (N) Geen gebruikersinteractie nodig
Passive (P) Gebruiker hoeft niets actief te doen (bijv. pagina bezoeken)
Active (A) Gebruiker moet actief iets doen (bijv. klikken)

Impact Metrics: Vulnerable System (wat gebeurt er met het kwetsbare systeem?)

Confidentiality (VC) — Kan vertrouwelijke data worden gelezen?

Integrity (VI) — Kan data worden gewijzigd?

Availability (VA) — Kan het systeem onbeschikbaar worden gemaakt?

Alle drie met waarden: None (N), Low (L), High (H)

Impact Metrics: Subsequent System (wat gebeurt er met andere systemen?)

Confidentiality (SC), Integrity (SI), Availability (SA) — Dezelfde vragen, maar voor systemen die afhankelijk zijn van het kwetsbare systeem.

CVSS 4.0 Vector opbouwen

Een CVSS 4.0 vector ziet er als volgt uit:

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Voorbeelden van veelvoorkomende kwetsbaarheden

SQL Injection (unauthenticated)

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Score: 9.3 (Kritiek)

Toelichting:
- AV:N  - Via het netwerk bereikbaar
- AC:L  - Geen complexe voorwaarden
- AT:N  - Geen extra vereisten
- PR:N  - Geen login nodig
- UI:N  - Geen gebruikersinteractie nodig
- VC:H  - Volledige database leesbaar
- VI:H  - Data kan worden gewijzigd
- VA:H  - Database kan worden vernietigd

Cross-Site Scripting (Reflected)

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Score: 5.1 (Middel)

Toelichting:
- UI:A  - Gebruiker moet op link klikken
- VC:L  - Beperkte data leesbaar (sessiecookie)
- VI:L  - Beperkte wijziging (namens gebruiker)

Privilege Escalation (lokaal)

CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Score: 8.5 (Hoog)

Toelichting:
- AV:L  - Lokale toegang tot het systeem nodig
- PR:L  - Standaard gebruikersrechten als startpunt

IB — IB heeft een ingebouwde CVSS 4.0 calculator (/api/cvss4/calculate) die automatisch de score berekent op basis van de vector. Bij het aanmaken van findings kun je de vector invoeren en IB berekent de score en severity-classificatie.

Een Bevinding Schrijven

De structuur van een bevinding

Elke bevinding in je rapport bevat:

  1. Titel — Kort en beschrijvend (bijv. “SQL Injection in zoekfunctie”)
  2. Ernst — CVSS score en classificatie
  3. Locatie — Waar is de kwetsbaarheid gevonden (URL, IP, parameter)
  4. Beschrijving — Wat is het probleem (technisch maar leesbaar)
  5. Impact — Wat kan een aanvaller ermee (zakelijke impact)
  6. Evidence — Screenshots, requests/responses, code
  7. Aanbeveling — Hoe los je het op (concreet en uitvoerbaar)
  8. Referenties — CWE, OWASP, MITRE ATT&CK

Voorbeeld: Finding schrijven

Titel: SQL Injection in zoekparameter

Ernst: 9.3 (Kritiek)
CVSS: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Locatie: https://app.example.nl/search?q=

Beschrijving:
De zoekfunctie van de applicatie is kwetsbaar voor SQL injection.
De parameter 'q' wordt zonder validatie of parameterisatie doorgegeven
aan de database-query. Een aanvaller kan hiermee willekeurige
SQL-commando's uitvoeren op de onderliggende database.

Impact:
Een aanvaller kan de volledige database uitlezen, inclusief
gebruikersnamen, wachtwoord-hashes en persoonsgegevens. Daarnaast
kan de aanvaller data wijzigen of verwijderen, wat kan leiden tot
dataverlies en verstoring van de bedrijfsvoering.

Aanbeveling:
Gebruik parameterized queries (prepared statements) voor alle
database-interacties. Implementeer daarnaast input validatie op
de zoekparameter om alleen verwachte karakters toe te staan.

Referenties:
- CWE-89: SQL Injection
- OWASP A05:2025 - Injection
- NCSC U/WA.03 - Webapplicatie-invoer beperken

IB Gebruiken voor Rapport Generatie

Findings aanmaken in IB

IB biedt een compleet findings-managementsysteem:

  1. Ga naar /dashboard/findings in de IB-webinterface
  2. Kies een template uit de bibliotheek (voorgedefinieerde kwetsbaarheden)
  3. Vul de finding-specifieke details in (locatie, evidence, CVSS)
  4. Stel de status in op “Concept” of “Definitief”
  5. Upload evidence (screenshots, logs) per finding

IB — Finding templates in IB bevatten vooraf ingevulde beschrijvingen, impact-analyses en aanbevelingen in zowel Nederlands als Engels. Gebruik het template-systeem om consistent en efficient te werken.

Template-systeem

IB organiseert templates in categorieen:

Elk template bevat:

Rapport-instellingen configureren

In het IB rapport-dashboard (/dashboard/report) configureer je:

Rapport titel:     "Penetratietest Webapplicatie X"
Subtitel:          "Versie 1.0 - Concept"
Auteur:            "Jan-Karel Visser"
Project:           "Webapplicatie X"
Classificatie:     "TLP:RED"
Testtype:          "Pentest" of "Red Team"
Testscope:         "Black box" / "Grey box" / "White box"
Taal:              "Nederlands" of "Engels"

Rapport genereren

IB genereert rapporten in meerdere formaten:

# Via de webinterface:
# 1. Ga naar /dashboard/report
# 2. Controleer de instellingen
# 3. Klik op "Genereer rapport"

# Of via de API:
curl -X POST http://127.0.0.1:5000/api/report/generate \
    -H "Content-Type: application/json" \
    -d '{"include_draft": false}'

# Download het rapport in verschillende formaten:
curl http://127.0.0.1:5000/api/report/download/html -o rapport.html
curl http://127.0.0.1:5000/api/report/download/docx -o rapport.docx
curl http://127.0.0.1:5000/api/report/download/pdf  -o rapport.pdf
curl http://127.0.0.1:5000/api/report/download/tex  -o rapport.tex

IB — IB genereert automatisch LaTeX, HTML, DOCX, ODT, EPUB, PPTX, SARIF en STIX 2.1 output. Voor PDF-export is een LaTeX-distributie (texlive/xelatex) nodig.

Ondersteunde exportformaten

Formaat Bestandstype Gebruik
HTML tex.html Webpreview
LaTeX rapport.tex Professionele PDF via xelatex
DOCX rapport.docx Microsoft Word
ODT rapport.odt LibreOffice
PDF rapport.pdf Definitieve versie
Markdown tex.md Tekst-gebaseerd
SARIF rapport.sarif.json Security tool-integratie
STIX 2.1 rapport.stix.json Threat intelligence-uitwisseling
PPTX rapport.pptx Management-presentatie

Evidence beheren

# Upload evidence via de API
curl -X POST http://127.0.0.1:5000/api/findings/1/evidence \
    -F "file=@screenshot.png"

# Bekijk evidence van een finding
curl http://127.0.0.1:5000/api/findings/1/evidence

# Exporteer alle evidence als ZIP
curl http://127.0.0.1:5000/api/findings/evidence/export -o evidence.zip

Rapport valideren

# Controleer of het rapport compleet is
curl http://127.0.0.1:5000/api/report/validate

IB controleert op:

Tips voor Goede Rapporten

Schrijfstijl

  1. Wees specifiek — “De parameter q op /search” in plaats van “een parameter”
  2. Wees objectief — Feiten, geen meningen
  3. Wees consistent — Gebruik dezelfde terminologie door het hele rapport
  4. Wees uitvoerbaar — Aanbevelingen moeten concreet en implementeerbaar zijn

Veelgemaakte fouten

Fout Verbetering
“Het systeem is onveilig” Specifieke kwetsbaarheid benoemen met bewijs
Geen CVSS-score Altijd een score toekennen met onderbouwing
Screenshot zonder uitleg Markeer relevante delen en beschrijf wat je ziet
“Gebruik een firewall” Concrete configuratie-aanbeveling geven
Duplicaten Groepeer vergelijkbare findings

Evidence best practices

IB — Gebruik de IB findings-export (/api/findings/export) om al je findings met templates, scores en classificaties te exporteren als JSON. Dit maakt het eenvoudig om findings te importeren in een volgend project of te delen met collega’s.

Samenvatting

Een professioneel pentest-rapport is meer dan een lijst kwetsbaarheden. Het vertelt een verhaal: wat is er getest, wat is er gevonden, wat is de impact, en wat moet er worden gedaan. De belangrijkste punten:

IB — Het volledige rapport-workflow in IB: maak findings aan met templates, voeg evidence toe, configureer rapport-instellingen, valideer, genereer, en download in het gewenste formaat. Gebruik het rapport-dashboard (/dashboard/report) als centraal startpunt.