Remote File Inclusion

Parliamo di una vulnerabilità di tipo Remote File Inclusion quando un’applicazione web permette ad un utente di includere ed eseguire file esterni all’applicazione.

Tale vulnerabilità solitamente è dovuta ad una mancanza di validazione e sanificazione degli input.

L’impatto può variare a seconda della tipologia di file che viene eseguito dal sistema e può portare a conseguenze critiche.

Se correttamente sfruttata, una vulnerabilità di questo tipo potrebbe portare a:

  • Esecuzione di codice: Facendo eseguire file specifici è possibile ottenere l’esecuzione del codice presente in tali file con i conseguenti impatti per la sicurezza.
  • Compromissione del sistema: tale vulnerabilità associata a possibili misconfigurazioni nei permessi degli utenti o vulnerabilità del sistema stesso potrebbe portare all’acquisizione di privilegi elevati e conseguente compromissione totale del sistema.
  • Accesso a dati sensibili: come per una vulnerabilità di tipo LFI è possibile accedere ai documenti interni del sistema dopo aver ottenuto un accesso non autorizzato tramite il file eseguito.
  • Diffusione di Malware: se il file eseguito consiste in un malware (ad esempio un ransomware) e l’esecuzione di tale file non viene bloccata dai sistemi di protezione è possibile che questo vada ad infettare utenti legittimi o altri sistemi presenti nella rete, causando danni ulteriori.

Esistono varie tipologie di attacco che mirano a sfruttare una vulnerabilità di tipo RFI. Di seguitosi proponiamo le principali tipologie:

  • Inclusione di file remoti dannosi: Tali file solitamente contengono del codice malevolo eseguibile dall’applicativo. Se eseguiti dal server stesso portano ad una compromissione dell’applicazione e del server in questione.
    • codice eseguibile dall’applicativo stesso al fine di far eseguire il codice all’applicativo.
    • script contenente shellcode (come bash o PowerShell) per ottenere l’esecuzione di determinati comandi.
    • file javascript al fine di eseguire attacchi lato client per generare attacchi di tipo XSS.
    • file di configurazione con estensioni .ini, .xml o .conf che permettono di alterare il funzionamento dell’applicazione, ottenere informazioni sensibili e/o eseguire operazioni dannose.
    • file binari o eseguibili (ad esempio malware) al fine di compromettere il funzionamento dell’applicazione e la sicurezza del sistema.
  • Inclusione di file remoti per eseguire phishing: Un attaccante potrebbe includere pagine di phishing remote che mirano a raggiungere gli utenti che usufruiscono dell’applicazione al fine di ottenere informazioni personali e/o credenziali di accesso.
  • Inclusione di file remoti per il defacement: Tramite tale tipologia di file l’attaccante mira a sostituire parte del contenuto di un’applicazione con messaggi o immagini indesiderate in modo tale da danneggiare l’immagine e/o la reputazione dell’applicazione e del proprietario del sito web.
 Di seguito si propongono vari esempi di attacco su un applicativo vulnerabile. Inizialmente è possibile testare se un applicativo è vulnerabile a RFI includendo un file e verificandone la visibilità all’interno della pagina. Nel seguente esempio è stata inclusa una pagina html contenente il seguente codice:
<br/>
  <div>
    <h1> this it a test for <b>RFI inclusion</b></h1>
  </div>
<br/>
Com’è possibile vedere dall’immagine sottostante il file viene scaricato dal server remoto e reinderizzato nella pagina stessa. RFI test In questo caso l’applicativo vulnerabile è di tipo PHP quindi includendo script malevoli è possibile ottenere alcuni dati senza dover necessariamente sfruttare una vulnerabilità di tipo RCE. Di seguito si propone un semplice script che mira ad eseguire la funzionalità phpinfo() al fine di ottenere alcune informazioni utili prima di effettuare l’intrusione.
<?php
  ob_start();
  phpinfo();
  $info = ob_get_contents();
  ob_end_clean();
  echo $info;
?>
Il codice quindi viene eseguito e viene visualizzata la pagina generata da phpinfo() contenente varie informazioni tra cui tipologia di sistema operativo, versione del kernel, versione di PHP, etc. RFI phpinfo In seguito, eseguendo una reverse shell, scritta sempre in PHP, è possibile ottenere l’accesso al sistema stesso. RFI rce

Al fine di mitigare questa tipologia di vulnerabilità è importante seguire le best practice di sicurezza proposte:

  • Validazione e Filtraggio dei dati in input: i dati in ingresso forniti dagli utenti devono sempre essere validati e filtrati in modo appropriato utilizzando controlli rigorosi per accettare solo valori o pattern validi.
  • Limitare i percorsi di inclusione dei file: applicare restrizioni ai percorsi o alle directory da cui vengono inclusi i file, in modo tale da evitare l’inclusione di file da percorsi non autorizzati (come nel caso di LFI) o remoti.
  • Utilizzare percorsi assoluti: Tale pratica prevede l’utilizzo di un percorso assoluto al posto di percorsi relativi per l’inclusione dei file. In questo modo viene inibita la possibilità da parte di un attaccante di manipolare il percorso.
  • Controllo degli accessi e delle autorizzazioni: Assicurarsi che l’applicazione abbia le corrette restrizioni di accesso e autorizzazioni sui file che possono essere inclusi. È fondamentale limitare l’accesso solo ai file essenziali per l’applicazione e negare l’accesso a file sensibili o presenti su server remoti.