Skip to content

Commit cdc06ae

Browse files
committed
Merge branch 'fix-ipv4-mapped-ipv6-for-bypassed-ips' into update-qa-tests
2 parents 64b2cc2 + 594f96a commit cdc06ae

3 files changed

Lines changed: 39 additions & 31 deletions

File tree

agent_api/src/main/java/dev/aikido/agent_api/helpers/net/IPList.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,20 @@ public void add(String ipOrCIDR) {
1818
return; // Don't add if IP is null
1919
}
2020
IPAddress ip = new IPAddressString(ipOrCIDR).getAddress();
21+
if (ip == null) {
22+
return;
23+
}
24+
// Normalize IPv4-mapped IPv6 addresses to their IPv4 form so matching is symmetric.
25+
if (ip.isIPv6() && ip.toIPv6().isIPv4Convertible()) {
26+
IPAddress ipv4 = ip.toIPv6().toIPv4();
27+
if (ipv4 != null) {
28+
ip = ipv4;
29+
}
30+
}
2131
if (ipOrCIDR.contains("/")) {
22-
// CIDR :
2332
ip = ip.toPrefixBlock();
2433
}
25-
if (ip != null) {
26-
ipAddresses.add(ip);
27-
}
34+
ipAddresses.add(ip);
2835
}
2936

3037
public boolean matches(String ip) {

agent_api/src/test/java/collectors/WebRequestCollectorTest.java

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -262,33 +262,6 @@ void testReport_ipBlockedUsingLists_IPv4MappedBypass() {
262262
assertNull(Context.get());
263263
}
264264

265-
@Test
266-
void testReport_bypassedIp_setsBypassedStore() {
267-
List<String> bypassedIps = List.of("192.168.1.1");
268-
ServiceConfigStore.updateFromAPIResponse(new APIResponse(
269-
true, "", getUnixTimeMS(), List.of(), List.of(), bypassedIps, false, null, true, false, List.of()
270-
));
271-
272-
assertFalse(BypassedContextStore.isBypassed());
273-
274-
WebRequestCollector.Res response = WebRequestCollector.report(contextObject);
275-
276-
assertNull(response);
277-
assertNull(Context.get());
278-
assertTrue(BypassedContextStore.isBypassed());
279-
}
280-
281-
@Test
282-
void testReport_nonBypassedIp_clearsBypassedStore() {
283-
BypassedContextStore.setBypassed(true);
284-
assertTrue(BypassedContextStore.isBypassed());
285-
286-
WebRequestCollector.Res response = WebRequestCollector.report(contextObject);
287-
288-
assertNull(response);
289-
assertFalse(BypassedContextStore.isBypassed());
290-
}
291-
292265
@Test
293266
void testReport_ipNotAllowedUsingLists_Ip_Bypassed() {
294267
ReportingApi.APIListsResponse blockedListsRes = new ReportingApi.APIListsResponse(

agent_api/src/test/java/helpers/IPListTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,32 @@ public void testBlocklistStoredIPv4MappedMatchesIPv4Input() {
140140
blocklist.add("::ffff:23.45.67.89");
141141
assertTrue(blocklist.matches("::ffff:23.45.67.89"));
142142
}
143+
144+
@Test
145+
public void testBlocklistAddInvalidIpIgnored() {
146+
blocklist.add("notanip");
147+
assertEquals(0, blocklist.length());
148+
assertFalse(blocklist.matches("192.168.1.1"));
149+
}
150+
151+
@Test
152+
public void testBlocklistLengthEmpty() {
153+
assertEquals(0, blocklist.length());
154+
}
155+
156+
@Test
157+
public void testBlocklistStoredIPv4MappedMatchesPlainIPv4() {
158+
blocklist.add("::ffff:23.45.67.89");
159+
assertTrue(blocklist.matches("23.45.67.89"));
160+
assertTrue(blocklist.matches("::ffff:23.45.67.89"));
161+
assertFalse(blocklist.matches("23.45.67.90"));
162+
}
163+
164+
@Test
165+
public void testBlocklistStoredIPv4MappedCidrMatchesPlainIPv4() {
166+
blocklist.add("::ffff:10.0.0.0/104");
167+
assertTrue(blocklist.matches("10.1.2.3"));
168+
assertTrue(blocklist.matches("::ffff:10.1.2.3"));
169+
assertFalse(blocklist.matches("11.1.2.3"));
170+
}
143171
}

0 commit comments

Comments
 (0)