Line 16: |
Line 16: |
| ! Summary | | ! Summary |
| ! Description | | ! Description |
| + | ! Fixed with hardware model/revision |
| + | ! Newest hardware model/revision this flaw was checked for |
| ! Timeframe this was discovered | | ! Timeframe this was discovered |
| ! Discovered by | | ! Discovered by |
Line 23: |
Line 25: |
| Since RAM isn't cleared on boot (see below), one can immediately start execution of their own code here to dump bootrom, OTP, etc. | | Since RAM isn't cleared on boot (see below), one can immediately start execution of their own code here to dump bootrom, OTP, etc. |
| The ARM9 bootrom does the following at reset: reset vector branches to another instruction, then branches to bootrom+0x8000. Hence, there's no way to know for certain when exactly the ARM9 exception-vector data stored in memory gets initialized. | | The ARM9 bootrom does the following at reset: reset vector branches to another instruction, then branches to bootrom+0x8000. Hence, there's no way to know for certain when exactly the ARM9 exception-vector data stored in memory gets initialized. |
| + | |
| + | This requires *very* *precise* timing for triggering the hardware fault: it's unknown if anyone actually exploited this successfully at the time of writing(the one who attempted+discovered it *originally* as listed in this wiki section hasn't). |
| + | | None: all available 3DS models at the time of writing have the exact same ARM9/ARM11 bootrom for the unprotected areas. |
| + | | New3DS |
| | End of February 2014 | | | End of February 2014 |
| | [[User:Derrek|derrek]], WulfyStylez (May 2015) independently | | | [[User:Derrek|derrek]], WulfyStylez (May 2015) independently |
Line 28: |
Line 34: |
| | Missing AES key clearing | | | Missing AES key clearing |
| | The hardware AES engine does not clear keys when doing a hard reset/reboot. | | | The hardware AES engine does not clear keys when doing a hard reset/reboot. |
− | This applies for New3DS too.
| + | | None |
| + | | New3DS |
| | August 2014 | | | August 2014 |
| | Mathieulh/Others | | | Mathieulh/Others |
Line 34: |
Line 41: |
| | No RAM clearing on reboots | | | No RAM clearing on reboots |
| | On an MCU-triggered reboot all RAM including FCRAM/ARM9 memory/AXIWRAM keeps its contents. | | | On an MCU-triggered reboot all RAM including FCRAM/ARM9 memory/AXIWRAM keeps its contents. |
| + | | None |
| + | | New3DS |
| | March 2014 | | | March 2014 |
| | [[User:Derrek|derrek]] | | | [[User:Derrek|derrek]] |
Line 40: |
Line 49: |
| | On retail the 8-bytes at ARM9 address [[Memory_layout|0x01FFB808]] are XORed with hard-coded data, to generate the TWL console-unique keys, including TWLNAND. On Old3DS the high u32 is always 0x0, while on New3DS that u32 is always 0x2. Therefore, only the first 32bits of the TWL console-unique keydata / TWL consoleID are actually console-unique. | | | On retail the 8-bytes at ARM9 address [[Memory_layout|0x01FFB808]] are XORed with hard-coded data, to generate the TWL console-unique keys, including TWLNAND. On Old3DS the high u32 is always 0x0, while on New3DS that u32 is always 0x2. Therefore, only the first 32bits of the TWL console-unique keydata / TWL consoleID are actually console-unique. |
| This allows one to easily bruteforce the TWL console-unique keydata with *just* data from TWLNAND. On DSi the actual console-unique data for key generation is 8-bytes(all bytes actually set). | | This allows one to easily bruteforce the TWL console-unique keydata with *just* data from TWLNAND. On DSi the actual console-unique data for key generation is 8-bytes(all bytes actually set). |
| + | | None |
| + | | New3DS |
| | 2012? | | | 2012? |
| | [[User:Yellows8|Yellows8]] | | | [[User:Yellows8|Yellows8]] |
Line 48: |
Line 59: |
| | | |
| This attack does not work for the 3DS key-generator because keyslots 0-3 are only for TWL keys. | | This attack does not work for the 3DS key-generator because keyslots 0-3 are only for TWL keys. |
| + | | |
| + | | |
| | 2011 | | | 2011 |
| | [[User:Yellows8|Yellows8]] | | | [[User:Yellows8|Yellows8]] |