| Apellido, Nombre | Cédula de Identidad | Nro. de Práctica | Fecha |
|---|---|---|---|
| Gil, Jesús | 30175126 | 4 | 17-10-2025 |
| Guilarte, Andrés | 30246084 | 4 | 17-10-2025 |
Nombre de la Práctica: Análisis de Vulnerabilidades en Servicios Web
Grupo: 4
El profesor comenzó la práctica sobre como los servicios web son fundamentalmente software, y por ende son vulnerable por defecto. Cuando un servidor web proporciona servicio a otras aplicaciones, se expande la superficie de ataque, creando más puntos de entrada potenciales para un atacante al ahora estar dos software como objetivos potenciales para un atacante.
Es importante distinguir entre ancho de banda (capacidad del medio) y throughput (rendimiento efectivo real). Usar los términos correctamente es fundamental para evaluar correctamente el sistema.
Finalmente, cuando analizamos vulnerabilidades, se actualiza con vista al pasado, no se puede predecir el futuro. Las herramientas identifican vulnerabilidades conocidas y patrones documentados, por eso usamos la disponibilidad de información actualizada, no predicciones.
Requisitos:
Figura 1: Resultado del comando ping -c4 8.8.8.8 mostrando 4 paquetes enviados y recibidos; TTL observado 114.

Figura 2: Captura del error al intentar conectar por Escritorio Remoto a la máquina del profesor (IP 192.168.4.36/24). La imagen muestra el mensaje de fallo de conexión indicando que no se pudo acceder.
ZAP_2_16_1_unix.sh o similar) a la VM de Kali, este archivo es el correspondiente a OWAS ZAP, la herramienta que será utilizada en esta práctica para hacer los análisis de las vulnerabilidades de los servicios web.
Figura 3: Captura del instalador de OWASP ZAP (ZAP_2_16_1_unix.sh) siendo transferido a la VM de Kali Linux.
chmod o+x ZAP_2_12_0_unix.sh./ ZAP_2_12_0_unix.sh
Figura 4: Ejecución de los comandos chmod o+x ZAP_2_12_0_unix.sh y ./ZAP_2_12_0_unix.sh para instalar OWASP ZAP.
El segundo comando es la ejecución del archivo, en este caso el instalador de OWASP ZAP y cómo se ejecutó el change mode no es necesario usar sudo para ejectuar el archivo al ya tener los demás usuarios del sistema el permiso para ejecutarlo. El ./ se usa para indicar que se va a ejecutar un archivo que está dentro del directorio actual.
Figura 5: Configuración del proxy HTTP en Firefox establecido en 127.0.0.1 puerto 8080 para interceptar tráfico con OWASP ZAP.
Figura 6: Diálogo de inicio de OWASP ZAP con la opción "No, I do not want to persist this session at this moment in time" seleccionada para almacenamiento en RAM.
Figura 7: Exportación del certificado raíz (Root CA Certificate) de OWASP ZAP desde Tools → Options → Server Certificates → Save.
Nota: Debido a un error en la comprensión inicial del informe, no se tienen capturas de pantalla de esta acción. En lugar de escanear la máquina virtual con PentesterLab instalado, se escaneó erróneamente la página web de PentesterLab. Al volver a realizar el análisis correctamente, por limitaciones de tiempo se omitió la captura de este paso específico del modo seguro (Safe Mode) con navegación pasiva.
Figura 8: Configuración del Automated Scan en OWASP ZAP con la dirección IP de la VM de PentesterLab antes de iniciar el ataque.
Figura 9: Reporte HTML parcial generado por OWASP ZAP con las vulnerabilidades detectadas hasta el momento de detención.
Se investigó en Internet y/o se usó la documentación de OWASP ZAP para obtener el título, la descripción y la sugerencia de solución (explicada con palabras propias) de tres alertas con riesgo alto o medio.
Figura 10: Alerta de vulnerabilidad Path Traversal seleccionada de manera aleatoria del reporte de OWASP ZAP.
| Título de la Alerta | Descripción (en español) | Sugerencia de Solución |
|---|---|---|
| Path Traversal (CWE-22, WASC-33) | Esta alerta de riesgo Alto con confianza Media indica que la aplicación web es vulnerable a ataques de Path Traversal (también conocido como Directory Traversal). La vulnerabilidad fue detectada en el parámetro file de la URL http://192.168.100.6/dirtrav/example1.php. Un atacante puede manipular este parámetro usando secuencias como ../ (dot-dot-slash) para navegar fuera del directorio raíz del servidor web y acceder a archivos sensibles del sistema. En este caso, el ataque exitoso logró leer el archivo /etc/passwd del sistema Linux, como lo demuestra la evidencia root:x:0:0 encontrada en la respuesta. Este tipo de vulnerabilidad permite a un atacante acceder a archivos, directorios y comandos que residen fuera del directorio de documentos web, pudiendo exponer información confidencial como credenciales, archivos de configuración o código fuente. |
Se debe implementar una validación estricta de entrada siguiendo el principio de “asumir que toda entrada es maliciosa”. Las soluciones recomendadas incluyen: (1) Usar una lista blanca (allowlist) de archivos permitidos en lugar de intentar filtrar caracteres peligrosos, (2) Validar y sanitizar toda entrada del usuario antes de usarla en operaciones de sistema de archivos, eliminando o rechazando secuencias como ../, ..\\, y caracteres especiales, (3) Implementar canonicalización de rutas para resolver todas las referencias relativas antes de validarlas, (4) Usar funciones seguras del lenguaje de programación que prevengan el acceso fuera de directorios específicos (como basename() en PHP o validación de rutas absolutas), (5) Configurar permisos restrictivos en el servidor web para limitar el acceso solo a directorios específicos, y (6) Aplicar el principio de mínimo privilegio en la cuenta de servicio web para minimizar el daño si la vulnerabilidad es explotada. |
Figura 11: Alerta de vulnerabilidad Remote File Inclusion seleccionada del reporte de OWASP ZAP.
| Título de la Alerta | Descripción (en español) | Sugerencia de Solución |
|---|---|---|
| Remote File Inclusion - RFI (CWE-98, WASC-5) | Esta alerta de riesgo Alto con confianza Media indica que la aplicación web es vulnerable a ataques de Remote File Inclusion (RFI), una técnica que explota mecanismos de “inclusión dinámica de archivos” en aplicaciones web. La vulnerabilidad fue detectada en el parámetro page de la URL http://192.168.100.6/fileincl/example1.php. Durante la prueba, OWASP ZAP logró inyectar exitosamente la URL http://www.google.com/ como valor del parámetro, y la aplicación procesó e incluyó el contenido remoto, como lo demuestra la evidencia <title>Google</title> encontrada en la respuesta. Aunque en este caso de prueba se utilizó el sitio de Google (un recurso legítimo y público) para demostrar la vulnerabilidad, se presume que esta técnica también afecta directamente a la máquina virtual objetivo, ya que un atacante podría explotar esta misma vulnerabilidad para incluir archivos maliciosos alojados en servidores externos bajo su control. La aplicación toma entrada del usuario (URL o valor de parámetro) y la pasa directamente a comandos de inclusión de archivos sin validación, permitiendo que código arbitrario sea ejecutado en el servidor. Esto puede llevar a compromiso total del sistema, robo de datos, defacement del sitio, o uso del servidor como plataforma para otros ataques. |
Se deben implementar múltiples capas de defensa siguiendo el principio de Arquitectura y Diseño Seguro: (1) Crear un mapeo de IDs fijos en lugar de usar rutas de archivos directamente - cuando el conjunto de objetos aceptables (archivos, URLs) es limitado o conocido, usar valores de entrada fijos como IDs numéricos que se mapean a rutas específicas en el servidor, (2) Implementar una lista blanca estricta de archivos o recursos permitidos que puedan ser incluidos, rechazando cualquier entrada que no esté explícitamente autorizada, (3) Deshabilitar funciones peligrosas del lenguaje de programación como allow_url_include en PHP, que permite la inclusión de archivos remotos, (4) Validar y sanitizar exhaustivamente toda entrada de usuario, rechazando URLs, caracteres especiales, y secuencias peligrosas antes de usarlas en operaciones de inclusión de archivos, (5) Usar rutas absolutas y verificar que los archivos a incluir residan dentro de directorios específicos autorizados, y (6) Implementar principio de mínimo privilegio limitando los permisos del servidor web para minimizar el impacto en caso de explotación exitosa. |
Figura 12: Alerta de vulnerabilidad Content Security Policy (CSP) Header Not Set seleccionada del reporte de OWASP ZAP.
| Título de la Alerta | Descripción (en español) | Sugerencia de Solución |
|---|---|---|
| Content Security Policy (CSP) Header Not Set (CWE-693, WASC-15) | Esta alerta de riesgo Medio con confianza Alta indica que el servidor web no está configurando el encabezado de seguridad Content-Security-Policy (CSP) en sus respuestas HTTP. La vulnerabilidad fue detectada mediante escaneo pasivo en la URL https://pentesterlab.com/. El Content Security Policy es una capa adicional de seguridad que ayuda a detectar y mitigar ciertos tipos de ataques, incluyendo Cross-Site Scripting (XSS) y ataques de inyección de datos. Estos ataques se utilizan para todo tipo de actividades maliciosas, desde robo de datos hasta desfiguración de sitios web (defacement), distribución de malware, y secuestro de sesiones. Sin una política CSP adecuada, el navegador no tiene restricciones sobre qué recursos (scripts, estilos, imágenes, etc.) puede cargar y ejecutar la página web, lo que permite a un atacante inyectar y ejecutar código malicioso si encuentra una vulnerabilidad XSS. La ausencia de este encabezado no constituye una vulnerabilidad directa por sí misma, pero elimina una importante capa de defensa en profundidad que podría prevenir o mitigar la explotación exitosa de otras vulnerabilidades. La confianza Alta indica que este hallazgo es definitivo y no es un falso positivo. |
Se debe configurar el servidor web, servidor de aplicaciones, balanceador de carga, o cualquier componente de infraestructura relevante para establecer el encabezado Content-Security-Policy en todas las respuestas HTTP. Las recomendaciones específicas incluyen: (1) Implementar una política CSP restrictiva que especifique explícitamente las fuentes permitidas para cada tipo de recurso (scripts, estilos, imágenes, fuentes, frames, etc.), por ejemplo: Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:, (2) Usar directivas específicas como script-src, style-src, img-src, font-src, connect-src, frame-ancestors para controlar cada tipo de recurso de manera granular, (3) Evitar el uso de directivas inseguras como 'unsafe-inline' y 'unsafe-eval' en script-src cuando sea posible, ya que debilitan significativamente la protección contra XSS, (4) Implementar modo report-only inicialmente usando Content-Security-Policy-Report-Only para monitorear violaciones sin bloquear contenido, permitiendo ajustar la política antes de aplicarla en modo de cumplimiento, (5) Configurar reportes de violaciones usando la directiva report-uri o report-to para recibir notificaciones cuando se violen las políticas CSP, facilitando la detección de ataques o problemas de configuración, y (6) Probar exhaustivamente la política CSP en todos los navegadores y flujos de la aplicación para asegurar que no rompa funcionalidad legítima mientras proporciona la máxima protección posible. |
Figura 13: Alerta de vulnerabilidad Cross-Domain Misconfiguration (CORS) seleccionada del reporte de OWASP ZAP.
| Título de la Alerta | Descripción (en español) | Sugerencia de Solución |
|---|---|---|
| Cross-Domain Misconfiguration - CORS (CWE-264, WASC-14) | Esta alerta de riesgo Medio con confianza Media indica una mala configuración de Cross-Origin Resource Sharing (CORS) en el servidor web. La vulnerabilidad fue detectada mediante escaneo pasivo en la URL http://platform.twitter.com/widgets.js. La evidencia muestra que el servidor responde con el encabezado Access-Control-Allow-Origin: *, lo que significa que permite solicitudes de lectura entre dominios desde cualquier dominio de terceros arbitrario. Esta configuración permisiva hace posible la carga de datos del navegador web desde dominios no autorizados. El problema radica en que la mala configuración CORS permite a sitios web de terceros arbitrarios realizar solicitudes de lectura entre dominios utilizando APIs no autenticadas en este dominio. Las implementaciones de navegadores web normalmente no permiten que terceros arbitrarios lean respuestas de otros dominios, pero cuando CORS está mal configurado con el comodín *, esta protección se anula. Esto puede permitir que datos sensibles sean accesibles desde dominios maliciosos, especialmente si esos datos están disponibles sin autenticación adecuada. Un atacante podría crear un sitio web malicioso que, al ser visitado por un usuario, realice solicitudes al servidor vulnerable y lea información que debería estar restringida. |
Se deben implementar las siguientes medidas de seguridad: (1) Asegurar que los datos sensibles no estén disponibles de manera no autenticada - implementar autenticación y autorización robustas para todos los endpoints que manejen información sensible, (2) Configurar el encabezado Access-Control-Allow-Origin de manera más restrictiva - en lugar de usar el comodín *, especificar explícitamente los dominios de confianza que deben tener acceso, por ejemplo: Access-Control-Allow-Origin: https://trusted-domain.com, (3) Implementar lista blanca de dominios permitidos - si se necesita permitir múltiples dominios, validar el origen de la solicitud contra una lista blanca en el servidor y devolver solo el origen específico que realizó la solicitud si está en la lista, (4) Usar listas blancas basadas en direcciones IP cuando sea apropiado para restringir el acceso a recursos sensibles solo desde ubicaciones específicas de confianza, (5) Evitar el uso de credenciales con CORS permisivo - nunca configurar Access-Control-Allow-Credentials: true junto con Access-Control-Allow-Origin: *, ya que esta combinación es rechazada por los navegadores modernos por razones de seguridad, (6) Revisar y minimizar los datos expuestos - asegurar que solo la información necesaria esté disponible a través de endpoints CORS, aplicando el principio de mínimo privilegio, y (7) Implementar validación del encabezado Origin en el servidor para verificar que las solicitudes provengan de fuentes legítimas antes de incluir los encabezados CORS en la respuesta. |
Figura 14: Alerta de vulnerabilidad Information Disclosure - Debug Error Messages seleccionada del reporte de OWASP ZAP.
| Título de la Alerta | Descripción (en español) | Sugerencia de Solución |
|---|---|---|
| Information Disclosure - Debug Error Messages (CWE-1295, WASC-13) | Esta alerta de riesgo Bajo con confianza Media indica que la aplicación web está revelando información sensible a través de mensajes de error de depuración. La vulnerabilidad fue detectada mediante escaneo pasivo. La evidencia muestra mensajes como Internal Server Error que son comunes en plataformas como ASP.NET y servidores web como IIS y Apache. Aunque esta vulnerabilidad tiene un nivel de riesgo bajo, se asume como una vulnerabilidad válida porque la divulgación de información técnica puede ayudar a un atacante en sus esfuerzos de reconocimiento. Los mensajes de error de depuración pueden revelar detalles sobre la estructura interna de la aplicación, rutas de archivos del servidor, versiones de software, configuraciones del sistema, nombres de bases de datos, y otros datos técnicos que no deberían ser expuestos a usuarios finales. Si bien por sí solos estos mensajes no permiten un ataque directo, proporcionan información valiosa que un atacante puede usar para identificar vectores de ataque adicionales, descubrir tecnologías específicas utilizadas (y sus vulnerabilidades conocidas), y mapear la arquitectura de la aplicación. Es posible configurar la lista de mensajes de depuración comunes que OWASP ZAP debe buscar, lo que permite personalizar la detección según el entorno específico. |
La solución principal es deshabilitar los mensajes de depuración antes de desplegar la aplicación a producción. Las medidas específicas incluyen: (1) Configurar manejo de errores personalizado - implementar páginas de error genéricas y amigables para el usuario que no revelen detalles técnicos internos, mostrando solo información necesaria para el usuario (ej: “Ha ocurrido un error, por favor intente más tarde”), (2) Separar ambientes de desarrollo y producción - asegurar que las configuraciones de depuración estén habilitadas solo en ambientes de desarrollo y testing, nunca en producción, (3) Registrar errores detallados en logs del servidor - en lugar de mostrar errores al usuario, registrarlos en archivos de log del servidor que solo sean accesibles por el equipo de desarrollo y operaciones, (4) Configurar niveles de logging apropiados - usar niveles INFO o WARNING en producción, reservando DEBUG y TRACE solo para ambientes de desarrollo, (5) Revisar configuraciones de frameworks - verificar archivos de configuración como web.config (ASP.NET), php.ini (PHP), o configuraciones de Apache/Nginx para asegurar que display_errors esté en Off y customErrors mode esté en On o RemoteOnly, (6) Implementar monitoreo proactivo - configurar sistemas de monitoreo y alertas para detectar errores en producción sin necesidad de exponerlos a usuarios, y (7) Realizar revisiones de código y pruebas de seguridad - incluir verificaciones automatizadas en el pipeline de CI/CD para detectar configuraciones de depuración antes del despliegue a producción. |
file, demostrando cómo un parámetro mal validado puede exponer archivos sensibles del sistema como /etc/passwd.page, lo cual podría ser explotado para ejecutar código malicioso en el servidor desde fuentes externas controladas por un atacante.Access-Control-Allow-Origin: *, permitiendo que cualquier dominio de terceros realice solicitudes de lectura entre dominios y potencialmente acceda a datos sensibles.Internal Server Error, que aunque no es crítica, ayuda a atacantes en sus esfuerzos de reconocimiento y mapeo de la arquitectura del sistema.