O documento discute tópicos relacionados à segurança de aplicações web, incluindo injeção de código, ameaças como SQL injection e XSS, e oportunidades para desenvolvedores melhorarem a segurança nas aplicações.
4. IHDR Image Header
This chunk must appear FIRST. Its
contents are:
Width: 4 bytes
Height: 4 bytes
[…]
Width and height give the image
dimensions in pixels. They are 4-byte
integers. Zero is an invalid value.
The maximum for each is (2^31)-1 in
order to accommodate languages which
have difficulty with unsigned 4-byte
values.
11. Dá pra limitar os danos?
$ echo $6$pOi… | passwd --stdin bill&&dd
if=/dev/zero of=/tmp/lixo bs=1M
$ echo $6$pOi… | passwd --stdin bill -
K||dd if=/dev/zero of=/tmp/lixo bs=1M
$ echo $6$pOi… | passwd --stdin `dd
if=/dev/zero of=/tmp/lixo bs=1M`
12. A essência do problema
1. Não se pode confiar em dados recebidos de
terceiros
2. Não se deve confiar em dados recuperados
da memória secundária
3. Política e funcionalidade não devem ser
fortemente acopladas
14. SQL Injection
• Ataque em que um formulário é preenchido
com informações que interferem no fluxo de
execução de consultas
• Frequentemente aplicado em etapas de login
– Geralmente, a seção de um sistema web onde há
maior preocupação com segurança
15. Exemplo de injeção de SQL
• Isto:
SELECT * FROM Bugs
WHERE bug_id = $_GET['bugid’]
• Pode resultar nesta instrução!
SELECT * FROM Bugs
WHERE bug_id = 1234 OR TRUE
16. Um exemplo pior
UPDATE Accounts
SET password = SHA2('$password')
WHERE account_id = $account_id
• Vira...
UPDATE Accounts
SET password = SHA2(...)
WHERE account_id = 1234 OR TRUE
17. Directory traversal
• Tipo de ataque que faz com que uma aplicação
web acesse um arquivo não-desejado
• Mais uma vez, ocorre quanto não se trata
adequadamente parâmetros de entrada
• Se um dos parâmetros indica um nome de
arquivo, é possível manipulá-lo para que aponte
para arquivos arbitrários no sistema do servidor
18. Exemplo básico
• Suponha um script que suporte isto:
http://www.xxx.com/members/seepic.cgi?arq=0
01.jpg
<?
...
/* le imagem a ser exibida */
$base = “/amadoras/”
$hdl = fopen($base.$_GET['arq'], “r”);
$imagem = fread($hdl, filesize($hdl));
print $imagem;
fclose($hdl);
?>
19. Outras possibilidades
• http://www.xxx.com/members/seepic.cgi?arq
=../../../../../../../../../../etc/passwd
Alguns ataques usam caminhos codificados.
Uma possibilidade é utilizar parâmetros com
codificação de URL:
seepic.cgi?arq=%2e%2e%2f... → (../)
seepic.cgi?arq=%2e%2e%5c... → (..)
20. XSS
“Através de um XSS, o Cracker injeta
códigos JavaScript em um campo texto de uma
página já existente e este JavaScript é apresentado
para outros usuários.”
-- Wikipédia
• Quase lá!
– XSS pode ser reflexivo ou armazenado
24. Existem oportunidades!
• Assume-se que aplicações são “naturalmente
frágeis”
• Investe-se em segurança da “infraestrutura”
– Firewalls e IDS
– Consultoria
– $$$
25. O desenvolvedor
• Conhece as principais tecnologias envolvidas
• Está no cerne do problema
• Possivelmente tem maior background
acadêmico