{"id":"CVE-2026-93779","kind":"vulnerability","aliases":["CVE-2026-93779"],"related":[],"title":"Tutor LMS WordPress plugin: IDOR exposes paid course content and user data","description":"The Tutor LMS – eLearning and online course solution plugin for WordPress is vulnerable to Insecure Direct Object Reference in all versions up to, and including, 4.1.2 via the init_routes due to missing validation on a user controlled key. This makes it possible for authenticated attackers, with subscriber-level access and above, to read paid course lesson and topic content without enrollment, retrieve quiz answer keys including the is_correct field before attempting a quiz, and enumerate the email addresses, usernames, and registration data of other users including instructors and administrators. Exploitation requires that the attacker hold a valid Tutor LMS API key/secret pair, which is issued to subscriber-level users through the plugin's API key management feature.","summary":"The Tutor LMS WordPress plugin up to and including 4.1.2 fails to validate a user-controlled key in its REST route handling, an insecure direct object reference. An authenticated subscriber with an API key can read paid lessons, quiz answer keys, and other users' emails and usernames.","severity":"medium","cvss":6.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","tutor-lms","wordpress"],"not_affected_if":["default-config","newer-version"],"how_to_check":"- Check the installed Tutor LMS plugin version in the WordPress admin Plugins page; versions up to and including `4.1.2` are affected.\n- Check whether API keys are enabled for subscriber accounts in the plugin's API key settings.","fix":"- Tutor LMS: move to a version later than `4.1.2` (the fixed version is not stated in the sources).","status":"open","published_at":"2026-11-07T05:19:02+00:00","first_seen_at":"2026-11-07T05:46:08+00:00","triaged_at":"2026-11-07T05:52:27+00:00","updated_at":"2026-11-07T05:52:27+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-07T05:52:27Z","model":"claude-haiku-5-5","output":{"fix":"- Tutor LMS: move to a version later than `4.1.2` (the fixed version is not stated in the sources).","reach":"internet","title":"Tutor LMS WordPress plugin: IDOR exposes paid course content and user data","impact":"medium","summary":"The Tutor LMS WordPress plugin up to and including 4.1.2 fails to validate a user-controlled key in its REST route handling, an insecure direct object reference. An authenticated subscriber with an API key can read paid lessons, quiz answer keys, and other users' emails and usernames.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","tutor-lms","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"yes","worst_case":"Paid course content, quiz answers and user emails readable by subscribers","analyst_note":"Confirm the fixed version of Tutor LMS after 4.1.2 from the plugin changelog or the Wordfence/NVD record.","how_to_check":"- Check the installed Tutor LMS plugin version in the WordPress admin Plugins page; versions up to and including `4.1.2` are affected.\n- Check whether API keys are enabled for subscriber accounts in the plugin's API key settings.","plain_action":"","needs_analyst":true,"not_affected_if":["default-config","newer-version"],"who_is_affected":"Sites running the Tutor LMS plugin at version 4.1.2 or earlier where subscribers can obtain Tutor LMS API key and secret pairs. Sites that do not use the plugin's API key feature, or that run a newer version, are not affected by the described path. The sources do not state a fixed version.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000747,"input_tokens":4371,"output_tokens":620,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-93779':15A,18A '4.1.2':36B,100C 'access':125C 'address':155C 'administr':166C 'answer':67B,140C 'api':60B,177C,192C 'attack':120C,171C 'attempt':148C 'authent':56B,119C 'content':9A,135C 'control':43B,112C 'correct':145C 'cours':8A,81C,131C 'cve':13A,16A 'data':12A,159C 'direct':52B,90C 'due':105C 'elearn':78C 'email':72B,154C 'enrol':137C 'enumer':152C 'exploit':167C 'expos':6A 'fail':37B 'featur':195C 'field':146C 'handl':49B 'hold':172C 'host':22B 'idor':5A 'includ':35B,99C,142C,163C 'init':103C 'insecur':51B,89C 'instructor':164C 'issu':182C 'key':44B,61B,68B,113C,141C,193C 'key/secret':178C 'lesson':65B,132C 'level':124C,186C 'lms':2A,25B,29B,77C,176C 'make':115C 'manag':194C 'miss':107C 'object':53B,91C 'onlin':80C 'packag':19B 'paid':7A,64B,130C 'pair':179C 'plugin':4A,31B,83C,190C 'possibl':117C 'quiz':66B,139C,150C 'read':63B,129C 'refer':54B,92C 'registr':158C 'requir':168C 'rest':47B 'retriev':138C 'rout':48B,104C 'self':21B 'self-host':20B 'solut':82C 'subscrib':57B,123C,185C 'subscriber-level':122C,184C 'topic':134C 'tutor':1A,24B,28B,76C,175C 'tutor-lm':23B 'user':11A,42B,71B,111C,162C,187C 'user-control':41B 'usernam':74B,156C 'valid':39B,108C,174C 'version':95C 'via':101C 'vulner':87C 'without':136C 'wordpress':3A,26B,30B,85C","nicknames":[],"mitigations":[],"who_affected":"Sites running the Tutor LMS plugin at version 4.1.2 or earlier where subscribers can obtain Tutor LMS API key and secret pairs. Sites that do not use the plugin's API key feature, or that run a newer version, are not affected by the described path. The sources do not state a fixed version.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","selfhosted","tutorlms","wordpress"],"campaign_type":null,"search_a":"'-2026':14A,17A '-93779':15A,18A 'content':9A 'cours':8A 'cve':13A,16A 'data':12A 'expos':6A 'idor':5A 'lms':2A 'paid':7A 'plugin':4A 'tutor':1A 'user':11A 'wordpress':3A","search_b":"'4.1.2':36B 'answer':67B 'api':60B 'authent':56B 'control':43B 'direct':52B 'email':72B 'fail':37B 'handl':49B 'host':22B 'includ':35B 'insecur':51B 'key':44B,61B,68B 'lesson':65B 'lms':25B,29B 'object':53B 'packag':19B 'paid':64B 'plugin':31B 'quiz':66B 'read':63B 'refer':54B 'rest':47B 'rout':48B 'self':21B 'self-host':20B 'subscrib':57B 'tutor':24B,28B 'tutor-lm':23B 'user':42B,71B 'user-control':41B 'usernam':74B 'valid':39B 'wordpress':26B,30B","search_c":"'4.1.2':100C 'access':125C 'address':155C 'administr':166C 'answer':140C 'api':177C,192C 'attack':120C,171C 'attempt':148C 'authent':119C 'content':135C 'control':112C 'correct':145C 'cours':81C,131C 'data':159C 'direct':90C 'due':105C 'elearn':78C 'email':154C 'enrol':137C 'enumer':152C 'exploit':167C 'featur':195C 'field':146C 'hold':172C 'includ':99C,142C,163C 'init':103C 'insecur':89C 'instructor':164C 'issu':182C 'key':113C,141C,193C 'key/secret':178C 'lesson':132C 'level':124C,186C 'lms':77C,176C 'make':115C 'manag':194C 'miss':107C 'object':91C 'onlin':80C 'paid':130C 'pair':179C 'plugin':83C,190C 'possibl':117C 'quiz':139C,150C 'read':129C 'refer':92C 'registr':158C 'requir':168C 'retriev':138C 'rout':104C 'solut':82C 'subscrib':123C,185C 'subscriber-level':122C,184C 'topic':134C 'tutor':76C,175C 'user':111C,162C,187C 'usernam':156C 'valid':108C,174C 'version':95C 'via':101C 'vulner':87C 'without':136C 'wordpress':85C","first_public_at":"2026-11-07T05:19:02+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-93779","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93779","severity":null,"published_at":"2026-11-07T05:19:02+00:00","modified_at":"2026-11-07T05:19:03+00:00","first_seen_at":"2026-11-07T05:46:08+00:00","fetched_at":"2026-11-07T05:46:08+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}