Changes

1,154 bytes added ,  09:49, 26 July 2015
Restore from Google cache.
Line 47: Line 47:  
|-
 
|-
 
| 32bits of actual console-unique TWLNAND keydata
 
| 32bits of actual console-unique TWLNAND keydata
| 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. On top of this, the lower u32's highest bit is always ORed. only 31 bits 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
 
| None
Line 115: Line 115:  
!  Timeframe this was discovered
 
!  Timeframe this was discovered
 
!  Discovered by
 
!  Discovered by
 +
|-
 +
| FAT FS code null-deref
 +
| When FSFile:Read is used with a file which is corrupted on a FAT filesystem(in particular SD), Process9 can crash. This particular crash is caused by a function returning NULL instead of an actual ptr due to an error. The caller of that function doesn't check for NULL which then triggers a read based at NULL.
 +
 +
Sample "fsck.vfat -n -v -V <fat image backup>" output for the above crash:
 +
 +
<pre>...
 +
Starting check/repair pass.
 +
<FilePath0> and
 +
<FilePath1>
 +
share clusters.
 +
Truncating second to 3375104 bytes.
 +
<FilePath1>
 +
File size is 2787392 bytes, cluster chain length is 16384 bytes.
 +
Truncating file to 16384 bytes.
 +
Checking for unused clusters.
 +
Reclaimed 1 unused cluster (16384 bytes).
 +
Checking free cluster summary.
 +
Free cluster summary wrong (1404490 vs. really 1404491)
 +
Auto-correcting.
 +
Starting verification pass.
 +
Checking for unused clusters.
 +
Leaving filesystem unchanged.</pre>
 +
| Useless null-based-read
 +
| None
 +
| 9.6.0-X
 +
| July 8-9, 2015
 +
| [[User:Yellows8|Yellows8]]
 
|-
 
|-
 
| RSA signature padding checks
 
| RSA signature padding checks
 
| The TWL_FIRM RSA sig padding check code used for all TWL RSA sig-checks has issues, see [[FIRM|here]].
 
| The TWL_FIRM RSA sig padding check code used for all TWL RSA sig-checks has issues, see [[FIRM|here]].
The main 3DS RSA padding check code(non-certificate) uses the function used with the above to extract PKCS padding + the actual hash from the message. This is not a problem here however.
+
The main 3DS RSA padding check code(non-certificate, including NATIVE_FIRM) uses the function used with the above to extract more padding + the actual hash from the additional padding. This isn't really a problem here because there's proper padding check code which is executed prior to this.
 
|  
 
|  
 
| None
 
| None
23

edits