Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:13:27 +00:00
parent 599a50fbec
commit c14d2efa43
215 changed files with 1670 additions and 1679 deletions

View File

@@ -1,4 +1,4 @@
# CircleCI Security
# Seguridad de CircleCI
{{#include ../banners/hacktricks-training.md}}
@@ -39,7 +39,7 @@ command: echo $SECRET
environment:
SECRET: A secret
```
Puedes declararlos en texto claro dentro del **entorno de trabajo de construcción**:
Puedes declararlos en texto claro dentro del **entorno del trabajo de construcción**:
```yaml
jobs:
build-job:
@@ -85,17 +85,17 @@ Si tienes **acceso al VCS** (como github), revisa el archivo `.circleci/config.y
#### Enumeración de Variables de Entorno Secretas y Contexto
Revisando el código puedes encontrar **todos los nombres de los secretos** que están siendo **utilizados** en cada archivo `.circleci/config.yml`. También puedes obtener los **nombres de contexto** de esos archivos o verificarlos en la consola web: _https://app.circleci.com/settings/organization/github/\<org_name>/contexts_.
Revisando el código puedes encontrar **todos los nombres de los secretos** que están siendo **utilizados** en cada archivo `.circleci/config.yml`. También puedes obtener los **nombres de contexto** de esos archivos o revisarlos en la consola web: _https://app.circleci.com/settings/organization/github/\<org_name>/contexts_.
#### Exfiltrar Secretos del Proyecto
> [!WARNING]
> Para **exfiltrar TODOS** los **SECRETOS** del proyecto y del contexto, **solo** necesitas tener acceso **de ESCRITURA** a **solo 1 repo** en toda la organización de github (_y tu cuenta debe tener acceso a los contextos, pero por defecto todos pueden acceder a cada contexto_).
> Para **exfiltrar TODOS** los **SECRETOS** del proyecto y del contexto, **solo** necesitas tener acceso de **ESCRITURA** a **solo 1 repo** en toda la organización de github (_y tu cuenta debe tener acceso a los contextos, pero por defecto todos pueden acceder a cada contexto_).
> [!CAUTION]
> La funcionalidad de "**Importar Variables**" permite **importar variables de otros proyectos** a este. Por lo tanto, un atacante podría **importar todas las variables del proyecto de todos los repos** y luego **exfiltrar todas juntas**.
Todos los secretos del proyecto siempre se establecen en el entorno de los trabajos, por lo que solo llamar a env y ofuscarlo en base64 exfiltrará los secretos en la **consola de registro web de workflows**:
Todos los secretos del proyecto siempre se establecen en el entorno de los trabajos, por lo que solo llamar a env y ofuscarlo en base64 exfiltrará los secretos en la **consola de registro web de los flujos de trabajo**:
```yaml
version: 2.1
@@ -163,7 +163,7 @@ jobs:
- exfil-env:
context: Test-Context
```
Si **no tienes acceso a la consola web** pero tienes **acceso al repositorio** y sabes que se utiliza CircleCI, puedes **modificar un flujo de trabajo** que se **activa cada minuto** y que **exfiltra los secretos a una dirección externa**:
Si **no tienes acceso a la consola web** pero tienes **acceso al repositorio** y sabes que se utiliza CircleCI, puedes simplemente **modificar un flujo de trabajo** que se **activa cada minuto** y que **exfiltra los secretos a una dirección externa**:
```yaml
version: 2.1
@@ -194,10 +194,10 @@ context: Test-Context
> [!WARNING]
> Simplemente crear un nuevo `.circleci/config.yml` en un repositorio **no es suficiente para activar una construcción de circleci**. Necesitas **habilitarlo como un proyecto en la consola de circleci**.
#### Escape a la Nube
#### Escape to Cloud
**CircleCI** te da la opción de ejecutar **tus construcciones en sus máquinas o en las tuyas**.\
Por defecto, sus máquinas están ubicadas en GCP, y al principio no podrás encontrar nada relevante. Sin embargo, si una víctima está ejecutando las tareas en **sus propias máquinas (potencialmente, en un entorno de nube)**, podrías encontrar un **punto final de metadatos de nube con información interesante**.
Por defecto, sus máquinas están ubicadas en GCP, y al principio no podrás encontrar nada relevante. Sin embargo, si una víctima está ejecutando las tareas en **sus propias máquinas (potencialmente, en un entorno en la nube)**, podrías encontrar un **punto final de metadatos en la nube con información interesante**.
Ten en cuenta que en los ejemplos anteriores se lanzó todo dentro de un contenedor de docker, pero también puedes **pedir que se lance una máquina VM** (que puede tener diferentes permisos en la nube):
```yaml
@@ -221,15 +221,15 @@ version: 19.03.13
```
#### Persistencia
- Es posible **crear** **tokens de usuario en CircleCI** para acceder a los endpoints de la API con el acceso del usuario.
- Es posible **crear** **tokens de usuario en CircleCI** para acceder a los endpoints de la API con el acceso de los usuarios.
- _https://app.circleci.com/settings/user/tokens_
- Es posible **crear tokens de proyectos** para acceder al proyecto con los permisos otorgados al token.
- _https://app.circleci.com/settings/project/github/\<org>/\<repo>/api_
- Es posible **agregar claves SSH** a los proyectos.
- _https://app.circleci.com/settings/project/github/\<org>/\<repo>/ssh_
- Es posible **crear un trabajo cron en una rama oculta** en un proyecto inesperado que está **filtrando** todas las variables de **contexto env** todos los días.
- O incluso crear en una rama / modificar un trabajo conocido que **filtrará** todo el contexto y los **secretos de proyectos** todos los días.
- Si eres un propietario de github, puedes **permitir orbes no verificados** y configurar uno en un trabajo como **puerta trasera**.
- O incluso crear en una rama / modificar un trabajo conocido que **filtrará** todo el contexto y los **secretos de los proyectos** todos los días.
- Si eres un propietario de github, puedes **permitir orbs no verificados** y configurar uno en un trabajo como **puerta trasera**.
- Puedes encontrar una **vulnerabilidad de inyección de comandos** en alguna tarea e **inyectar comandos** a través de un **secreto** modificando su valor.
{{#include ../banners/hacktricks-training.md}}