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.
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.
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.
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.
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.
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.
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.
Te ruime CORS
Access-Control-Allow-Origin: * met credentials aan. Laat elke willekeurige website de data van uw ingelogde gebruiker via de browser uitlezen.
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.
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.
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.
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.
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.
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.
Wat u krijgt.
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.
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.
Veelgestelde vragen van oprichters.
Ik heb ~3 betalende gebruikers. Is een audit nu niet te vroeg?
Wij gebruiken Supabase / Firebase. Regelt dat de beveiliging niet?
Kunnen we niet gewoon een vulnerability scanner draaien?
Wat kost een audit?
Tekent u NDA's en werkt u via Slack?
Wij zitten buiten Nederland. Maakt dat uit?
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