
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
Uma Breve História
No dia 5 de outubro de 2021, foi divulgado um CVE detalhando um ataque de path traversal no Apache HTTP Server v2.4.49. Atribuído o número CVE-2021-41773, foi divulgado com a seguinte descrição:
Uma falha foi encontrada numa mudança feita na normalização de caminhos no Apache HTTP Server 2.4.49. Um atacante poderia usar um ataque de path traversal para mapear URLs para ficheiros fora do document root esperado. Se os ficheiros fora do document root não estiverem protegidos por "require all denied", estes pedidos podem ser bem-sucedidos. Além disso, esta falha poderia vazar o código-fonte de ficheiros interpretados, como scripts CGI. Este problema é conhecido por ser explorado ativamente. Este problema afeta apenas o Apache 2.4.49 e não versões anteriores.
Vamos detalhar e ver o que isto realmente significa para nós:
Muita Correção Depois...
Então o Apache corrigiu este bug e lançou a v2.4.50. Fim da história, certo? Bem, nem tanto. Apenas 2 dias depois, no dia 7 de outubro, foi divulgado um novo CVE citando o anterior. Este menciona que a correção para o ataque de path traversal anterior foi incompleta, e ainda podíamos atravessar se o caminho em questão usasse uma diretiva alias para mapear as URLs para o sistema de ficheiros. Foi atribuído o CVE CVE-2021-42013, com a seguinte descrição:
Foi descoberto que a correção para o CVE-2021-41773 no Apache HTTP Server 2.4.50 foi insuficiente. Um atacante poderia usar um ataque de path traversal para mapear URLs para ficheiros fora dos diretórios configurados por diretivas do tipo Alias. Se os ficheiros fora destes diretórios não estiverem protegidos pela configuração padrão "require all denied", estes pedidos podem ser bem-sucedidos. Se os scripts CGI também estiverem ativados para esses caminhos com alias, isso poderia permitir a execução remota de código. Este problema afeta apenas o Apache 2.4.49 e Apache 2.4.50 e não versões anteriores.
Tal como antes, podemos aprender algumas coisas aqui:
Enquanto processamos essa loucura, examinaremos a configuração necessária na próxima tarefa.
Responda às perguntas abaixo
Um Pouco de Teoria
Um exploit de Path Traversal é um ataque que visa acessar recursos que normalmente são inacessíveis, abusando de falhas na resolução e/ou normalização de caminhos. Geralmente exploramos este tipo de ataque viajando (também conhecido como atravessando) para trás para além do suposto raiz usando a sintaxe ...
Normalização? O quê?
Normalmente, ao fornecer um caminho para algum código encontrar um ficheiro, é necessário um caminho absoluto. Vamos chamar-lhe o caminho canónico. Quando é fornecido um caminho relativo, ele deve ser normalizado para uma forma canónica para que as bibliotecas do SO que usam esse caminho possam então encontrar o recurso em questão. Isto é uma simplificação, claro, mas a ideia permanece.
Em geral, existem bibliotecas de plataforma para fazer essa normalização por nós, mas em C/C++ normalmente temos que fazer tudo nós mesmos. Embora isto possa oferecer alguma flexibilidade, também pode facilmente introduzir falhas se a nossa implementação não for perfeita.
Normalizando URLs
Um servidor HTTP tem que traduzir uma URL para um caminho canónico no sistema de ficheiros para encontrar o ficheiro correto a servir. Embora existam definitivamente alguns filtros para evitar que se consiga atravessar para além do document root, alguns casos de uso podem facilmente ser esquecidos. Neste caso, o exploit tira partido não só da codificação de URL (vamos chegar lá já) mas também de uma falha na normalização de caminhos do módulo Alias (supostamente)
Um Parêntese sobre Codificação de URL
Definido na RFC 3986, Seção 2, a Codificação de URL é um esquema usado para codificar caracteres especiais ou reservados dentro de uma URL. Por exemplo, espaços numa URL são codificados como o caractere + (notadamente em parâmetros de consulta). Se quisermos codificar um sinal de mais real, devemos codificá-lo usando o que é conhecido como "percent-encoding". Isto simplesmente envolve prefixar o código hexadecimal US-ASCII do caractere com um sinal de %. No nosso exemplo, o símbolo + pode ser codificado como %2B.
Qualquer caractere pode ser codificado em URL, e URLs que estão totalmente codificados em URL são funcionalmente equivalentes à versão não codificada. Da RFC: Se dois URIs diferem apenas no caso dos dígitos hexadecimais usados em octetos codificados por percentagem, eles são equivalentes.
Então o que Aconteceu com o Apache?
Uma mudança recente no módulo de normalização de caminhos no servidor Apache permitiu que uma URL especialmente criada contornasse os filtros e atravessasse para além do document root, permitindo leitura arbitrária de ficheiros no sistema se a configuração o permitisse. Além disso, se o módulo CGI estivesse ativado, a execução arbitrária de ficheiros também era possível!
Responda às perguntas abaixo
A) Incluir ficheiros remotos arbitrários para serem processados no servidor. B) Incluir ficheiros locais arbitrários para serem processados no servidor. C) Permitir que ficheiros arbitrários sejam expostos pelo servidor. D) Nenhuma das anteriores.
Hackeando o Apache por Diversão