Limit the JVM to AVX2
-XX:UseAVX=2Keeps AVX2 and disables AVX-512 throughout that JVM.
Presented to you by Calif Research
Write Once, Run Everywhere
You did everything right. On certain modern CPUs, a bug in Java itself can still let an attacker run code on your server.
Java sits behind software builds, company logins, search, internal wikis, and web applications. Server access can expose source code, deployment credentials, login keys, and private data.
Exposure requires an unpatched x86-64 HotSpot JVM, AVX-512 VBMI/BW, BMI2, and an application path that decodes untrusted Base64.
3rd-generation Xeon Ice Lake, 4th-generation Sapphire Rapids, 5th-generation Emerald Rapids, and Xeon 6 P-cores. On PCs, check 10th- and 11th-generation Core models with AVX-512, including Ice Lake and Tiger Lake. Xeon 6 E-cores and older Xeons without VBMI do not use this path.
| PROVIDER | FAMILIES TO CHECK |
|---|---|
| GOOGLE CLOUD | Intel: C3, C4, N4, and N2 on Ice Lake. AMD: C3D, C4D, N4D, H4D.N2 can also use Cascade Lake; check its actual CPU platform. |
| AWS EC2 | Intel: C6i/M6i/R6i, C7i/M7i/R7i, C8i/M8i/R8i. AMD: C7a/M7a/R7a, C8a/M8a/R8a. |
| AZURE | Dv5/Dsv5 and Ev5/Esv5 on Ice Lake or Sapphire Rapids; AMD Dasv6 and Easv6 on Genoa. |
| ORACLE CLOUD | Intel Standard3 and AMD Standard.E5 / Standard.E6, including their Flex VM shapes. |
This x86 bug does not affect AWS Graviton or Google Axion.
Run inside the VM or container.
grep -m1 '^flags' /proc/cpuinfo | tr ' ' '\n' | grep -E '^(avx512f|avx512bw|avx512vl|avx512vbmi|bmi2)$'The output must include all five flags.
Append one flag to your JVM options, then restart the service.
Verify UseAVX = 2 or UseBASE64Intrinsics = false with jcmd 1234 VM.flags -all. Install your vendor’s fixed JDK when available.
How the same Java bug reaches build systems, package repositories, company logins, source-code review, IoT platforms, and ordinary web applications.
Public use gives a sense of scale: Netflix uses Java and Spring Boot, Android and Chromium use Gerrit, and NASA’s JPL uses Jira and Confluence. The demonstrations below use our own deployments.
An AVX-512 tail-length underflow enables a 64-byte store past the output array. Java throws only after the write.
Base64.getDecoder().decode("A".repeat(64) + "=");ONE BLOCK = ONE BYTE / OFFSETS IN HEX
50BYTES ALLOCATED
0000–003150 B0030–006F64 B0032–006F62 BThe allocating decoder reserves 50 bytes for 64 valid characters followed by a single padding character.