Skip to content

Commit 2adcf1f

Browse files
committed
testing url validation
1 parent 599883a commit 2adcf1f

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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

Comments
 (0)