n8n: Como uma Falha de Prototype Pollution pode levar ao Controle Total (RCE)

O n8n e a Importância da Segurança em Automações
O n8n consolidou-se como uma das ferramentas de automação de workflow baseada em nós mais poderosas do mercado. Sendo open-source, ele permite conectar aplicativos, bancos de dados e agentes de IA para otimizar tarefas complexas. No entanto, onde há flexibilidade e integração de dados, surgem desafios de segurança.
Recentemente, uma análise técnica revelou uma cadeia de vulnerabilidades impressionante que começa com um detalhe semântico quase invisível e termina com a Execução Remota de Código (RCE) não autenticada no host. Vamos mergulhar nos detalhes técnicos desse processo.
O Ponto de Partida: O Problema no xml2js
A vulnerabilidade tem origem na biblioteca xml2js, amplamente utilizada no ecossistema Node.js para parsing de XML. O problema reside em como a biblioteca processa as requisições dependendo do tipo de conteúdo.
O pesquisador identificou que a xml2js é, na verdade, uma abstração sobre a biblioteca sax. Ao tentar explorar a falha, percebeu-se que a abordagem tradicional de XML External Entity (XXE) era impossível devido à técnica de parsing SAX, que processa o documento como uma sequência de eventos em vez de carregar todo o DOM na memória.
A Armadilha do Prototype Pollution
O verdadeiro perigo surgiu com o Prototype Pollution. Embora a falha CVE-2023-0842 já fosse conhecida, a implementação no n8n apresentava uma nuance: os valores injetados eram encapsulados em arrays (ex: ["constructor"]) devido à normalização do CoffeeScript (linguagem na qual a biblioteca foi escrita) ao ser compilada para JavaScript.
Essa característica tornava a exploração difícil, pois não era possível sobrescrever métodos ou propriedades diretamente. No entanto, através de experimentação exaustiva, descobriu-se que era possível manipular referências de objetos via nós de Edit Fields dentro do próprio n8n.
A Escala: Do Bug à Execução de Código (RCE)
Ter a capacidade de poluir o protótipo de um objeto é perigoso, mas para chegar ao RCE, é necessário encontrar um gadget — um trecho de código legítimo que utilize o objeto poluído de forma insegura.
A Busca pelo Gadget Ideal
- Tentativa 1 (spawn): No Node.js, a função
spawné um alvo comum. Contudo, as versões recentes do Node.js mitigaram a maioria dos ataques via poluição de opções. - Tentativa 2 (Community Nodes): Foi possível criar um nó comunitário malicioso, mas isso exigiria privilégios de Administrador, o que tornaria o exploit redundante.
- O Caminho do Sucesso (Git.node.ts): A vulnerabilidade real foi encontrada no
Git.node.ts, que utiliza o pacotesimple-git. Este pacote permite a modificação do objeto de ambiente (env), que posteriormente é passado para a funçãospawn.
O Golpe Final: GIT_SSH_COMMAND
Ao explorar a variável de ambiente GIT_SSH_COMMAND, o atacante consegue executar comandos arbitrários antes de qualquer operação de Git via SSH. O fluxo do ataque simplificado seria:
- Configurar um Webhook no n8n para receber payloads XML.
- Utilizar a falha de
xml2jspara poluir oObject.prototype. - Através do nó Edit Fields, injetar o comando malicioso na variável
GIT_SSH_COMMAND. - Disparar a operação de Git para executar o comando no sistema operacional do host.
Lições Aprendidas e Como se Proteger
Este caso demonstra que mesmo vulnerabilidades classificadas como de “baixa severidade” (como Prototype Pollution) podem se tornar críticas quando combinadas em uma cadeia de exploração. Para garantir a segurança do seu ambiente n8n, recomenda-se:
- Mantenha o n8n Atualizado: Atualizações constantes corrigem falhas em bibliotecas de terceiros.
- Cuidado com Nós Comunitários: Instale apenas pacotes de fontes confiáveis e auditadas.
- Princípio do Menor Privilégio: Execute o n8n em containers isolados (como Docker) com permissões limitadas de usuário.
- Estude o OWASP: Familiarize-se com as vulnerabilidades de OWASP Top 10 para entender melhor os vetores de ataque modernos.
A automação é o futuro da produtividade, mas a segurança deve caminhar lado a lado com a eficiência.
Compartilhar:


