Vulnerabilidad de carga de archivos de aplicaciones web

En este artículo, vamos a aprender en detalle sobre un vector de ataque más que es muy importante aprender en este mundo de muchas aplicaciones web y móviles. 

Vulnerabilidad de carga de archivos:

En casi todas las aplicaciones web existe una funcionalidad para cargar archivos. Este archivo puede estar en forma de texto, video, imagen, etc. Sin embargo, muchas aplicaciones web no tienen un control de seguridad adecuado durante la carga de archivos y esto da como resultado una vulnerabilidad llamada Vulnerabilidad de carga de archivos. Esta simple vulnerabilidad conduce a secuencias de comandos del lado del servidor, ejecución de código arbitrario, secuencias de comandos entre sitios y ataques CSRF.

Aunque algunas aplicaciones tienen comprobaciones adecuadas para cargar archivos, estas comprobaciones de seguridad tienen métodos de omisión para explotar esta vulnerabilidad, estas omisiones son las siguientes:

1. Omisión de extensión con distinción entre mayúsculas y minúsculas: los desarrolladores de aplicaciones web/móviles pueden agregar una lista negra de ciertas extensiones que son dañinas según el desarrollador. Pero a veces los desarrolladores olvidan si la verificación de seguridad de su extensión distingue entre mayúsculas y minúsculas o no, y cualquiera puede eludir la verificación de seguridad haciendo extensiones de archivos como una combinación de caracteres en minúsculas y mayúsculas para eludir las verificaciones de seguridad. Como desarrollador, es una buena práctica verificar la verificación de la extensión y siempre considerar la distinción entre mayúsculas y minúsculas de la extensión del archivo. Ejemplo: .PDF, .XmL, .Sh, php.

2. Omisión de la verificación del contenido de la imagen: como un problema de seguridad, los desarrolladores siempre verifican el contenido de la imagen para que coincida con uno de los tipos de archivos válidos. En PHP hay muchas funciones para validar el archivo, una de las funciones obtiene getimagesize(), esta función básicamente lee el archivo y devuelve el tamaño en caso de que el archivo no sea válido, devuelve el mensaje de error. Existen técnicas que pueden eludir esta protección. Considere el siguiente código que carga un archivo.

PHP

<?php
 
if(isset($_FILES['image'])) {
    $filename = $_FILES['image']['name'];
 
    $tmp = $_FILES['image']['tmp_name'];
 
    if(!getimagesize($_FILES['image']['tmp_name'])) {
        echo "Invalid Image File";
        exit(0);
    }
 
    move_uploaded_file($tmp,"images/".$filename);
 
    echo "SUCCESS";
    exit(0);
}
 
?>

Un atacante puede eludir dichas comprobaciones incrustando el código PHP dentro de la sección de comentarios del archivo JPG y luego cargando el archivo con una extensión .php, esto puede fácilmente eludir las comprobaciones mencionadas en el código anterior. También hay más técnicas disponibles para la omisión de verificación de archivos, ya que un desarrollador siempre se encarga de todas estas omisiones durante la implementación de la función de carga de archivos.

Pixel Flood usando un archivo de imagen malicioso:

Este es un ataque secundario bajo la vulnerabilidad de carga de archivos, este ataque explota principalmente el método de análisis de imágenes. Durante la realización de este ataque, el usuario malintencionado toma un archivo JPG o JPEG válido con la dimensión original, luego el atacante cambia la dimensión de la imagen a una escala muy grande, como 1000000 × 1000000, utilizando alguna herramienta automatizada al cargar un analizador de imágenes de archivo tan grande asignar muy gran cantidad de memoria y da como resultado un bloqueo del servidor o una situación de falta de memoria.

Campo zTXT malicioso de archivos PNG:

El formato de archivo PNG contiene una sección, llamada zTXT, que permite agregar datos comprimidos Zlib a un archivo PNG. La técnica aquí es que se crea una gran cantidad de datos repetidos, como una serie de ceros, que pesan más de 70 MB, y luego se comprimen DESINFLADOS a través de zlib, lo que da como resultado datos comprimidos de unos pocos KB. Luego se agrega a la sección zTXT de cualquier archivo PNG normal. Enviar requests repetidas de este tipo provoca un agotamiento de la memoria similar al que hemos visto en los dos ejemplos anteriores. Este problema también afectó a la gema Paperclip.

Archivo GIF malicioso – inundación de cuadros:

Esta técnica es similar a la técnica anterior, se utiliza un GIF malicioso para asignar una gran cantidad de memoria y, finalmente, utiliza una gran cantidad de memoria del servidor. Un archivo GIF contiene un conjunto de animaciones en forma de varios marcos de imagen. En lugar de voltear los píxeles, agregamos una gran cantidad de fotogramas GIF, digamos 45,000-90,000. Al analizar cada cuadro, se asigna memoria y, finalmente, obstruye el servidor.

Cómo evitar la vulnerabilidad de carga de archivos:

  • Siempre verifique la extensión de los archivos con su distinción entre mayúsculas y minúsculas.
  • Filtre el contenido del archivo antes de subirlo al servidor.
  • No le dé permiso al ejecutable para cargar el archivo.
  • Guarde siempre el archivo cargado en el directorio no público.

Publicación traducida automáticamente

Artículo escrito por siddhantgore y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *