In this article
Corrigindo vulnerabilidades detectadas com Factory AI e Snyk Studio
Programar com os Droids da Factory AI é uma ótima experiência. Tudo é coeso, fluido e envolvente — parece até um jogo. Dá para perceber o compromisso da empresa com esse ideal não só pela interface, mas também pelas parcerias — uma integração importante é com a Linear (concorrente mais jovem da Jira, conhecida pela experiência do usuário aprimorada com animações reativas em aplicativos web e atalhos de teclado). Se ferramentas como Claude Code, OpenAI Codex e Gemini CLI são como um documento do Word offline, a solução da Factory AI é como um Google Drive online, criado desde o início para equipes colaborarem.
![Tela inicial da Factory com o título “FACTORY”, uma descrição do desenvolvimento de software nativo de agentes e a instrução “[ enter to continue ]”.](https://res.cloudinary.com/snyk/image/upload/v1761144127/Droid_GIF_goxlos.gif)
A jornada para desenvolvedores inclui um tutorial bem elaborado, integrado ao site, que orienta você passo a passo para:
Baixar a Factory CLI
Adicionar a extensão Droid IDE ao VS Code ou ao seu fork preferido (como Cursor ou Windsurf)
Dar ao seu Droid (os agentes de IA especializados da Factory AI) a primeira tarefa, no navegador ou na IDE.
Se você usa Linux, pode instalar a Factory CLI assim:
curl -fsSL https://app.factory.ai/cli | shA extensão para VS Code está disponível aqui. Depois de instalá-la, use `Ctrl-Shift-P` para abrir a paleta de comandos e selecione Run Factory Droid.

O que há em um Droid?
A Factory AI oferece agentes de IA especializados para uma ampla variedade de tarefas comuns de desenvolvimento de software. Eles são chamados de Droids.
Code Droid: Transforme uma ideia em alterações de código prontas para mesclagem. Escreva novos recursos ou componentes com requisitos claros, aproveitando a capacidade do Code Droid de entender sua base de código e implementar funcionalidades seguindo os padrões e as práticas recomendadas do projeto. Aprimore o código existente identificando padrões complexos ou ineficientes e transformando-os em soluções mais claras e fáceis de manter, sem perder funcionalidades e melhorando o desempenho. Analise registros de erros, identifique as causas raiz e desenvolva correções para bugs na base de código. Crie testes unitários abrangentes para garantir a confiabilidade do código e evitar regressões nos aplicativos.
Knowledge Droid: Pesquisa de engenharia, documentação técnica e guias de integração. Gere documentação abrangente para sua base de código, incluindo referências de API, visões gerais da arquitetura e relações entre componentes, para facilitar o entendimento da equipe e a integração de novos membros. Obtenha explicações claras sobre sistemas complexos, decisões de arquitetura e detalhes de implementação nos projetos, ajudando a equipe a entender como os diferentes componentes interagem. Encontre e extraia rapidamente informações específicas da base de código e da documentação, economizando tempo na busca por detalhes de implementação ou no entendimento de determinados recursos.
Reliability Droid: Investigue incidentes, escreva análises de causa raiz e depure sistemas complexos com vários serviços. Analise incidentes em produção examinando registros de erros, métricas e o comportamento do sistema para identificar rapidamente padrões e possíveis causas de indisponibilidade ou degradação do desempenho. Crie documentos completos de análise de causa raiz, com cronologia, avaliação do impacto, identificação da causa raiz e medidas preventivas para compartilhar com as partes interessadas. Desenvolva mecanismos robustos de tratamento de erros, incluindo disjuntores, lógica de novas tentativas e padrões de degradação controlada, para aumentar a resiliência do sistema e evitar falhas em cascata.
Product Droid: Planeje recursos, crie documentos de requisitos de produto e gerencie seus projetos. Gere documentos detalhados de requisitos de produto, com visões gerais dos recursos, histórias de usuário, critérios de aceitação, considerações técnicas e fases de implementação para novos recursos. Crie histórias de usuário abrangentes, com critérios de aceitação detalhados para diferentes tipos de usuário e cenários, ajudando as equipes de desenvolvimento a entender os requisitos dos recursos pela perspectiva do usuário. Analise solicitações de recursos e desenvolva estruturas de priorização com avaliações de impacto versus esforço para ajudar as equipes de produto a tomar decisões informadas sobre a ordem de implementação.
Essa abordagem contemporânea aos agentes de IA — oferecer uma biblioteca de agentes especializados e prontos para uso — permite que as pessoas aproveitem ao máximo as janelas de contexto limitadas dos LLMs. Embora o agente único oferecido por ferramentas como Claude Code, OpenAI Codex e Gemini CLI possa ser aplicado com versatilidade a uma variedade semelhante de tarefas, a Factory AI investiu tempo para oferecer aos desenvolvedores agentes que executam essas tarefas com gerenciamento especializado do contexto, cada um voltado a uma finalidade específica. Isso não significa que a biblioteca não inclua um Droid de uso geral, que você pode usar para qualquer finalidade não coberta pelo conjunto de Droids especializados.
É ótimo que a Factory AI não prenda você a um único fornecedor de LLM. Os fornecedores mais conhecidos estão prontamente disponíveis (veja abaixo). E, para LLMs com variantes específicas para tarefas como raciocínio, você pode escolher facilmente na mesma janela da interface.

Suporte a MCP
Assim como outras CLIs de agentes de IA, a Droid CLI oferece excelente suporte ao Model Context Protocol (MCP). É fácil adicionar seu servidor MCP favorito.

Por exemplo, você pode adicionar o servidor oficial do Snyk MCP da seguinte maneira:
droid mcp add --type stdio SNYK "snyk mcp -t stdio"
Added stdio MCP server SNYK with command: snyk mcp -t stdioMas o que podemos fazer com isso? Qual é a vantagem de ampliar o conjunto de ferramentas de um Droid que já é bastante capaz? O suporte para executar comandos de shell e ler, gravar e editar arquivos já vem integrado.
Usando agentes de IA (Droids) para corrigir vulnerabilidades automaticamente
Neste exemplo, clonei o repositório pyGoat do líder do projeto OWASP adeyosemanputra’s. Esse projeto inclui intencionalmente uma série de vulnerabilidades bem documentadas para fins educacionais. Veja algumas das vulnerabilidades destacadas pela extensão de IDE da própria Snyk:

Também podemos pedir ao Droid que use o servidor MCP para listar algumas dessas mesmas vulnerabilidades. Veja:
> 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.Por fim, com o Code Droid selecionado, podemos pedir ao LLM que corrija uma dessas vulnerabilidades de alta prioridade.
> ✗ [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.
Isso demonstra o potencial de um novo paradigma nos fluxos de trabalho de DevSecOps. Em vez de tratar a segurança como uma preocupação separada e frequentemente adiada, agora podemos integrar a detecção e a correção de vulnerabilidades diretamente ao processo de desenvolvimento. A combinação dos agentes especializados da Factory AI com servidores MCP, como o da Snyk, permite não apenas identificar problemas de segurança, mas também corrigi-los rapidamente e verificar se as correções estão corretas — tudo na mesma interface em que os desenvolvedores já trabalham.
Próximos passos com Factory AI e Snyk Studio
À medida que a adoção do MCP cresce e mais ferramentas de segurança desenvolvem servidores MCP, podemos imaginar Droids que não só corrigem vulnerabilidades, mas também geram testes de segurança, atualizam a documentação para refletir as correções e até criam tickets para revisão manual de problemas complexos. A natureza modular tanto do sistema Droid da Factory quanto do protocolo MCP permite que esses recursos evoluam de forma independente e continuem interoperáveis.
Para equipes que querem implementar fluxos de trabalho semelhantes, a configuração é simples: instale a Factory CLI, adicione os servidores MCP de sua preferência e comece a corrigir vulnerabilidades para ganhar confiança no processo de correção automatizada. O segredo é tratar os agentes de IA como multiplicadores de capacidade da sua equipe de segurança, não como substitutos. Eles são ótimos para lidar com correções rotineiras e bem compreendidas, enquanto as pessoas se concentram nos novos desafios de segurança que exigem resolução criativa de problemas.
Quer saber mais sobre como proteger o ecossistema de servidores MCP? Baixe nosso e-book hoje mesmo.
E-BOOK
Protegendo o ecossistema de servidores MCP
Explore novas possibilidades de ataque e analise incidentes reais para descobrir como se proteger com estratégias práticas e alinhadas aos fluxos de trabalho.