En la era digital moderna, la tecnología forma parte de nuestra vida cotidiana. Sin embargo, existen graves amenazas inherentes al uso de aplicaciones web. Los riesgos del software pueden provenir de varias fuentes, pero una de las más frecuentes es el uso de componentes vulnerables de código abierto o de terceros.
Aunque las bibliotecas, paquetes y marcos públicos de código abierto mejoraron el proceso moderno de desarrollo de software, las lagunas de seguridad de los componentes han abierto la puerta a actividades potencialmente maliciosas. Cada día los piratas informáticos encuentran nuevos métodos devastadores de explotar las vulnerabilidades en beneficio propio.
Si los desarrolladores de software utilizan componentes no soportados y desactualizados, el software se vuelve susceptible a vulnerabilidades de seguridad. Una vez detectada una vulnerabilidad, es posible que los delincuentes ya la hayan descubierto y estén trabajando activamente para aprovechar el fallo. ¿Cómo pueden los hackers explotar esta vulnerabilidad, se preguntará? Esto es exactamente lo que vamos a discutir aquí, entre otras cosas. Así que, ¡empecemos!
¿Qué son los componentes vulnerables y desactualizados?
Si un componente de software ya no se mantiene, se considera un componentes vulnerables y desactualizados que puede introducir graves problemas de seguridad. Tanto si te dedicas al diseño de aplicaciones como al desarrollo web, puedes escribir código 100 % seguro y seguir expuesto a vulnerabilidades. La pregunta que surge es: ¿cómo es posible? La respuesta es sencilla: mediante el uso de componentes vulnerables.
Si los componentes que utiliza en el proceso de creación de software no están actualizados, no tienen parches o contienen fallos graves, su organización, sus clientes y los usuarios de sus aplicaciones se convertirán en objetivos fáciles para los piratas informáticos. Los actores de las amenazas pueden aprovechar estos fallos para hacerse con el control del servidor, acceder a los datos de la aplicación o comprometer el sistema por completo. A medida que las soluciones de software cambian y evolucionan, surge la necesidad urgente de que los equipos de desarrollo actualicen o sustituyan los componentes para evitar una posible brecha de seguridad.
En 2017, el uso de componentes con vulnerabilidades conocidas ocupó el noveno lugar en la lista OWASP de los diez riesgos de seguridad de aplicaciones web más críticos. Este problema ha pasado del noveno puesto al sexto en la lista actual de los 10 principales de OWASP.
Componentes Vulnerables y Desactualizados Ataques
Debido al creciente número de vulnerabilidades, existe un alto riesgo de utilizar inadvertidamente componentes no soportados o desactualizados. Aquí tienes algunos ejemplos prácticos de cómo el uso de componentes no compatibles puede influir en la seguridad de tu código. ¿Listo para descubrir? Vamos allá.
Dependencias obsoletas o vulnerables
La reutilización de componentes desconocidos o que no sean de confianza puede dar lugar a vulnerabilidades de seguridad. Por ejemplo, OWASP WebGoat emplea una versión vulnerable de la biblioteca de código abierto Xstream para convertir un documento XML en un objeto Java.
Preste atención a la versión de la biblioteca: 1.4.5. Sufre una vulnerabilidad de deserialización de alta gravedad, que permite la ejecución remota de código (RCE), uno de los ataques más graves posibles.
El siguiente código creará el archivo /tmp/here en el contenedor docker:
<sorted-set> <string>foo</string> <dynamic-proxy> <interface>java.lang.Comparable</interface> <handler class='java.beans.EventHandler'> <target class='java.lang.ProcessBuilder'> <command> <string>touch</string><string>/tmp/here</string> </command> </target> <action>start</action> </handler> </dynamic-proxy> </sorted-set>
Componentes maliciosos y typosquatting
Hay casos en los que los desarrolladores de software utilizan involuntariamente un componente malicioso similar al legítimo. Esta noción se denomina typosquatting, es decir, la práctica de escribir mal deliberadamente un nombre famoso con fines maliciosos. Se trata de una técnica muy extendida que los actores de amenazas utilizan para atraer a desarrolladores desprevenidos y hacerles descargar el componente malicioso.
Ejemplos de ello son “maratlib”, “maratlib1”, “matplatlib-plus”, “mllearnlib”, “mplatlib” y “learninglib” en PyPI (error ortográfico del software legítimo de trazado Python matplotlib). Los demás componentes maliciosos utilizaban el paquete “maratlib” como dependencia directa. En total, los paquetes maliciosos han alcanzado casi 5.000 descargas.
Este es el caso de “learninglib” mencionado anteriormente:
Los operadores maliciosos atacan continuamente repositorios de código en línea como PyPI (Python), NPM (JavaScript) y RubyGems, lo que supone una importante amenaza para la ciberseguridad, ya que los desarrolladores pueden introducir el código malicioso en sus proyectos sin saberlo. Con técnicas de typosquatting, los malos pueden crear paquetes atractivos que podrían engañar incluso a desarrolladores con conocimientos.
Ejemplos reales de vulnerabilidad
Los componentes vulnerables y desactualizados han tenido graves consecuencias para los usuarios de las aplicaciones y han dañado gravemente la reputación de las empresas. Esta vulnerabilidad es una puerta abierta a través de la cual los intrusos pueden penetrar fácilmente en el sistema y acceder a datos sensibles. He aquí los ejemplos de las brechas más devastadoras causadas por la OWASP A6:
Papeles de Panamá
Los Papeles de Panamá se consideran la mayor filtración de la historia por el volumen de datos filtrados. Los piratas informáticos robaron los archivos de los sistemas informáticos del bufete de abogados y proveedor de servicios corporativos panameño Mossack Fonseca. En 2016, era la cuarta mayor empresa del mundo proveedora de servicios financieros extraterritoriales.
La filtración de más de 11 millones de documentos confidenciales, incluidos 2,6 terabytes de información perteneciente a políticos de alto rango y personalidades públicas de más de 50 países, se debió a la explotación de versiones obsoletas y sin parches del CMS Drupal y WordPress.
Foros de Ubuntu
En 2016, unos delincuentes piratearon una base de datos del sitio web Ubuntu Forums. Los malhechores aprovecharon el fallo de inyección SQL del complemento Forum Runner para vBulletin, que aún no había sido parcheado. Aprovechando la vulnerabilidad, accedieron a la tabla de “usuarios” del foro, que contenía nombres de usuario, direcciones de correo electrónico y direcciones de protocolo de Internet de 2 millones de usuarios registrados. Afortunadamente, los operadores malintencionados no recibieron ninguna contraseña de usuario válida.
El equipo informático de Canonical ha instalado el cortafuegos de aplicaciones web (WAF) ModSecurity para prevenir ciberataques similares y ha actualizado las vulnerabilidades de los componentes de vBulletin al último nivel de parches.
Filtración de datos de Equifax
La filtración de datos de Equifax es uno de los ataques de hackers más famosos relacionados con el uso de componentes desactualizados y vulnerables. En 2017, los atacantes se aprovecharon de fallos de seguridad en los sistemas de Equifax. Pusieron en peligro la información personal de 148 millones de consumidores estadounidenses, como nombres y apellidos, números de teléfono, direcciones particulares, fechas de nacimiento, números de carné de conducir y números de la seguridad social.
Equifax no actualizó su sitio web público con la última versión de Apache Struts. La empresa no aplicó los parches de seguridad adecuados para eliminar una vulnerabilidad ampliamente conocida que permitió la filtración.
Detección de Componentes Vulnerables y Desactualizados
Para detectar el uso de componentes desactualizados que contengan vulnerabilidades potenciales, hay que tomar huellas digitales de las tecnologías: recopilar los nombres, versiones y otros datos específicos sobre las tecnologías que emplea el software. Las técnicas incluyen:
- Análisis de elementos HTML. Por regla general, el tráfico HTTP contiene Cookies, URLs de redireccionamiento, valores de encabezado, información de código de estado HTTP y mucho más. Sin embargo, sólo podrá evitar actividades no autorizadas o identificar recursos de red no utilizados si sabe cómo analizar esta información. Así, puede utilizar herramientas de extensión del navegador para ver las tecnologías utilizadas en los sitios web que visita basándose en los componentes y encabezados de las páginas HTML.
- Provocar errores. La práctica de forzar la aplicación y provocar errores verbales puede darle una pista sobre las tecnologías empleadas. Con la ayuda de una técnica automatizada de pruebas de software conocida como fuzzing, puedes encontrar errores de codificación y lagunas de seguridad introduciendo aleatoriamente datos no válidos, inesperados o aleatorios en una aplicación.
- Navegación forzada. Este método tiene como objetivo proporcionar acceso a recursos que no están vinculados con la aplicación pero que siguen estando presentes en el servidor. Permite buscar en el directorio del dominio archivos de configuración antiguos, portales de inicio de sesión típicos y archivos README que contengan información sobre el archivo de programas informáticos y, posiblemente, el nombre y la versión de los componentes.
- Código fuente. Si está autorizado a acceder al código fuente de la aplicación, compruebe la lista de dependencias para ver los paquetes empleados en el proyecto.
Prevención y mitigación
Es crucial que las organizaciones sean conscientes de los riesgos de utilizar componentes vulnerables y sigan las directrices pertinentes para eliminarlos. Cuando se trata de ciberseguridad, la concienciación es la mejor defensa. Exploremos algunos de los mecanismos preventivos más eficaces. Allá vamos.
Permitir el análisis de la composición del software
El Análisis de Composición de Software (SCA) es un proceso automatizado que analiza en profundidad los paquetes de código abierto incorporados al software. Con el SCA, los expertos en seguridad pueden identificar los riesgos y vulnerabilidades asociados al uso de componentes de terceros incorporados a un proyecto.
Las herramientas SCA proporcionan un inventario completo de los activos de software de un proyecto: todos los componentes, sus bibliotecas de apoyo, así como las dependencias directas e indirectas. SCA sensibiliza a los desarrolladores sobre los problemas de seguridad y los puntos débiles potenciales, lo que les permite crear planes de mitigación y tomar las medidas necesarias para evitar actividades ilícitas.
Instalar cortafuegos de aplicaciones web
Los cortafuegos de aplicaciones web (WAF) ayudan a proteger los sitios y aplicaciones web colocando un escudo protector entre el sistema e Internet que supervisa el tráfico HTTP.
Los WAF son una defensa de seguridad crítica contra varios vectores de ataque, como la inyección SQL, la inclusión remota de archivos (RFI) y el cross-site scripting (XSS). Con el WAF adecuado, los equipos de desarrollo pueden inspeccionar el tráfico entrante y bloquear las peticiones HTTP maliciosas antes de que lleguen a la aplicación web o al usuario.
Incluso si su aplicación, servicio o servidor es vulnerable, la solución WAF no dejará pasar las “peticiones maliciosas”.
Implantar un proceso de gestión de parches
Los profesionales de TI deben formalizar su enfoque de la gestión de parches para mantenerse al día con los nuevos parches de seguridad publicados y mejorar el rendimiento general del software. Una gestión de parches adecuada incluye identificar y priorizar las necesidades de parches, obtener, probar e instalar parches para actualizar o reparar el código existente.
Los programas de software, las aplicaciones y los sistemas integrados suelen tener problemas técnicos que requieren correcciones oportunas. Los parches pueden utilizarse para corregir vulnerabilidades, rectificar errores y tapar brechas de seguridad.
No actualizar los componentes a tiempo supone un riesgo importante para la seguridad y deja los sistemas operativos vulnerables a ataques malintencionados. Además, complica futuras actualizaciones. En función del número de proyectos construidos sobre la misma versión de componente vulnerable, el tiempo necesario para ejecutar pruebas y aplicar parches aumentaría exponencialmente.
Realizar pruebas de penetración
Las pruebas de penetración son un ataque planificado a un sistema de información, en el que los expertos en seguridad adoptan el mismo enfoque que un atacante para encontrar puntos débiles y vulnerabilidades críticas. Mediante la búsqueda proactiva de componentes vulnerables, puede abordar los problemas de ciberseguridad y solucionarlos antes de que se despliegue el sistema.
Las pruebas de penetración son una de las formas más eficaces de mantener seguro su sistema de información mediante la supervisión continua de las vulnerabilidades de seguridad web. Los pentesters profesionales de QAwerk utilizan herramientas avanzadas para examinar las aplicaciones objetivo en busca de puntos débiles y proteger a las organizaciones de intentos indeseados de acceder a sus sistemas informáticos.
¿Cómo combatir la vulnerabilidad #6 de OWASP?
Los equipos de desarrollo y los responsables de seguridad necesitan medidas defensivas para impedir la actividad maliciosa y garantizar que su organización no quede expuesta a amenazas de ciberseguridad. Las formas más prácticas de abordar la vulnerabilidad basada en componentes son las siguientes:
- Confíe en los estándares de codificación OWASP, SANS/CWE y CERT para mejorar el rendimiento del software y reducir la exposición a vulnerabilidades.
- Implemente herramientas automatizadas de alerta y aplicación de parches para garantizar un proceso seguro del ciclo de vida de desarrollo del software (SDLC) y ofrecer a sus equipos de desarrollo una instantánea de los posibles fallos.
- Mantenga un inventario exhaustivo de todos los componentes utilizados en la aplicación para garantizar que sólo haya elementos aprobados. Revise y actualice continuamente la lista.
- Prefiera paquetes firmados para minimizar el riesgo de incluir un componente modificado y dañino.
- Elimine los componentes, elementos, carpetas, funciones y dependencias redundantes desactualizados o no utilizados para reducir la posibilidad de que se produzcan fallos de seguridad.
- Analice periódicamente bibliotecas, componentes y sus dependencias para detectar puntos débiles.
- Incluya componentes sólo de fuentes oficiales a través de enlaces seguros y verifíquelos para garantizar el cumplimiento de las normas y reglamentos legales.
En conclusión
El mundo de hoy funciona con tecnología. Las aplicaciones, soluciones y plataformas de software afectan a casi todos los aspectos de nuestras vidas. Sin embargo, también conllevan riesgos de seguridad que crean una ventana de oportunidad para que los atacantes causen graves problemas a los usuarios de las aplicaciones y a las organizaciones, incluso a las grandes y conocidas.
Los incidentes ocurren, pero si se está bien informado y preparado, se puede hacer un trabajo mucho mejor para hacer frente a las vulnerabilidades de seguridad web. Por esta razón, los equipos de desarrollo deben centrarse en las vulnerabilidades más explotables y de mayor impacto y seguir prácticas seguras de desarrollo de software.
Conocer las vulnerabilidades lo antes posible ayuda a los profesionales de la seguridad a comprender el problema y elaborar la solución más segura. Los desarrolladores de software deben tomar medidas proactivas para mitigar los riesgos, evitar ataques maliciosos y prevenir brechas contra la organización.