
Authentifizierte IDOR / Broken Access Control im Tutor LMS Plugin
Haftungsausschluss: Dieses Repository dient ausschließlich Bildungszwecken und ethischer Offenlegung. Die Schwachstelle wurde verantwortungsvoll an den Anbieter gemeldet und behoben. Verwenden Sie diese Informationen nicht, um Systeme ohne entsprechende Genehmigung auszunutzen.
Eine Insecure Direct Object Reference (IDOR) / Fehlerhafte Zugriffskontrolle-Schwachstelle wurde im Tutor LMS-Plugin für WordPress (Versionen <= 3.9.5) entdeckt. Dieser Fehler ermöglicht es einem Benutzer mit geringen Rechten und der Rolle Tutor Instructor, unbefugte Massenaktionen durchzuführen, wie z. B. den Veröffentlichungsstatus zu ändern oder Kurse dauerhaft zu löschen, die anderen Dozenten oder Administratoren gehören.
Durch das Abfangen einer legitimen Backend-Anfrage und das Manipulieren des Kurs-ID-Parameters kann ein Angreifer die vorgesehenen Zugriffskontrollen umgehen. In einem realen Szenario ermöglicht dies böswilligen Akteuren, Kurse von Konkurrenten auf einem Marktplatz mit mehreren Dozenten zu sabotieren, was direkte Geschäftsunterbrechungen, Umsatzverluste und Reputationsschäden verursacht.
<= 3.9.53.9.6Das Kernproblem beruht auf fehlenden Autorisierungsprüfungen auf Objektebene innerhalb des Bulk-Action-Handlers des Plugins.
Datei: tutor/classes/Course_List.php
Funktion: course_list_bulk_action()
1. Nicht validierte Objekt-IDs:
Die Funktion übernimmt benutzergesteuerte Eingaben (bulk-action und bulk-ids) direkt aus der HTTP-Anfrage. Während das Plugin überprüft, dass der Benutzer über eine allgemeine Berechtigung zur Verwaltung von Kursen verfügt, versäumt es vollständig, den Besitz pro Kurs für die spezifischen IDs im bulk-ids-Array zu überprüfen.
2. Ausführung ohne Besitzprüfung:
Wenn der Pfad zur Statusaktualisierung (update_course_status()) oder der Pfad zum Löschen (bulk_delete_course()) ausgelöst wird, iteriert der Code über die vom Angreifer bereitgestellten IDs. Er führt Datenbankoperationen aus (z. B. Aktualisierung von cp_posts.post_status) mithilfe einer WHERE ID IN (...)-Klausel, ohne eine Bedingung anzuhängen, die sicherstellt, dass $post_author == $current_user_id gilt.
Da der Handler keine Autorisierung auf Objektebene durchsetzt, kann jeder Dozent mit Zugriff auf den Bulk-Action-Workflow beliebige Kurs-IDs manipulieren.
Die folgenden Schritte zeigen, wie ein authentifizierter Tutor Instructor den Status eines Kurses eines anderen Dozenten ändern kann.
course_id des Ziels, die zu einem anderen Dozenten (Opfer) gehört. (z. B. ID: 27)./wp-admin/admin.php?page=tutor). Wählen Sie einen Kurs aus, den Sie besitzen, wählen Sie eine Statusänderungsaktion (z. B. auf "Entwurf" setzen) und klicken Sie auf "Anwenden".POST-Anfrage an /wp-admin/admin-ajax.php abzufangen.status auf trash (oder pending, private).id von Ihrer Kurs-ID zu der Kurs-ID des Opfers (27).{"success":true}