Record summary

CVE-2023-22496 has a selected CVSS score of 8.1 (high); EIP currently links 1 repository PoC and 2 lab environments.

Description

Netdata is an open source option for real-time infrastructure monitoring and troubleshooting. An attacker with the ability to establish a streaming connection can execute arbitrary commands on the targeted Netdata agent. When an alert is triggered, the function `health_alarm_execute` is called. This function performs different checks and then enqueues a command by calling `spawn_enq_cmd`. This command is populated with several arguments that are not sanitized. One of them is the `registry_hostname` of the node for which the alert is raised. By providing a specially crafted `registry_hostname` as part of the health data that is streamed to a Netdata (parent) agent, an attacker can execute arbitrary commands at the remote host as a side-effect of the raised alert. Note that the commands are executed as the user running the Netdata Agent. This user is usually named `netdata`. The ability to run arbitrary commands may allow an attacker to escalate privileges by escalating other vulnerabilities in the system, as that user. The problem has been fixed in: Netdata agent v1.37 (stable) and Netdata agent v1.36.0-409 (nightly). As a workaround, streaming is not enabled by default. If you have previously enabled this, it can be disabled. Limiting access to the port on the recipient Agent to trusted child connections may mitigate the impact of this vulnerability.

Description source: CVE List

Exploitation context

Available material

Repository PoCs
1
Lab environments
2

CISA SSVC decision

ExploitationPoC
AutomatableNo
Technical impactTotal

CISA Coordinator · SSVC 2.0.3 · Evaluated Mar 10, 2025 · Source: CVE List

Affected products and versions

1
ProductSourceVersion rangeStatus
CVE List< 1.36.0-409affected
< 1.37affected

Proofs of concept

1

Repository PoCs

GitHubjstjep00/CVE-2023-22496-PoCRepository PoCby jstjep00Stars: 1Exploit14 files

25.4 KiB

GitHub

PoC details
Analysisdeepseek-v4-pro:cloud ·

Technical assessment

The artifact is a fully functional exploit for CVE-2023-22496, a command injection vulnerability in Netdata Agent. It includes a Python script (exploit.py) that crafts a malicious registry_hostname payload, writes it to a configuration file, restarts a Docker container to load the payload, waits for a health alarm to trigger, and then verifies arbitrary command execution on the target.

Backdoor review

No backdoor observed in reviewed code

The supplied evidence is a legitimate proof-of-concept (PoC) for CVE-2023-22496, a command injection vulnerability in Netdata. The Dockerfile builds a known-vulnerable version of Netdata from official source. The README and exploit.py describe and automate the documented vulnerability. No concealed, deceptive, or unrelated harmful behavior was observed. The exploit targets the stated vulnerability and performs no actions beyond demonstrating it.

ClassificationExploit
Model confidence98%
AuthenticationNot required
LanguagesPythonDockerfileMarkdown
Target softwareNetdata Agent
Attack typescommand injectionremote code execution
Evidence & reasoningClassification basis · observed behavior · safety review
Technical evidence

Classification basis and observed behavior

Classification basis

The artifact contains a Python script (exploit.py) that actively exploits CVE-2023-22496 by injecting a command into a configuration file, restarting a service, and verifying remote code execution. This goes beyond scanning or detection; it performs the full exploit chain to achieve command execution on a target system.

exploit.py:1-227README.md:130-139

Requirements

  • A running 3-node Netdata streaming environment set up via the provided Docker Compose file.exploit.py:46-47README.md:118-120
  • The attacker must be able to write to the Netdata configuration file (netdata.conf) of a node in the streaming chain.exploit.py:55-56README.md:12

Observed behavior

  • Crafts a command injection payload by embedding a shell command within the registry_hostname field using single-quote breakout and background operators.exploit.py:129-131
  • Writes the malicious configuration to a local file that is bind-mounted into the target Docker container.exploit.py:147-160
  • Force-recreates the target Docker container to load the injected configuration.exploit.py:164-169
  • Waits for a health alarm to trigger, causing the vulnerable health_alarm_execute function to execute the injected command.exploit.py:186-192
  • Verifies successful command execution by checking for the existence of a file created by the injected command on the target container.exploit.py:197-205
Safety-review evidence

Behaviors behind the backdoor verdict

Observables

Vulnerability Exploit
Payload withheldThe exploit.py script injects a crafted registry_hostname into a Netdata config file to trigger command execution on a parent node, consistent with the documented CVE.exploit.py:130-131exploit.py:148-156
Build Instruction
Payload withheldThe Dockerfile downloads and compiles the vulnerable version from the official netdata/netdata repository, with no injected malicious code.Dockerfile:45-49
Review boundaries

What the analysis did not establish

  • The evidence includes only 3 of 14 files from the repository. The remaining 11 files (including docker-compose.yaml and config files) are not provided, so the full exploit environment cannot be independently verified from the supplied text alone.
  • The analysis is based solely on static review of the provided source code; the exploit was not executed, and its reliability or safety is not assessed.
  • 11 files in the repository were not included in the text evidence; their contents are unknown.
  • Binary content, if any, was not analyzed per the evidence envelope policy.
  • The review does not assess whether the PoC works as claimed or is safe to execute.
Model interpretation

This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.

Docker lab environments

2
GitHub

Repository root

jstjep00/CVE-2023-22496-PoCCreated
Vuln labCVE-2023-22496Dockerfile

1 Dockerfile

Analysisdeepseek-v4-pro:cloud ·

Environment assessment

A Docker-based environment that builds Netdata Agent v1.36.1 from source and provides a standalone exploit script for CVE-2023-22496, an OS command injection vulnerability. The Dockerfile alone does not create a multi-node streaming lab; the exploit script references an external docker-compose.yaml for a 3-node setup.

Dockerfile:1-120README.md:1-227exploit.py:1-227

Lab assessment

Vulnerability lab

The README explicitly describes a proof-of-concept for CVE-2023-22496, the Dockerfile builds the vulnerable version, and exploit.py automates the attack against a target container. The purpose is clearly vulnerability research and education.

README.md:1-5exploit.py:1-10
Lab shapeDockerfile
ServicesUnknown
Compose manifests0
Dockerfiles1
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

Dockerfile

builds vulnerable Netdata v1.36.1 image

Two-stage Dockerfile: builder stage compiles Netdata v1.36.1 from source; runtime stage creates a minimal Ubuntu 22.04 image with the compiled binaries and sets up the netdata user. Exposes port 19999 and runs Netdata as the netdata user.

Dockerfile:1-120

exploit.py

automates CVE-2023-22496 exploitation

Python script that injects a malicious registry_hostname into a config file, restarts the target container, waits for a health alarm, and verifies command execution. It interacts with Docker to manage containers and checks for evidence of successful exploitation.

exploit.py:1-227

README.md

documents vulnerability, setup, and usage

Provides an overview of CVE-2023-22496, details the vulnerable code, explains the injection bypass, describes the streaming attack chain, and gives step-by-step instructions for building, running, and exploiting the lab environment.

README.md:1-227
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2023-22496

Supported by supplied evidence

The Dockerfile builds Netdata v1.36.1, which is explicitly stated as vulnerable. The exploit script and README describe the unsanitized registry_hostname leading to OS command injection, matching the CVE description.

Dockerfile:1-5README.md:1-5exploit.py:1-10
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker >= 20.10 and Docker Compose v2README.md:107-108
  • Python 3.8+README.md:109
  • Internet access during Docker build to download Netdata v1.36.1 sourceREADME.md:111
  • A running 3-node Docker Compose environment (agent_parent, agent_middle, agent_child) as described in the README and expected by exploit.pyexploit.py:100-108README.md:115-120

Evidence-described exercise path

  1. Build the vulnerable Docker image using the provided DockerfileREADME.md:113-118
  2. Start the 3-node vulnerable environment with docker compose up -dREADME.md:120-122
  3. Run exploit.py with a shell command to inject into the targetREADME.md:130-135
  4. Verify command execution on the target container (e.g., check for created file)README.md:137-139
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

All visible behavior is directed at the lab's own target container (agent_parent). The exploit script writes a config file, restarts a container, and checks for command execution inside that container. There is no evidence of host escape, external connections, persistence, credential theft, or destructive actions beyond the intended demonstration of the vulnerability.

exploit.py:100-227
Review boundaries

What the analysis did not establish

  • The docker-compose.yaml file is referenced but not included in the evidence packet; its exact contents (e.g., port mappings, volume mounts, privileged mode) are unknown.
  • The exploit script interacts with the Docker daemon and restarts containers, which could be risky if misconfigured, but no harmful behavior is visible in the supplied text.
  • The packet includes only the Dockerfile, exploit.py, and README.md; other config files and the compose file are listed in the inventory but not provided as evidence.
Model interpretation

This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.

GitHub

docker-compose.yaml

jstjep00/CVE-2023-22496-PoCCreated
Vuln labCVE-2023-22496Compose · images

1 Compose manifest · 3 services

Analysisdeepseek-v4-pro:cloud ·

Environment assessment

A 3-node Netdata streaming chain (agent_child → agent_middle → agent_parent) running vulnerable Netdata v1.36.1, designed as a proof-of-concept environment for CVE-2023-22496.

docker-compose.yaml:1-6README.md:1-7

Lab assessment

Vulnerability lab

The README explicitly states it is a PoC for CVE-2023-22496, the docker-compose.yaml sets up a vulnerable streaming chain, and exploit.py automates the injection and verification of the command injection vulnerability.

README.md:1-7docker-compose.yaml:1-6exploit.py:1-10
Lab shapeCompose · images
Services3
Compose manifests1
Dockerfiles0
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

agent_parent

victim/targetNetdata parent node

Runs Netdata v1.36.1, accepts streams from agent_middle, evaluates health alarms, and is the target of the command injection. Its netdata.conf is mounted writable so the exploit can inject a malicious registry_hostname.

docker-compose.yaml:22-38README.md:67-72

agent_middle

relay nodeNetdata streaming relay

Runs Netdata v1.36.1, receives streams from agent_child and forwards them to agent_parent. It propagates the registry_hostname without sanitization.

docker-compose.yaml:40-56README.md:67-72

agent_child

attacker-controlled senderNetdata child node

Runs Netdata v1.36.1, configured to stream to agent_middle. Represents the attacker's entry point in the streaming chain.

docker-compose.yaml:58-74README.md:67-72

exploit.py

exploit automation script

Python script that overwrites config/parent_netdata.conf with a malicious registry_hostname, restarts agent_parent, waits for a health alarm, and verifies command execution on the target.

exploit.py:1-10exploit.py:100-227
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2023-22496

Supported by supplied evidence

The README and exploit.py describe the vulnerability as an OS command injection in Netdata's health alarm system via unsanitized registry_hostname, matching the CVE description. The lab environment uses Netdata v1.36.1, which is within the affected range (<1.37.0).

README.md:1-7README.md:13-30exploit.py:1-10
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker image netdata-vuln:v1.36.1 must be built from the included Dockerfile.docker-compose.yaml:8-9README.md:103-108
  • Docker Compose v2 and Python 3.8+ are required to run the environment and exploit.README.md:99-102
  • The 3-node environment must be started with 'docker compose up -d' and Netdata must be fully initialized (~15s).README.md:110-112exploit.py:100-105

Evidence-described exercise path

  1. Build the vulnerable Docker image: docker build -t netdata-vuln:v1.36.1 .README.md:103-108
  2. Start the 3-node environment: docker compose up -d.README.md:110-112
  3. Run the exploit script with a shell command: python3 exploit.py "touch /tmp/pwned".README.md:120-122exploit.py:100-105
  4. Verify command execution on the target: docker exec agent_parent ls /tmp/pwned.README.md:124-126exploit.py:200-210
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

All visible behavior is directed at the contained lab target (agent_parent). The exploit overwrites a lab config file, restarts the target container, and executes a user-supplied command inside that container. No evidence of host escape, external connectivity, persistence, credential theft, or destructive behavior beyond the intended lab exercise.

exploit.py:100-227docker-compose.yaml:22-38
Review boundaries

What the analysis did not establish

  • The Dockerfile is not included in the evidence packet, so the build process and any potential side effects cannot be assessed.
  • The exploit script uses docker exec and docker compose commands, which require Docker socket access; the packet does not show how the host's Docker daemon is configured or whether the lab is isolated from other containers.
Model interpretation

This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.

References

1