In this article
Corriger les vulnérabilités détectées avec Factory AI et Snyk Studio
Programmer avec les Droids de Factory AI, c’est vraiment agréable. L’expérience est cohérente et fluide, elle est savoureuse ; on se croirait dans un jeu. Leur engagement en faveur de cette vision se ressent non seulement dans leur interface, mais aussi dans leurs partenariats. L’une des intégrations clés est avec Linear (un concurrent plus jeune de Jira, réputé pour son expérience utilisateur enrichie par des animations réactives dans son application web et des raccourcis clavier). Si des outils comme Claude Code, OpenAI Codex et Gemini CLI sont comparables à un document Word hors ligne, l’offre de Factory AI s’apparente à un Google Drive en ligne conçu dès le départ pour le travail collaboratif.
![Écran d’accueil de Factory avec le titre « FACTORY », une description du développement logiciel natif aux agents et l’invite « [ enter to continue ] ».](https://res.cloudinary.com/snyk/image/upload/v1761144127/Droid_GIF_goxlos.gif)
Le parcours de découverte destiné aux développeurs comprend un tutoriel bien conçu, intégré à leur site web, qui vous guide étape par étape pour :
Télécharger la CLI Factory
Ajouter l’extension Droid IDE à VS Code ou à votre fork préféré (par exemple, Cursor ou WindSurf)
Confier une première tâche à votre Droid (les agents IA spécialisés de Factory AI), dans le navigateur ou dans l’IDE.
Sous Linux, vous pouvez installer la CLI Factory comme suit :
curl -fsSL https://app.factory.ai/cli | shL’extension pour VS Code est disponible ici. Une fois installée, utilisez `Ctrl-Shift-P` pour ouvrir la palette de commandes et sélectionnez Run Factory Droid.

Qu’est-ce qu’un Droid ?
Factory AI propose des agents IA spécialisés pour un large éventail de tâches courantes de développement logiciel. Ils sont appelés Droids.
Code Droid : Passez de l’idée à des modifications de code prêtes à être fusionnées. Développez de nouvelles fonctionnalités ou de nouveaux composants à partir d’exigences précises, en tirant parti de la capacité de Code Droid à comprendre votre base de code et à mettre en œuvre des fonctionnalités conformes aux modèles et aux bonnes pratiques de votre projet. Améliorez le code existant en repérant les modèles complexes ou inefficaces et en les transformant en solutions plus claires et plus faciles à maintenir, tout en préservant les fonctionnalités et en améliorant les performances. Analysez les journaux d’erreurs, déterminez les causes profondes et corrigez les bugs dans votre base de code. Créez des tests unitaires complets pour garantir la fiabilité du code et prévenir les régressions dans vos applications.
Knowledge Droid : Recherche en ingénierie, documentation technique et guides d’intégration. Générez une documentation complète pour votre base de code, comprenant des références d’API, des aperçus de l’architecture et les relations entre composants, afin de faciliter la compréhension et l’intégration au sein de l’équipe. Obtenez des explications claires sur les systèmes complexes, les décisions architecturales et les détails d’implémentation de vos projets pour aider les membres de l’équipe à comprendre les interactions entre les différents composants. Trouvez et extrayez rapidement des informations précises de votre base de code et de votre documentation, et gagnez du temps lorsque vous recherchez des détails d’implémentation ou cherchez à comprendre certaines fonctionnalités.
Reliability Droid : Enquêtez sur les incidents, rédigez des analyses des causes profondes et déboguez des systèmes complexes composés de plusieurs services. Analysez les incidents en production en examinant les journaux d’erreurs, les métriques et le comportement du système afin de repérer rapidement les tendances et les causes possibles des interruptions ou de la dégradation des performances. Créez des rapports d’analyse des causes profondes complets, comprenant une chronologie, une évaluation de l’impact, l’identification de la cause profonde et des mesures préventives à partager avec les parties prenantes. Développez des mécanismes robustes de gestion des erreurs, notamment des disjoncteurs, une logique de nouvelle tentative et des stratégies de dégradation progressive, pour renforcer la résilience du système et prévenir les défaillances en cascade.
Product Droid : Planifiez des fonctionnalités, créez des PRD et gérez vos projets. Générez des documents d’exigences produit détaillés, avec des présentations des fonctionnalités, des récits utilisateurs, des critères d’acceptation, des considérations techniques et des phases de mise en œuvre pour les nouvelles fonctionnalités. Créez des récits utilisateurs complets, assortis de critères d’acceptation détaillés pour différents types d’utilisateurs et différents scénarios, afin d’aider les équipes de développement à comprendre les exigences des fonctionnalités du point de vue des utilisateurs. Analysez les demandes de fonctionnalités et élaborez des méthodes de priorisation qui évaluent l’impact par rapport à l’effort, pour aider les équipes produit à décider en connaissance de cause de l’ordre de mise en œuvre.
Cette approche moderne des agents IA, qui consiste à proposer une bibliothèque d’agents spécialisés et prêts à l’emploi, permet de tirer le meilleur parti des fenêtres de contexte limitées des LLM. Si l’agent unique proposé par des outils comme Claude Code, OpenAI Codex et Gemini CLI « peut » s’adapter à un éventail similaire de tâches, Factory AI a pris le temps de fournir aux développeurs des agents capables de gérer leur contexte de manière experte, pour répondre à des besoins très précis. Cela n’exclut pas le Droid généraliste également inclus dans leur bibliothèque, sur lequel vous pouvez bien sûr compter pour toute tâche non couverte par les Droids spécialisés.
Heureusement, Factory AI ne vous enferme pas dans l’écosystème d’un seul fournisseur de LLM. Les fournisseurs les plus connus sont directement accessibles (voir ci-dessous). Et pour les LLM qui proposent des variantes spécifiques, par exemple pour le raisonnement, vous pouvez facilement faire votre choix dans la même boîte de dialogue de l’interface.

Prise en charge de MCP
Comme d’autres interfaces CLI d’agents IA, Droid CLI offre une excellente prise en charge du Model Context Protocol (MCP). Ajouter votre serveur MCP préféré est très simple.

Par exemple, vous pouvez ajouter le serveur MCP officiel de Snyk comme suit :
droid mcp add --type stdio SNYK "snyk mcp -t stdio"
Added stdio MCP server SNYK with command: snyk mcp -t stdioMais qu’est-ce que cela nous permet de faire ? Quel est l’intérêt d’étendre l’ensemble d’outils d’un Droid déjà performant ? La prise en charge des commandes shell et de la lecture, de l’écriture et de la modification de fichiers est déjà intégrée.
Utiliser des agents IA (Droids) pour corriger automatiquement les vulnérabilités
Pour cet exemple, j’ai cloné le dépôt pyGoat de adeyosemanputra’s, responsable de projet chez OWASP. Ce projet contient volontairement plusieurs vulnérabilités bien documentées à des fins pédagogiques. Voici quelques-unes des vulnérabilités signalées par l’extension IDE de Snyk :

Nous pouvons aussi demander à Droid d’utiliser le serveur MCP pour répertorier certaines de ces mêmes vulnérabilités. Voici le résultat :
> Please run a code scan on the codebase with Snyk.
⛬ I'll help you run a Snyk code scan on the pygoat codebase. Let me first check the
authentication status and then perform the scan.
PLAN Updated: 3 total (2 pending, 1 in progress, 0 completed)
○ Check Snyk authentication status
○ Run Snyk code scan on pygoat codebase
○ Review and report scan results
[MCP] SNYK:SNYK_AUTH_STATUS
↳stephen.thoemmes
⛬ Great! You're authenticated as stephen.thoemmes. Now I'll run the Snyk code scan on
the pygoat codebase to identify security vulnerabilities.
PLAN Updated: 3 total (1 pending, 1 in progress, 1 completed)
○ Check Snyk authentication status
○ Run Snyk code scan on pygoat codebase
○ Review and report scan results
[MCP] SNYK:SNYK_CODE_SCAN (/home/owler/Documents/Snyk/factory/pygoat)
↳
Testing /home/owler/Documents/Snyk/factory/pygoat ...
✗ [Low] Use of Hardcoded Credentials
Path: introduction/playground/A9/api.py, line 17
Info: Do not hardcode credentials in code. Found hardcoded credential used in a
condition.
…
✗ [High] SQL Injection
Path: introduction/views.py, line 871
Info: Unsanitized input from an HTTP parameter flows into
introduction.models.sql_lab_table.objects.raw, where it is used in an SQL query. This
may result in an SQL Injection vulnerability.
…
✔ Test completed
Organization: stephen.thoemmes
Test type: Static code analysis
Project path: /home/owler/Documents/Snyk/factory/pygoat
Summary:
101 Code issues found
15 [High] 44 [Medium] 42 [Low]
PLAN Updated: 3 total (0 pending, 0 in progress, 3 completed)
○ Check Snyk authentication status
○ Run Snyk code scan on pygoat codebase
○ Review and report scan results
⛬ The Snyk code scan has completed successfully! Here's a summary of the security
findings:
Scan Results Summary
Total Issues Found: 101
• 15 High severity vulnerabilities
• 44 Medium severity vulnerabilities
• 42 Low severity vulnerabilities
Key High-Severity Issues Found:
1. SQL Injection - Multiple instances in views.py
2. Code Injection - eval() usage with unsanitized input
3. Command Injection - subprocess.Popen with unsanitized input
4. Path Traversal - File operations with unsanitized paths
5. XML External Entity (XXE) Injection - Insecure XML parsing
6. Deserialization vulnerabilities - pickle.loads and yaml.load with untrusted data
7. Hardcoded cryptographic keys - JWT keys hardcoded in source
8. Hardcoded secrets - Non-cryptographic secrets in code
Medium/Low Severity Issues:
• Hardcoded passwords and credentials
• CSRF protection disabled on multiple endpoints
• Insecure cookie configurations (missing HttpOnly/Secure flags)
• Weak hashing algorithms (MD5)
• Debug mode enabled in production
• SSRF vulnerabilities
This is a comprehensive security assessment showing that pygoat (being a
deliberately vulnerable application for educational purposes) contains numerous
intentional security flaws across all severity levels, making it an excellent
training platform for learning about web application security vulnerabilities.Enfin, après avoir sélectionné Code Droid, nous pouvons demander au LLM de corriger l’une de ces vulnérabilités prioritaires.
> ✗ [High] SQL Injection
Path: introduction/views.py, line 871
Info: Unsanitized input from an HTTP parameter flows into
introduction.models.sql_lab_table.objects.raw, where it is used in an SQL query.
This
may result in an SQL Injection vulnerability. Can you fix this vulnerability and
then re-scan to show that it is fixed?
⛬ I'll help you fix the SQL injection vulnerability on line 871 in
introduction/views.py and then re-scan to verify the fix. Let me first examine the
vulnerable code.
PLAN Updated: 3 total (2 pending, 1 in progress, 0 completed)
○ Examine SQL injection vulnerability on line 871 in views.py
○ Fix the SQL injection vulnerability using parameterized queries
○ Re-run Snyk scan to verify the fix
READ (introduction/views.py, offset: 860, limit: 20)
↳ Read 22 lines.
⛬ Let me see more context around the vulnerable code to understand how the SQL query
is constructed:
READ (introduction/views.py, offset: 840, limit: 40)
↳ Read 42 lines.
⛬ Now I can see the vulnerability clearly. The SQL query on line 855 is constructed
by directly concatenating user input without sanitization. Let me also check the
imports to see what model is being used:
GREP ("from.*models import|import.*mo...", content mode)
↳ Read 1 line.
GREP ("sql_lab_table", content mode)
↳ Read 7 lines.
⛬ Perfect! Now I understand the vulnerability. The code is directly concatenating
user input (name and password) into the SQL query string, making it vulnerable to
SQL injection. Let me fix this by using parameterized queries:
PLAN Updated: 3 total (1 pending, 1 in progress, 1 completed)
○ Examine SQL injection vulnerability on line 871 in views.py
○ Fix the SQL injection vulnerability using parameterized queries
○ Re-run Snyk scan to verify the fix
EDIT (introduction/views.py)
↳ Succeeded. File edited. (+3 added, -2 removed)
╭───────────────────────────────────────────────────────────────────────────────╮
│ 854 │ 854 print(password) │
│ 855 │ 855 │
│ 856 │ 856 if name: │
│ 857 │ - sql_query = "SELECT * FROM introduction_sql_lab_tabl…│
│ │ 857 + # Fixed SQL injection by using parameterized query │
│ │ 858 + sql_query = "SELECT * FROM introduction_sql_lab_tabl…│
│ 858 │ 859 │
│ 859 │ 860 sql_instance = sql_lab_table(id="admin", password="6…│
│ 860 │ 861 sql_instance.save() │
│ │
│... 7 unchanged lines ... │
│ │
│ 868 │ 869 print(sql_query) │
│ 869 │ 870 │
│ 870 │ 871 try: │
│ 871 │ - user = sql_lab_table.objects.raw(sql_query) │
│ │ 872 + user = sql_lab_table.objects.raw(sql_query, [nam…│
│ 872 │ 873 user = user[0].id │
│ 873 │ 874 print(user) │
│ 874 │ 875 │
╰───────────────────────────────────────────────────────────────────────────────╯
⛬ Great! I've successfully fixed the SQL injection vulnerability by:
1. Changing the SQL query construction: Instead of directly concatenating user
input into the SQL string, I'm now using parameterized query placeholders (%s)
2. Using parameterized execution: The raw() method now receives the parameters as a
separate list [name, password], which ensures proper escaping and prevents SQL
injection
Now let's run the Snyk scan again to verify that this specific vulnerability has
been fixed:
PLAN Updated: 3 total (0 pending, 1 in progress, 2 completed)
○ Examine SQL injection vulnerability on line 871 in views.py
○ Fix the SQL injection vulnerability using parameterized queries
○ Re-run Snyk scan to verify the fix
[MCP] SNYK:SNYK_CODE_SCAN (/home/owler/Documents/Snyk/factory/pygoat)
↳
Testing /home/owler/Documents/Snyk/factory/pygoat ...
✗ [Low] Use of Hardcoded Credentials
Path: introduction/playground/A9/api.py, line 17
Info: Do not hardcode credentials in code. Found hardcoded credential used in a
condition.
…
✗ [High] Hardcoded Non-Cryptographic Secret
Path: pygoat/settings.py, line 25
Info: Avoid hardcoding values that are meant to be secret. Found a hardcoded string
used in here.
✔ Test completed
Organization: stephen.thoemmes
Test type: Static code analysis
Project path: /home/owler/Documents/Snyk/factory/pygoat
Summary:
100 Code issues found
14 [High] 44 [Medium] 42 [Low]
PLAN Updated: 3 total (0 pending, 0 in progress, 3 completed)
○ Examine SQL injection vulnerability on line 871 in views.py
○ Fix the SQL injection vulnerability using parameterized queries
○ Re-run Snyk scan to verify the fix
⛬ Perfect! The fix has been successfully verified. Here's what happened:
✅ SQL Injection Vulnerability Fixed!
Before the fix:
• 101 total issues (15 High, 44 Medium, 42 Low)
• SQL Injection vulnerability at introduction/views.py, line 871
After the fix:
• 100 total issues (14 High, 44 Medium, 42 Low)
• The SQL injection vulnerability is no longer reported ✅
Summary of the Fix
I successfully fixed the SQL injection vulnerability by:
1. Replaced vulnerable string concatenation:
```python
# BEFORE (vulnerable):
sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id='"+name+"'AND
password='"+password+"'"
user = sql_lab_table.objects.raw(sql_query)
```
2. With secure parameterized query:
```python
# AFTER (secure):
sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id=%s AND
password=%s"
user = sql_lab_table.objects.raw(sql_query, [name, password])
```
The Snyk scan now shows 1 fewer issue (from 101 to 100), confirming that the
specific SQL injection vulnerability on line 871 has been eliminated. The fix uses
Django's built-in parameter binding which automatically escapes user input and
prevents SQL injection attacks.
Cela illustre le potentiel d’un nouveau paradigme dans les workflows DevSecOps. Au lieu de traiter la sécurité comme une préoccupation distincte, souvent abordée tardivement, nous pouvons désormais intégrer directement la détection et la correction des vulnérabilités au processus de développement. Grâce à l’association des agents spécialisés de Factory AI et des serveurs MCP comme celui de Snyk, les problèmes de sécurité peuvent non seulement être détectés, mais aussi corrigés rapidement et faire l’objet d’une nouvelle vérification, le tout dans l’interface où les développeurs travaillent déjà.
Prochaines étapes avec Factory AI et Snyk Studio
À mesure que l’adoption de MCP progresse et que davantage d’outils de sécurité développent des serveurs MCP, on peut imaginer des Droids capables non seulement de corriger les vulnérabilités, mais aussi de générer des tests de sécurité, de mettre à jour la documentation pour tenir compte des correctifs et même de créer des tickets afin que les problèmes complexes soient examinés manuellement. La nature modulaire du système Droid de Factory et du protocole MCP permet à ces fonctionnalités d’évoluer indépendamment tout en restant interopérables.
Pour les équipes qui souhaitent mettre en place des workflows similaires, la configuration est simple : installez la CLI Factory, ajoutez les serveurs MCP de votre choix et commencez à corriger des vulnérabilités pour gagner en confiance dans le processus de correction automatisée. L’essentiel est de considérer les agents IA comme des multiplicateurs de force pour votre équipe de sécurité, et non comme des remplaçants : ils excellent dans le traitement des correctifs courants et bien compris, tandis que les humains se concentrent sur les nouveaux défis de sécurité qui exigent une approche créative.
Vous souhaitez en savoir plus sur la sécurisation de l’écosystème des serveurs MCP ? Téléchargez notre e-book dès aujourd’hui.
E-BOOK
Sécuriser l’écosystème des serveurs MCP
Découvrez les nouvelles voies d’attaque et analysez des incidents réels pour apprendre à vous en protéger grâce à des stratégies pratiques et adaptées aux flux.