Seguridad

¿Tu web está en riesgo? Descubre por qué las librerías obsoletas son una bomba de tiempo

 Vulnerable and Outdated Components

Introducción

Las aplicaciones web modernas siguen arquitecturas de múltiples componentes software como bases de datos, APIs (Application Programming Interface), bibliotecas, frameworks, sistemas operativos, etc. La gestión e inventariado de los componentes software supone una tarea básica y necesaria para las organizaciones, dada su importancia para garantizar la seguridad, mantener la compatibilidad, optimizar el rendimiento, reducir riesgos operativos, y asegurar el cumplimiento de normativas y licencias vigentes como ISO o GDPR. 

Como consecuencia de la falta de mantenimiento de los componentes software, existen riesgos como la vulnerabilidad de Componentes Vulnerables y Desactualizados siendo una de las principales amenazas de seguridad identificadas en el OWASP Top Ten de 2021, clasificado en la sexta posición. 

Componentes vulnerables vs Componentes desactualizados

Los Componentes vulnerables son aquellos que cuentan con vulnerabilidades de seguridad que los atacantes pueden aprovechar para acceder a información sensible o ganar acceso al sistema. 

Por otro lado, los Componentes desactualizados se refiere al uso de componentes de software que ya no reciben actualizaciones de seguridad, y que, por lo tanto, carecen de parches de seguridad que solucionen las vulnerabilidades existentes.

Impacto

Algunas de las vulnerabilidades que afectan a los componentes vulnerables o desactualizados y que pueden ser susceptibles de ser explotadas por usuarios malintencionados son las siguientes:

  • Inyección de código: Debilidad de seguridad que permite a un atacante introducir código malicioso en una aplicación (generalmente a través de entradas de usuario no validadas o mal sanitizadas) el cual es ejecutado por la aplicación, permitiendo al atacante realizar acciones no autorizadas. 
  • Buffer overflow: Los desbordamientos de búfer suceden cuando se excede la capacidad de memoria asignada, permitiendo que los atacantes alteren y corrompan datos en memoria adyacente. Esto puede resultar en la ejecución de códigos maliciosos que provocan fallos del sistema, alteran controles de seguridad o permiten escalamiento de privilegios.
  • Cross Site Scripting: El Cross-Site Scripting es un riesgo crítico para las aplicaciones web modernas, ya que permite a los atacantes inyectar scripts maliciosos en sitios confiables. Un enfoque común es el XSS almacenado, donde los atacantes insertan scripts en componentes vulnerables de terceros, aprovechando la falta de actualizaciones y revisiones de seguridad, lo que puede generar amenazas persistentes que afectan a múltiples usuarios y sistemas. 

Identificar componentes vulnerables y desactualizados

El primer paso para la detección de componentes vulnerables es identificar los softwares existentes en la aplicación o en el sistema y sus versiones. Identificar dichas versiones puede involucrar diferentes enfoques, herramientas y técnicas, como las que se comentan a continuación:

  • Código fuente: El código es la columna vertebral de cualquier software y, si contiene errores de seguridad, puede ser explotado para comprometer la integridad, confidencialidad y disponibilidad de un sistema. Las vulnerabilidades en el código suelen originarse por malas prácticas de programación o por la integración de bibliotecas de terceros desactualizadas. 

El análisis estático de código (SAST) es una técnica que permite revisar el código fuente de una aplicación sin ejecutarlo, con el objetivo de identificar patrones que representen vulnerabilidades de seguridad. Este análisis se lleva a cabo mediante herramientas automatizadas que detectan malas prácticas, violaciones de estándares de programación segura y el uso de funciones críticas. 

  • Exposición de versiones en el frontend: Es frecuente encontrar en aplicativos web versiones de los componentes empleados en la interfaz pública.

  • Cabeceras HTTP: Algunas aplicaciones web y servidores exponen las versiones del software en las cabeceras HTTP de las respuestas. Estas cabeceras pueden incluir detalles como el servidor web utilizado (Apache, Nginx, IIS), versiones de PHP, Python, ASP.NET, o incluso información sobre frameworks como por ejemplo Django o Ruby on Rails.
A continuación, se muestran algunos ejemplos de cabeceras útiles:
  • Server: Expone el tipo y versión del servidor web.
    • Ejemplo: Server: Apache/2.4.49 (Ubuntu)
  • X-Powered-By: Indica el lenguaje de programación o framework utilizado.
    • Ejemplo: X-Powered-By: PHP/7.4.3 o X-Powered-By: ASP.NET
  • Via: Puede revelar detalles sobre proxies o gateways utilizados.
    • Ejemplo: Via: 1.1 vegur
  • X-AspNet-Version: Específica de aplicaciones ASP.NET.
    • Ejemplo: X-AspNet-Version: 4.0.30319
  • X-Drupal-Cache: En sistemas basados en Drupal.
    • Ejemplo: X-Drupal-Cache: HIT
  • Provocar errores: La práctica de someter un sistema, aplicación o software a situaciones que desencadenen comportamientos inesperados, fallos o respuestas inusuales puede llegar a revelar algunas de las tecnologías empleadas.
Esta técnica es conocida en el ámbito de la ciberseguridad como fuzzing o fuzz testing, y tiene como objetivo detectar vulnerabilidades o fallos en la robustez del software mediante la introducción de entradas aleatorias, malformadas o anómalas para provocar errores y analizar las respuestas.

  • Banner Grabbing: El banner grabbing es una técnica muy utilizada para obtener información de versiones de servicios que se están ejecutando en un servidor. Muchos servicios, como servidores web, FTP, SSH, o SMTP, devuelven banners al conectarse que incluyen el nombre del software, su versión, y a veces información adicional.
  • Herramientas de escaneo de vulnerabilidades y enumeración de servicios: Las herramientas de escaneo de vulnerabilidades suelen identificar versiones de componentes basándose en las respuestas que los servidores o servicios dan ante ciertas peticiones o características.

  • Interacción con APIs: Muchas aplicaciones web exponen APIs que proporcionan detalles sobre el software, incluyendo versiones. Algunas APIs devuelven esta información en cabeceras HTTP o respuestas JSON.

Algunas herramientas interesantes

Existen multitud de herramientas útiles que facilitan la identificación de versiones en un aplicativo web. Algunas de ellas son las siguientes:

Nmap

Una de las herramientas más populares para escaneo de redes y servicios. Sus scripts NSE (Nmap Scripting Engine) permiten detectar versiones de servidores y aplicaciones específicas. 
Para poder hacer uso de estos scripts, se emplea la opción –script . Algunos scripts interesantes para identificar versiones software son http-enum y http-server-header.

Nessus / OpenVAS

Estas herramientas realizan escaneos de vulnerabilidades avanzados, identificando servicios, versiones y vulnerabilidades conocidas (CVE). 
La mayor limitación que tiene la herramienta Nessus, aunque más completa y fácil de usar que OpenVAS es su uso comercial, con altos costes de licencia. Por ello, como alternativa de código abierto se encuentra OpenVAS.

Nikto

Nikto es una herramienta de código abierto diseñada para realizar escaneos de seguridad en servidores web. Es ampliamente utilizada en auditorías y pruebas de penetración para identificar vulnerabilidades comunes, configuraciones incorrectas, versiones desactualizadas de software, y otros problemas de seguridad en servidores web.
Su base de datos se actualiza regularmente para incluir nuevas vulnerabilidades y configuraciones inseguras.

WhatWeb

WhatWeb es una herramienta incluida en Kali Linux de reconocimiento diseñada para identificar tecnologías utilizadas en sitios web. WhatWeb examina sitios web y extrae detalles sobre servidores web, frameworks, sistemas de gestión de contenido (CMS), lenguajes de programación, bibliotecas, configuraciones y más.

Wappalyzer

Una herramienta que resulta muy cómoda a la hora de tener una visión rápida de qué tecnologías se encuentra desplegadas en un aplicativo web es Wappalyzer. Se puede instalar como extensión de diversos navegadores como Chrome, Firefox o Edge, y puede mostrar versiones de las tecnologías implicadas.

Retire.js

Retire.js es una herramienta especializada en la identificación de vulnerabilidades en bibliotecas JavaScript y/o módulos Node.JS obsoletos o vulnerables.
Además, esta herramienta se ha integrado directamente con BurpSuite y ZAP (Zed Attack Proxy) mediante un plugin cuyo enlace os adjunto a continuación: https://github.com/h3xstream/burp-retire-js

Una vez identificada la versión…
Una vez se identifica la versión por alguno de los métodos citados anteriormente, es necesario comparar los datos extraídos con bases de datos como CVE Details, Exploit DB O https://www.metasploit.com/ para buscar vulnerabilidades asociadas a las versiones específicas.


Mitigación/Remediación

  • Mantener un inventario de tecnologías empleadas (bibliotecas, frameworks, componentes de software utilizados en la aplicación o sistema incluyendo detalles como las versiones específicas de cada componente y su origen, lo que permite identificar rápidamente aquellos que están desactualizados o son vulnerables. 
  • Mantenerse actualizado: Es crucial estar al tanto de las actualizaciones de seguridad y las vulnerabilidades recién descubiertas que afectan a los componentes de software utilizados. Esto implica suscribirse a boletines de seguridad, seguir bases de datos de vulnerabilidades conocidas (como CVE), utilizar herramientas automáticas para detectar versiones desactualizadas y vulnerables, y monitorizar activamente las alertas de los proveedores de las tecnologías empleadas. Los desarrolladores deben mantener buenas prácticas de seguridad en las aplicaciones desarrolladas para evitar problemas futuros.
  • Buenas prácticas de desarrollo. Es recomendable a la hora de desarrollar las aplicaciones web evitar el uso de bibliotecas, frameworks o herramientas que no reciban actualizaciones regulares o que no cuenten con una comunidad activa que pueda responder a vulnerabilidades y necesidades de mejora.
Alba Vara, Pentester en Zerolynx

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.