Changes

Jump to navigation Jump to search
186 bytes added ,  15:13, 22 June 2016
no edit summary
Line 3: Line 3:  
'''Application''': [[Internet Browser]]
 
'''Application''': [[Internet Browser]]
   −
'''Supported versions''': 2.0.0-5.1.0
+
'''Present in system versions''': 2.0.0-5.1.0
    
'''Public in libwiiu''': Yes
 
'''Public in libwiiu''': Yes
Line 12: Line 12:  
'''Application''': [[Internet Browser]]
 
'''Application''': [[Internet Browser]]
   −
'''Supported versions''': 5.3.2 (works but unimplemented for 5.1.1-5.3.1)
+
'''Present in system versions''': 5.1.1-5.3.1 (possibly older versions, too)
   −
'''Public in libwiiu''': Yes
+
'''Publicly exploited in: ''': libwiiu (5.3.2 only)
    
When joining an array of strings, the lengths of the strings are summed to calculate the needed storage space. This summation is vulnerable to an integer overflow, which enables a heap overflow. As a result, a sprayed value from Javascript ends up as a vtable pointer, which can be used with a forged vtable to start a ROP chain. More information [http://googleprojectzero.blogspot.com/2014/07/pwn4fun-spring-2014-safari-part-i_24.html here].
 
When joining an array of strings, the lengths of the strings are summed to calculate the needed storage space. This summation is vulnerable to an integer overflow, which enables a heap overflow. As a result, a sprayed value from Javascript ends up as a vtable pointer, which can be used with a forged vtable to start a ROP chain. More information [http://googleprojectzero.blogspot.com/2014/07/pwn4fun-spring-2014-safari-part-i_24.html here].
Line 20: Line 20:  
==PPC kernel exploits==
 
==PPC kernel exploits==
 
===OSDriver race attack===
 
===OSDriver race attack===
'''Supported versions''': 2.0.0-5.4.0
+
'''Present in system versions''': 2.0.0-5.4.0
   −
'''Public in libwiiu''': Yes
+
'''Publicly exploited in: ''': libwiiu
    
The Cafe OS kernel implements a structure called an OSDriver, which can hold a 0x1000-byte cross-process data area. Accessing this data area is done through the CopyToSaveArea() and CopyFromSaveArea() [[Cafe OS Syscalls|syscalls]]. However, no lock on the OSDriver is held during the copy, allowing the save area to be freed and reallocated while the copy is taking place. With all 3 PPC cores, it is possible to copy over an OSDriver structure, and create a save area that points at the syscall table, giving PPC user mode code access to it. More information [http://gbatemp.net/threads/osdriver-kernel-exploit-a-technical-description.395444/ here].
 
The Cafe OS kernel implements a structure called an OSDriver, which can hold a 0x1000-byte cross-process data area. Accessing this data area is done through the CopyToSaveArea() and CopyFromSaveArea() [[Cafe OS Syscalls|syscalls]]. However, no lock on the OSDriver is held during the copy, allowing the save area to be freed and reallocated while the copy is taking place. With all 3 PPC cores, it is possible to copy over an OSDriver structure, and create a save area that points at the syscall table, giving PPC user mode code access to it. More information [http://gbatemp.net/threads/osdriver-kernel-exploit-a-technical-description.395444/ here].
Line 28: Line 28:  
==IOSU module exploits==
 
==IOSU module exploits==
   −
=== ioctlvhax - ioctlv TOCTOU (fixed with 5.2.0) ===
+
=== ioctlvhax - ioctlv TOCTOU ===
While technically this flaw lies in the kernel though it can be used to exploit a usermode module.
+
'''Present in system versions''': ???-5.2.0
This allows to change an ioctlv vector buffer address entry after it has been validated by the kernel. Any module not checking the number of ioctlv vectors is vulnerable.
+
 
 +
This flaw technically is in the kernel, but it can be used to exploit a usermode module.
 +
It allows changing an ioctlv vector buffer address entry after it has been validated by the kernel. Any module not checking the number of ioctlv vectors is vulnerable. More information [https://nwert.wordpress.com/2016/05/03/ioctlvhax/ here].
    
==IOSU kernel exploits==
 
==IOSU kernel exploits==
    
=== IOS_CreateThread unchecked memset ===
 
=== IOS_CreateThread unchecked memset ===
 +
'''Present in system versions''': ???-latest
 +
 
This system call will fill the stack of the newly created thread with a predefined constant (0xFA5A5A5A) without validating the passed stack address.
 
This system call will fill the stack of the newly created thread with a predefined constant (0xFA5A5A5A) without validating the passed stack address.
47

edits

Navigation menu