diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml index 9490eb49..46e06a91 100644 --- a/commafeed-server/pom.xml +++ b/commafeed-server/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 @@ -461,6 +461,11 @@ dec 0.1.2 + + com.github.seancfoley + ipaddress + 5.6.2 + diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java index 5ee62985..53de6d4b 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java @@ -39,6 +39,9 @@ import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedVersion; import com.google.common.net.HttpHeaders; +import inet.ipaddr.IPAddress; +import inet.ipaddr.IPAddressNetwork; +import inet.ipaddr.IPAddressString; import lombok.RequiredArgsConstructor; import nl.altindag.ssl.SSLFactory; import nl.altindag.ssl.apache5.util.Apache5SslUtils; @@ -48,6 +51,7 @@ import nl.altindag.ssl.apache5.util.Apache5SslUtils; public class HttpClientFactory { private static final DnsResolver DNS_RESOLVER = SystemDefaultDnsResolver.INSTANCE; + private static final IPAddress CGNAT_RANGE = new IPAddressString("100.64.0.0/10").getAddress(); private final CommaFeedConfiguration config; private final CommaFeedVersion version; @@ -111,8 +115,8 @@ public class HttpClientFactory { } private static boolean isLocalAddress(InetAddress address) { - return address.isSiteLocalAddress() || address.isAnyLocalAddress() || address.isLinkLocalAddress() || address.isLoopbackAddress() - || address.isMulticastAddress(); + IPAddress ip = new IPAddressNetwork.IPAddressGenerator().from(address); + return ip.isLocal() || ip.isLoopback() || ip.isMulticast() || CGNAT_RANGE.contains(ip); } private record BlockLocalAddressesDnsResolver(DnsResolver delegate) implements DnsResolver { diff --git a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java index f029c61f..16dc72e9 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java @@ -408,11 +408,13 @@ class HttpGetterTest { Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://10.0.0.1")); Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://172.16.0.1")); Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://192.168.0.1")); + Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://100.64.0.1")); } @Test void privateIpv6Ranges() { Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://[fe80::215:5dff:fe15:102]")); + Assertions.assertThrows(UnknownHostException.class, () -> getter.get("http://[fd00:dead:beef::50]")); } }