SHA-1 Image Segment Overflow
SHA-1 Image Segment Overflow or SHAtter was an exploit that allowed unsigned code execution from a flaw in the bootrom. It was never used in a public jailbreak because the limera1n exploit was released first, and more devices were vulnerable to it. SHAtter was patched in the A5 bootrom and therefore, never publicly released.
SHAtter only works with A4 devices:
- vulnerability: posixninja (7 May 2010), also discovered independently by geohot
- research: posixninja, pod2g, also MuscleNerd
- exploit: pod2g
- a heap overflow caused by usb_control_msg(0xA1, 1)
- a way to dump the bootrom using USB descriptors request
posixninja continued fuzzing on these devices, and found that with a particular sequence of USB control messages, it was possible for the first time to dump the BSS+Heap+Stack (on newer devices only).
Interestingly, his first attempts to dump the memory resulted in rebooting the device. Research began to figure out why the device would reboot. posixninja found the reason and proposed different ideas to exploit this. He also reversed tons of assembly code of the bootrom in this period, giving a support discussion to the team. This took months of work.
In the meanwhile, pod2g helped on the USB reversing side and found a way to have more control over the size of the USB packets sent. The finer-grained control of the packet sizes is the key of SHAtter.
posixninja and pod2g worked on exploiting the vulnerability for days. Every attempt was a failure because the idea to attack the stack and bypass the IMG3 control routines was just impossible. It took them weeks to understand why they failed and why they couldn't exploit it this way.
They both gave up in July and focused on other subjects.
- It tricked the bootrom to think the size of the image uploading was larger then what it actually was. Then when it would try to load the image, it would see that it was wrong. Then it would try to wipe out the entire image with all zeroes and go past it and start wiping out bootrom.
- Exploitation was done by overwriting SHA-1 registers to zeroes so then when it went to check images it would copy part of image into memory address zero (where the bootrom is). It would take the image uploaded and copy it over top of the bootrom (which turns out to be writable over the data portion).