Cómo prevenir vulnerabilidades de carga de archivos

Las unidades de carga de archivos se encuentran entre los eslabones más débiles de las aplicaciones web. Cometer cualquier error, incluso aquellos que pueda considerar pequeños, puede llevar a la posibilidad de que el control directo del servidor caiga en manos del hacker. Por esta razón, un desarrollador de software necesita conocer los errores más comunes y algunos de los métodos de ataque que pueden ocurrir.

Entonces, ¿qué es la manipulación del cliente? ¿Cómo puede combatirlo para mantener seguros sus sitios web y sus usuarios? Verificar Cómo se puede piratear su servidor: así es como.

Cómo evitar vulnerabilidades en la carga de archivos: protección

¿Qué es la manipulación del cliente?

La manipulación del lado del cliente es el concepto central de los ataques a aplicaciones web en su conjunto. En pocas palabras, significa que ya no puede confiar en ninguno de los datos que envía al usuario. Además, la manipulación del lado del cliente es una de las bases para desarrollar aplicaciones seguras. Si verifica su cargador de archivos y considera la manipulación del lado del cliente, los datos en los que no confía incluyen:

  1. El nombre del archivo subido.
  2. El tipo de contenido del archivo cargado.

Aquí es donde tiene la oportunidad de ser incluido en la lista blanca como desarrollador de software. Los datos de nombre de archivo cargados pueden contener cualquier cosa con manipulación del lado del cliente. Con los datos de tipo de contenido del archivo cargado, incluso si el atacante carga el archivo. exe, este archivo puede aparecer como una imagen /jpeg en el sistema.

Formato de archivo y lista blanca

Cómo evitar vulnerabilidades en la carga de archivos: protección

Al desarrollar módulos de carga de archivos, lo primero que debe hacer es agregar el formato de archivo a la lista blanca. Por ejemplo, el usuario quiere subir un archivo llamado “muo.jpeg”. Debe asegurarse de que el formato de archivo que el usuario desea cargar sea .jpeg. Para esto, el sistema debe verificar el archivo cargado y ver si es uno de los formatos de archivo permitidos. Para entender cómo hacer esto, examine el siguiente código PHP simple:

$file_parts = pathinfo($filename);
switch($file_parts[‘extension’])
{
case “jpg”:
break;

case “bat”: // Or exe, dll, so, etc.
break;

case “”:
case NULL: // No file extension
break;
}

Puede hacer esto con un bloque de código similar al anterior, o puede usar clases y funciones proporcionadas por su marco.

Advertencia: Tenga cuidado con la generación de datos de formato de archivo analizando el nombre del archivo de acuerdo con el carácter de punto (.), ya que un atacante puede omitir este paso de verificación con un nombre de archivo como "muo.jpeg.php".

¿Qué es la información de tipo de contenido?

La información del tipo de contenido es parte de la información enviada en la solicitud HTTP para cada archivo cargado. El navegador de Internet detecta esta información y la agrega a la solicitud enviada. Un atacante puede intentar cambiar la información mediante la manipulación del lado del cliente y eludiendo las comprobaciones del lado del servidor. En este punto, el desarrollador necesita un mecanismo de control para realizar comprobaciones de validación de información de tipo de contenido. Esto solo no será suficiente. Aún así, es importante que el desarrollador le preste atención.

Supongamos que codifica un mecanismo para comprobar que el archivo tiene el formato correcto y solo acepta archivos con el formato . Jpeg. Además de este mecanismo de precaución, puede verificar la información del tipo de contenido solo si y solo aceptar archivos que contengan información de imagen /jpeg, que es una capa adicional de protección contra ataques cibernéticos. Verificar ¿Qué es el control de acceso y por qué lo necesita?

Flashear archivos SWF y pasos de ataque

Los datos de formato de archivo y tipo de contenido no tienen sentido para los navegadores de Internet que admiten complementos como Adobe Flash Player. Aunque la compatibilidad con este reproductor ya no está disponible, estos archivos relacionados aún se pueden instalar en muchos sistemas, aunque Flash sigue siendo un riesgo para la seguridad. En un sistema que no ha tomado las precauciones pertinentes, es posible llamar a un archivo Flash con una etiqueta , independientemente de su formato. Esto conducirá a otro grave problema de seguridad.

Cómo evitar vulnerabilidades en la carga de archivos: protección

Para tomar medidas, el desarrollador necesita saber qué caminos pueden tomar los ciberdelincuentes. Así es como podría suceder:

  • El atacante carga un archivo SWF (formato de archivo Adobe Flash) llamado "image.jpeg" en el sitio web de destino. Durante el proceso de carga, se confirma en la verificación de la lista blanca que el archivo cargado por el atacante tiene una . Jpeg. La verificación del tipo de contenido se omite mediante la manipulación en el lado del cliente. Imagine que este archivo, subido por el atacante, va a:
“www(dot)target-site(dot)com/images/images.jpeg”
  • Digamos que el atacante tiene un sitio web llamado atacante (punto) com. El atacante llama al archivo image.jpeg cargado en el sitio web de destino en el sitio web del atacante, usando la etiqueta con tipo de conjunto aplicación / x-shockwave-flash.
  • Un usuario desprevenido inicia sesión en un sitio atacante (punto) com. Este sitio llama al archivo SWF en www(dot)targetsite(dot)com/images/image.jpeg y ejecuta los comandos proporcionados al SWF.
  • Con estos pasos, el atacante cibernético puede crear acciones de solicitud HTTP para la dirección del sitio web sitio de destino (punto) com desapercibido para los usuarios comunes. Con estas solicitudes, el atacante utilizará la sesión del usuario desprevenido y eludirá la verificación CSRF.

Para entender este escenario de ataque más claramente, considere el siguiente código en Contenido HTML Enviado al usuario por atacante (punto) com:

style=”height:1px;width:1px;” data=”www.target-site.com/images/image.jpeg" type=”application/x-shockwave-flash” allowscriptaccess=”always” flashvars=”c=read&u=somethings”

Una de las mejores soluciones es acceder a los archivos cargados con el archivo cargado a través de un subdominio diferente. En el escenario anterior, puede acceder a los archivos estáticos no desde el mismo dominio, sino desde un subdominio diferente de la siguiente manera: “http(dos puntos)//file.target-site(dot)com/images/image.jpeg.

La otra solución es agregar información. Disposición del contenido: archivo adjunto a la respuesta HTTP cuando recibe una solicitud para acceder a los archivos que desea cargar. Verificar Ventajas y desventajas de usar el almacenamiento en la nube para el trabajo remoto.

Tome precauciones contra las vulnerabilidades de carga de archivos

Cualquier carga de archivos que los usuarios puedan realizar en un sitio web es peligrosa, por lo que este es uno de los problemas a los que los desarrolladores deben prestar más atención. Si un atacante descubre tal vulnerabilidad, puede abrir una capa dentro del sitio web y explotar fácilmente la información en el servidor. Es muy importante controlar todos los archivos cargados por los usuarios, aplicar métodos de lista blanca y ocultar la ubicación del directorio en el que se cargan los archivos si es posible.

Y, por supuesto, hay muchos otros pasos adicionales que debe tomar para proteger su sitio web, incluso si toma todas las precauciones recomendadas para cargar archivos. El uso de encabezados de seguridad HTTP es uno de esos pasos que puede tomar. Puedes ver ahora ¿Qué es la seguridad de los contenedores y por qué la necesita?

Ir al botón superior