
IDOR Autenticado / Controle de Acesso Quebrado no Plugin Tutor LMS
Aviso: Este repositório foi criado apenas para fins educacionais e divulgação ética. A vulnerabilidade foi reportada de forma responsável ao fornecedor e corrigida. Não utilize estas informações para explorar sistemas sem a devida autorização.
Uma vulnerabilidade de Referência Direta Insegura a Objetos (IDOR) / Controle de Acesso Quebrado foi descoberta no plugin Tutor LMS para WordPress (versões <= 3.9.5). Esta falha permite que um usuário com privilégios baixos e o papel de Instrutor Tutor execute ações em massa não autorizadas, como alterar o status de publicação ou excluir permanentemente cursos de outros instrutores ou administradores.
Ao interceptar uma requisição legítima do backend e adulterar o parâmetro de ID do curso, um atacante pode contornar os controles de acesso pretendidos. Em um cenário real, isso permite que atores maliciosos sabotem cursos de concorrentes em um marketplace com múltiplos instrutores, causando interrupção direta nos negócios, perda de receita e danos à reputação.
<= 3.9.53.9.6O problema central decorre da falta de verificações de autorização em nível de objeto no manipulador de ações em massa do plugin.
Arquivo: tutor/classes/Course_List.php
Função: course_list_bulk_action()
1. Identificadores de Objeto Não Validados:
A função aceita entradas controladas pelo usuário (bulk-action e bulk-ids) diretamente da requisição HTTP. Embora o plugin verifique se o usuário possui uma capacidade geral para gerenciar cursos, ele falha completamente em verificar a propriedade por curso para os IDs específicos fornecidos no array bulk-ids.
2. Execução Sem Verificação de Propriedade:
Quando o caminho de atualização de status (update_course_status()) ou o caminho de exclusão (bulk_delete_course()) é acionado, o código itera sobre os IDs fornecidos pelo atacante. Ele executa operações no banco de dados (por exemplo, atualizando cp_posts.post_status) usando uma cláusula WHERE ID IN (...) sem anexar uma condição para garantir que $post_author == $current_user_id.
Como o manipulador não impõe autorização em nível de objeto, qualquer instrutor com acesso ao fluxo de ações em massa pode manipular IDs de curso arbitrários.
Os passos a seguir demonstram como um Instrutor Tutor autenticado pode alterar o status do curso de outro instrutor.
course_id alvo pertencente a outro instrutor (Vítima). (ex.: ID: 27)./wp-admin/admin.php?page=tutor). Selecione qualquer curso que você possua, escolha uma ação de alteração de status (ex.: definir como "rascunho") e clique em "Aplicar".POST de saída para /wp-admin/admin-ajax.php.status para trash (ou pending, private).id do seu ID de curso para o ID do curso da Vítima (27).{"success":true}. O curso da vítima é movido com sucesso para a lixeira e desaparece do frontend público.