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.