Summary
If the OpenComputers mod is installed as part of a Minecraft server hosted on a popular cloud hosting provider, such as AWS, GCP and Azure, those metadata services' API endpoints are not forbidden (aka "blacklisted") by default. As such, any player can gain access to sensitive information exposed via those metadata servers, potentially allowing them to pivot or privilege escalate into the hosting provider.
In addition, IPv6 addresses are not correctly filtered at all, allowing broader access into the local IPv6 network.
This is a follow up of a vulnerability that @JLLeitschuh also reported back in 2017:
Details
The default set of domains that are forbidden by OpenComputers are defined here:
|
# This is a list of forbidden domain names. If an HTTP request is made |
|
# or a socket connection is opened the target address will be compared |
|
# to the addresses / address ranges in this list. It it is present in this |
|
# list, the request will be denied. |
|
# Entries are either domain names (www.example.com) or IP addresses in |
|
# string format (10.0.0.3), optionally in CIDR notation to make it easier |
|
# to define address ranges (1.0.0.0/8). Domains are resolved to their |
|
# actual IP once on startup, future requests are resolved and compared |
|
# to the resolved addresses. |
|
# By default all local addresses are blocked. This is only meant as a |
|
# thin layer of security, to avoid average users hosting a game on their |
|
# local machine having players access services in their local network. |
|
# Server hosters are expected to configure their network outside of the |
|
# mod's context in an appropriate manner, e.g. using a system firewall. |
|
blacklist: [ |
|
"127.0.0.0/8" |
|
"0.0.0.0/8" |
|
"10.0.0.0/8" |
|
"192.168.0.0/16" |
|
"172.16.0.0/12" |
|
] |
And those are interpreted here:
|
class AddressValidator(val value: String) { |
|
val validator: (InetAddress, String) => Option[Boolean] = try cidrPattern.findFirstIn(value) match { |
|
case Some(cidrPattern(address, prefix)) => |
|
val addr = InetAddresses.coerceToInteger(InetAddresses.forString(address)) |
|
val mask = 0xFFFFFFFF << (32 - prefix.toInt) |
|
val min = addr & mask |
|
val max = min | ~mask |
|
(inetAddress: InetAddress, host: String) => Some(inetAddress match { |
|
case v4: Inet4Address => |
|
val numeric = InetAddresses.coerceToInteger(v4) |
|
min <= numeric && numeric <= max |
|
case _ => true // Can't check IPv6 addresses so we pass them. |
|
}) |
|
case _ => |
|
val address = InetAddress.getByName(value) |
|
(inetAddress: InetAddress, host: String) => Some(host == value || inetAddress == address) |
|
} catch { |
|
case t: Throwable => |
|
OpenComputers.log.warn("Invalid entry in internet blacklist / whitelist: " + value, t) |
|
(inetAddress: InetAddress, host: String) => None |
|
} |
|
|
|
def apply(inetAddress: InetAddress, host: String) = validator(inetAddress, host) |
|
} |
Unfortunately, by default, this list does not include the IP or Domains used by most IMDS:
- IPv4:
169.254.169.254
- IPv6:
fd00:ec2::254
(in the case of AWS)
metadata.google.internal
(in the case of GCP)
- Oracle Cloud:
192.0.0.192
- Alibaba Cloud:
100.100.100.200
Impact
This can allow a player on a server using an OpenComputers computer to access parts of the private IPv4 address space, as well as the whole IPv6 address space, in order to retrieve sensitive information like:
- User-data passed to the system at boot time (could contain secrets)
- IAM role credentials (could allow access to the greater AWS cloud account)
- Managed identity credentials (could allow access to the Azure account)
- Service account tokens (allowing access to the GCP account)
This issue affects every version of OpenComputers with the Internet Card feature enabled; that is, OpenComputers 1.2.0 and above in their most common, default configurations.
Mitigations
- The following mitigation strategies are available, in order from most to least recommended:
- Upgrading to a non-affected version of OpenComputers (v1.8.3 for Minecraft 1.7.10 and 1.12.2),
- Disabling the Internet Card feature completely,
- If using OpenComputers 1.3.0 or above, the following can also be done:
- Using the allow list (
opencomputers.internet.whitelist
option) - this will prohibit connections to any IP addresses and/or domains not listed.
- Adding the following entries to the block list (
opencomputers.internet.blacklist
option):
"100.64.0.0/10",
"169.254.0.0/16",
"192.0.0.0/24",
"192.0.2.0/24",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"224.0.0.0/3"
Note that, while filtering IPv6 addresses is not directly supported, thanks to an IPv4 coercion implemented by OpenComputers 1.3.0 and above, blocking 224.0.0.0/3
will also block all IPv6 addresses.
References
Related
Summary
If the OpenComputers mod is installed as part of a Minecraft server hosted on a popular cloud hosting provider, such as AWS, GCP and Azure, those metadata services' API endpoints are not forbidden (aka "blacklisted") by default. As such, any player can gain access to sensitive information exposed via those metadata servers, potentially allowing them to pivot or privilege escalate into the hosting provider.
In addition, IPv6 addresses are not correctly filtered at all, allowing broader access into the local IPv6 network.
This is a follow up of a vulnerability that @JLLeitschuh also reported back in 2017:
Details
The default set of domains that are forbidden by OpenComputers are defined here:
OpenComputers/src/main/resources/application.conf
Lines 966 to 986 in 5b2ba76
And those are interpreted here:
OpenComputers/src/main/scala/li/cil/oc/Settings.scala
Lines 614 to 637 in 5b2ba76
Unfortunately, by default, this list does not include the IP or Domains used by most IMDS:
169.254.169.254
fd00:ec2::254
(in the case of AWS)metadata.google.internal
(in the case of GCP)192.0.0.192
100.100.100.200
Impact
This can allow a player on a server using an OpenComputers computer to access parts of the private IPv4 address space, as well as the whole IPv6 address space, in order to retrieve sensitive information like:
This issue affects every version of OpenComputers with the Internet Card feature enabled; that is, OpenComputers 1.2.0 and above in their most common, default configurations.
Mitigations
opencomputers.internet.whitelist
option) - this will prohibit connections to any IP addresses and/or domains not listed.opencomputers.internet.blacklist
option):Note that, while filtering IPv6 addresses is not directly supported, thanks to an IPv4 coercion implemented by OpenComputers 1.3.0 and above, blocking
224.0.0.0/3
will also block all IPv6 addresses.References
Related