In this article
Le vibe coding d’une API de téléversement de fichiers Node.js crée une faille de sécurité
Ah oui, le vibe coding, ce cadeau divin de l’intelligence artificielle aux développeurs et aux personnes sans formation en ingénierie logicielle. C’est assurément un multiplicateur de productivité, synonyme d’économies et de livraison rapide des applications. Mais dans quelle mesure pouvez-vous faire confiance aux grands modèles de langage pour générer du code sécurisé ?
Testons cette théorie en demandant à une version récente de ChatGPT, dotée d’un modèle de base à jour, de créer pour nous un point de terminaison d’API en Node.js et voyons comment elle respecte les conventions de codage sécurisé.
Coder une API de téléversement de fichiers Node.js avec le vibe coding
Imaginez le cas suivant : au travail, vous devez créer un point de terminaison d’API pour le téléversement de fichiers dans votre application Node.js, qui utilise le framework web Fastify.
Il est tout à fait possible que vous n’ayez jamais travaillé auparavant sur le traitement de fichiers côté serveur et que vous ne sachiez pas exactement quels mécanismes web utiliser pour traiter les flux de données binaires d’un serveur web afin de gérer des fichiers.
Qu’est-ce qu’un formulaire HTTP multipart ? Vous ne savez peut-être pas quelles API rechercher, découvrir, ni par où commencer. Vous vous sentez un peu bloqué ? C’est compréhensible.
Autrefois, vous auriez cherché sur Google et probablement trouvé une page StackOverflow pour parcourir les réponses. Mais aujourd’hui ? Aujourd’hui, l’IA générative peut répondre à la question et fournir du code fonctionnel adapté à nos besoins précis.
Demandons à ChatGPT.
Dans la vidéo ci-dessous, vous pouvez me voir demander à ChatGPT de créer un point de terminaison POST pour le téléversement de fichiers, à utiliser comme route Fastify à l’adresse /api/uploads :

ChatGPT ouvre une session de canevas de code et commence à générer le code Node.js nécessaire en important les bons composants :
Importation du package Fastify
Importation du package auxiliaire Fastify Multipart pour le traitement des fichiers
Importation des modules Node.js de base pour gérer le système de fichiers et les chemins
ChatGPT poursuit avec la logique de l’application pour enregistrer le plugin @fastify/multipart dans Fastify et définir un point de terminaison d’API /api/uploads. Cette fonction de contrôleur récupère les données du fichier fournies par l’utilisateur, crée un chemin pour l’enregistrer sur le disque et y diffuse les données.
Voici le code fonctionnel. Saurez-vous repérer la faille de sécurité ?
import fastify from 'fastify';
import multipart from '@fastify/multipart';
import fs from 'fs';
import path from 'path';
const fastify = Fastify({ logger: true });
// Register multipart plugin
fastify.register(multipart);
// Ensure the uploads directory exists
const uploadDir = path.join(process.cwd(), 'uploads');
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir);
}
fastify.post('/api/uploads', async (req, reply) => {
const data = await req.file();
if (!data) {
return reply.status(400).send({ error: 'No file uploaded' });
}
const filePath = path.join(uploadDir, data.filename);
const writeStream = fs.createWriteStream(filePath);
await data.file.pipe(writeStream);
return reply.send({ message: 'File uploaded successfully', filename: data.filename });
});
const start = async () => {
try {
await fastify.listen({ port: 3000 });
console.log('Server running on http://localhost:3000');
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Faille de sécurité introduite par ChatGPT
J’espère que vous avez repéré la faille de sécurité sournoise dans le code server.js ci-dessus, généré par ChatGPT. Voyons ce qui se passe dans cette route d’API de téléversement de fichiers vulnérable.
La faille de sécurité vient de la façon dont le chemin du fichier est géré dans le point de terminaison suivant :
fastify.post('/api/uploads', async (req, reply) => {
const data = await req.file();
if (!data) {
return reply.status(400).send({ error: 'No file uploaded' });
}
const filePath = path.join(uploadDir, data.filename);
const writeStream = fs.createWriteStream(filePath);
await data.file.pipe(writeStream);
return reply.send({ message: 'File uploaded successfully', filename: data.filename });
});La variable filePath est générée en concaténant la valeur du nom de fichier fournie par l’utilisateur (indiquée par data.filename) avec uploadDir, le répertoire racine de destination.
Qu’est-ce qui empêche un utilisateur de nommer le fichier téléversé ../../app.js au lieu de something.zip ? Rien. Des acteurs malveillants peuvent manipuler le nom de fichier à leur guise, que ce soit pour écraser des fichiers sensibles de l’application ou du système d’exploitation. Si les autorisations du processus le permettent, ils peuvent mettre le système hors service ou, pire encore, en extraire des données et y établir un système de commande et de contrôle afin d’intensifier leur attaque.
Sécuriser le code généré par l’IA avec Snyk
Snyk ne fait aucune différence selon que votre code provient de ChatGPT, d’un modèle Claude 3.7 Sonnet, d’une page de réponses StackOverflow ou d’un collègue. Si le code dans votre IDE est vulnérable, l’extension Snyk le détecte et vous en avertit.
Voici comment cela fonctionne. Je copie-colle dans mon IDE VS Code le code généré par ChatGPT pour l’API Fastify de téléversement de fichiers. Dès que j’enregistre le fichier, Snyk lance une analyse statique de sécurité et détecte une vulnérabilité de traversée de chemin :

L’expérience développeur de Snyk est discrète et familière aux développeurs. Elle utilise la coloration syntaxique, comme celle des outils d’analyse statique de code (aussi appelés linters), pour attirer l’attention du développeur sur la ligne de code non sécurisée à corriger.
Snyk Agent Fix
Snyk Agent AI Fix va plus loin et utilise le moteur propriétaire de Snyk pour générer du code exempt de failles de sécurité.
Nul besoin d’être un expert en sécurité ni de consacrer du temps à lire la documentation sur les bonnes pratiques de sécurité, même si nous vous y encourageons vivement ! Snyk sait que vous avez probablement mieux à faire, comme vous concentrer sur la logique métier et vos compétences d’ingénierie essentielles. Nous automatisons donc la correction de la sécurité du code.
Voici la magie de Snyk DeepCore AI Fix en action :

L’extension Snyk pour IDE est gratuite pour démarrer et analyse le code, les dépendances et la configuration cloud. Ne manquez pas l’occasion de sécuriser votre code. Avec ou sans vibe coding, livrez du code sécurisé.
Sécurisez votre code pendant le développement
Snyk analyse votre code pour détecter les problèmes de qualité et de sécurité, et vous conseille sur leur correction directement dans votre IDE.