Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-46169 — Cacti 1.2.22 inyección de comandos no autenticada | Kitploit
Herramientas/GitHubGitHub/k4pxd/cve-2022-46169
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónRed Teaming
GitHubk4pxd/cve-2022-46169

CVE-2022-46169

Cacti 1.2.22 inyección de comandos no autenticada

Ver Repositorio
17hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2022-46169 — Cacti 1.2.22 Inyección de comandos no autenticada


CampoDetalles
ProductoCacti
Versión afectada1.2.22
VulnerabilidadInyección de comandos del sistema operativo no autenticada
CVECVE-2022-46169
CWECWE-77 — Inyección de comandos
SeveridadCrítica
CVSS v3.19.8
Vector de ataqueRed
AutenticaciónNinguna
Interacción del usuarioNinguna
ImpactoConfidencialidad / Integridad / Disponibilidad
Versión corregida1.2.23
Componente vulnerableremote_agent.php
Componente adicionallib/functions.php
Acción vulnerable principalpolldata

El vector CVSS publicado es:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

El aviso oficial lo califica como 9.8 Crítico. ([GitHub][1])

1. Causa raíz

En realidad hay dos errores encadenados.

Etapa 1 — Omisión de autorización

El remote_agent.php de Cacti acepta solicitudes sin autenticación normal, pero intenta determinar si el solicitante es un poller autorizado.

El flujo de autorización efectivamente hace:

HTTP request
     │
     ▼
remote_agent.php
     │
     ▼
remote_client_authorized()
     │
     ▼
get_client_addr()
     │
     ▼
gethostbyaddr()
     │
     ▼
poller table hostname comparison

El problema es get_client_addr().

En 1.2.22 examina numerosas variables de servidor derivadas de HTTP, incluidos los encabezados de IP de cliente reenviados. El aviso explica que los valores HTTP_* controlados por el atacante pueden influir en la IP devuelta por esta función. ([GitHub][1])

Eso significa que la aplicación puede ser engañada para que crea:

Atacante
   ↓
"mi IP es el servidor Cacti"
   ↓
gethostbyaddr()
   ↓
nombre de host del servidor Cacti
   ↓
coincide con la tabla de pollers
   ↓
AUTORIZADO

Por lo tanto, el atacante no necesita una cuenta legítima de Cacti.


2. La segunda vulnerabilidad — inyección de comandos

Después de omitir la verificación de autorización, la funcionalidad interesante del endpoint es la acción polldata.

La ruta de ejecución relevante es aproximadamente:

remote_agent.php
      │
      ▼
    polldata
      │
      ▼
 poll_for_data()
      │
      ├── host_id
      ├── local_data_ids
      └── poller_id
              │
              ▼
       poller_item lookup
              │
              ▼
 POLLER_ACTION_SCRIPT_PHP
              │
              ▼
          proc_open()
              │
              ▼
       OS command execution

El error importante es el manejo de poller_id.

La aplicación lo recupera usando:

get_nfilter_request_var()

en lugar de imponer que sea un entero.

Ese valor controlado por el atacante eventualmente se convierte en parte de un comando pasado a proc_open() de PHP. El aviso oficial identifica explícitamente esto como la primitiva de inyección de comandos. ([GitHub][1])

Conceptualmente:

entrada controlada por el atacante
        ↓
     poller_id
        ↓
 concatenación de cadenas
        ↓
     proc_open()
        ↓
 comando del sistema operativo

Esta es la parte crítica de la vulnerabilidad.


3. Por qué se convierte en RCE

Lo interesante para tu análisis de PoC es que ninguno de los dos errores por sí solo es toda la historia.

Es una cadena de vulnerabilidades:

        ┌──────────────────────────┐
        │ Atacante no autenticado  │
        └────────────┬─────────────┘
                     │
                     ▼
          remote_agent.php
                     │
                     ▼
        Omisión de autorización
          mediante lógica de IP de cliente
                     │
                     ▼
              polldata
                     │
                     ▼
            poller_item lookup
                     │
                     ▼
       POLLER_ACTION_SCRIPT_PHP
                     │
                     ▼
             entrada del atacante
              → poller_id
                     │
                     ▼
                proc_open()
                     │
                     ▼
              Ejecución de comandos
                     │
                     ▼
                    RCE

Esa es una distinción muy importante que hacer en tu informe:

CVE-2022-46169 no es simplemente "un parámetro malo en remote_agent.php". Es una vulnerabilidad encadenada de omisión de autorización + inyección de comandos.

El aviso oficial confirma que la condición de ejecución vulnerable requiere un poller_item cuya acción sea POLLER_ACTION_SCRIPT_PHP. ([GitHub][1])


4. Requisito previo del entorno

Tu PoC debería documentar esto explícitamente porque es un detalle analítico importante.

El objetivo necesita un poller_item adecuado configurado con:

POLLER_ACTION_SCRIPT_PHP

El aviso de Cacti señala que esto es común en instalaciones de producción porque plantillas predefinidas como Device - Uptime y Device - Polling Time pueden crear estas entradas. ([GitHub][1])

Así que no escribas:

"Toda instalación de Cacti 1.2.22 es automáticamente explotable."

Una declaración técnicamente más precisa es:

Cacti 1.2.22 es vulnerable, y la ejecución exitosa de comandos depende de la presencia de una configuración poller_item adecuada.


5. Por qué importan host_id y local_data_id

poll_for_data() no simplemente ejecuta el poller_id proporcionado.

Primero consulta poller_item usando valores correspondientes a:

host_id
local_data_id

Luego examina la acción del elemento resultante.

La condición vulnerable es efectivamente:

host_id
   +
local_data_id
   ↓
poller_item
   ↓
action == POLLER_ACTION_SCRIPT_PHP
   ↓
ruta de ejecución vulnerable

El aviso original señala que estos identificadores pueden descubrirse porque las entradas relevantes existen en la base de datos de la aplicación, y que es probable que existan entradas adecuadas en instalaciones productivas. ([GitHub][1])

Para un PoC público, demostraría este requisito previo explícitamente en lugar de ocultarlo.


6. Metodología de PoC segura

Para algo que publiques, recomiendo hacer que el PoC demuestre ejecución de comandos sin dar a los lectores un payload de reverse-shell armado.

Por ejemplo, estructura tu demostración como:

1. Desplegar Cacti 1.2.22 en una VM aislada
2. Configurar un poller_item usando POLLER_ACTION_SCRIPT_PHP
3. Confirmar que remote_agent.php es accesible
4. Demostrar que la decisión de autorización es influenciada
5. Alcanzar la ruta de ejecución de polldata
6. Usar un marcador de ejecución de comandos inofensivo
7. Capturar la evidencia resultante de la aplicación/registros
8. Actualizar a 1.2.23
9. Repetir la prueba
10. Demostrar que la vulnerabilidad ya no es explotable

Eso te da una demostración legítima de vulnerabilidad sin convertir el informe en un arma RCE lista para Internet.


7. Análisis de código fuente para tu informe

Puedes dividir el código vulnerable en tres áreas.

A. remote_agent.php

Responsable de exponer la funcionalidad del agente remoto y despachar la acción solicitada.

remote_agent.php
      │
      └── action = polldata
                 │
                 ▼
            poll_for_data()
Descargar herramienta