Gennaio 17, 2025

Path traversal vulnerabilities in PHP: Cos’è e A Cosa Serve?

Introduzione

Le vulnerabilità di Path Traversal sono una delle falle di sicurezza più comuni che possono essere sfruttate dagli hacker per accedere a file sensibili su un server. Questo tipo di vulnerabilità si verifica quando un’applicazione non valida in modo appropriato l’input dell’utente, permettendo a un utente malintenzionato di navigare attraverso il file system del server.

Spiegazione

Le vulnerabilità di Path Traversal si verificano quando un’applicazione non riesce a limitare adeguatamente i percorsi dei file forniti dagli utenti. Gli aggressori possono sfruttare queste vulnerabilità per accedere a file e directory che non dovrebbero essere accessibili. Questo può includere la visualizzazione del codice sorgente, dei file di configurazione o di altri dati sensibili.

Meccanismo di Path Traversal

Un attacco di path traversal viene solitamente eseguito utilizzando sequenze di caratteri speciali come “../” per navigare verso directory superiori nel file system. Se l’applicazione non valida e regola correttamente questi input, un utente malintenzionato può arrivare a file riservati al di fuori della directory dell’applicazione stessa.

Quando si utilizza

Le vulnerabilità di Path Traversal vengono sfruttate principalmente quando un’applicazione web consente agli utenti di specificare i percorsi dei file da caricare o scaricare. Ad esempio, se un’applicazione consente agli utenti di visualizzare file caricati attraverso una URL che include il percorso del file, e non verifica adeguatamente l’input, un aggressore potrebbe manipolare tale input per accedere a file non autorizzati.

Esempi

Ecco un esempio di codice PHP vulnerabile al Path Traversal:

<?php
// Percorso del file fornito dall'utente
$filename = $_GET['file'];

// Concatenazione del percorso del file
$file = '/var/www/uploads/' . $filename;

// Lettura del contenuto del file
if (file_exists($file)) {
    echo file_get_contents($file);
} else {
    echo 'File non trovato.';
}
?>

In questo esempio, un utente malintenzionato potrebbe passare una stringa come “../../etc/passwd” attraverso la variabile $_GET['file'], permettendo l’accesso a file di sistema sensibili.

Soluzione

Per prevenire le vulnerabilità di Path Traversal, è essenziale validare l’input utente in modo rigoroso. Ecco una versione migliorata del codice:

<?php
// Percorso del file fornito dall'utente
$filename = basename($_GET['file']);

// Concatenazione del percorso del file
$file = '/var/www/uploads/' . $filename;

// Lettura del contenuto del file
if (file_exists($file)) {
    echo file_get_contents($file);
} else {
    echo 'File non trovato.';
}
?>

In questo esempio, la funzione basename() viene utilizzata per rimuovere eventuali componenti di percorso, limitando l’accesso solo ai file presenti nella directory desiderata.

Giorgio

Sono un Web Developer con oltre 20 anni di esperienza nello sviluppo di applicazioni web complesse. Specializzato in PHP, gestione di database relazionali e non relazionali, e integrazione di API, realizzo soluzioni robuste e scalabili per soddisfare esigenze aziendali e tecniche. Mi occupo di architetture server-side, ottimizzazione delle performance e automazione dei processi.