Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
moodle-grades-feedback-idor — Moodle 5.2.3 - Alta - Remota - IDOR - core_grades_get_feedback omite las comprobaciones de grupos separados | Kitploit
Herramientas/GitHubGitHub/abraxas/moodle-grades-feedback-idor
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónVirtualización de SeguridadSeguridad WebPruebas de PenetraciónLabs y Práctica
GitHubabraxas/moodle-grades-feedback-idor

moodle-grades-feedback-idor

Moodle 5.2.3 - Alta - Remota - IDOR - core_grades_get_feedback omite las comprobaciones de grupos separados

Ver Repositorio
3hace 4 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Abraxas Labs - moodle-grades-feedback-idor

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

moodle-grades-feedback-idor

Moodle LMS 5.2.3 - Moodle

Clase: IDOR Alcance: Remoto

core_grades_get_feedback todavía solo llama a require_capability('gradereport/grader:view'). Otros servicios web de calificaciones obtuvieron groups_user_groups_visible / groups_group_visible después de MSA-26-0016 / MDL-88667. Este servicio AJAX no. El JSON regresa con feedbacktext, fullname, picture y el primer campo de identidad.

Un profesor sin capacidad de edición en grupos separados, sin accessallgroups, envía por POST el userid de otro estudiante y lee la retroalimentación de ese grupo.

IDsin CVE todavía
CWECWE-863 / CWE-200
CVSSMedio: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
ProductoMoodle
Afectado5.2.3 tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
Autenticaciónprofesor sin capacidad de edición con gradereport/grader:view, sin moodle/site:accessallgroups. Curso en grupos separados.
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Actor: un profesor sin capacidad de edición inscrito en un curso de grupos separados, solo en el Grupo A, con vista de calificador y sin acceso a todos los grupos. Elige el userid de otro estudiante inscrito (enteros secuenciales) y llama al servicio AJAX. No es RCE. No es LPE. No es una escritura de calificación.

PrivilegioMétodo / sinkReconocimiento / integridad / disponibilidadProbado en laboratorio o inferido
Leer la retroalimentación de calificaciones de otro grupoPOST /lib/ajax/service.php?sesskey= core_grades_get_feedback {courseid, userid, itemid}ReconocimientoProbado en laboratorio. HTTP 200, error=false, feedbacktext contiene MOODLE-GRADES-FEEDBACK-IDOR-WITNESS
Leer el campo de identidad y el nombre para mostrar de ese estudianteMisma respuesta additionalfield / fullname / pictureReconocimientoProbado en laboratorio. [email protected], fullname=Student Bravo
Recorrer valores secuenciales de userid en el mismo cursoMismo método, ids adivinadosReconocimientoInferido. El laboratorio usó el id sembrado del Grupo B
Listar el Grupo B mediante el selector hermanocore_grades_get_gradable_users {courseid, groupid=B}n/aProbado en laboratorio cerrado. cannotaccessgroup
Un estudiante llama al mismo servicio de retroalimentaciónrol de estudiante, mismos argumentosn/aProbado en laboratorio cerrado. nopermissions
Retroalimentación del mismo grupo (estudiante del Grupo A)llamada del profesor para Student AlphaReconocimiento (previsto)Probado en laboratorio permitido. HTTP 200, error=false
RCE de PHP / LPE del SO / escritura de calificacionesn/an/aCerrado. Este remanente es una lectura de retroalimentación y campos de perfil

Un Moodle por defecto sin grupos separados, o un profesor que ya tiene moodle/site:accessallgroups, no es este remanente. Los profesores con capacidad de edición que ya tienen esa capacidad ya ven todos los grupos.

Remanentes del mismo pin: Blackboard img file read, enrol_database SQLi, hidden grade items.

Cómo lo encontré

Fijé moodle/moodle v5.2.3 después de MSA-26-0042/0043. MSA-26-0016 cerró las comprobaciones de grupos en otros servicios web de calificaciones. get_feedback.php no estaba en ese conjunto. La interfaz del calificador fue endurecida. Este servicio AJAX no.

Caminos equivocados ya registrados: tratar el fallo del hermano get_gradable_users como toda la historia (ese ya lanza cannotaccessgroup); llamar a esto una escritura de calificaciones porque el payload nombra itemid (el servicio es una lectura); estudiante como atacante (nopermissions). Una reverse shell. Teatro.

Laboratorio

Moodle en vivo v5.2.3 sobre php:8.3-cli + MariaDB 11.4. El seed construye un curso de grupos separados, profesor solo en el Grupo A, estudiante B solo en el Grupo B, CAP_PREVENT en moodle/site:accessallgroups, y un ítem de calificación manual cuya retroalimentación es el testigo. how=live.

Compose monta ../../vendors/moodle/src como /opt/moodle-pin (la ruta es relativa a lab/docker-compose.yml). Clona moodle/moodle tag v5.2.3 en esa ruta, o apunta el volumen a tu checkout. El árbol de Moodle no está en este paquete.

python3 moodle-grades-feedback-idor-Abraxas-Labs.py

o

cd lab
./run.sh

Objetivo solo http://127.0.0.1:19580. Proyecto de Compose moodle-grades-feedback-idor. El stack se desmonta después de la ejecución.

SUCCESS moodle-grades-feedback-idor how=live pin=v5.2.3 teacher-role=teacher accessallgroups=no groupmode=1 feedback-has-witness=yes [email protected] sibling-group-b=cannotaccessgroup student-call=nopermissions MOODLE-GRADES-FEEDBACK-IDOR-WITNESS

La solución

Después de validate_context / require_capability, carga el curso y el usuario objetivo, luego rechaza a menos que groups_user_groups_visible($course, $userid) y el objetivo esté inscrito. La misma forma que gradereport_user y core_grades_get_gradable_users después de MDL-88667.

Referencias

  • github.com/moodle/moodle tag v5.2.3
  • get_feedback.php
  • El hermano ya deniega el otro grupo: get_gradable_users.php
  • Parcheado cercano (no este servicio): MSA-26-0016 / MDL-88667
  • Mismo pin: moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-gradeitems
  • CWE-863

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo laboratorio en loopback. Sin garantía.

Descargar herramienta