Fekra

Single Blog

image description

A vulnerabilidade Path Traversal

 

Path Traversal

Path traversal é uma das vulnerabilidades (erro de software) mais perigosas segundo o CWE/SANS Top 25.

É um ataque utilizado por atacantes para obter acesso não autorizado a arquivos e diretórios, e através da sua exploração é possível comprometer completamente o servidor onde a aplicação se encontra.

O Path Traversal é o resultado da falta ou insuficiência de validações de entrada de usuários na aplicação (direto pelo browser). Essa vulnerabilidade pode existir em aplicações de diversas linguagens de programação como C#.Net, Python, PHP, ColdFusion, Perl, etc.

As empresas normalmente realizam scans de vulnerabilidade, análise de código (code review) e testes de intrusão manuais para detectar esse tipo de vulnerabilidade.

Exemplos de path traversal

Ataques Path Traversal podem ser vistos em dois grupos: ataques que exploram falhas no servidor web e ataques que exploram vulnerabilidades no código da aplicação.

Atacantes conseguem explorar vulnerabilidades no código da aplicação enviando URLs que instruem o servidor web a enviar arquivos específicos à aplicação. Para este método funcionar, o atacante precisa encontrar uma URL na qual a aplicação busca arquivos do servidor.

Uma vez que o atacante encontra tal URL, pode-se simpesmente alterar a string da URL com comandos para o servidor e o nome do arquivo que ele busca acessar. A diretiva “../” é normalmente usada, por instruir o servidor web a buscar o arquivo no diretório um nível acima.

Um atacante que está tentando acessar um arquivo específico irá usar tentativa e erro para determinar quantos comandos “../” ele irá precisar para localizar o diretório correto e obter o arquivo através da aplicação.

Site vulnerável: www.site.com/download_file.aspx?file=report.pdf

Vulnerabilidade explorada: www.site.com/download_file.aspx?file=../../../web.config

Vulnerabilidades de Path Traversal que existem em servidores web são tipicamente explorados para executar arquivos. O método para este tipo de ataque envolve o envio de URLs para o servidor web que contenham o nome do arquivo desejado e códigos de escape de servidores web (escape codes).

Escape codes podem ser utilizados quando alguns comandos são bloqueados/filtrados, por exemplo, um atacante pode utilizar o escape code “%2e%2e/” se o comando “../” estiver estiver sendo filtrado.

Prevenção contra Path Traversal

Existem diversas medidas que as empresas podem tomar para prevenir ataques e vulnerabilidades Path Traversal.

Para iniciar, os programadores devem ser treinados para validar as entradas nas aplicações. A validação de entrada garante que os atacantes não consigam usar comandos para mudar de diretório ou burlar outros controles de acesso. Além disso, filtros podem ser usados para bloquear certos tipos de entrada.

Exemplo de código incorreto:

import os

from flask import Flask, redirect, request, send_file

app = Flask(__name__)

@app.route(‘/’)

def cat_picture():

    image_name = request.args.get(‘image_name’)

    if not image_name:

        return 404

    return send_file(os.path.join(os.getcwd(), image_name))

 if__name__==’__main__’:

    app.run(debug=True)

Com o código acima o atacante pode fazer download de arquivos do servidor através da vulnerabilidade na variável “image_name”.

Uma forma de corrigir a vulnerabilidade é utilizar a seguinte função na variável que terá a chamada direta pelo browser:

filepath =os.normpath(‘/’ + filepath).lstrip(‘/’) 

Outra forma de mitigar o problema é definir um identificador único para cada arquivo, e não chamar o arquivo diretamente:

localfiles= { 

     “01” : “/var/www/img/001.png”, 

     “02” : “/var/www/img/002.png”, 

     “03” : “/var/www/img/003.png”,

def get_file(file_id): 

     return open(localfiles[file_id])

Adicionalmente, servidores web devem ser mantidos em dia, com patches atualizados. Aplicar patches regularmente é uma prática crítica para a redução de riscos de segurança, pois os patches normalmente possuem correções de segurança.

 

Leave Comment