¿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.
- 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.
- 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
Nmap
Nessus / OpenVAS
Nikto
WhatWeb
Wappalyzer
Retire.js
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.
Powered by WPeMatico