Voorbeeld pentestrapport: een fictieve klant, het echte format.
Een pentestrapport zegt wat er getest is en hoe, wat er is gevonden en hoe ernstig dat is, hoe je het oplost, en of de oplossing standhield. Dit voorbeeld is ons volledige format in zeven delen, geschreven voor de claimassistent van een fictieve verzekeraar en de API erachter, met elke ernst in CVSS v4.01. Niets erin is een echte klant of een echt resultaat.
Field Test / 24-2. 54 testcategorieën, ingedeeld als een 24-2 gezichtsveldtest. Het fictieve voorbeeld heeft 7 bevindingen, 3 categorieën die niet van toepassing zijn en 8 buiten scope, gestippeld, twee binnen de lijn waar de blinde vlek ligt.
Kritiek
Hoog
Middel
Laag
Getest, niets gevonden
N.v.t.
Buiten scope
De enige blinde vlek in ons rapport is de vlek die jij buiten scope laat.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 2 van 11
1 / Samenvatting voor het management
We testten de claimassistent in het klantportaal van de opdrachtgever en de claims-API erachter, op staging, van 17 tot en met 28 augustus 2026. We vonden zeven problemen: één kritiek, twee hoog, twee middel en twee laag.
Het kritieke probleem is een keten. Een kennisbankpagina die niemand had gecontroleerd, kon de assistent instructies geven; de assistent kon zijn terugbetaaltool aanroepen buiten de claim die hij behandelde; en de claims-API vertrouwde het token van de assistent voor elke klant. Samen lieten ze iedereen met een uploadaccount voor partners de claim van een andere klant lezen en wijzigen, zonder zelf de chat te openen.
Bij de hertest op 24 september 2026 waren vijf bevindingen opgelost en één deels opgelost, en accepteerde de opdrachtgever het risico van één.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 3 van 11
2 / Scope en testperiode
Systemen
De claimassistent (webchat, Engels en Nederlands), zijn drie tools (claim opzoeken, document uploaden, terugbetaling aanvragen), de kennisbank waaruit hij ophaalt, de claims-API (REST, 23 endpoints) en de MCP-server voor adresopzoeking, met schriftelijke toestemming van de leverancier. In het cloudaccount alleen wat de assistent raakt: de opslag van claimdocumenten, de geheimen die hij gebruikt, de sleutels en quota van zijn gehoste model, en de audittrail van zijn toolaanroepen.
Buiten scope
De rest van het cloudaccount: identiteiten en rollen, paden naar meer rechten, inloggen, pipelines, instance-metadata, containers, serverless functies en externe infrastructuur. Dat is een test van Cloud en infrastructuur, geen onderdeel van Launch Clearance. Op het voorblad staan ze gestippeld: niet getest, en het rapport zegt dat.
Niet van toepassing
Drie agentische categorieën beschrijven onderdelen die dit systeem niet heeft: code-uitvoering, berichten tussen agents, en fouten die zich over meerdere agents verspreiden. De matrix geeft per categorie de reden.
Omgeving
Staging, ingericht als productie, met synthetische klanten en claims.
Toegang
Grey box: de systeemprompt, de tooldefinities en de API-documentatie; twee testklanten met elk twee rollen.
Testvenster
2026-08-17 tot en met 2026-08-28, 10 testdagen. Spelregels getekend op 2026-08-12.
Rapport
Versie 1.0 op 2026-09-03; deze versie 1.1 na de hertest op 2026-09-24.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 4 van 11
3 / Methode en dekking
Elke categorie is getest, met reden gemarkeerd als niet van toepassing, of buiten de scope gelaten. Bevindingen staan er met hun id bij; een categorie die als getest is gemarkeerd, is getest zonder bevinding. AI-bevindingen zijn elk tien keer opnieuw uitgevoerd, met model, versie en instellingen erbij.
Externe infrastructuur: blootgestelde hosts, diensten en toegang op afstand
Buiten scope
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 6 van 11
4 / Bevindingen
F-01KritiekCVSS-B 9.3API1:2023Stacklaag
De claims-API geeft de claim van elke klant aan het token van de assistent
Wat we vonden
De assistent roept de claims-API aan met één servicetoken. De API controleerde of het token geldig was, niet of de claim hoorde bij de klant in het gesprek. Zo kwam een claim van een andere klant terug, en accepteerde het update-endpoint wijzigingen daarop.
Impact op het bedrijf
Wie de assistent kan sturen, kan de claim van een andere klant lezen en wijzigen.
Bewijs
Requests REQ-07 tot en met REQ-11, bijlage B
Oplossing
Controleer autorisatie op elk object, niet alleen bij het inloggen: beperk het token van de assistent tot één klant en dwing het eigenaarschap van claims af in de API.
De assistent kan zijn terugbetaaltool aanroepen voor een claim die hij niet behandelt
Wat we vonden
De terugbetaaltool krijgt een claimnummer als argument, en de assistent vult dat in vanuit het gesprek. Een bericht dat zich voordeed als correctie liet hem een terugbetalingsverzoek starten voor een andere claim dan die in de sessie.
Impact op het bedrijf
Er kan een terugbetalingsverzoek worden ingediend op een claim die niet van de klant is. Het stopt bij de menselijke goedkeuring, maar het komt wel in de wachtrij.
Reproductie
GEREPRODUCEERD 6/10, met model, versie en instellingen erbij
Oplossing
Geef tools de minimale rechten die de taak vraagt: koppel de tool aan de claim in de sessie, niet aan een argument dat het model invult.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 7 van 11
4 / Bevindingen, vervolg
F-03HoogCVSS-B 7.6LLM01:2026Modellaag
Een kennisbankpagina kan de assistent instructies geven
Wat we vonden
Tekst in een opgehaalde kennisbankpagina werd behandeld als instructie in plaats van als naslag. Een pagina die via het uploadportaal voor partners was toegevoegd, en die niemand controleert, veranderde hoe de assistent claims afhandelde voor elke klant wiens vraag die pagina ophaalde.
Impact op het bedrijf
Wie een pagina aan de kennisbank kan toevoegen, kan de assistent voor elke klant sturen.
Reproductie
GEREPRODUCEERD 7/10, met model, versie en instellingen erbij
Oplossing
Behandel opgehaalde tekst als gegevens: controleer wat de kennisbank binnenkomt, leg vast waar elke pagina vandaan komt, en houd opgehaalde inhoud uit het instructiekanaal.
Delen van de systeemprompt zijn in een gesprek naar boven te halen
Wat we vonden
Gevraagd naar zijn eigen regels, over meerdere beurten, parafraseerde de assistent delen van zijn systeemprompt, inclusief de naam van een interne escalatiewachtrij.
Impact op het bedrijf
Op zich weinig, maar het geeft een aanvaller een kaart van de regels en toolnamen van de assistent.
Reproductie
GEREPRODUCEERD 4/10, met model, versie en instellingen erbij
Oplossing
Een prompt is geen kluis: houd geheimen en interne namen erbuiten, en schrijf hem alsof hij openbaar is.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 8 van 11
4 / Bevindingen, vervolg
F-05MiddelCVSS-B 5.9ASI04Modellaag
De toolbeschrijvingen van een MCP-server van derden worden vertrouwd zoals ze zijn
Wat we vonden
Toolbeschrijvingen van de MCP-server voor adresopzoeking kwamen ongecontroleerd en zonder vaste versie in de context van de assistent. Een wijziging aan de kant van de leverancier zou het gedrag van de assistent veranderen zonder release aan de kant van de klant.
Impact op het bedrijf
Het gedrag van de assistent hangt af van tekst van een leverancier die niemand aan de kant van de opdrachtgever controleert.
Bewijs
Configuratiereview, bijlage C
Oplossing
Zet tooldefinities van derden vast op een gecontroleerde versie, en geef een melding als de versie van de leverancier verandert.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 9 van 11
5 / Bevindingen over beide lagen
X-01 / Kritiek
Van een ongecontroleerde pagina naar de claim van een andere klant
01 / ModellaagEen pagina komt via het partnerportaal ongecontroleerd in de kennisbank.F-03
02 / ModellaagDe vraag van een klant haalt haar op, en de assistent volgt haar.F-03
03 / ModellaagDe assistent roept een tool aan voor een claim buiten het gesprek.F-02
04 / StacklaagZijn token bereikt de claims van elke klant.F-01
05 / StacklaagDe API geeft de claim van een andere klant terug en past haar aan.F-01
Laag voor laag getest lezen deze als twee hoge en één kritieke bevinding in verschillende rapporten. Samen zijn ze één pad van een uploadaccount van een partner naar de claim van een andere klant, afgelegd via het gesprek van iemand anders.
Alleen F-01 oplossen breekt de keten. Alle drie oplossen haalt haar weg, en dat bevestigde de hertest.
Beoordeeld naar waar de keten eindigt: Kritiek, net als F-01.
Opgelost 2026-09-24 F-01, F-02 en F-03 zijn opgelost, dus geen stap van het pad houdt stand.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 10 van 11
6 / Resultaten van de hertest
Na de oplossingen van de opdrachtgever speelden we elke oorspronkelijke bevinding opnieuw af tegen dezelfde build.
Bevinding
Voor
Bij de hertest
Wat we zagen
F-01
Kritiek 9.3
Opgelost
Eigenaarschap wordt nu per claim afgedwongen; alle vijf requests worden geweigerd.
F-02
Hoog 8.2
Opgelost
0 van 10 pogingen bij de hertest.
F-03
Hoog 7.6
Opgelost
Uploads van partners worden gecontroleerd voordat ze worden geïndexeerd; 0 van 10 pogingen bij de hertest.
F-04
Middel 6.9
Open
Risico geaccepteerd door de opdrachtgever; de naam van de wachtrij is verwijderd.
F-05
Middel 5.9
Opgelost
Definities vastgezet; een wijziging geeft nu een melding.
F-06
Laag 2.3
Opgelost
Sessies verlopen nu na 30 minuten inactiviteit.
F-07
Laag 2.1
Deels opgelost
Toolaanroepen worden nu met de sessie gelogd; de logopslag is nog schrijfbaar voor het serviceaccount.
Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 11 van 11
7 / Verklaring
Verklaring / SAMPLE-01 / 2026-09-24
Aan wie het aangaat,
Scotoma heeft tussen 17 en 28 augustus 2026, met schriftelijke toestemming van de opdrachtgever, een pentest uitgevoerd op haar claimassistent, een AI-agent met tools, en de claims-API erachter, in een stagingomgeving.
De test besloeg de modellaag en de stacklaag, zoals vastgelegd in de afgesproken scope. In de modellaag: de OWASP Top 10 for LLM Applications 2026 (de tien grootste risico’s van toepassingen op een taalmodel) en de OWASP Top 10 for Agentic Applications 2026 (de tien grootste risico’s van AI-agents). In de stacklaag: de OWASP API Security Top 10 van 2023 (de tien grootste risico’s van API’s), de categorieën van de OWASP WSTG en de cloudresources die de assistent gebruikt. De rest van het cloudaccount en de externe infrastructuur vielen buiten de scope.
De test leverde zeven bevindingen op: één kritiek, twee hoog, twee middel en twee laag. Een hertest op 24 september 2026 bevestigde dat de kritieke bevinding, beide hoge bevindingen, één middelzware en één lage zijn opgelost; één lage is deels opgelost, en de opdrachtgever accepteerde het risico van één middelzware.
Deze verklaring noemt de scope en de uitkomst. Het volledige rapport blijft bij de opdrachtgever.
Namens Scotoma
Vragen over pentestrapportage
Wat staat er in een pentestrapport?
Een pentestrapport zegt wat er getest is, wanneer en hoe, wat er is gevonden, hoe ernstig elke bevinding is en hoe je haar oplost, en of de oplossingen bij de hertest standhielden. Ons rapport heeft zeven delen, van een samenvatting van één pagina tot een verklaring die je kunt delen zonder de bevindingen.
Hoe worden de bevindingen beoordeeld?
Elke bevinding krijgt een basisscore in CVSS v4.0, de schaal die de meeste securityteams al gebruiken, met de vector erbij zodat iedereen het getal kan controleren. AI-bevindingen krijgen ook een reproductiescore, n van de 10 pogingen met model en instellingen erbij, omdat een model niet altijd twee keer hetzelfde antwoordt.
Wat staat er in de verklaring?
Ze noemt in een paar alinea’s de scope, het testvenster en de uitkomst, zonder een van de bevindingen. Je kunt haar sturen naar het securityteam van een klant of naar een auditor die vraagt of je getest bent, en het volledige rapport binnen je bedrijf houden, waar het hoort.
Is dit een echt klantrapport?
Nee. De opdrachtgever, het systeem en elke bevinding zijn fictief, geschreven om ons format te laten zien met genoeg detail om van te leren, zonder iemand een route naar binnen te geven. De naam van de opdrachtgever is weggelakt zoals in een rapport dat buiten het bedrijf wordt gedeeld. De opbouw, de schalen en de delen zijn wat je krijgt.
Dit rapport over jouw product?
Vertel ons wat we moeten testen. De werkwijze legt uit hoe elk deel tot stand komt.