AWS - STS 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

STS

sts:AssumeRole

Her rol, bir rol güven politikası ile oluşturulur; bu politika oluşturulan rolü kimlerin üstlenebileceğini belirtir. Eğer aynı hesap içindeki bir rol, bir hesabın onu üstlenebileceğini belirtiyorsa, bu hesabın role (ve potansiyel olarak privesc) erişebileceği anlamına gelir.

Örneğin, aşağıdaki rol güven politikası, herkesin onu üstlenebileceğini gösterir; bu nedenle her kullanıcı privesc yapabilecektir ve o role bağlı izinlere erişim sağlayacaktır.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

Bir rolü şu komutla taklit edebilirsiniz:

aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

Potential Impact: role’a Privesc.

Caution

Bu durumda izin sts:AssumeRole’un istismar edilecek role belirtilmiş olması gerektiğini ve saldırgana ait bir policy’de olmaması gerektiğini unutmayın.
Bir istisna dışında, farklı bir account’taki role assume etmek için saldırgan hesabın aynı zamanda role üzerinde sts:AssumeRole iznine sahip olması gerekir.

sts:AssumeRoleWithSAML

Bu trust policy’ye sahip role, SAML ile kimlik doğrulaması yapılmış kullanıcılara role bürünme erişimi verir.

An example of a trust policy with this permission is:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

Genel olarak rolü taklit etmek için kimlik bilgileri oluşturmak amacıyla şöyle bir şey kullanabilirsiniz:

aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

Ancak sağlayıcılar bunu kolaylaştırmak için kendi araçlarına sahip olabilir, örneğin onelogin-aws-assume-role:

onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

Potansiyel Etki: Rol için Privesc.

sts:AssumeRoleWithWebIdentity

Bu izin, bir web kimlik sağlayıcısı ile mobil veya web uygulamalarında, EKS… içinde kimlik doğrulanmış kullanıcılar için geçici güvenlik kimlik bilgileri elde etme yetkisi verir. Learn more here.

For example, if an EKS service account should be able to impersonate an IAM role, it will have a token in /var/run/secrets/eks.amazonaws.com/serviceaccount/token and can assume the role and get credentials doing something like:

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikaları kullanarak IAM rolü üstlenmesine olanak tanır. Ancak trust policies düzgün şekilde sınırlandırılmadığında, bunlar privilege escalation için kötüye kullanılabilir.

Bu saldırıyı anlamak için trust anchor’ın ne olduğunu açıklamak gerekir. AWS IAM RolesAnywhere’daki bir trust anchor, güven kökünü oluşturan varlıktır; hesapta kayıtlı bir Certificate Authority (CA) ’nın açık sertifikasını içerir, böylece AWS sunulan X.509 sertifikalarını doğrulayabilir. Bu nedenle istemci sertifikası o CA tarafından düzenlendiyse ve trust anchor aktif durumdaysa, AWS bunu geçerli olarak tanır.

Ayrıca, bir profile, X.509 sertifikasının hangi özniteliklerinin (ör. CN, OU veya SAN) session tags’e dönüştürüleceğini tanımlayan yapılandırmadır; bu tag’ler daha sonra trust policy’nin koşullarıyla karşılaştırılır.

Bu policy, hangi trust anchor veya sertifika özniteliklerine izin verildiği konusunda kısıtlama içermiyor. Sonuç olarak, hesaptaki herhangi bir trust anchor’a bağlı herhangi bir sertifika bu rolü üstlenmek için kullanılabilir.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

Privesc için, aws_signing_helper şu adresten gereklidir: https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

Daha sonra geçerli bir sertifika kullanarak saldırgan daha yüksek ayrıcalıklı role pivot yapabilir.

aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin

Güven kökü, istemcinin readonly.pem sertifikasının yetkili CA’sından geldiğini doğrular; bu readonly.pem sertifikasının içinde ise imzanın karşılık gelen özel anahtar readonly.key ile yapıldığını doğrulamak için AWS’in kullandığı açık anahtar bulunur.

Sertifika ayrıca default profilinin etiketlere dönüştürdüğü (ör. CN veya OU) öznitelikler sağlar; rolün güven politikasının erişimi yetkilendirip yetkilendirmeyeceğine karar vermek için bu etiketleri kullanabilir. Eğer güven politikasında koşul yoksa, bu etiketlerin bir kullanımı olmaz ve geçerli bir sertifikaya sahip olan herkese erişim verilir.

Bu saldırının mümkün olması için hem güven kökünün hem de default profilin aktif olması gerekir.

Referanslar

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