VULNERABILIDADES DE APLICACIONES WEB: MANEJO INCORRECTO DE ARCHIVOS ALTAMENTE COMPRIMIDOS

01.02.2018 09:55
 
El ejemplo que daremos no necesarimente se ajustará totalmente al concepto de "archivos altamente comprimidos", pero servirá para ilustrar el riesgo que se corre cuando se da la opción de que el usuario pueda descomprimir archivos ya sea de forma directa o, más probablemente, de manera indirecta. 
 
Para facilitar la comprensión de la vulnerabilidad la ejemplificaremos toscamente con un comando de Windows, el lector podrá idear ejemplos para otros sistemas operativos o desarrollarlos en el lenguaje de programación de la aplicación. Ya dijimos que debería evitarse incluir comandos del sistema operativo (cualquiera que éste sea) en scripts de la aplicación. Además el comando "COMPACT" no ofrece la posibilidad de proteger los archivos comprimidos con contraseña.
 
El archivo "descomprimir.php"  es como sigue:
 
<!DOCTYPE html>
<html>
<head>
  <title>MANEJO INCORRECTO DE ARCHIVOS ALTAMENTE COMPRIMIDOS</title>
</head>
 
<body>
    <form action="descomprimir.php" method="get">
    Ruta y nombre del archivo cuyo contenido desea descomprimir:
    <input type="text" name="archivo" value="">
    <input type="submit">
    </form>
        
<?php
echo shell_exec('COMPACT /U '.$_GET['archivo']);
?>
 
</body>
</html>
 
Como vemos, el comando descomprimirá el archivo especificado. Si el mismo fuera muy grande y estuviera altamente comprimido terminaría ocupando mucho lugar en el disco, dando lugar a un consumo desmedido de recursos. Se puede ver que en "descomprimir.php" no hay restricciones respecto a qué archivos pueden ser descomprimidos, con lo que el riesgo se acrecienta y en algunos casos se podría llegar a una denegación de servicio.
 
En el caso particular que nos ocupa hasta se puede escalar el ataque, pero como enseñamos a defender, no a atacar, sólo lo mencionamos para que el programador o el administrador sean cautelosos, sin dar detalles al respecto.
 
En el ejemplo que dimos dejamos adrede al menos una vulnerabilidad más para que el lector pueda descubrirla por sí mismo.