Ataque de travessia de diretório - vulnerabilidade de upload de arquivo

Exploração de Caminhos em Uploads de Arquivos: Como os Desenvolvedores Criam seus Próprios Exploits

Quando o envio de arquivos se transforma em acesso a arquivos

Um único manipulador de upload inseguro pode abrir caminho para um ataque de travessia de diretório completo e uma vulnerabilidade no upload de arquivos. Quando os desenvolvedores concatenam nomes de arquivos diretamente com os caminhos de upload, Os atacantes podem enviar nomes de arquivos maliciosos. como ../../etc/senha Para escapar de diretórios e acessar arquivos confidenciais. Esse tipo de exploração de caminho transforma uma API de upload simples em uma poderosa vulnerabilidade de acesso a arquivos, especialmente quando o aplicativo é executado com permissões elevadas.

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

// Vulnerable upload handler, file upload vulnerability
[HttpPost("/upload")]
public async Task<IActionResult> Upload(IFormFile file)
{
    var path = Path.Combine("uploads/", file.FileName);  // No validation
    using var stream = new FileStream(path, FileMode.Create);
    await file.CopyToAsync(stream);
    return Ok("File uploaded!");
}

Um atacante pode carregar um arquivo chamado ../../web.config Sobrescrever ou ler arquivos restritos é um ataque clássico de travessia de diretório.

Versão segura:

// Safe upload with validation and canonicalization
[HttpPost("/upload")]
public async Task<IActionResult> Upload(IFormFile file)
{
    var fileName = Path.GetFileName(file.FileName); // strip directories
    var targetDir = Path.GetFullPath("uploads/");
    var safePath = Path.Combine(targetDir, fileName);


    if (!safePath.StartsWith(targetDir))
        return BadRequest("Invalid file path");


    using var stream = new FileStream(safePath, FileMode.Create);
    await file.CopyToAsync(stream);
    return Ok("File securely uploaded!");
}

Nota educacional: Sempre canonicalize os caminhos com Caminho.ObterCaminhoCompleto() e verifique se o resultado permanece dentro do seu diretório de upload. Nunca confie em um arquivo.NomeDoArquivo diretamente.

Erros de desenvolvimento que permitem a travessia de diretórios

A maioria das vulnerabilidades de upload de arquivos que levam à exploração de caminhos (path traversal) decorre de código apressado e falta de validação. Erros comuns de desenvolvedores incluem:

  • Concatenar a entrada do usuário diretamente nos caminhos do sistema de arquivos.
  • Confiando Content-Type ou validação de extensão sozinha
  • Ignorando a normalização dos caminhos antes de salvar.

Reutilizar pastas temporárias entre requisições ou microsserviços

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

# Flask example vulnerable to path traversal attack
@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    file.save('uploads/' + file.filename)
    return 'Uploaded'

Os atacantes podem contornar essa concatenação simples para percorrer diretórios (../../app.py) e escrever ou sobrescrever arquivos arbitrários. Versão segura:

# Safe file upload validation
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    name = secure_filename(file.filename)
    path = os.path.join('uploads', name)
    file.save(path)
    return 'Securely uploaded'

Nota educacional: Use os auxiliares fornecidos pela estrutura, como nome_do_arquivo_seguro e aplicar extensões permitidas. Nunca concatene manualmente entradas em caminhos de arquivo.

Exploração na vida real Pipelinee Microsserviços

Os ataques de path traversal não ocorrem apenas em endpoints públicos. Eles frequentemente aparecem em ambientes internos. CI/CD Sistemas, repositórios de artefatos ou microsserviços que gerenciam arquivos enviados. Por exemplo, uma vulnerabilidade de upload de arquivos em um gerenciador de artefatos de compilação pode permitir que um invasor sobrescreva scripts de compilação ou Injetar arquivos maliciosos em executores compartilhados.

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

# Never expose real tokens, credentials, or internal URLs in pipelines
- name: Store build artifact
  run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME

If $ FILENAME não é validado, é fabricado ../../../etc/senha O valor pode sobrescrever arquivos críticos do sistema durante a implantação, um ataque de travessia de diretório no mundo real. Versão segura: 

# Safer artifact storage guardrail
- name: Store build artifact securely
  run: |
    SAFE_NAME=$(basename "$FILENAME")
    cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME"

Nota educacional: In pipelines, higienize todas as variáveis ​​de caminho dinâmicas. Limite as operações de gravação a diretórios controlados para evitar a fuga do sistema de arquivos durante compilações ou implantações.

Prevenção de travessia de diretórios na lógica de upload

A mitigação de ataques de travessia de diretórios começa com uma forte validação e isolamento de entradas. Trate nomes de arquivos e caminhos como entradas não confiáveis ​​desde o início, especialmente ao lidar com arquivos enviados.

Melhores Práticas

  1. Normalizar e canonizar todos os caminhos antes de usá-los.
  2. Restringir uploads para um diretório dedicado fora da raiz da web.
  3. Impor listas de permissões para extensões de arquivo e tipos MIME.
  4. Nunca reutilize pastas temporárias. entre sessões ou usuários.
  5. Utilize armazenamento em contêineres para arquivos enviados, quando possível.

Mini lista de verificação preventiva

  • Valide todos os nomes de arquivo com Caminho.ObterNomeDoArquivo() ou equivalente.
  • Resolver caminhos completos e verificar limites de diretório.
  • Aplicar listas de permissões de extensões e MIME.
  • Utilize pastas de upload separadas para cada usuário ou sessão.
  • Incluir verificação e validação de upload em CI/CD testes.

Nota educacional: Cada manipulador de upload de arquivos é um vetor potencial para ataques de travessia de diretório. Construa uma defesa em profundidade validando, isolando e analisando todo o código de manipulação de arquivos.

Como o Xygeni detecta e bloqueia fluxos de upload inseguros

Xygeni Segurança de Código digitaliza bases de código e pipelines para detectar padrões de percurso antes que cheguem à produção. Ele sinaliza concatenação de caminhos inseguros, ausência de canonicalização e operações de arquivo perigosas tanto no código quanto no sistema. CI/CD scripts.

Trecho funcional, com proteção de controle:

# Secure enforcement with Xygeni
- name: Enforce secure upload and path handling
  run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk

Nota educacional: Integração Xygeni em sua pipeline Garante que vulnerabilidades de upload de arquivos e ataques de travessia de diretórios sejam detectados automaticamente durante a validação da compilação.

Reduzindo a Lacuna: Prevenindo seu Próximo Ataque de Travessia de Caminho

Uma única falha de travessia de diretório em um endpoint de upload de arquivos pode dar aos atacantes acesso ao sistema de arquivos do seu servidor. Analise os manipuladores de upload em busca de concatenações inseguras, normalize todos os caminhos e nunca confie em nomes de arquivos controlados pelo usuário. Adicione ferramentas de verificação de vulnerabilidades como Xygeni Segurança de Código para o seu DevSecOps pipeline Detectar ataques de travessia de diretórios e vulnerabilidades de upload de arquivos antes do lançamento do produto. Em segurança, todo arquivo salvo deve ser tratado como código executado!

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
você recebe uma avaliação gratuita de 7 dias da nossa licença Business Edition e pode aproveitar alguns dos recursos avançados da plataforma SecurityScorecard.
Não é necessário cartão de crédito

Proteja seu desenvolvimento e entrega de software

com o Suíte de Produtos da Xygeni