Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
SSRF reaching internal services only when the host is on a NAT64-routed IPv6 network (AC:H), any player runs Lua unauthenticated (PR:N), and access to other systems is a scope change (S:C) exposing internal responses (C:H).
Primary rating from Vendor (https://github.com/cc-tweaked/CC-Tweaked).
CVSS VectorVendor: https://github.com/cc-tweaked/CC-Tweaked
Lifecycle Timeline
5DescriptionCVE.org
Summary
CC-Tweaked's HTTP API (http.request, http.websocket) blocks requests to private network ranges to prevent server-side request forgery (SSRF). This protection can be bypassed on IPv6-capable servers using NAT64 well-known prefix addresses (64:ff9b::/96). An attacker who can execute Lua code can reach any internal IPv4 service that the filter is intended to block, by addressing it as http://[64:ff9b::<ipv4-as-hex>]/ instead of its direct IPv4 address. This affects any CC-Tweaked deployment on a network with NAT64 routing - a configuration that is standard on AWS, GCP, and other cloud platforms when using IPv6-only subnets.
Details
The IP filter in PrivatePattern.matches() (AddressPredicate.java#L121-L130) blocks private network ranges by calling Java's standard InetAddress classification methods:
public boolean matches(InetAddress socketAddress) {
return socketAddress.isAnyLocalAddress()
|| socketAddress.isLoopbackAddress()
|| socketAddress.isLinkLocalAddress()
|| socketAddress.isSiteLocalAddress()
|| socketAddress.isMulticastAddress()
|| isUniqueLocalAddress(socketAddress)
|| isCarrierGradeNatAddress(socketAddress)
|| additionalAddresses.contains(socketAddress);
}When a NAT64 address such as 64:ff9b::c0a8:0101 (encoding 192.168.1.1) is resolved via new InetSocketAddress("64:ff9b::c0a8:0101", 80), Java returns an Inet6Address. Every method above returns false for this address - the 64:ff9b::/96 prefix is not recognised by any of Java's built-in classification methods. The address passes the filter and CC-Tweaked opens a connection.
On a network with a 64:ff9b::/96 → NAT Gateway route, that connection is translated at the network level: the embedded IPv4 address is extracted and the packet is forwarded to 192.168.1.1:80. The internal service receives a normal IPv4 TCP connection.
The existing 6to4 (2002::/16) mitigation in AddressRule.java#L74-L75 does not cover the NAT64 prefix. No other check catches 64:ff9b::/96.
PoC
Preconditions (all three required):
- The server running CC-Tweaked has an IPv6 address assigned
- The network has a NAT Gateway (or equivalent)
- The route table contains
64:ff9b::/96 → NAT Gateway- the standard AWS/GCP configuration for IPv6-only subnets with outbound IPv4 access (AWS documentation)
Lua payload (targets an internal service at 10.0.1.17:8888):
-- 10.0.1.17 = 0x0a000111, expressed as NAT64: 64:ff9b::0a00:0111
local res = http.request("http://[64:ff9b::0a00:0111]:8888/")
if res then print(res.readAll()) endConversion formula - for any blocked IPv4 a.b.c.d, the bypass address is:
64:ff9b::<hex(a)><hex(b)>:<hex(c)><hex(d)>Impact
This is a server-side request forgery (SSRF) vulnerability. Any user able to execute Lua code on a CC-Tweaked computer - including players on a public server - can use it to send HTTP requests to internal IPv4 services that the HTTP filter is designed to block. On cloud-hosted servers (AWS, GCP, Azure) using IPv6-only subnets with NAT64, which is an increasingly common configuration following AWS's February 2024 public IPv4 pricing change, this includes other instances in the VPC, internal databases, and cloud management APIs.
Suggested fix: add a check for the NAT64 well-known prefix in PrivatePattern.matches():
|| isNAT64Address(socketAddress)
private boolean isNAT64Address(InetAddress address) {
if (!(address instanceof Inet6Address)) return false;
byte[] b = address.getAddress();
// 64:ff9b::/96 - NAT64 well-known prefix (RFC 6052)
return b[0] == 0x00 && b[1] == 0x64 &&
b[2] == (byte) 0xff && b[3] == (byte) 0x9b &&
b[4] == 0 && b[5] == 0 && b[6] == 0 && b[7] == 0 &&
b[8] == 0 && b[9] == 0 && b[10] == 0 && b[11] == 0;
}This vulnerability does not seem to work on servers running on modern versions of MacOS.
AnalysisAI
SSRF filter bypass in CC-Tweaked (the ComputerCraft Minecraft mod) before 1.119.0 lets any user who can run Lua reach internal IPv4 services that the HTTP API's private-range blocklist is meant to protect. By encoding a blocked IPv4 address inside the NAT64 well-known prefix (64:ff9b::/96), an attacker crafts an IPv6 literal that Java's InetAddress classification methods do not recognise as private, so http.request/http.websocket connect to it and the network's NAT64 gateway translates it back to the target IPv4 service. A working Lua PoC is published in the vendor advisory, but there is no public exploit identified as being used in attacks; EPSS is low (0.05%, 17th percentile) and it is not in CISA KEV.
Technical ContextAI
The vulnerability is a CWE-918 server-side request forgery caused by an incomplete IP-address denylist. CC-Tweaked's PrivatePattern.matches() (AddressPredicate.java) relies on Java's built-in InetAddress classifiers - isAnyLocalAddress, isLoopbackAddress, isLinkLocalAddress, isSiteLocalAddress, isMulticastAddress - plus custom checks for unique-local and carrier-grade-NAT ranges. None of these recognise RFC 6052 NAT64 addresses in the 64:ff9b::/96 well-known prefix, which embed a target IPv4 address in the low 32 bits (e.g. 64:ff9b::0a00:0111 encodes 10.0.1.17). On dual-stack or IPv6-only hosts with a 64:ff9b::/96 → NAT gateway route - the standard AWS/GCP configuration for IPv6-only subnets needing outbound IPv4 - the OS transparently translates the connection to the embedded IPv4 destination. The mod already special-cases the 6to4 2002::/16 prefix in AddressRule.java but never added the analogous NAT64 check. Affected packages are the cc.tweaked:cc-tweaked-*-core Maven artifacts across Minecraft loader versions 1.19.3 through 1.21.
RemediationAI
Vendor-released patch: upgrade CC-Tweaked to 1.119.0 or later for your Minecraft version, which adds an explicit NAT64 well-known prefix check to PrivatePattern.matches() (advisory: https://github.com/cc-tweaked/CC-Tweaked/security/advisories/GHSA-5jh9-2h63-pw4q). If you cannot upgrade immediately, the most effective compensating control is to remove the 64:ff9b::/96 → NAT gateway route from the host/VPC route table or disable NAT64/DNS64 for the subnet running the server, which breaks the bypass entirely but also removes IPv4 reachability for any legitimate outbound traffic on IPv6-only instances. Alternatively, add 64:ff9b::/96 (and, for defence in depth, other translation prefixes) to CC-Tweaked's HTTP blocklist rules in the mod configuration so the address range is denied at the application layer, or disable the HTTP API (http.request/http.websocket) altogether via config if server gameplay does not require it - at the cost of breaking any Lua programs that rely on outbound HTTP. Where full disablement is unacceptable, restrict the HTTP allowlist to only the specific external hosts programs legitimately need, and place the server in a network segment with no route to internal databases or cloud metadata/management endpoints.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-46424
GHSA-5jh9-2h63-pw4q