1+ #include < aws/testing/AwsCppSdkGTestSuite.h>
2+ #include < aws/core/auth/SSOCredentialsProvider.h>
3+ #include < aws/core/internal/AWSHttpResourceClient.h>
4+ #include < aws/core/client/ClientConfiguration.h>
5+
6+ using namespace Aws ;
7+ using namespace Aws ::Auth;
8+ using namespace Aws ::Client;
9+
10+ class SSRFValidationTest : public Aws ::Testing::AwsCppSdkGTestSuite {
11+ protected:
12+ void SetUp () override {
13+ AwsCppSdkGTestSuite::SetUp ();
14+ }
15+
16+ void TearDown () override {
17+ AwsCppSdkGTestSuite::TearDown ();
18+ }
19+
20+ Aws::Internal::SSOCredentialsClient::SSOGetRoleCredentialsRequest CreateSSORequest () {
21+ Aws::Internal::SSOCredentialsClient::SSOGetRoleCredentialsRequest request;
22+ request.m_ssoAccountId = " 123456789012" ;
23+ request.m_ssoRoleName = " TestRole" ;
24+ request.m_accessToken = " test-token" ;
25+ return request;
26+ }
27+ };
28+
29+ TEST_F (SSRFValidationTest, TestSSOCredentialsClientMaliciousRegion) {
30+ std::vector<Aws::String> maliciousRegions = {
31+ " @attacker.com#" ,
32+ " attacker.com@aws" ,
33+ " 127.0.0.1" ,
34+ " 169.254.169.254" ,
35+ " @evil.com#.amazonaws.com" ,
36+ 37+ " ../../../etc/passwd" ,
38+ " internal-service.local"
39+ };
40+
41+ for (const auto & region : maliciousRegions) {
42+ EXPECT_DEATH ({
43+ ClientConfiguration config;
44+ config.region = region;
45+ Aws::Internal::SSOCredentialsClient ssoClient (config);
46+ auto request = CreateSSORequest ();
47+ auto result = ssoClient.GetSSOCredentials (request);
48+ }, " .*" ) << " SSO should reject malicious region: " << region;
49+ }
50+ }
51+
52+ TEST_F (SSRFValidationTest, TestValidRegionWithSSOClient) {
53+ ClientConfiguration config;
54+ config.region = " us-east-1" ;
55+
56+ Aws::Internal::SSOCredentialsClient ssoClient (config);
57+ auto request = CreateSSORequest ();
58+
59+ AWS_LOGSTREAM_INFO (" SSRFValidationTest" ,
60+ " Testing SSO with valid region: us-east-1" );
61+ auto result = ssoClient.GetSSOCredentials (request);
62+
63+ // The request will fail due to invalid credentials, but it shouldn't be due to region validation
64+ AWS_LOGSTREAM_INFO (" SSRFValidationTest" ,
65+ " Credentials request completed for valid region" );
66+ }
0 commit comments