VULNERABILIDADES DE APLICACIONES WEB: DESCARGA ARBITRARIA DE ARCHIVOS

22.01.2018 07:59
 
Como la Descarga Arbitraria de Archivos permite a los piratas informáticos hacerse del código fuente de, por ejemplo, archivos.php, algunos consideran esta vulnerabilidad como un caso de Inclusión Local de Archivos mientras que otros la clasifican como un error de programación independiente de la misma.
 
Ilustremos con un ejemplo:
 
<?php
 
$archivo = $_GET['archivo'];
 
if (file_exists($archivo)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename
 
($archivo).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($archivo));
    readfile($archivo);
    exit;
}
?>
 
Como el usuario puede elegir descargar cualquier archivo, el pirata informático puede hacerse de código fuente que le será muy útil para escalar su ataque.
 
https://127.0.0.1/directorio/descargas.php?archivo=principal.php
 
Damos un ejemplo MUY SIMPLE de cómo resolver la vulnerabilidad. Sugerimos al lector tomarlo como un mero bosquejo:
 
<?php
 
$archivo = $_GET['archivo'];
 
if (($archivo == 'uno.php') || ($archivo == 'dos.php')){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename
 
($archivo).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($archivo));
    readfile($archivo);
    exit;
}
?>
 
Como se puede apreciar, hemos recurrido a una lista blanca.