← Base de Vulnerabilidades
Injection A03:2021-Injection CVSS 9.8

Command Injection — Injeção de Comandos OS

Command Injection ocorre quando input do usuário é passado para shell commands. Veja exemplos em Python subprocess, PHP exec() e Node.js com bypass de filtros.

Comum em: Ferramentas de diagnóstico de rede, conversores de arquivo, APIs que chamam utilitários de sistema · Dificuldade: Baixa — metacaracteres básicos de shell

O Que É Command Injection

Command Injection permite que um atacante execute comandos arbitrários do sistema operacional no servidor, quando a aplicação passa input do usuário diretamente para funções de shell (exec, system, popen, subprocess com shell=True). Diferentemente de RCE por desserialização, command injection é frequentemente mais fácil de encontrar — qualquer funcionalidade que interpreta comandos OS (ping, dig, convert, ffmpeg) é candidata.

Exemplo Real de Ataque

HTTP Request / Response
GET /api/v1/network/ping?host=8.8.8.8

HTTP/1.1 200 OK
{"result": "PING 8.8.8.8 56 bytes of data. 64 bytes from 8.8.8.8..."}

# Payload de injeção:
GET /api/v1/network/ping?host=8.8.8.8;cat+/etc/passwd

HTTP/1.1 200 OK
{"result": "PING 8.8.8.8...
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:..."}

# Payload com subshell (bypass de filtro simples):
GET /api/v1/network/ping?host=8.8.8.8$(cat /app/.env)

Impacto no Negócio e Compliance

Execução de comandos como o usuário da aplicação (geralmente www-data, node, ou python) — leitura de todos os arquivos acessíveis, instalação de backdoors, exfiltração de credenciais, movimentação lateral na rede interna. Impacto equivalente a RCE com CVSS 9.8.

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Como Remediar

# ❌ INSEGURO — shell=True com input do usuário
import subprocess
cmd = f"ping -c 1 {user_host}"
output = subprocess.run(cmd, shell=True, capture_output=True)

# ✅ SEGURO — lista de argumentos, sem shell=True
import subprocess, shlex, ipaddress

def safe_ping(host: str) -> str:
    # Valide que é realmente um IP ou hostname válido
    try:
        ipaddress.ip_address(host)  # Válido se for IP
    except ValueError:
        raise ValueError(f"Host inválido: {host}")
    
    # Lista de args — sem interpolação de shell
    result = subprocess.run(
        ["ping", "-c", "1", host],
        capture_output=True, text=True, timeout=5
    )
    return result.stdout

Como a Veyronn Detecta Esta Vulnerabilidade

Mapeamos todas as funcionalidades que podem invocar processos externos: tools de diagrama de rede, conversores de arquivo, ferramentas de análise, e APIs de sistema. Testamos com metacaracteres de shell (;, |, &&, $(cmd), `cmd`, %0a) e variantes encoded.

Pronto para Contratar seu Próximo Pentest?

Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.