Desafio da Semana #8
DESAFIO DA SEMANA #8
Por: Roberto Alexis Farah
Olá pessoal!
O desafio de hoje trata de uma potencial falha de segurança que pode ocorrer em aplicações. Apesar disso o nosso foco não será no lado de segurança em si.
CENÁRIO
Imagine que um cliente o chama para ajudar a diagnosticar uma aplicação console que é chamada por outra aplicação.
Portanto, embora a aplicação possa ser usada manualmente, chamando-a pela linha de comando, ela pode, também, ser chamada por outra aplicação.
A aplicação console no nosso exemplo não faz nada de útil, apenas salva o conteúdo fornecido como linha de comando num buffer interno, desde que o tamanho dos dados seja menor que o tamanho do buffer interno, apenas para simplificar o cenário.
O formato usado é:
- primeiro parâmetro é o tamanho do buffer. Basicamente o tamanho da string a ser fornecida no segundo parâmetro.
- segundo parâmetro é o conteúdo, ou seja, a string propriamente dita.
Exemplo de uso:
App.exe 25 “isto e’ um teste” ß Nada será salvo pois 25 é maior que o buffer interno. Msg é mostrada.
App.exe 6 “isto é um teste” ß O buffer interno será preenchido, mas com os 6 primeiros caracteres iniciais.
Para gerar a aplicação, crie uma aplicação console no Visual C++ usando esse código e os necessários arquivos de header:
#define BUFFER_SIZE 10
int main(int argc, char* argv[])
{
if(argc < 3)
{
return 0;
}
int nLen = 0;
// Nao assumir string com NULL terminator.
// Por isso usei 'cBuffer' ao inves de 'pszBuffer'.
char cBuffer[BUFFER_SIZE];
nLen = atoi(argv[1]);
if(nLen < BUFFER_SIZE)
{
memcpy(cBuffer, argv[2], nLen);
}
else
{
printf("Muita informacao para copiar...\n");
}
return 0;
}
SINTOMA
Crash intermitente de aplicação.
Nota: O sintoma poderia se manifestar de outro modo, talvez bem mais discreto.
OBJETIVO
Identifique o PROBLEMA ocasionando o intermitente Crash de aplicação e proponha uma SOLUÇÃO.
Comments
- Anonymous
July 18, 2006
The comment has been removed - Anonymous
July 24, 2006
Marcelo, sua resposta está corretíssima! Parabéns e continue participando.
Hoje estarei postando minha resposta onde detalho como o problema ocorre.
Obrigado