#forward from
@novitollTL;DR:
https://googleprojectzero.blogspot.com/2020/07/how-to-unc0ver-0-day-in-4-hours-or-less.htmldouble-free race-condition- unc0ver выпустил v5.0.0 версию, которая использовала 0-day в iOS 13.5 (релиз был 23-го мая)
- в тот же день Security Researcher из Google p0, решил узнать какой 0-day они использовали в обфусцированном unc0ver эксплойте
- путем написании кастомных аппов, которые крешались с "почти" аналогичным стэктрейсом unc0ver, где говорилось о
kalloc.16, т.е. аллоцированная дин. память в ядре в 16 байт
- дальше он увидел в panic стэк трейсе `_lio_listio
`
lr: 0xfffffff0074d5bfc # _aio_copy_in_list
lr: 0xfffffff0074d5d90 # _lio_listio
lr: 0xfffffff0075f10d0 # _unix_syscall
и он вспомнил как в июне этого года в своей статье p0 он описывал дайджест уязвимостей и вспомнил про `_lio_listio
`, которая использовалась в LightSpeed-based эксплойтах от Synacktiv.
- сначала подумал, что 0-day - это и есть "старый" эксплойт на LightSpeed, но потом понял, что есть разница в 0-day эксплойте, но все же основан на LightSpeed.
- Путем ресерча, нашел патч , который Apple использовала для баги LightSpeed
case LIO_NOWAIT:
+ if (lio_context->io_issued == 0) {
+ free_context = TRUE;
+ }
break;
, но понял, что здесь double-free race-condition
Мораль: после патча, Apple нужно было сделать регресс тестов.