Voorbeeld / fictieve klant / echt format

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.

Download de pdf (Engels)PDF / A4 / 11 pagina’s / 324 KB / Engelstalig

PLACEHOLDER / G3: wacht op beoordeling door een gekwalificeerde tester vóór publicatie

Voorbeeld / fictieve klant / echt formatSAMPLE-01 / pagina 1 van 11

SAMPLE-01 / Versie 1.1, na de hertest

Pentestrapport

AI Pentest en Stack Pentest, één scope: Launch Clearance

Opdrachtgever
Naam van de opdrachtgever weggelaten in dit voorbeeld
Systeem
Claimassistent (een AI-agent met tools) en de claims-API erachter
Testvenster
2026-08-17 tot en met 2026-08-28
Rapport
2026-09-03, hertest 2026-09-24
Getest door
Scotoma
Verspreiding
Securityteam van de opdrachtgever
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.

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.

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.

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.

OWASP Top 10 for LLM Applications 2026
IdCategorieResultaat
LLM01:2026Prompt InjectionF-03 / Hoog
LLM02:2026Sensitive Information DisclosureGetest
LLM03:2026Excessive AgencyGetest
LLM04:2026Supply ChainGetest
LLM05:2026Data and Model PoisoningGetestRetrievaldata getest; training en finetuning niet van toepassing (gehost model).
LLM06:2026Unbounded ConsumptionGetest
LLM07:2026MisinformationGetest
LLM08:2026Hidden Context ExposureF-04 / Middel
LLM09:2026Vector and Embedding WeaknessesGetest
LLM10:2026Improper Output HandlingGetest
OWASP Top 10 for Agentic Applications 2026
IdCategorieResultaat
ASI01Agent Goal HijackGetest
ASI02Tool Misuse and ExploitationF-02 / Hoog
ASI03Identity and Privilege AbuseGetest
ASI04Agentic Supply Chain VulnerabilitiesF-05 / Middel
ASI05Unexpected Code Execution (RCE)Niet van toepassingDe assistent heeft geen tool die code uitvoert.
ASI06Memory & Context PoisoningGetest
ASI07Insecure Inter-Agent CommunicationNiet van toepassingEén agent, dus er gaan geen berichten tussen agents.
ASI08Cascading FailuresNiet van toepassingEén agent in één workflow, dus een fout heeft geen andere agent om zich naar te verspreiden.
ASI09Human-Agent Trust ExploitationGetest
ASI10Rogue AgentsGetest
OWASP API Security Top 10 (2023)
IdCategorieResultaat
API1:2023Broken Object Level AuthorizationF-01 / Kritiek
API2:2023Broken AuthenticationGetest
API3:2023Broken Object Property Level AuthorizationGetest
API4:2023Unrestricted Resource ConsumptionGetest
API5:2023Broken Function Level AuthorizationGetest
API6:2023Unrestricted Access to Sensitive Business FlowsGetest
API7:2023Server Side Request ForgeryGetest
API8:2023Security MisconfigurationGetest
API9:2023Improper Inventory ManagementGetest
API10:2023Unsafe Consumption of APIsGetest
OWASP WSTG-categorieën
IdCategorieResultaat
WSTG-INFOInformation GatheringGetest
WSTG-CONFConfiguration and Deployment Management TestingGetest
WSTG-IDNTIdentity Management TestingGetest
WSTG-ATHNAuthentication TestingGetest
WSTG-ATHZAuthorization TestingGetest
WSTG-SESSSession Management TestingF-06 / Laag
WSTG-INPVInput Validation TestingGetest
WSTG-ERRHTesting for Error HandlingGetest
WSTG-CRYPTesting for Weak CryptographyGetest
WSTG-BUSLBusiness Logic TestingGetest
WSTG-CLNTClient-side TestingGetest
WSTG-APITAPI TestingGetest
Cloud en infrastructuur
CategorieResultaat
Minimale rechten voor gebruikers, rollen en serviceaccountsBuiten scope
Paden naar meer rechten en vertrouwen tussen accountsBuiten scope
Inloggen versterkt: federatie, MFA en voorwaardelijke toegangBuiten scope
Blootstelling van objectopslag en toegangsbeleidGetest
Geheimen in code, images en geheimenopslagGetest
Integriteit van CI/CD-pipelines en buildrechtenBuiten scope
Bescherming van instance-metadata en workloadidentiteitBuiten scope
Configuratie van containers en KubernetesBuiten scope
Serverless functies en event-triggersBuiten scope
Gehoste AI-diensten: modelendpoints, sleutels en quotaGetest
Dekking van logging en audittrailF-07 / Laag
Externe infrastructuur: blootgestelde hosts, diensten en toegang op afstandBuiten scope

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.
Hertest
Opgelost 2026-09-24

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

F-02HoogCVSS-B 8.2ASI02Modellaag

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.
Hertest
Opgelost 2026-09-24

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

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.
Hertest
Opgelost 2026-09-24

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

F-04MiddelCVSS-B 6.9LLM08:2026Modellaag

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.
Hertest
Open 2026-09-24

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

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.
Hertest
Opgelost 2026-09-24

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

F-06LaagCVSS-B 2.3WSTG-SESSStacklaag

Sessies in het portaal blijven langer geldig dan het beleid zegt

Wat we vonden
Sessies in het klantportaal bleven geldig na 24 uur zonder activiteit. Het eigen beleid van de opdrachtgever noemt 30 minuten.
Impact op het bedrijf
Een sessie die open blijft op een gedeeld apparaat, blijft een dag bruikbaar.
Bewijs
Request REQ-21, bijlage B
Oplossing
Dwing de time-out bij inactiviteit af op de server, niet alleen in de browser.
Hertest
Opgelost 2026-09-24

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

F-07LaagCVSS-B 2.1Dekking van loggingStacklaag

De toolaanroepen van de assistent ontbreken in de audittrail

Wat we vonden
API-aanroepen van de assistent werden alleen onder zijn serviceaccount gelogd, zonder het gesprek of de klant voor wie ze werden gedaan.
Impact op het bedrijf
Na een incident kon niemand zeggen welk gesprek welke claim had veranderd.
Bewijs
Logreview, bijlage C
Oplossing
Log elke toolaanroep met sessie, klant en argumenten, op een plek die het serviceaccount niet kan wijzigen.
Hertest
Deels opgelost 2026-09-24

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

5 / Bevindingen over beide lagen

X-01 / Kritiek

Van een ongecontroleerde pagina naar de claim van een andere klant

  1. 01 / ModellaagEen pagina komt via het partnerportaal ongecontroleerd in de kennisbank.F-03
  2. 02 / ModellaagDe vraag van een klant haalt haar op, en de assistent volgt haar.F-03
  3. 03 / ModellaagDe assistent roept een tool aan voor een claim buiten het gesprek.F-02
  4. 04 / StacklaagZijn token bereikt de claims van elke klant.F-01
  5. 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.

6 / Resultaten van de hertest

Na de oplossingen van de opdrachtgever speelden we elke oorspronkelijke bevinding opnieuw af tegen dezelfde build.

BevindingVoorBij de hertestWat we zagen
F-01Kritiek 9.3OpgelostEigenaarschap wordt nu per claim afgedwongen; alle vijf requests worden geweigerd.
F-02Hoog 8.2Opgelost0 van 10 pogingen bij de hertest.
F-03Hoog 7.6OpgelostUploads van partners worden gecontroleerd voordat ze worden geïndexeerd; 0 van 10 pogingen bij de hertest.
F-04Middel 6.9OpenRisico geaccepteerd door de opdrachtgever; de naam van de wachtrij is verwijderd.
F-05Middel 5.9OpgelostDefinities vastgezet; een wijziging geeft nu een melding.
F-06Laag 2.3OpgelostSessies verlopen nu na 30 minuten inactiviteit.
F-07Laag 2.1Deels opgelostToolaanroepen worden nu met de sessie gelogd; de logopslag is nog schrijfbaar voor het serviceaccount.

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.