Уязвимость использования браузера после освобождения с помощью обработчика событий - PullRequest
0 голосов
/ 30 января 2020

Я недавно смотрел на использование уязвимости использования после освобождения в веб-браузере (в частности, Firefox). Я обнаружил, что в большинстве уязвимостей использования браузера после освобождения они используют обработчики событий J , зарегистрированные с некоторым событием DOM E (например, DOMNodeRemoved). Внутри некоторой базовой функции C ++ F происходит событие E , и выполняется J , освобождая некоторые объекты. При возврате к F , есть коды, разыменовывающие висячий указатель и вызывающие уязвимость UAF.

Мой вопрос заключается в том, что я не уверен насчет основного механизма, отправляющего функции обратного вызова, Это правда, что F может продолжаться некоторое время, прежде чем будет запущен J ?

Например, если в Firefox codebase у меня есть:

void F(){
  EventDispatcher::Dispatch(...) // dispatch event E
  printf("FLAG 1\n");
  printf("FLAG 2\n");
  printf("FLAG 3\n");
}

// Assume javascript callback function J leads to the following C++ function C in Firefox codebase
void C(){
  printf("Inside callback function J\n");
}

Возможно ли, что мы получим что-то вроде:

FLAG 1
Inside callback function J 
FLAG 2
FLAG 3

или

FLAG 1
FLAG 2
Inside callback function J 
FLAG 3

Если это возможно и происходит без нашего контроля, то при эксплуатации этого вида UAF Уязвимость, даже если нам удастся использовать одну из разыменований в функции F после возврата из обратного вызова, она может не срабатывать каждый раз, верно? Разыменование может произойти до выполнения обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...