In March 2025, Adam Gowdiak disclosed the first public eSIM compromise. His lab extracted private keys from a chip using malware in an eSIM profile – abusing a vulnerability in the Java Card platform. Longtime contributor Eric Vétillard reflects on an architectural root cause:
The real surprise is not that this has happened. It is that it took over 25 years for it to happen. The lack of on-card verification has always been a weakness in the Java Card story. Over the past 25 years, there have been a few attempts to address the issue, but the industry never adopted them. Isn’t a solution to this issue a bit overdue?
The weak spot is bytecode verification: normally a JVM checks applet code for illegal instructions, but Java Card leaves this to off-card tooling to save memory. That was fine when each card had one provider, but eSIM introduced multi-provider provisioning. Now one applet can spy on another.
New bytecode formats could make on-card verification possible, and this exploit may finally push the change. Until then, service providers should verify profiles server-side, and developers cannot take on-chip confidentiality for granted.