
PoC modificado para RCE no MariaDB v11.1 via UDF, retornando a saída do comando inline através de consultas SQL. Inclui comparação detalhada de código e instruções de compilação para Windows.
MariaDB v11.1 RCE via UDF — PoC modificado baseado em Ant1sec-ops/CVE-2024-27766.
| Afetado | MariaDB v11.1 |
| Corrigido na versão | 10.5.25 / 10.6.18 / 10.11.8 / 11.0.6 / 11.1.5 / 11.2.4 / 11.4.2+ |
| Tipo | RCE via Função Definida pelo Usuário (UDF) |
O MariaDB v11.1 permite que um atacante com privilégios de banco de dados suficientes (privilégio FILE + acesso de escrita ao diretório de plugins) registre uma UDF maliciosa e execute comandos arbitrários do sistema operacional por meio dela.
Nota: A MariaDB Foundation contesta este CVE, alegando que nenhuma fronteira de privilégios é ultrapassada. A exploração exige acesso de administrador ao banco de dados ou equivalente.
O PoC original usa um tipo de retorno longlong, então do_system() apenas retorna se o comando foi bem-sucedido — você não pode ver a saída diretamente do SQL.
Esta versão altera o tipo de retorno para char *, que canaliza o stdout de volta como resultado da consulta. Nenhum canal fora de banda é necessário; basta executar SELECT do_system('whoami') e a saída retorna inline.
| Original | Este PoC | |
|---|---|---|
| Tipo de retorno | longlong | char * |
| Execução | system() | _popen() + loop fgets() |
| Resultado SQL | código de saída | stdout do comando |
| Memória | nenhuma | alocada na heap, liberada em deinit |
Uma coisa que vale destacar: retornar char * de uma UDF exige que o MariaDB saiba o tamanho do buffer antecipadamente. do_system_init define initid->max_length = 65536, correspondendo ao buffer de saída alocado na função principal.
Como o tipo de retorno mudou, RETURNS STRING deve ser usado ao registrar a função — e não RETURNS INTEGER como no original.
CREATE FUNCTION do_system RETURNS STRING SONAME 'do_system.dll';
_popen / _pclose)FILE e acesso de escrita ao diretório de pluginsApenas para fins educacionais e de pesquisa. Não use contra sistemas que você não possui ou sem permissão explícita para testar.