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
- Basiskennis van penetratietesten
- Begrip van webkwetsbaarheden (OWASP Top 10)
- Incompetent Bastard (IB) draaiend op je machine
- Een teksteditor of LaTeX-distributie (optioneel, voor handmatige aanpassingen)
- pandoc geinstalleerd (voor DOCX/PDF-export vanuit IB)
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:
- Maximaal 1 pagina
- Begin met de conclusie (bijv. “De beveiliging is onvoldoende”)
- Noem het aantal bevindingen per ernst-categorie
- Benoem de grootste risico’s in begrijpelijke taal
- Eindig met de belangrijkste aanbeveling
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:
- Welke systemen/URLs/IP-adressen
- Het type test (black box, grey box, white box)
- De periode van de test
- Gebruikte standaarden (OWASP, PTES, MITRE ATT&CK)
- Eventuele beperkingen of uitsluitingen
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:
- Titel — Kort en beschrijvend (bijv. “SQL Injection in zoekfunctie”)
- Ernst — CVSS score en classificatie
- Locatie — Waar is de kwetsbaarheid gevonden (URL, IP, parameter)
- Beschrijving — Wat is het probleem (technisch maar leesbaar)
- Impact — Wat kan een aanvaller ermee (zakelijke impact)
- Evidence — Screenshots, requests/responses, code
- Aanbeveling — Hoe los je het op (concreet en uitvoerbaar)
- 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:
- Ga naar
/dashboard/findingsin de IB-webinterface - Kies een template uit de bibliotheek (voorgedefinieerde kwetsbaarheden)
- Vul de finding-specifieke details in (locatie, evidence, CVSS)
- Stel de status in op “Concept” of “Definitief”
- 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:
- web — Web Application kwetsbaarheden
- ad — Active Directory aanvallen
- windows — Windows-specifieke issues
- network — Netwerk en reconnaissance
- config — Misconfiguraties
- cwe — CWE Top 25
Elk template bevat:
- Titel en beschrijving (NL/EN)
- CVSS 4.0 vector en score
- OWASP Top 10 (2025) classificatie
- NCSC/DigiD-richtlijn
- CWE-nummer
- MITRE ATT&CK-techniek
- Aanbeveling (NL/EN)
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.texIB — 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 |
| 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.zipRapport valideren
# Controleer of het rapport compleet is
curl http://127.0.0.1:5000/api/report/validateIB controleert op:
- Rapport-titel en auteur ingesteld
- Findings met status “definitief”
- Geldige templates gekoppeld aan findings
- CVSS-scores aanwezig
Tips voor Goede Rapporten
Schrijfstijl
- Wees specifiek — “De parameter
qop/search” in plaats van “een parameter” - Wees objectief — Feiten, geen meningen
- Wees consistent — Gebruik dezelfde terminologie door het hele rapport
- 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
- Maak screenshots met timestamps
- Toon zowel het verzoek (request) als het antwoord (response)
- Markeer kwetsbare parameters of output met pijlen/highlights
- Bewaar ruwe data (Burp exports, nmap-scans) als bijlage
- Zorg dat evidence reproduceerbaar is
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:
- Volg een vaste rapportstructuur (managementsamenvatting, scope, methodologie, bevindingen, aanbevelingen)
- Gebruik CVSS 4.0 voor consistente en verdedigbare ernstclassificaties
- Schrijf bevindingen met beschrijving, impact, evidence en concrete aanbeveling
- Refereer aan standaarden (OWASP, CWE, NCSC, MITRE ATT&CK)
- Gebruik IB’s template-systeem en rapportgeneratie voor efficientie en consistentie
- Valideer je rapport voordat je het oplevert
- Classificeer het rapport correct (TLP) en behandel het vertrouwelijk
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.