# Een maand vol lekken: wat het betekent voor vibe-coded apps

URL: https://brainpowergroup.eu/nl/blog/een-maand-vol-lekken-wat-het-betekent-voor-vibe-coded-apps
Datum: 2026-10-26
Door: Barry Willems, Brainpower Group

Next.js, Node.js, PHP, Railway en LiteLLM: oktober bracht lek na lek. Een app die met AI is gebouwd en die niemand bijhoudt, loopt het meeste risico.

In drie weken kwamen er kritieke updates voor Next.js, Node.js en PHP, kon een aanvaller bij hostingplatform Railway omgevingsvariabelen van tot zo'n 100.000 workspaces ontsleutelen en stond er bijna twee uur een besmette versie van LiteLLM op PyPI. Een team dat dit volgt, kan het meeste binnen een dag of twee bijwerken. Een app die met een AI-tool is gebouwd en daarna is blijven draaien, heeft zo'n team vaak niet. Mijn advies is om zo'n app nu een eigenaar te geven en de vijf punten onderaan na te lopen.

## Wat er in oktober gebeurde

Een greep uit de meldingen van de afgelopen weken:

- 8 tot 12 oktober: GhostAction kwam terug. Volgens GitGuardian zette de aanvaller via ongeveer 1.900 overgenomen accounts een workflow in meer dan 30.000 GitHub-repositories, om secrets te stelen.
- 14 oktober: Next.js 16.4.1 en 15.5.28 dichten twee kritieke lekken waarmee een aanvaller zonder inlog code kan uitvoeren. Het ene zit in de beeldoptimalisatie met SVG-bestanden, het andere in `use cache`-functies.
- 21 oktober: Node.js 22.23.4, 24.22.1 en 26.12.1 met tien CVE's, waarvan vier met de ernst hoog.
- 21 oktober: PHP 8.5.12, 8.4.27, 8.3.36 en 8.2.35 tegen twee lekken die code uitvoeren zonder inlog. Erik schreef daarover in [PHP2Shell: snel patchen vraagt voorbereiding](/nl/blog/php2shell-snel-patchen-vraagt-voorbereiding).
- 21 oktober: Railway meldt dat een aanvaller omgevingsvariabelen van hooguit 1,85% van alle workspaces kon ontsleutelen, volgens Railway zo'n 100.000. De aanvaller leek het vooral op sleutels van AI-providers te hebben gemunt.
- 21 oktober: `litellm` 1.107.0 stond bijna twee uur besmet op PyPI en stal inloggegevens.

## Waar het steeds misging

Bijna elke aanval draaide om sleutels. Bij Railway ging het om API-keys in omgevingsvariabelen, bij GhostAction om secrets in GitHub-workflows.

Bij LiteLLM begon het met een configuratiebestand van een AI-agent, `opencode.json`, met een masterkey erin. Dat bestand kwam op 27 mei in een openbare repository. De commit werd later overschreven, maar de sleutel werd nooit ingetrokken. Op 10 oktober gebruikte de aanvaller hem, en op 21 oktober stond de besmette release online.

Een gewiste commit is dus geen ingetrokken sleutel. En configuratiebestanden van AI-tools zijn een nieuwe plek waar sleutels terechtkomen. Hoe je sleutels beheert, staat in [Secrets en API-keys veilig beheren](/nl/blog/secrets-en-api-keys-veilig-beheren).

## Waarom vibe-coded apps extra risico lopen

Vibe coding is software bouwen door een AI-tool te vertellen wat je wilt, zonder de code zelf te schrijven of te lezen. Dat levert snel iets werkends op. Het risico zit in wat er niet gebeurt: niemand kijkt de code na, en niemand houdt hem bij.

UpGuard keek naar ongeveer 300.000 domeinen die Supabase gebruiken, een database waar coding agents volgens UpGuard makkelijk mee werken. Bij 16.326 databases was minstens één tabel voor iedereen leesbaar, en bij meer dan de helft daarvan zag UpGuard tekenen van persoonsgegevens. De oorzaak noemt UpGuard ook: tabellen die via de API worden aangemaakt, zoals coding agents dat doen, krijgen standaard geen row level security.

Moltbook liet begin dit jaar zien hoe dat uitpakt. De oprichter zei zelf geen regel code te hebben geschreven. Wiz vond een Supabase-sleutel in de JavaScript van de site en geen row level security op de database. Daarmee konden de onderzoekers zo'n 1,5 miljoen API-tokens en 35.000 e-mailadressen lezen, en ook gegevens aanpassen.

De code zelf is ook niet vanzelf veilig. Veracode testte de code van een reeks taalmodellen: die doorstond de beveiligingstests in 56% van de gevallen. Een jaar eerder was dat 55%. Tegen cross-site scripting was maar 15% bestand.

Dan het onderhoud. Wie leest de advisory van Next.js, werkt Node bij en vervangt de sleutels na Railway? Als niemand die taak heeft, draait de app op de versies van de dag dat hij af was. Draai je nog op Node 20? Dat is sinds 30 april end-of-life, en volgens het Node.js-project zijn end-of-life-versies altijd kwetsbaar bij een securityrelease.

## Zo zou ik het nalopen

1. Zoek uit wat er draait: welk framework in welke versie, welke Node- of PHP-versie, waar het gehost wordt en welke sleutels erin zitten.
2. Werk bij naar minstens Next.js 16.4.1 of 15.5.28, Node.js 22.23.4, 24.22.1 of 26.12.1 en een ondersteunde PHP-versie. Op Node 20 is overstappen naar 22 of 24 de enige route.
3. Test je database als buitenstaander. Zet row level security aan op elke tabel en probeer met de publieke sleutel uit je frontend gegevens op te halen die je niet hoort te zien.
4. Haal sleutels uit je frontend en uit je repository, ook uit `.env`-bestanden en de configuratie van AI-tools. Heeft een sleutel ooit in een openbare repository gestaan, trek hem dan in. Draait je app op Railway, vervang dan de sleutels die er stonden, zoals Railway vraagt.
5. Geef de app een eigenaar: iemand die de advisories leest en binnen een dag kan patchen.

Platforms doen een deel van het werk. Lovable controleert sinds 1 juni elke app voor publicatie op onder meer ontbrekende row level security, en Replit heeft sinds april een Security Agent en een functie die kritieke CVE's in dependencies patcht. De beslissingen blijven bij jou: een sleutel intrekken, een site offline halen of een upgrade naar een nieuwe Node-versie inplannen.

Werkt je team zelf met AI-codeertools, leg dan vast wat wel en niet in een prompt of configuratiebestand mag. Daarover gaat [Afspraken over AI-codeertools in een remote team](/nl/blog/ai-codeertools-in-een-remote-team).

## Bronnen

- [Next.js: Security Update for Upstream Vulnerabilities (14 oktober 2026)](https://nextjs.org/blog/nextjs-security-update-october-14-2026)
- [Node.js: October 2026 Security Releases](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)
- [Node.js Release Working Group: release schedule](https://github.com/nodejs/Release)
- [PHP: nieuwsarchief 2026](https://www.php.net/archive/2026.php)
- [GitGuardian: GhostAction returns](https://blog.gitguardian.com/ghostaction-github-actions-supply-chain-attack-returns/)
- [Railway: Preliminary report on the October security incident](https://blog.railway.com/p/preliminary-report-october-security-incident)
- [LiteLLM: Security incident 21 oktober 2026](https://docs.litellm.ai/blog/security-incident-oct-21-2026)
- [LiteLLM: Attack chain van het incident](https://docs.litellm.ai/blog/security-incident-oct-21-2026-attack-chain)
- [UpGuard: Systemic data exposure in Supabase apps](https://www.upguard.com/blog/everything-everywhere-systemic-data-exposure-in-supabase-apps)
- [Wiz: Exposed Moltbook database reveals millions of API keys](https://www.wiz.io/blog/exposed-moltbook-database-reveals-millions-of-api-keys)
- [Veracode: 2026 GenAI Code Security Report](https://www.veracode.com/blog/2026-genai-code-security-report-ai-risk/)
- [Lovable: How Lovable protects your apps automatically](https://lovable.dev/blog/how-lovable-protects-your-apps-automatically)
- [Replit: changelog 24 april 2026](https://docs.replit.com/updates/2026/04/24/changelog.md)

## Veelgestelde vragen

**Wat is vibe coding?**

Software bouwen door een AI-tool te vertellen wat je wilt, zonder de code zelf te schrijven of te lezen. Je hebt snel iets werkends, maar niemand heeft de code nagekeken. Heeft niemand het onderhoud, dan blijft de app op oude versies draaien.

**Welke versies van Next.js en Node.js hebben de fixes van oktober 2026?**

Next.js 16.4.1 en 15.5.28 of hoger, en Node.js 22.23.4, 24.22.1 of 26.12.1. Node.js 20 is sinds 30 april 2026 end-of-life; volgens het Node.js-project zijn end-of-life-versies altijd kwetsbaar bij een securityrelease.

**Moet ik mijn sleutels vervangen als mijn app op Railway draait?**

Railway vraagt klanten om gevoelige variabelen en sleutels te vervangen, vooral die van voor 21 oktober, en om publieke toegang tot databases weg te halen. Kijk ook de auditlogs van GitHub en je container registry na.

---

Bron: https://brainpowergroup.eu/nl/blog/een-maand-vol-lekken-wat-het-betekent-voor-vibe-coded-apps
Brainpower Group, contact: https://brainpowergroup.eu/nl/contact, hello@brainpowergroup.eu
