Vulnerabilities

WebKit 531 (Vita FW BEFORE 2.00)
There are two exploits used for WebKit prior to 2.00. One is a data leakage exploit CVE-2010-4577 using type confusion to treat a double as a string memory address and length. The other is a use-after-free exploit CVE-2010-1807 on the parseFloat function using a Nan as the arg.

WebKit 536 (Vita FW 2.00 thru 3.18) (CVE-2012-3748) (2013-09-03-1)
The heap memory buffer overflow vulnerability exists within the WebKit's JavaScriptCore JSArray::sort(...) method. This method accepts the user-defined JavaScript function and calls it from the native code to compare array items. If this compare function reduces array length, then the trailing array items will be written outside the "m_storage->m_vector[]" buffer, which leads to the heap memory corruption.

WebKit 537.73 (as used in Vita FW 3.30-3.36) (CVE-2014-1303)
The CSSSelectorList can be mutated after it's allocated. If the mutated list contains less entries than the original one, a restrictive 1-bit OOB write can be achieved.

WebKit 537.73 (as used in Vita FW 3.50-3.60) (unknown or no CVE)
The JSArray::sort method has a heap use-after-free vulnerability. If an array containing an object with a custom toString method is sorted, and the toString method causes the array to be reallocated, then the sorted elements will be written to the old freed address.

https://blog.xyz.is/2016/webkit-360.html

PSM Mono privilege escalation
https://yifan.lu/2015/06/21/hacking-the-ps-vita/

PSM Unity privilege escalation
UnityEngine.dll is a trusted assembly (SecurityCritical) and is not signed (can be modified). However, the actual file at  is PFS signed and encrypted, making this (and any) resource based hacks just as difficult as unsigned code execution hacks (which is the original goal).

PSM NetworkRequest privilege escalation
NetworkRequest.BeginGetResponse(AsyncCallback callback) invokes callback with  allowing for a privilege escalation. Unfortunately, Sony closed down the scoreboards feature which means that Network.AuthGetTicket fails and Network.CreateRequest cannot be invoked. There is no other way of creating a NetworkRequest object.

Stack buffer overflow in sceSblDmac5EncDec
(16/09/2014) might have found one SceSblDmac5Mgr_sceSblDmac5EncDec reads in 0x18 bytes from first arg processes a little then ROM:005F711A                MOV             R1, R11 ROM:005F711C                ADD             R0, SP, #0x88+var_70 ROM:005F711E                MOV.W           R2, R10,LSR#3 ROM:005F7122                BLX             _import_SceSblSsMgr_SceSysmemForDriver_sceKernelMemcpyUserToKernel R10 comes from orginal read in buffer+0x10 bad news is it got patched in 1.80 they also added a isShell check

Consensus: Confirmed exploitable before 1.80. YEAH!

sceIoDevctl does not clear stack buffer
(24/11/2014) Call some interesting functions that interest you in a kernel context (call some damn syscalls) Then call devctl and get upto 0x3FF bytes of that stack!

Syscall handler doesn't check syscall number
(03/07/2015) A large syscall number passed in R12 can overflow syscall table and cause an arbitrary function pointer to be dereferenced and executed.

This was patched somewhere >1.60.

Heap use-after-free in sceNetSyscallIoctl
(5/04/2016) sceNetSyscallIoctl is declared as. When  is in range (0x80; 0x1000], it will use SceNetPs custom malloc to allocate a buffer of that size on the heap. However, the second argument to malloc is 0, meaning that when not enough memory is available instead of returning NULL, it unlocks the global SceNetPs mutex and waits on a semaphore. Then, while malloc is waiting, another thread can free the socket sceNetSyscallIoctl is operating on, causing a use-after-free condition.

When passed proper arguments, sceNetSyscallIoctl will execute a function from the socket's vtable at the end:

v13 = (*(int (__fastcall **)(int, signed int, unsigned int, char *))(*(_DWORD *)(socket + 24) + 28))(             socket,              11,              flags_,              mem_);

Confirmed exploitable on 3.60 still.