
IDOR autenticato / Controllo di accesso non corretto nel plugin Tutor LMS
Disclaimer: Questo repository è creato solo a scopo educativo e divulgazione etica. La vulnerabilità è stata segnalata responsabilmente al fornitore e corretta. Non utilizzare queste informazioni per sfruttare sistemi senza la dovuta autorizzazione.
È stata scoperta una vulnerabilità di Insecure Direct Object Reference (IDOR) / Broken Access Control (Controllo di Accesso non Corretto) nel plugin Tutor LMS per WordPress (versioni <= 3.9.5). Questa falla consente a un utente con privilegi limitati, in possesso del ruolo Tutor Instructor, di eseguire azioni bulk non autorizzate, come modificare lo stato di pubblicazione o eliminare definitivamente corsi di proprietà di altri instructor o amministratori.
Intercettando una legittima richiesta backend e manipolando il parametro relativo all'ID del corso, un attaccante può aggirare i controlli di accesso previsti. In uno scenario reale, ciò consente ad attori malintenzionati di sabotare i corsi della concorrenza in un marketplace multi-instructor, causando interruzioni operative dirette, perdite di entrate e danni alla reputazione.
<= 3.9.53.9.6Il problema centrale deriva dalla mancanza di controlli di autorizzazione a livello di oggetto all'interno del gestore delle azioni bulk del plugin.
File: tutor/classes/Course_List.php
Funzione: course_list_bulk_action()
1. Identificatori di Oggetto non Validati:
La funzione accetta input controllati dall'utente (bulk-action e bulk-ids) direttamente dalla richiesta HTTP. Sebbene il plugin verifichi che l'utente possieda una capacità generale di gestire i corsi, non verifica affatto la proprietà del singolo corso per gli ID specifici forniti nell'array bulk-ids.
2. Esecuzione Senza Verifica della Proprietà:
Quando viene attivato il percorso di aggiornamento dello stato (update_course_status()) o il percorso di eliminazione (bulk_delete_course()), il codice itera sugli ID forniti dall'attaccante. Esegue operazioni sul database (ad esempio, l'aggiornamento di cp_posts.post_status) utilizzando una clausola WHERE ID IN (...) senza aggiungere una condizione per garantire che $post_author == $current_user_id.
Poiché il gestore non applica l'autorizzazione a livello di oggetto, qualsiasi instructor con accesso al flusso di lavoro delle azioni bulk può manipolare ID di corsi arbitrari.
I seguenti passaggi dimostrano come un Tutor Instructor autenticato possa modificare lo stato del corso di un altro instructor.
course_id di destinazione appartenente a un altro instructor (Vittima). (ad esempio, ID: 27)./wp-admin/admin.php?page=tutor). Selezionare un corso di propria proprietà, scegliere un'azione di modifica dello stato (ad esempio, impostare su "bozza") e fare clic su "Applica".POST in uscita verso /wp-admin/admin-ajax.php.status in trash (o pending, private).id dal proprio ID del corso a quello della Vittima (27).{"success":true}. Il corso della vittima viene spostato con successo nel cestino e scompare dal frontend pubblico.