Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
moodle-grades-gradeitems — Moodle 5.2.3 - Alto - Remoto - IDOR - core_grades_get_gradeitems lista itens de nota ocultos | Kitploit
Ferramentas/GitHubGitHub/abraxas/moodle-grades-gradeitems
Análise de VulnerabilidadesExploração de Aplicações WebTestes de Segurança de APIsColeta de InformaçõesSegurança WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubabraxas/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle 5.2.3 - Alto - Remoto - IDOR - core_grades_get_gradeitems lista itens de nota ocultos

27há 8 diasAinda não revisado
Ver Repositório

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

Abraxas Labs - moodle-grades-gradeitems

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  moodle-grades-gradeitems

Write-up: https://abraxaslabs.tech/research/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle LMS 5.2.3 - Moodle

Classe: IDOR Alcance: Remoto

core_grades_get_gradeitems é ajax mais o serviço oficial de mobile, sem chave capabilities em services.php. validate_context é a única barreira. Em seguida, grade_item::fetch_all despeja todos os itens do curso. O array_filter descarta GRADE_TYPE_NONE, itens de categoria e o item do curso. Oculto não está nesse filtro. O irmão core_grades_get_grade_tree já exige moodle/grade:viewall.

Um estudante matriculado faz POST de {courseid} e obtém os nomes de itens de nota ocultos que a interface do boletim do estudante ainda esconde.

IDsem CVE ainda
CWECWE-862 / CWE-200
CVSSMédio: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
ProdutoMoodle
Afetado5.2.3 tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
Autenticaçãoestudante matriculado (moodle/grade:view; sem viewall / viewhidden)
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

Autor: um estudante matriculado no curso. Ele faz POST do serviço AJAX com {courseid}. A resposta contém nomes, IDs e categorias. O esquema de retorno não tem notas. Não é RCE. Não é LPE. Não é escrita de nota.

PrivilégioMétodo / sinkRecon / integridade / disponibilidadeComprovado em lab ou inferido
Ler nome, id e categoria de item de nota ocultoPOST /lib/ajax/service.php?sesskey= core_grades_get_gradeitems {courseid}ReconComprovado em lab. HTTP 200, nomes incluem MOODLE-GRADES-GRADEITEMS-WITNESS
Ler nome, id e categoria de item de nota visívelMesma respostaRecon (destinado a professores)Comprovado em lab. nomes incluem Visible Lab Assignment
Mesmo catálogo pelo serviço oficial de mobileMesma classe, services inclui MOODLE_OFFICIAL_MOBILE_SERVICEReconInferido de services.php. O lab usou AJAX.
Percorrer valores sequenciais de courseid para cursos nos quais o estudante pode entrarMesmo método, ids adivinhadosReconInferido. O lab usou o id de curso semeado 2
Ver o item oculto na interface do boletim do estudanteGET /grade/report/user/index.php?id=n/aComprovado em lab fechado. hidden-in-ui=False, visible-in-ui=True
Chamar sem sessãoAJAX com um sesskey fictícion/aComprovado em lab fechado. servicerequireslogin
Chamar como usuário logado que não está matriculadoAJAX de outsider, mesmo courseidn/aComprovado em lab fechado. requireloginerror
Ler notas de outros estudantes ou escrever notasn/an/aFechado. As chaves de retorno são id, itemname, category
RCE em PHP / LPE no SOn/an/aFechado. Este resíduo é uma leitura de catálogo

Um professor ou gestor que já possui moodle/grade:viewall já vê o catálogo. Chamadores convidados / não autenticados ainda precisam de um contexto de curso.

Mesmos restos de pin: leitura de arquivo img do Blackboard, SQLi no enrol_database, IDOR no feedback de notas.

Como eu encontrei

Fixe o moodle/moodle v5.2.3 após MSA-26-0042/0043. Os web services de notas estavam nessa janela do MSA. O get_gradeitems.php ainda não tem require_capability. A interface do aluno já ocultava o item. O catálogo AJAX não.

Caminhos errados já registrados: tratar o AJAX não autenticado 200 como o vazamento (o corpo é servicerequireslogin); chamar isso de IDOR de pontuação porque o nome do método tem grade (o schema é apenas nomes); esperar que get_grade_tree fosse o mesmo resto (ele já exige viewall). Um reverse shell. Teatro.

Lab

Moodle v5.2.3 ao vivo em php:8.3-apache + MariaDB 11.4. O seed matricula labstudent, deixa laboutsider fora do curso e cria um item manual visível mais um item oculto cujo nome é a testemunha. O run.sh copia um pin local ou git clone --depth 1 --branch v5.2.3. A árvore do Moodle não está neste pacote.

python3 moodle-grades-gradeitems-Abraxas-Labs.py

ou

cd lab
./run.sh

Aponte apenas para http://127.0.0.1:19590. Projeto do Compose moodle-grades-gradeitems. A stack é desmontada após a execução.

SUCCESS moodle-grades-gradeitems student-ajax=200 hidden-in-ajax=yes hidden-in-ui=no visible-in-ajax=yes visible-in-ui=yes outsider-error=yes unauth-error=yes MOODLE-GRADES-GRADEITEMS-WITNESS

A correção

Após validate_context, exigir o mesmo limite de capacidade que get_grade_tree: require_capability('moodle/grade:viewall', $context). Também remover itens ocultos, a menos que o chamador tenha moodle/grade:viewhidden. Adicionar um caso Behat/PHPUnit: estudante matriculado, item manual oculto, core_grades_get_gradeitems deve omitir esse item (ou 403). A interface do livro de notas do estudante já o oculta.

Referências

  • github.com/moodle/moodle tag v5.2.3
  • get_gradeitems.php
  • O irmão já exige a capacidade: get_grade_tree.php
  • Registo do serviço: services.php (core_grades_get_gradeitems, sem capabilities)
  • Mesmo pin: moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-feedback-idor
  • CWE-862

Licença

GNU Affero GPL v3.0. Ver LICENSE. Apenas laboratório loopback. Sem garantia.

Baixar ferramenta