Skip to content

Commit f4c0f05

Browse files
Merge pull request #261 from AikidoSec/fix-stored-ssrf-issue
Stored SSRF: Add ipv4-mapped ipv6 addresses
2 parents c8fd61b + 5f6bd66 commit f4c0f05

File tree

5 files changed

+27
-143
lines changed

5 files changed

+27
-143
lines changed

.github/workflows/qa-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,4 @@ jobs:
4949
dockerfile_path: ./zen-demo-java/Dockerfile
5050
app_port: 8080
5151
sleep_before_test: 30
52-
skip_tests: test_ssrf,test_stored_ssrf,test_demo_apps_generic_tests
52+
skip_tests: test_ssrf,test_demo_apps_generic_tests

agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/imds/BlockList.java

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package dev.aikido.agent_api.vulnerabilities.ssrf.imds;
22

3+
import dev.aikido.agent_api.helpers.net.IPList;
4+
import static dev.aikido.agent_api.vulnerabilities.ssrf.IsPrivateIP.mapIPv4ToIPv6;
5+
36
public final class IMDSAddresses {
47
private IMDSAddresses() {}
5-
private static final BlockList imdsAddresses = new BlockList();
8+
private static final IPList imdsAddresses = new IPList();
69

710
static {
811
// Add the IP addresses used by AWS EC2 instances for IMDS
9-
imdsAddresses.addAddress("169.254.169.254", "ipv4");
10-
imdsAddresses.addAddress("fd00:ec2::254", "ipv6");
12+
imdsAddresses.add("169.254.169.254");
13+
imdsAddresses.add("fd00:ec2::254");
14+
imdsAddresses.add(mapIPv4ToIPv6("169.254.169.254"));
1115

1216
// Add the IP addresses used for Alibaba Cloud
13-
imdsAddresses.addAddress("100.100.100.200", "ipv4");
17+
imdsAddresses.add("100.100.100.200");
18+
imdsAddresses.add(mapIPv4ToIPv6("100.100.100.200"));
1419
}
1520

1621
/** Checks if the IP is an IMDS IP */
1722
public static boolean isImdsIpAddress(String ip) {
18-
return imdsAddresses.check(ip, "ipv4") || imdsAddresses.check(ip, "ipv6");
23+
return imdsAddresses.matches(ip);
1924
}
2025
}

agent_api/src/test/java/vulnerabilities/ssrf/BlockListTest.java

Lines changed: 0 additions & 100 deletions
This file was deleted.

agent_api/src/test/java/vulnerabilities/ssrf/ResolverTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,22 @@ void testResolvesToImdsIp_WithImdsIp() {
2727
assertEquals("169.254.169.254", Resolver.resolvesToImdsIp(resolvedIps, "example.com"));
2828
}
2929

30+
@Test
31+
void testResolvesToImdsIp_WithIpv4MappedIP() {
32+
Set<String> resolvedIps = new HashSet<>();
33+
resolvedIps.add("::ffff:169.254.169.254"); // IMDS IP
34+
35+
assertEquals("::ffff:169.254.169.254", Resolver.resolvesToImdsIp(resolvedIps, "example.com"));
36+
}
37+
38+
@Test
39+
void testResolvesToImdsIp_WithIpv4MappedIP2() {
40+
Set<String> resolvedIps = new HashSet<>();
41+
resolvedIps.add("::ffff:100.100.100.200"); // IMDS IP
42+
43+
assertEquals("::ffff:100.100.100.200", Resolver.resolvesToImdsIp(resolvedIps, "example.com"));
44+
}
45+
3046
@Test
3147
void testDoesntResolveToImdsIp_WithHostnameImdsIp() {
3248
Set<String> resolvedIps = new HashSet<>();

0 commit comments

Comments
 (0)