Skip to content

Commit 7dda04a

Browse files
author
Brandon Dahler
committed
Do not sign X-Forwarded-For header if present on the request
1 parent c497318 commit 7dda04a

File tree

7 files changed

+26
-3
lines changed

7 files changed

+26
-3
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "brandondahler",
5+
"description": "X-Forwarded-For headers will no longer be signed during SigV4 authentication"
6+
}

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public abstract class AbstractAws4Signer<T extends Aws4SignerParams, U extends A
6868
private static final FifoCache<SignerKey> SIGNER_CACHE =
6969
new FifoCache<>(SIGNER_CACHE_MAX_SIZE);
7070
private static final List<String> LIST_OF_HEADERS_TO_IGNORE_IN_LOWER_CASE =
71-
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding");
71+
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding", "x-forwarded-for");
7272

7373
protected SdkHttpFullRequest.Builder doSign(SdkHttpFullRequest request,
7474
Aws4SignerRequestParams requestParams,

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/util/HeaderTransformsHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
public final class HeaderTransformsHelper {
3333

3434
private static final List<String> LIST_OF_HEADERS_TO_IGNORE_IN_LOWER_CASE =
35-
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding");
35+
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding", "x-forwarded-for");
3636

3737
private HeaderTransformsHelper() {
3838
}

core/auth/src/test/java/software/amazon/awssdk/auth/signer/Aws4SignerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,4 +412,18 @@ public void TransferEncodingIsNotSigned_NotSigned() {
412412
"SignedHeaders=host;x-amz-archive-description;x-amz-date, " +
413413
"Signature=581d0042389009a28d461124138f1fe8eeb8daed87611d2a2b47fd3d68d81d73");
414414
}
415+
416+
@Test
417+
public void XForwardedForIsNotSigned_NotSigned() {
418+
AwsBasicCredentials credentials = AwsBasicCredentials.create("akid", "skid");
419+
SdkHttpFullRequest.Builder request = generateBasicRequest();
420+
request.putHeader("X-Forwarded-For", "127.0.0.1");
421+
422+
SdkHttpFullRequest actual = SignerTestUtils.signRequest(signer, request.build(), credentials, "demo", signingOverrideClock, "us-east-1");
423+
424+
assertThat(actual.firstMatchingHeader("Authorization"))
425+
.hasValue("AWS4-HMAC-SHA256 Credential=akid/19810216/us-east-1/demo/aws4_request, " +
426+
"SignedHeaders=host;x-amz-archive-description;x-amz-date, " +
427+
"Signature=581d0042389009a28d461124138f1fe8eeb8daed87611d2a2b47fd3d68d81d73");
428+
}
415429
}

core/auth/src/test/java/software/amazon/awssdk/auth/signer/internal/util/HeaderTransformsHelperTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ void shouldExcludeIgnoredHeadersWhenCanonicalizing() {
3737
headers.put("user-agent", Collections.singletonList("md/user"));
3838
headers.put("expect", Collections.singletonList("100-continue"));
3939
headers.put("transfer-encoding", Collections.singletonList("chunked"));
40+
headers.put("x-forwarded-for", Collections.singletonList("127.0.0.1"));
4041

4142
// Headers that should be included in signing
4243
headers.put("Content-Type", Collections.singletonList("application/json"));
@@ -56,6 +57,7 @@ void shouldExcludeIgnoredHeadersWhenCanonicalizing() {
5657
assertFalse(canonicalizedHeaders.containsKey("user-agent"), "Should not contain user-agent header");
5758
assertFalse(canonicalizedHeaders.containsKey("expect"), "Should not contain expect header");
5859
assertFalse(canonicalizedHeaders.containsKey("transfer-encoding"), "Should not contain transfer-encoding header");
60+
assertFalse(canonicalizedHeaders.containsKey("x-forwarded-for"), "Should not contain x-forwarded-for header");
5961
}
6062

6163
}

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/V4CanonicalRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
@Immutable
4444
public final class V4CanonicalRequest {
4545
private static final List<String> HEADERS_TO_IGNORE_IN_LOWER_CASE =
46-
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding");
46+
Arrays.asList("connection", "x-amzn-trace-id", "user-agent", "expect", "transfer-encoding", "x-forwarded-for");
4747

4848
private final SdkHttpRequest request;
4949
private final String contentHash;

core/http-auth-aws/src/test/java/software/amazon/awssdk/http/auth/aws/internal/signer/V4CanonicalRequestTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public void canonicalRequest_WithForbiddenHeaders_shouldExcludeForbidden() {
8585
.putHeader("foo", "bar")
8686
.putHeader("x-amzn-trace-id", "wontBePresent")
8787
.putHeader("Transfer-Encoding", "wontBePresent")
88+
.putHeader("X-Forwarded-For", "wontBePresent")
8889
.build();
8990
V4CanonicalRequest cr = new V4CanonicalRequest(request, "sha-256",
9091
new V4CanonicalRequest.Options(true,

0 commit comments

Comments
 (0)