// blog · auditoria

Auditoria de segurança Moodle: o checklist técnico que ninguém publica

TL;DR

Auditoria de segurança Moodle séria não é checklist genérico baixado da OWASP. São seis frentes técnicas específicas que cruzam configuração de servidor, código do plugin, dados do banco e processo operacional.

As seis frentes: versão do core + CVEs conhecidos, inventário de plugins (cada um é vetor potencial), configuração de servidor (PHP, MySQL, cache, permissões), integridade do cron (parado = cego), exposição de endpoints (REST, admin, debug), compliance LGPD/GDPR.

O relatório final tem duas camadas: executiva (top 5 riscos, custo de remediação) para C-level + técnica (achado com CVSS + comando de remediação) para TI. Sem essa estrutura, o laudo vira "muito complicado" e não vira ação.

1. Por que auditar Moodle não é checklist genérico

O checklist OWASP de aplicação web cobre 80% de qualquer sistema. Mas Moodle tem particularidades que nenhum checklist genérico cobre: o ciclo de releases (LTS vs. intermediário), o ecossistema de plugins de terceiros (com varying maturity), o cron que precisa rodar a cada minuto, e o fato de que dados de aluno são dados de menor de idade em muitos casos — o que muda toda a equação LGPD/GDPR.

Auditor que aplica só ZAP+Burp em Moodle perde 70% dos riscos reais. Os riscos críticos vivem em plugins desatualizados específicos do Moodle, configurações de cron silenciosas, permissões de arquivos do moodledata, e endpoints REST específicos do Moodle (webservice/rest/server.php) que ferramentas genéricas nem sabem mapear.

Regra que aplicamos: auditoria de Moodle é auditoria de plataforma Moodle, não auditoria de "app web qualquer". O conhecimento específico do produto é o que separa relatório útil de relatório-cobertor.

2. Frente 1: Versão do core + CVEs conhecidos

O primeiro passo é cruzar a versão exata do Moodle instalado com o histórico de CVEs publicados. Versão exata significa build number, não só "3.x". Diferença entre Moodle 3.9.5 e 3.9.18 são 13 patches de segurança — incluindo um RCE em 3.9.10.

Onde achar a versão exata:

$ grep -E '\$release|\$version' /path/to/moodle/version.php
$release = '3.9.18+ (Build: 20231120)';
$version = 2020061518.07;

Depois, cruzar com:

Critério de severidade que usamos:

3. Frente 2: Inventário de plugins de terceiros

Plugin é onde vivem os surprise CVEs. Auditor inexperiente esquece de inventariar plugins desativados — que continuam no banco com tabelas órfãs, configurações zumbi, e às vezes endpoints expostos.

Comando para listar TODOS os plugins (ativos + desativados):

$ ls -la /path/to/moodle/mod/ \
                /path/to/moodle/blocks/ \
                /path/to/moodle/local/ \
                /path/to/moodle/theme/ | \
   grep -v "^total\|^d\.\." | \
   awk '{print $NF}'

Para cada plugin de terceiros encontrado:

  1. Identificar o autor (Moodle Plugins Directory ou GitHub)
  2. Comparar versão instalada com versão mais recente
  3. Verificar se autor ainda mantém (último commit, tickets abertos)
  4. Cruzar nome do plugin com CVE database

Padrões de risco em plugins:

4. Frente 3: Configuração de servidor

Quatro sub-frentes aqui:

PHP

MySQL / MariaDB

Cache

Permissões de arquivos

$ find /path/to/moodle -type f -perm -o+w  # arquivos world-writable
$ stat /path/to/moodledata/config.php       # deve ser 640 ou 600, não 644
$ stat /path/to/moodledata                  # web user precisa write, mais ninguém

5. Frente 4: Integridade do cron e tarefas

Cron parado é vetor de risco por dois motivos: tarefas críticas não rodam (badges, certificados, mensagens, limpeza de logs) e logs de auditoria acumulam lixo em vez de gerar sinal útil.

Comando para ver estado das tarefas agendadas:

$ php admin/cli/scheduled_task.php --list
Component            Task                              Last run
core/check_for_updates 2025-12-15 14:32 (3 days ago)
core/cleanup_old_log  2024-11-22 02:00 (8 months ago!)
core/badges_cron      Never

O que olhamos:

6. Frente 5: Exposição de endpoints sensíveis

Esta é a frente que mais varia entre Moodles. Os endpoints sensíveis variam por versão e por plugins instalados.

Sempre verificar

Comando útil

$ curl -I https://seu-moodle.com/admin/
$ curl -I https://seu-moodle.com/webservice/rest/server.php
$ curl https://seu-moodle.com/install.php
$ curl https://seu-moodle.com/config.php

O esperado: 403 Forbidden para install/config e auth challenge para admin/REST.

7. Frente 6: Compliance LGPD / GDPR / CNPD

Compliance técnica (o que olhamos):

O que NÃO fazemos: emitir certificado de conformidade legal. Isso é função do DPO + advogado. Nossa entrega é o laudo técnico que comprova as medidas implementadas — esse laudo o DPO usa como evidência.

8. Como o relatório vira plano de remediação

Auditoria que termina em PDF de 80 páginas que ninguém lê é dinheiro jogado fora. Para virar ação, o relatório precisa duas camadas:

Camada executiva (4-6 páginas)

Esse documento vai para C-level, jurídico, financeiro. Eles decidem prioridades baseado em custo × risco.

Camada técnica (40-80 páginas)

Esse documento vai para TI / DPO / equipe operacional. Eles executam.

Mais importante: apresentação ao vivo de 90 min com ambos os públicos. Sem isso, o relatório vira shelfware. Com isso, vira plano operacional com responsáveis e prazos.

Quer fazer essa auditoria no seu Moodle? Faça antes o diagnóstico técnico de segurança (10 perguntas, score 0-100) — ele te diz se você precisa de auditoria leve, completa ou prioritária.

A
Alejandro Argachá
Cientista da Computação · Especialista Moodle · CEO ProgramaMoodle

Auditoria de segurança Moodle profunda?

Faça o diagnóstico de 3 minutos. Se a nota for Alta ou Crítica, abrimos canal direto.

Fazer diagnóstico de segurança

Ou direto por email: ceo@programamoodle.com