(in)Segurança em Python J u l h o d e 2 015 (in)Segurança em Python Por que e quando validar seus dados? Capítulo: Injeção de Comandos de Sistema Operacional uname –a; id; whoami Problemas de Injeção de Dados Injeção de Comandos de Sistema Operacional As falhas de Injeção de Comandos de Sistema Operacional ocorrem quando dados não confiavéis são enviados para um interpretador como parte de um comando. Os dados forjados pelo atacante podem iludir o interpretador para que este execute comandos indesejados ou permita o acesso não autorizado à dados/informações sensíveis. INJECTION Injeção de Comandos ip = request.form['ip'] ch = system("ping -c 1 %s" % ip) print "%s" % (ch) Injeção de Comandos ip = request.form['ip'] ch = system("ping -c 1 %s" % ip) print "%s" % (ch) Injeção de Comandos ip = request.form['ip'] ch = system("ping -c 1 %s" % ip) print "%s" % (ch) Python External Command Execution Popen Subprocess Call Check-output OS System Pexpect Spawn Code Sample – Pingão I Nenhuma validação Code Sample – Pingão I >> Code Sample – Pingão II Validação JavaScript Code Sample – Pingão II >> Code Sample – Pingão III Validação Positiva Fraca Code Sample – Pingão III >> Code Sample – Pingão IV Validação Negativa Fraca Code Sample – Pingão IV >> Code Sample – Pingão V Validação Positiva Forte Code Sample – Pingão V >> Python calls comparsion subprocess Popen call SF SF split shlex %s.f + sh %s.f + sh %s.f + %s.f + 127.0.0.1 127.0.0.1;id ;id |id 127.0.0.1&&id ||id $(id) `id` $(id) 2>&1 `id` 2>&1 check_output os system %s.f + pexpect spawn %s.f + Python calls comparsion subprocess Popen call SF SF split shlex %s.f + sh %s.f + sh %s.f + %s.f + 127.0.0.1 127.0.0.1;id ;id |id 127.0.0.1&&id ||id $(id) `id` $(id) 2>&1 `id` 2>&1 -s 1 127.0.0.1 check_output os system %s.f + pexpect spawn %s.f + LOD Nilo Rafael João (in)Segurança Python J u l h o d e 2 015