A Common Gateway Interface (CGI) é uma maneira padrão de um servidor da Web passar a solicitação de um usuário da Web para um programa executável (um script CGI) e obter os resultados de volta para exibir para o usuário. Essencialmente, é uma ponte entre um servidor da Web e aplicativos externos. Nos primeiros dias da Web, o CGI era a principal maneira de lidar com o conteúdo dinâmico além das páginas HTML simples.
No entanto, devido à sua arquitetura e idade, o CGI apresenta várias vulnerabilidades da Web significativas:
*
Injeção de comando: Se um script CGI não higienize adequadamente a entrada do usuário antes de usá -lo nos comandos Shell (por exemplo, usando `System ()` ou funções semelhantes em idiomas como Perl, Python ou C), um invasor poderá injetar comandos maliciosos. Por exemplo, se um script construir um comando como `ls /tmp /` + `$ _get ['nome do arquivo']`, um invasor poderia criar um parâmetro `nome 'para executar comandos arbitrários no servidor, ganhando potencialmente controle total.
*
Travessal do caminho: Semelhante à injeção de comando, se o script não validar os caminhos fornecidos pelo usuário, um invasor poderá acessar arquivos fora do diretório pretendido. Por exemplo, se um script permitir que os usuários visualizem arquivos usando um parâmetro como `view? File =/etc/passwd`, um invasor poderia tentar` view? File =../../../etc/passwd` para ler arquivos de sistema sensíveis.
*
script de sites cruzados (XSS): Se um script CGI não higienize adequadamente os dados fornecidos pelo usuário incluídos na saída HTML, ele poderá levar a vulnerabilidades XSS refletidas ou armazenadas. Um invasor pode injetar código javascript malicioso que será executado no navegador da vítima, potencialmente roubando cookies ou outras informações confidenciais.
*
Buffer Overflow: Os scripts CGI mal escritos podem ser suscetíveis a vulnerabilidades de transbordamento de buffer. Se um invasor enviar mais dados do que o buffer do script pode lidar, isso pode causar uma falha ou permitir que o invasor execute o código arbitrário.
*
negação de serviço (DOS): Os scripts CGI ineficientemente escritos podem ser direcionados por ataques do DOS. Um grande número de solicitações pode sobrecarregar o script ou os recursos do servidor, tornando o site indisponível.
*
vazamento de informações: Um script CGI pode expor inadvertidamente informações confidenciais através de mensagens de erro, arquivos de log ou a maneira como lida com exceções.
*
Segurança equivocada: Configurado incorretamente scripts CGI ou seus arquivos associados (por exemplo, permissões incorretas) podem levar a várias vulnerabilidades.
Por que o CGI é menos comum agora: As vulnerabilidades e as limitações de desempenho da CGI levaram ao seu declínio na popularidade. Estruturas da Web modernas como PHP, Django/Flask do Python, Ruby on Rails, Node.js, etc., oferecem uma segurança e desempenho muito melhores por meio de recursos como higienização de entrada embutida, manipulação de erros aprimorada e práticas de segurança mais robustas. Essas estruturas lidam com a interação entre o servidor da Web e a lógica do aplicativo de uma maneira muito mais segura e eficiente do que o CGI.
Em resumo, embora o CGI fosse historicamente importante, suas vulnerabilidades inerentes a tornam uma escolha arriscada para os aplicativos da Web modernos. O uso de estruturas seguras, bem mantidas e atualizadas regularmente é crucial para proteger contra esses ataques.