Les applications générées par IA souffrent quasi systématiquement de dix failles critiques récurrentes : exposition de clés d'API dans le frontend, absence de Row Level Security (RLS) en base de données, Server Actions Next.js ouvertes, failles d'autorisation IDOR, webhooks de paiement non authentifiés, fuite de données en SSR, boucles de rendu provoquant des surcoûts d'API, absence de rate limiting, stockage non bridé et paquets de dépendances obsolètes ou hallucinés.
Ces vulnérabilités ne résultent pas d'une incompétence des modèles de langage, mais de leur conception : un LLM est programmé pour produire le code le plus direct permettant à la fonctionnalité d'apparaître à l'écran ("chemin heureux"), en ignorant par défaut les contrôles défensifs et la modélisation des menaces.
La règle d'or du code généré par IA
L'intelligence artificielle est un accélérateur d'écriture, pas un garant de sécurité. Si vous ne spécifiez pas explicitement chaque règle de cloisonnement des données, l'IA privilégiera toujours la solution la plus simple à faire fonctionner localement.
Pourquoi les LLMs génèrent-ils du code vulnérable ?
Tous les outils de génération de code — qu'il s'agisse d'éditeurs comme Cursor, de plateformes comme Lovable et Bolt.new, ou d'agents de terminal comme Claude Code — partagent la même faiblesse fondamentale : le biais du happy path.
Pour satisfaire votre prompt (ex: "ajoute un système de commentaires"), l'IA écrit le code minimal nécessaire. Elle crée une table, une interface et une fonction de sauvegarde. Elle n'anticipe pas qu'un visiteur pourrait tenter de supprimer les commentaires d'un tiers, de saturer l'API avec des requêtes automatisées ou d'extraire la clé privée du projet.
Le Top 10 des failles critiques du Vibe Coding
Voici les dix vulnérabilités les plus fréquemment identifiées lors des audits de projets conçus avec l'assistance de l'IA, réparties entre failles de sécurité et gouffres financiers.
1. L'exposition de clés secrètes dans le frontend
C'est la faille la plus immédiate. L'IA a tendance à appeler directement des SDK privés (OpenAI, Stripe, Resend) dans des composants clients React.
Pour que le code compile, elle attribue des préfixes publics aux variables d'environnement (NEXT_PUBLIC_ dans Next.js ou VITE_ dans Vite), intégrant ainsi vos clés privées sk_live_... au bundle JavaScript public. Apprenez à détecter une clé API exposée avant chaque déploiement.
2. Des bases de données sans Row Level Security (RLS)
Dans l'écosystème Supabase ou PostgreSQL, les tables créées par l'IA omettent très souvent d'activer le RLS. La clé anonyme anon permettant d'interroger directement l'API REST de la base, n'importe quel visiteur peut lire, modifier ou purger l'intégralité de votre table d'utilisateurs.
Dans d'autres cas, l'IA active le RLS mais insère une politique permissive USING (true) pour contourner une erreur de permission lors des tests. Suivez notre guide pour vérifier vos règles Supabase RLS.
3. Les Server Actions Next.js transformées en portes ouvertes
Dans Next.js (App Router), la directive "use server" transforme n'importe quelle fonction en endpoint HTTP POST public accessible depuis le web.
L'IA traite souvent ces fonctions comme du code interne privé et oublie de vérifier la session utilisateur :
// FAILLE CRITIQUE : N'importe qui peut appeler cette action avec curl
"use server";
export async function deleteWorkspace(workspaceId: string) {
// Aucune vérification auth() ni contrôle de propriété
await db.workspace.delete({ where: { id: workspaceId } });
}
4. Les failles d'autorisation IDOR (Insecure Direct Object Reference)
L'IA vérifie parfois si l'utilisateur est connecté, mais oublie de vérifier s'il est bien le propriétaire de la ressource demandée.
Un utilisateur connecté avec le compte #12 peut ainsi consulter les factures ou modifier les projets du compte #15 simplement en changeant l'identifiant dans la requête.
5. Les webhooks de paiement sans vérification cryptographique
Pour gérer les paiements Stripe ou Lemon Squeezy, l'IA génère souvent un endpoint backend qui écoute les requêtes HTTP mais omet de vérifier la signature cryptographique (stripe-signature).
Un attaquant peut alors forger une fausse requête POST vers votre webhook et débloquer un abonnement payant sans jamais verser un centime.
6. La fuite de données sensibles en SSR (React Flight Data)
Lorsqu'un composant serveur récupère un utilisateur en base de données, l'IA transmet fréquemment l'objet complet aux props d'un composant client :
// Fuite dans le payload HTML de la page
<UserProfile user={userFromDb} />
// Si userFromDb contient reset_token, stripe_id ou role_admin -> fuite publique
Toutes les propriétés de l'objet, y compris les données sensibles non affichées à l'écran, se retrouvent en clair dans le code source HTML téléchargé par le navigateur.
7. Le piège du useEffect et les boucles financières d'APIs
C'est la première cause de factures inattendues de plusieurs centaines d'euros chez OpenAI ou Google Maps.
L'IA crée un hook useEffect dépendant d'un objet recréé à chaque rendu de page, ou oublie d'ajouter un debounce sur un champ de recherche autocomplete. L'application envoie alors des dizaines de requêtes par seconde, ce qui explique pourquoi un SaaS consomme des APIs sans utilisateurs réels.
8. L'absence de Rate Limiting sur les routes exposées
Les formulaires d'authentification (/login) et les routes générant du texte ou des images par IA sont fréquemment laissés sans aucune limitation de fréquence de requêtes.
Des robots automatisés peuvent mener des attaques par force brute sur les mots de passe ou vider les quotas de vos modèles de langage en quelques minutes.
9. Des uploads de fichiers sans restriction de taille ni de format
Lorsque vous demandez à l'IA d'ajouter un formulaire d'upload de fichiers vers Supabase Storage ou AWS S3, elle oublie presque systématiquement de brider la taille maximale (ex: 5 Mo) et de valider les types MIME autorisés.
Un utilisateur malveillant peut alors uploader des fichiers de plusieurs gigaoctets pour saturer votre espace de stockage et multiplier vos coûts cloud.
10. Des dépendances NPM obsolètes ou hallucinées (Slopsquatting)
Pour résoudre rapidement un problème, les assistants d'IA installent fréquemment des bibliothèques externes.
Certains paquets recommandés sont abandonnés depuis des années et comportent des vulnérabilités connues (CVE). Pire encore, il arrive qu'un LLM hallucine le nom d'un paquet inexistant, un phénomène exploité par des attaquants qui enregistrent ces noms sur NPM pour propager du code malveillant (slopsquatting).
Matrice de synthèse : Risques Sécurité vs Risques Financiers
- Sécurité (Piratage & Fuite de données) : Tables sans RLS, Server Actions ouvertes, failles IDOR, fuite en SSR, webhooks non signés.
- Financier (Gouffres Cloud & DoS) : Clés API volées, boucles useEffect, absence de rate limiting, uploads illimités, abus de requêtes LLM.
Comment éliminer ces 10 failles avant votre mise en production
Pour éviter qu'une de ces vulnérabilités ne vienne compromettre votre projet, appliquez une démarche d'audit rigoureuse :
- Adoptez une checklist de déploiement : passez en revue chaque point de notre guide complet pour auditer un SaaS avant son lancement.
- Cloisonnez systématiquement vos bases de données : appliquez le principe du moindre privilège et activez le RLS sur chaque table.
- Validez l'authentification à la source : chaque Server Action ou Route Handler doit débuter par la validation de la session et de la propriété des ressources.
Comment auditer automatiquement votre application avec GVO
La recherche manuelle de ces 10 failles dans des dizaines de fichiers générés par l'IA peut prendre des jours entiers et n'offre aucune certitude d'exhaustivité.
Pour vérifier rapidement si votre site web déployé expose des clés ou des endpoints vulnérables, commencez par un Audit Express gratuit.
Pour une sécurité maximale, connectez votre repository GitHub à GoodVibesOnly (GVO). Notre moteur d'analyse statique dédié au code assisté par IA détecte instantanément l'ensemble de ces 10 failles critiques dans vos composants, vos fonctions backend et vos migrations SQL, et vous génère le prompt exact pour que votre éditeur (Cursor, Lovable, Claude) corrige votre code en un clic.