NIEUW · BEPERKT AANTAL PLEKKEN · RAPPORT BINNEN EEN WEEK

Uw vibe-coded app staat live.
Is hij ook veilig?

Gebouwd met Cursor, Bolt, Lovable, v0 of Replit Agent. Functionaliteit: klaar. Beveiliging: waarschijnlijk niet. Ik vind handmatig de kwetsbaarheden die telkens terugkomen in AI-gebouwde apps, als OSCP-gecertificeerde pentester, met een rapport waar u meteen mee aan de slag kunt. Zoekt u het bredere plaatje? Bekijk dan de algemene penetratietest-dienst voor scope-categorieën, prijsmodel en het volledige proces.

Vaste prijs Rapport binnen een week Hertest inbegrepen NDA standaard
Cursor Bolt.new Lovable v0 Replit Agent Claude Code Windsurf + elke AI-gegenereerde stack
Het probleem

AI schrijft werkende code. Geen veilige code.

AI-codetools zijn getraind op zo'n beetje alle publieke code op internet, en die is gemiddeld niet security-hardened. Ze optimaliseren voor "waar zegt de gebruiker ja op" en "wat ziet eruit alsof het werkt." Dat zijn geen beveiligingsdoelen.

Erger nog: als u een feature in gewone taal beschrijft ("laat gebruikers hun profiel bewerken"), leidt de AI daar een implementatie uit af. Zelden is dat het juiste autorisatiemodel, de juiste invoervalidatie of de juiste omgang met secrets, simpelweg omdat u dat niet expliciet hebt gezegd.

Het resultaat is een voorspelbaar patroon. Dezelfde soorten kwetsbaarheden duiken op in vrijwel elke vibe-coded app die ik bekijk. Hieronder de daadwerkelijke lijst.

Belangrijk: dit is niet anti-AI

AI-codetools zijn fantastisch. Ze persen maanden werk samen in dagen. Het punt is niet dat u ermee moet stoppen, maar dat geleverde functionaliteit ≠ geleverde beveiliging, en dat u dat gat dicht voordat iemand anders het vindt.

Waar ik op test

Het kwetsbaarheidspatroon van vibe-coded apps.

Dit zijn de problemen die keer op keer terugkomen in AI-gegenereerde apps. De meeste zijn logicafouten: onzichtbaar voor geautomatiseerde scanners, maar overduidelijk voor een menselijke aanvaller die endpoint voor endpoint aftast.

Ontbrekende autorisatie op endpoints

De AI genereert een "/api/users/:id"-endpoint. Authenticatie is vereist. Autorisatie, de controle of u die specifieke gebruiker mág inzien, wordt vergeten. Elke ingelogde gebruiker kan ieders data lezen.

Waarom de AI het mist: "Voeg auth toe" was de prompt. Toegangscontrole op objectniveau werd niet genoemd, dus niet gebouwd.

IDOR (Insecure Direct Object Reference)

Resources zijn benaderbaar via oplopende of raadbare ID's. Verander ?order=1042 in ?order=1041 en u ziet andermans bestelling. Het klassieke vibe-coded lek.

Waarom de AI het mist: Het DB-schema gebruikt auto-increment ID's. De AI zet ze in URL's. Niemand vroeg om UUID's of eigenaarschapscontroles.

Hardcoded secrets & blootgestelde API-sleutels

Stripe-sleutels in client-side bundles. OpenAI-tokens in .env.local-bestanden die in git belanden. Database-URL's in client-gerenderde Next.js-pagina's. Publieke Supabase service-role keys.

Waarom de AI het mist: De AI plaatst de sleutel "waar het in één keer werkt." Dat is vaak de verkeerde kant van de netwerkgrens.

SQL/NoSQL-injectie & onveilige queries

Vooral wanneer de AI dynamische queries opbouwt uit gebruikersinvoer die nooit bij de database had mogen komen. Veel voorkomend in filter-, sorteer- en zoek-functies.

Waarom de AI het mist: De AI gebruikt 80% van de tijd een ORM correct, en plakt in de overige 20% gevaarlijk strings aan elkaar, juist in "geavanceerde filter"-functies.

Te ruime CORS

Access-Control-Allow-Origin: * met credentials aan. Laat elke willekeurige website de data van uw ingelogde gebruiker via de browser uitlezen.

Waarom de AI het mist: "Los de CORS-fout op" → de AI geeft "de meest permissieve config die de foutmelding weghaalt."

Blootgestelde admin-routes

Admin-dashboards bereikbaar op voorspelbare URL's (/admin, /dashboard), alleen beschermd door client-side React route guards, eenvoudig te omzeilen door de API direct te benaderen.

Waarom de AI het mist: De opdracht ging over de auth-UX. Beveiliging op de server werd verondersteld, nooit geïmplementeerd.

Onveilige file uploads

Avatar-uploads die elk MIME-type accepteren en server-side uitvoeren. Path traversal via de bestandsnaam. Directe uploads naar publieke S3-buckets met leestoegang voor iedereen.

Waarom de AI het mist: Uploaden "werkt gewoon." Validatie, typecontroles en bucket-policies vallen buiten de zichtbare feature.

Prompt injection & misbruik van AI-features

Roept uw app een LLM aan met gebruikersinvoer, dan is dat een aanvalsoppervlak. Gebruikers kunnen de system prompt kapen, data uit uw context onttrekken of tools aanroepen die u niet wilde blootstellen.

Waarom de AI het mist: Het model kent geen "deze gebruikersinvoer is vijandig." Verdediging moet u expliciet ontwerpen, het is niet de standaard.

Fouten in businesslogica & betalingen

Race conditions in de checkout. Prijs die client-side wordt gezet en door de server wordt vertrouwd. Kortingscodes die parallel herbruikbaar zijn. Voorraad die negatief wordt. Abonnementen die zonder eigenaarschapscontrole opzegbaar zijn.

Waarom de AI het mist: De AI bouwt het happy path. Gelijktijdig en kwaadwillig gebruik vraagt expliciet nadenken, en daar promptte u niet om.

Gaten in row-level security

Vooral in Supabase/Firebase-apps: tabellen aangemaakt zonder RLS-policies, of met policies die kloppen op het oog maar via slimme filterketens toch lezen over tenants heen toestaan.

Waarom de AI het mist: RLS staat standaard uit. De AI maakt werkende tabellen. Niemand zet de policies aan tot iemand erom vraagt.
Waarom geautomatiseerde scanners dit missen

SAST-tools spreken geen vibe-coded.

Het standaardadvies is "draai Snyk / Semgrep / Dependabot." Nuttig voor bekende CVE-patronen en kwetsbaarheden in libraries. Maar het vibe-coded kwetsbaarheidspatroon gaat vrijwel volledig over logica, autorisatie en architectuur. Die zijn:

  • Niet pattern-matchbaar, ze hangen af van het datamodel en de bedoelde toegangsregels
  • Niet in enige signature-database aanwezig, het is businesslogica, geen library-bug
  • Specifiek voor uw app, een scanner weet niet wie wat zou mogen zien
  • Vaak verspreid over meerdere bestanden, een aanvaller rijgt drie kleine zwaktes aaneen tot één lek

De enige manier om ze te vinden is dat een mens denkt als een aanvaller terwijl hij uw daadwerkelijke applicatie uitoefent. Dat is precies wat ik doe.

De audit

Wat u krijgt.

VIBE-CODED APP AUDIT

Vaste prijs · rapport binnen een week

Handmatige penetratietest gemaakt voor AI-gegenereerde apps. De prijs hangt af van de scope (aantal features, integraties, AI-aanvalsoppervlak), met een offerte binnen één werkdag na de intake.

Handmatig aftasten van elk geauthenticeerd endpoint
Review van het autorisatiemodel per resourcetype
Scan op blootgestelde secrets/sleutels (client, repo, infra)
Testen op injectie, IDOR en businesslogica
Prompt injection & misbruik van AI-features (indien van toepassing)
Review van Supabase/Firebase-RLS & bucket-policies
Schriftelijk rapport met reproductiestappen
Walkthrough-gesprek van 30 min met u en uw team
Hertest na het oplossen, inbegrepen
NDA standaard, communicatie via Slack als u dat prefereert
Vraag een offerte met vaste prijs aan →
Gratis hulpmiddel

De Vibe Coding Security Checklist.

Loop deze door voordat u live gaat, of voordat u een audit boekt. Kunt u elk vakje met een gerust hart aanvinken, dan heeft u de top 80% van de vibe-coded kwetsbaarheidspatronen al geëlimineerd.

Zelf-audit checklist (top 12)

De vakjes zijn alleen voor gebruik in uw browser, er wordt niets verstuurd. Gebruik het als check vóór de lancering.

FAQ

Veelgestelde vragen van oprichters.

Ik heb ~3 betalende gebruikers. Is een audit nu niet te vroeg?
Als u echt geld int, persoonsgegevens verwerkt of op het punt staat een klant binnen te halen die due diligence doet, dan is het niet te vroeg. De kosten van een lek met 3 gebruikers zijn reputatieschade en existentieel; later met 3.000 gebruikers komt daar ook juridische schade bij. Het goedkoopste moment om te verstevigen is nu.
Wij gebruiken Supabase / Firebase. Regelt dat de beveiliging niet?
Deels. Supabase en Firebase geven u de gereedschappen (RLS, security rules), maar die staan standaard uit en zijn makkelijk verkeerd te configureren. Het meest voorkomende lek in apps die deze gebruiken: RLS-policies die compileren en draaien, maar via filters toch data over tenants heen prijsgeven. Dat controleer ik specifiek.
Kunnen we niet gewoon een vulnerability scanner draaien?
Draai er sowieso één, die vangt de makkelijke dingen. Maar scanners vinden geen IDOR, ontbrekende autorisatie, fouten in businesslogica of prompt injection. Dat is 80 tot 90% van de vibe-coded kwetsbaarheden. Een scanner alleen geeft schijnzekerheid.
Wat kost een audit?
Vaste prijs op basis van scope: doorgaans de omvang van uw app, het aantal integraties en of er AI-features in het spel zijn. U ontvangt een schriftelijke offerte binnen één werkdag na een kort intakegesprek. Geen uurtje-factuurtje, geen verrassingsfacturen.
Tekent u NDA's en werkt u via Slack?
Ja, allebei. Een NDA is standaard. Communicatie uitsluitend via Slack is prima als u dat prefereert, veel oprichters doen dat. Async werken via Linear/Notion kan ook, als dat beter bij uw team past.
Wij zitten buiten Nederland. Maakt dat uit?
Nee. Al het werk gebeurt op afstand. Het rapport kan in het Engels. Betaling via SEPA of overboeking. Ik werk met oprichters door heel Europa, het VK en de VS.

U lanceerde in dagen. Gun de beveiliging één week.

Eén intakegesprek. Vaste prijs binnen één werkdag. Audit klaar in een week. Een rapport waar u mee aan de slag kunt, niet om te archiveren.

Vraag een offerte aan → Terug naar home
NDA standaard Vaste prijs Hertest inbegrepen
Vraag een offerte aan →