AWS - IAM Post Exploitation

Support HackTricks

IAM

Aby uzyskać więcej informacji na temat dostępu IAM:

AWS - IAM, Identity Center & SSO Enum

Problem z Confused Deputy

Jeśli pozwolisz zewnętrznemu kontu (A) uzyskać dostęp do roli w swoim koncie, prawdopodobnie będziesz miał 0 widoczności na to, kto dokładnie może uzyskać dostęp do tego zewnętrznego konta. To jest problem, ponieważ jeśli inne zewnętrzne konto (B) może uzyskać dostęp do zewnętrznego konta (A), możliwe jest, że B również będzie mogło uzyskać dostęp do twojego konta.

Dlatego, gdy pozwalasz zewnętrznemu kontu na dostęp do roli w swoim koncie, możliwe jest określenie ExternalId. To jest "tajny" ciąg, który zewnętrzne konto (A) musi określić, aby przyjąć rolę w twojej organizacji. Ponieważ zewnętrzne konto B nie zna tego ciągu, nawet jeśli ma dostęp do A, nie będzie mogło uzyskać dostępu do twojej roli.

Należy jednak zauważyć, że ten ExternalId "tajny" nie jest tajemnicą, każdy, kto może przeczytać politykę przyjmowania ról IAM, będzie mógł go zobaczyć. Ale tak długo, jak zewnętrzne konto A to zna, a zewnętrzne konto B tego nie zna, zapobiega to B nadużywaniu A, aby uzyskać dostęp do twojej roli.

Przykład:

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

Aby atakujący mógł wykorzystać zdezorientowanego zastępcę, musi w jakiś sposób ustalić, czy podmioty bieżącego konta mogą udawać role w innych kontach.

Nieoczekiwane zaufania

Wildcard jako podmiot

{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" },
}

Ta polityka zezwala wszystkim AWS na przyjęcie roli.

Usługa jako główny

{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

Ta polityka pozwala każdemu kontu skonfigurować swoje apigateway, aby wywołać tę Lambdę.

S3 jako główny

"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

Jeśli kubeł S3 jest podany jako główny, ponieważ kubeł S3 nie ma identyfikatora konta, jeśli usunięto twój kubeł, a atakujący utworzył go na swoim koncie, to mogliby to wykorzystać.

Nieobsługiwane

{
"Effect": "Allow",
"Principal": {"Service": "cloudtrail.amazonaws.com"},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}

A common way to avoid Confused Deputy problems is the use of a condition with AWS:SourceArn to check the origin ARN. However, niektóre usługi mogą tego nie wspierać (jak CloudTrail według niektórych źródeł).

References

Support HackTricks

Last updated