Skip to main content

Una vulnerabilidad de denegación de servicio descubierta en el paquete JavaScript Axios: afecta a todas las versiones de este popular cliente HTTP

Escrito por
Twitter header

6 de mayo de 2019

0 minutos de lectura

axios es un popular cliente HTTP moderno de JavaScript basado en promesas, que se usa habitualmente en proyectos para navegadores y servidores Node.js y recibe más de 3 millones de descargas semanales desde npm.

Snyk registró una vulnerabilidad de seguridad de denegación de servicio de gravedad media (5.3 CVSS) que afecta a axios. El desarrollador Jeremy Apthorp ya la había mencionado y compartido en 2017 en la cola de issues de GitHub del proyecto.

Las versiones afectadas de axios son vulnerables a la denegación de servicio (DoS), ya que el contenido de las solicitudes se sigue procesando incluso después de superar maxContentLength, lo que aumenta el uso de I/O y CPU.

Acerca de la vulnerabilidad

Anthorp compartió un fragmento de código en el issue de GitHub para mostrar un caso de uso de la API de axios que limita el tamaño de la respuesta HTTP recibida:

require('axios').get(
  'https://upload.wikimedia.org/wikipedia/commons/f/fe/A_Different_Slant_on_Carina.jpg',
  { maxContentLength: 2000 }
)
  .then(d => console.log('done'))
  .catch(e => console.log(e.toString()))

Sin embargo, independientemente del límite de longitud del contenido, la conexión HTTP permanece abierta hasta que se transfieren todos los datos del archivo. Por lo tanto, cualquier persona que controle el dominio remoto o espíe una conexión no segura puede proporcionar un archivo de gran tamaño e impedir que la solicitud se complete durante mucho tiempo.

Al momento de escribir este artículo, no se había publicado una solución oficial para esta vulnerabilidad. Sin embargo, la comunidad abrió un pull request para corregir el problema en el repositorio de GitHub del proyecto, que está a la espera de que se integre y se publique.

Los usuarios de Snyk están protegidos al aplicar un parche de seguridad para las versiones >= 0.17.0 de axios, que mitiga la vulnerabilidad de denegación de servicio.

Conecta tu repositorio y aplica el parche.

ACTUALIZACIÓN 31/05/2019: Se publicó una corrección, disponible en las versiones >= 0.19.0 de axios


Snyk identificó la vulnerabilidad en más de 215,000 proyectos analizados y alertó de inmediato a los usuarios correspondientes. A los usuarios que utilizan nuestra solución de monitoreo de seguridad en tiempo de ejecución no solo se les informó sobre la vulnerabilidad, sino también sobre la urgencia de corregirla, ya que en la mayoría de los casos se puede acceder a ella desde el flujo de ejecución de la aplicación y, por lo tanto, es muy probable que pueda explotarse.

En el caso de axios, la integración del monitoreo de seguridad en tiempo de ejecución con su aplicación ayudó a aumentar su capacidad para identificar problemas de seguridad en implementaciones de producción en vivo.

¿Me afecta y qué debo hacer?

Si solicitas recursos de fuentes no confiables o por medios no seguros, podrías ser vulnerable a la denegación de servicio, ya que usuarios maliciosos pueden controlar el recurso remoto.

Si usas axios en un servidor Node.js, esto puede ser desastroso debido a la naturaleza de un solo hilo del entorno de ejecución. Un aumento en el uso de recursos, como I/O y CPU, afecta negativamente a todos los usuarios conectados a ese servidor. En los navegadores, la denegación de servicio afecta a los usuarios finales con distintos niveles de gravedad, según cómo se use axios para obtener recursos en la aplicación.

¿Qué debo hacer?

Una nota sobre la salud de los proyectos de código abierto

Mantener un proyecto de código abierto puede volverse cada vez más difícil a medida que aumenta su popularidad. Crecen los issues y se necesita dedicarles cada vez más atención; también aumenta el trabajo de crear y mantener la documentación actualizada, además de corregir errores y publicar versiones estables. Estas son solo algunas de las tareas que se esperan de quienes mantienen los proyectos y que, muchas veces, realizan completamente de forma voluntaria.

Debes elegir tus dependencias de código abierto con la debida diligencia para reducir al mínimo las interrupciones en tu proyecto. A continuación, presentamos varios aspectos sobre el estado de las dependencias del proyecto axios que podemos conocer gracias a la información de Snyk:

  • La primera versión de axios, la 0.1.0, se publicó hace 5 años, el 29 de agosto de 2014.

  • La versión estable más reciente, la 0.18.0, se publicó hace 9 meses, el 19 de febrero de 2018.

  • Todas las versiones publicadas están afectadas por la vulnerabilidad de denegación de servicio mencionada.

El proyecto recibió contribuciones de hasta 159 desarrolladores, pero sus líderes, Nick Uraltsev y Matt Zabriskie, siguen a cargo de las publicaciones.

Empieza con los desafíos de Capture the Flag

Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.