Los codificadores conquistan la seguridad: Share & Learn Series - Carga de archivos sin restricciones

Publicado el 10 de enero de 2019
por Jaap Karan Singh
ESTUDIO DE CASO

Los codificadores conquistan la seguridad: Share & Learn Series - Carga de archivos sin restricciones

Publicado el 10 de enero de 2019
por Jaap Karan Singh
Ver recurso
Ver recurso

El problema de las subidas de archivos no restringidas no es un ataque en sí mismo, sino una situación o estado común que permite a los atacantes acceder fácilmente a las aplicaciones y a los recursos de la red. Se puede pensar en ello como si se caminara con ropa mojada en el frío. Aunque hacer eso no necesariamente le hará enfermar por sí mismo, disminuye su resistencia hasta el punto de que cualquier virus oportunista superará fácilmente las defensas de su cuerpo.

En el ámbito de la ciberseguridad, los atacantes se apresuran a explotar cualquier aplicación o programa al que se le haya permitido cargar archivos sin restricciones. Y los resultados pueden ser devastadores. Los atacantes astutos pueden utilizar su acceso sin restricciones para cargar archivos maliciosos, configurar scripts para robar credenciales o lanzar ataques más profundos en una red utilizando los propios permisos de una aplicación. Incluso un atacante relativamente poco sofisticado podría utilizar este tipo de acceso sin restricciones para realizar ataques de denegación de servicio, o para colapsar una aplicación.

Afortunadamente, hay bastantes maneras de vencer el problema de las subidas de archivos no restringidas que detendrán a los posibles atacantes en su camino. Para ello, hablaremos de tres aspectos clave de las subidas de archivos no restringidas:

  • Cómo funcionan
  • Por qué son tan peligrosos
  • Cómo puede poner defensas para detenerlos.

¿Cómo aprovechan los ataques la carga de archivos sin restricciones?

Hay muchas razones por las que los sitios querrían permitir al público subir archivos. Tal vez una empresa quiere contratar a gente y quiere permitirles subir sus currículos como parte del proceso de solicitud. Los bancos pueden animar a los clientes a rellenar papeles importantes en casa, como cuando solicitan un préstamo o una nueva cuenta. Los sitios de turismo o de redes sociales pueden invitar a los usuarios a subir sus fotografías para compartirlas con los demás.

Hay muchas razones válidas para permitir la subida de archivos. Y por defecto, la mayoría de las nuevas aplicaciones probablemente van a permitir cualquier tipo de subida de archivos, sin restricciones. El problema comienza cuando un atacante potencial se da cuenta de que no hay restricciones en esas subidas.

El hecho de no tener restricciones en las subidas somete a los sitios a tres tipos de ataques. Empezando por el menos sofisticado, un usuario malintencionado puede simplemente subir archivos enormes, como archivos comprimidos que contengan cientos de gigabytes de información. Además de ahogar el ancho de banda, esto puede sobrecargar el área de almacenamiento asignada a la aplicación.

El siguiente en la escala infame es un usuario que sube un archivo malicioso como un virus o incluso algo más siniestro como un ransomware. Esto es como esa vieja superstición de tener que invitar específicamente a un vampiro a tu casa. Si cuelgas un cartel que dice que cualquiera puede entrar libremente, es como tener una subida de archivos sin restricciones. Ya no controlas lo que entra por tu puerta, y probablemente deberías esperar que no todos los visitantes, o archivos, vayan a ser benignos. Algunos pueden ser monstruos.

Por último, un atacante habilidoso puede utilizar las subidas sin restricciones para introducirse en una red y realizar ataques más profundos. Como no hay restricciones en lo que alguien puede subir, un atacante puede enviar su propio shell web a través de ese proceso. A partir de ahí, pueden enviar comandos a su shell, y esos comandos se ejecutarán en el servidor con el mismo nivel de permiso que la aplicación.

¿Por qué es tan peligroso tener acceso ilimitado a los archivos?

Aunque el despliegue de una aplicación con acceso irrestricto a los archivos no es inmediatamente peligroso, es básicamente como abrir un agujero en sus defensas de ciberseguridad e invitar a alguien a atacar su organización. Tarde o temprano, alguien responderá.

En el nivel más básico, los atacantes ni siquiera necesitan mucha habilidad para causar estragos. El simple hecho de comprimir archivos extremadamente grandes y subirlos puede ser suficiente para denegar el servicio a usuarios válidos. Con el tiempo, puede incluso colapsar la aplicación o un sitio entero, dependiendo de cómo esté programada la aplicación y la red.

Tener un acceso ilimitado a los archivos también podría abrir un agujero a través de los cortafuegos de la red y otras protecciones. No importará si tienes un escáner mirando tu correo electrónico entrante o la actividad de navegación web de tus empleados si has creado un camino para que los atacantes suban el malware directamente a tu red principal. El malware podría bloquear la aplicación o incluso el servidor en el que se ejecuta, aunque ese es probablemente el mejor resultado posible. En el peor de los casos, un programa verdaderamente malicioso como el ransomware puede utilizar el servidor comprometido para extenderse a toda la red.

Los atacantes más hábiles probablemente no serán tan obvios al explotar una aplicación con acceso a archivos sin restricciones. En su lugar, pueden utilizar la vulnerabilidad para comprometer la aplicación, y utilizarla para penetrar más profundamente en la red, moviéndose lentamente y tratando de evitar la detección. Esto puede hacerse cargando un shell web u otro archivo de tipo .exe, y luego enviando comandos directamente a él una vez que aterrice. Cualquier cosa que el usuario ejecute a través de su shell será normalmente ejecutada por el servidor, usando los niveles de permiso que estén establecidos para la aplicación que lo aloja. Para el servidor, esos comandos provienen de la aplicación, y no es probable que sean revisados o examinados.

Todo esto hace que la vulnerabilidad de acceso irrestricto a los archivos sea una de las más peligrosas para tener en su red. Probablemente no es una cuestión de si causará un problema, sino de cuándo.

¿Cómo elimino la vulnerabilidad de acceso no restringido a archivos?

Entonces, ¿cómo se resuelve el problema del acceso irrestricto a los archivos? La forma más sencilla es añadir una o varias restricciones a los tipos de archivos que se pueden cargar. Estas restricciones se pueden comunicar al usuario si lo desea, por ejemplo, diciéndole que el sitio sólo aceptará archivos de Word o de texto, o en el caso de un sitio para compartir imágenes, sólo .jpgs o .gifs. En el backend, tendrás que crear una lista blanca de extensiones de archivo aceptables y denegar todo lo demás. También hay que restringir la longitud máxima de los nombres de los archivos. Si un archivo tiene caracteres especiales en el nombre, que podrían indicar un intento de activar un comando ejecutable, también debería rechazarse.

Además de los tipos de archivo y las reglas de denominación, también querrás restringir el tamaño máximo de cada archivo. El tamaño máximo debe ser algo razonable y apropiado para el tipo de archivo que se espera que la aplicación recoja. Eso podría significar un tope de 10 megabytes más o menos para los archivos de Word y algo más grande, tal vez alrededor de 50 megabytes, para los archivos gráficos. También es posible establecer reglas de tamaño mínimo de archivo, pero sólo si el rango de tamaño de los archivos esperados es conocido, lo que podría ser el caso si los usuarios están rellenando y subiendo un formulario específico.

Los atacantes todavía pueden encontrar una forma inteligente de colar un shell u otro programa potencialmente malicioso más allá de las restricciones de tipo y tamaño de los archivos. Para compensar, los archivos recolectados deben almacenarse siempre en un directorio privado sin privilegios de ejecución. Para mayor seguridad, los archivos pueden ser renombrados por el sistema con una serie de caracteres aleatorios. Esto evitaría que usuarios no autorizados de fuera de la red busquen la ubicación de su archivo cargado, lo que podría darles algún reconocimiento en su red. Sin embargo, si haces esto, probablemente tendrás que configurar y mantener una tabla que vincule los nombres aleatorios de los archivos con sus designaciones originales.

Por último, todo lo que llega a la red a través de una carga debe ser analizado en busca de malware y virus por cualquier programa defensivo que la organización utilice para esas tareas. Puede que esto no lo detecte todo, pero es una capa importante de seguridad que podría utilizarse para detectar hasta el 90 por ciento o más de los archivos maliciosos más comunes que intentan entrar a través de la carga de archivos.

Restricción del problema de la carga de archivos no restringida

Una vez que se han puesto varias capas de seguridad en el backend, el problema de la subida de archivos sin restricciones deja de ser un problema. Básicamente estás eliminando el problema al poner restricciones a tus subidas de archivos, por lo que ya no son irrestrictas. Sólo se permite la entrada de archivos buenos, mientras que todos los vampiros y el malware se quedan fuera.

Para más información, puedes echar un vistazo a la hoja de trucos de la OWASP Unrestricted File Upload Prevention, que resume algunos de los problemas más comunes cuando se permite este tipo de situación en una red. También puedes poner a prueba tus nuevos conocimientos defensivos con la muestra gratuita de la plataforma Secure Code Warrior , que entrena a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para obtener más información sobre cómo vencer esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .

¿Cree que está preparado para hacer frente a esta vulnerabilidad ahora mismo? Dirígete al campo de batalla y pon a prueba tus habilidades:

Ver recurso
Ver recurso

Autor

Jaap Karan Singh

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Los codificadores conquistan la seguridad: Share & Learn Series - Carga de archivos sin restricciones

Publicado el 10 de enero de 2019
Por Jaap Karan Singh

El problema de las subidas de archivos no restringidas no es un ataque en sí mismo, sino una situación o estado común que permite a los atacantes acceder fácilmente a las aplicaciones y a los recursos de la red. Se puede pensar en ello como si se caminara con ropa mojada en el frío. Aunque hacer eso no necesariamente le hará enfermar por sí mismo, disminuye su resistencia hasta el punto de que cualquier virus oportunista superará fácilmente las defensas de su cuerpo.

En el ámbito de la ciberseguridad, los atacantes se apresuran a explotar cualquier aplicación o programa al que se le haya permitido cargar archivos sin restricciones. Y los resultados pueden ser devastadores. Los atacantes astutos pueden utilizar su acceso sin restricciones para cargar archivos maliciosos, configurar scripts para robar credenciales o lanzar ataques más profundos en una red utilizando los propios permisos de una aplicación. Incluso un atacante relativamente poco sofisticado podría utilizar este tipo de acceso sin restricciones para realizar ataques de denegación de servicio, o para colapsar una aplicación.

Afortunadamente, hay bastantes maneras de vencer el problema de las subidas de archivos no restringidas que detendrán a los posibles atacantes en su camino. Para ello, hablaremos de tres aspectos clave de las subidas de archivos no restringidas:

  • Cómo funcionan
  • Por qué son tan peligrosos
  • Cómo puede poner defensas para detenerlos.

¿Cómo aprovechan los ataques la carga de archivos sin restricciones?

Hay muchas razones por las que los sitios querrían permitir al público subir archivos. Tal vez una empresa quiere contratar a gente y quiere permitirles subir sus currículos como parte del proceso de solicitud. Los bancos pueden animar a los clientes a rellenar papeles importantes en casa, como cuando solicitan un préstamo o una nueva cuenta. Los sitios de turismo o de redes sociales pueden invitar a los usuarios a subir sus fotografías para compartirlas con los demás.

Hay muchas razones válidas para permitir la subida de archivos. Y por defecto, la mayoría de las nuevas aplicaciones probablemente van a permitir cualquier tipo de subida de archivos, sin restricciones. El problema comienza cuando un atacante potencial se da cuenta de que no hay restricciones en esas subidas.

El hecho de no tener restricciones en las subidas somete a los sitios a tres tipos de ataques. Empezando por el menos sofisticado, un usuario malintencionado puede simplemente subir archivos enormes, como archivos comprimidos que contengan cientos de gigabytes de información. Además de ahogar el ancho de banda, esto puede sobrecargar el área de almacenamiento asignada a la aplicación.

El siguiente en la escala infame es un usuario que sube un archivo malicioso como un virus o incluso algo más siniestro como un ransomware. Esto es como esa vieja superstición de tener que invitar específicamente a un vampiro a tu casa. Si cuelgas un cartel que dice que cualquiera puede entrar libremente, es como tener una subida de archivos sin restricciones. Ya no controlas lo que entra por tu puerta, y probablemente deberías esperar que no todos los visitantes, o archivos, vayan a ser benignos. Algunos pueden ser monstruos.

Por último, un atacante habilidoso puede utilizar las subidas sin restricciones para introducirse en una red y realizar ataques más profundos. Como no hay restricciones en lo que alguien puede subir, un atacante puede enviar su propio shell web a través de ese proceso. A partir de ahí, pueden enviar comandos a su shell, y esos comandos se ejecutarán en el servidor con el mismo nivel de permiso que la aplicación.

¿Por qué es tan peligroso tener acceso ilimitado a los archivos?

Aunque el despliegue de una aplicación con acceso irrestricto a los archivos no es inmediatamente peligroso, es básicamente como abrir un agujero en sus defensas de ciberseguridad e invitar a alguien a atacar su organización. Tarde o temprano, alguien responderá.

En el nivel más básico, los atacantes ni siquiera necesitan mucha habilidad para causar estragos. El simple hecho de comprimir archivos extremadamente grandes y subirlos puede ser suficiente para denegar el servicio a usuarios válidos. Con el tiempo, puede incluso colapsar la aplicación o un sitio entero, dependiendo de cómo esté programada la aplicación y la red.

Tener un acceso ilimitado a los archivos también podría abrir un agujero a través de los cortafuegos de la red y otras protecciones. No importará si tienes un escáner mirando tu correo electrónico entrante o la actividad de navegación web de tus empleados si has creado un camino para que los atacantes suban el malware directamente a tu red principal. El malware podría bloquear la aplicación o incluso el servidor en el que se ejecuta, aunque ese es probablemente el mejor resultado posible. En el peor de los casos, un programa verdaderamente malicioso como el ransomware puede utilizar el servidor comprometido para extenderse a toda la red.

Los atacantes más hábiles probablemente no serán tan obvios al explotar una aplicación con acceso a archivos sin restricciones. En su lugar, pueden utilizar la vulnerabilidad para comprometer la aplicación, y utilizarla para penetrar más profundamente en la red, moviéndose lentamente y tratando de evitar la detección. Esto puede hacerse cargando un shell web u otro archivo de tipo .exe, y luego enviando comandos directamente a él una vez que aterrice. Cualquier cosa que el usuario ejecute a través de su shell será normalmente ejecutada por el servidor, usando los niveles de permiso que estén establecidos para la aplicación que lo aloja. Para el servidor, esos comandos provienen de la aplicación, y no es probable que sean revisados o examinados.

Todo esto hace que la vulnerabilidad de acceso irrestricto a los archivos sea una de las más peligrosas para tener en su red. Probablemente no es una cuestión de si causará un problema, sino de cuándo.

¿Cómo elimino la vulnerabilidad de acceso no restringido a archivos?

Entonces, ¿cómo se resuelve el problema del acceso irrestricto a los archivos? La forma más sencilla es añadir una o varias restricciones a los tipos de archivos que se pueden cargar. Estas restricciones se pueden comunicar al usuario si lo desea, por ejemplo, diciéndole que el sitio sólo aceptará archivos de Word o de texto, o en el caso de un sitio para compartir imágenes, sólo .jpgs o .gifs. En el backend, tendrás que crear una lista blanca de extensiones de archivo aceptables y denegar todo lo demás. También hay que restringir la longitud máxima de los nombres de los archivos. Si un archivo tiene caracteres especiales en el nombre, que podrían indicar un intento de activar un comando ejecutable, también debería rechazarse.

Además de los tipos de archivo y las reglas de denominación, también querrás restringir el tamaño máximo de cada archivo. El tamaño máximo debe ser algo razonable y apropiado para el tipo de archivo que se espera que la aplicación recoja. Eso podría significar un tope de 10 megabytes más o menos para los archivos de Word y algo más grande, tal vez alrededor de 50 megabytes, para los archivos gráficos. También es posible establecer reglas de tamaño mínimo de archivo, pero sólo si el rango de tamaño de los archivos esperados es conocido, lo que podría ser el caso si los usuarios están rellenando y subiendo un formulario específico.

Los atacantes todavía pueden encontrar una forma inteligente de colar un shell u otro programa potencialmente malicioso más allá de las restricciones de tipo y tamaño de los archivos. Para compensar, los archivos recolectados deben almacenarse siempre en un directorio privado sin privilegios de ejecución. Para mayor seguridad, los archivos pueden ser renombrados por el sistema con una serie de caracteres aleatorios. Esto evitaría que usuarios no autorizados de fuera de la red busquen la ubicación de su archivo cargado, lo que podría darles algún reconocimiento en su red. Sin embargo, si haces esto, probablemente tendrás que configurar y mantener una tabla que vincule los nombres aleatorios de los archivos con sus designaciones originales.

Por último, todo lo que llega a la red a través de una carga debe ser analizado en busca de malware y virus por cualquier programa defensivo que la organización utilice para esas tareas. Puede que esto no lo detecte todo, pero es una capa importante de seguridad que podría utilizarse para detectar hasta el 90 por ciento o más de los archivos maliciosos más comunes que intentan entrar a través de la carga de archivos.

Restricción del problema de la carga de archivos no restringida

Una vez que se han puesto varias capas de seguridad en el backend, el problema de la subida de archivos sin restricciones deja de ser un problema. Básicamente estás eliminando el problema al poner restricciones a tus subidas de archivos, por lo que ya no son irrestrictas. Sólo se permite la entrada de archivos buenos, mientras que todos los vampiros y el malware se quedan fuera.

Para más información, puedes echar un vistazo a la hoja de trucos de la OWASP Unrestricted File Upload Prevention, que resume algunos de los problemas más comunes cuando se permite este tipo de situación en una red. También puedes poner a prueba tus nuevos conocimientos defensivos con la muestra gratuita de la plataforma Secure Code Warrior , que entrena a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para obtener más información sobre cómo vencer esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .

¿Cree que está preparado para hacer frente a esta vulnerabilidad ahora mismo? Dirígete al campo de batalla y pon a prueba tus habilidades:

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.