#itsec
Uncovering GStreamer secrets
TL;DR: чел написал кастомный генератор начальных данных для фаззера и нашёл 29 новых потенциальных уязвимостей в GStreamer.
Фаззинг программ, разбирающих медиа-форматы, затруднителен тем, что готовые медиа-файлы слишком большие, чтобы эффективно использовать фаззинг, поскольку фаззеры обычно применяют побайтовые мутации к входным данным. Конкретно в случае с MP4 проблема усугубляется строением формата. Именно, файл MP4 состоит из нескольких box-ов, которые могут быть вложенными, и каждый из них начинается с заголовка, который включает в себя размер всего box-а. Если фаззер применяет мутацию, которая вставляет новые данные, он не в состоянии одновременно также и скорректировать размеры в нужных местах.
В статье описан алгоритм для генерирования случайных MP4-файлов. Коротко:
* создаётся случайное дерево, описывающее вложенные box-ы
* по узлам раскидываются теги
* листья дерева получают случайные размеры, размер остальных подсчитывается из суммы вложенных
* для каждого узла генерируются случайные данные в рамках выбранных размеров
* итоговое дерево сериализуется
К сожалению, из статьи непонятно, написал ли автор только генератор тестовых данных или ещё и мутатор.
Сами найденные ошибки, кстати, все типичные сишные: OOB-чтение/запись, разыменовывания NULL-указателей и даже одно use after free.
Uncovering GStreamer secrets
TL;DR: чел написал кастомный генератор начальных данных для фаззера и нашёл 29 новых потенциальных уязвимостей в GStreamer.
Фаззинг программ, разбирающих медиа-форматы, затруднителен тем, что готовые медиа-файлы слишком большие, чтобы эффективно использовать фаззинг, поскольку фаззеры обычно применяют побайтовые мутации к входным данным. Конкретно в случае с MP4 проблема усугубляется строением формата. Именно, файл MP4 состоит из нескольких box-ов, которые могут быть вложенными, и каждый из них начинается с заголовка, который включает в себя размер всего box-а. Если фаззер применяет мутацию, которая вставляет новые данные, он не в состоянии одновременно также и скорректировать размеры в нужных местах.
В статье описан алгоритм для генерирования случайных MP4-файлов. Коротко:
* создаётся случайное дерево, описывающее вложенные box-ы
* по узлам раскидываются теги
* листья дерева получают случайные размеры, размер остальных подсчитывается из суммы вложенных
* для каждого узла генерируются случайные данные в рамках выбранных размеров
* итоговое дерево сериализуется
К сожалению, из статьи непонятно, написал ли автор только генератор тестовых данных или ещё и мутатор.
Сами найденные ошибки, кстати, все типичные сишные: OOB-чтение/запись, разыменовывания NULL-указателей и даже одно use after free.
👍15❤2😐1
#itsec #article
Towards the next generation of XNU memory safety: kalloc_type
Большинство связанных с memory safety уязвимостей основываются на type confusion: одни и те же данные интерпретируются, как значения разных типов, и у злоумышленника обычно есть доступ к одному из этих представлений. Одна из причин, по которой это возможно — use after free, когда новые данные другого типа размещаются по тем же адресам в памяти, что и старые.
Для того, чтобы закрыть этот вектор атаки, можно сделать аллокатор, который никогда не переиспользует одни и те же адреса для значений разных типов. Разработчики Apple, которые работают над ядром iOS, решили именно так и сделать. В полной мере этого достичь не удалось, поскольку полная изоляция адресов по типам вела к слишком большой фрагментации памяти, но итоговое решение значительно затруднило эксплуатацию ошибок, в том числе и за счёт некоторой рандомизации на этапе загрузки.
Текст примечателен ещё и подобным изложением недостатков описанного подхода.
Towards the next generation of XNU memory safety: kalloc_type
Большинство связанных с memory safety уязвимостей основываются на type confusion: одни и те же данные интерпретируются, как значения разных типов, и у злоумышленника обычно есть доступ к одному из этих представлений. Одна из причин, по которой это возможно — use after free, когда новые данные другого типа размещаются по тем же адресам в памяти, что и старые.
Для того, чтобы закрыть этот вектор атаки, можно сделать аллокатор, который никогда не переиспользует одни и те же адреса для значений разных типов. Разработчики Apple, которые работают над ядром iOS, решили именно так и сделать. В полной мере этого достичь не удалось, поскольку полная изоляция адресов по типам вела к слишком большой фрагментации памяти, но итоговое решение значительно затруднило эксплуатацию ошибок, в том числе и за счёт некоторой рандомизации на этапе загрузки.
Текст примечателен ещё и подобным изложением недостатков описанного подхода.
Towards the next generation of XNU memory safety: kalloc_type - Apple Security Research
Improving software memory safety is a key security objective for engineering teams across the industry. Here we begin a journey into the XNU kernel at the core of iOS and explore the intricate work our engineering teams have done to harden the memory allocator…
👍8❤1🔥1🥴1
#itsec
Про то, как одной строчкой кода окирпичить iPhone. Уже пофиксили, если что.
t.iss.one/linksfromme/805
Про то, как одной строчкой кода окирпичить iPhone. Уже пофиксили, если что.
t.iss.one/linksfromme/805
Telegram
Too Long, Did Read
Как закирпичить iPhone одной строчкой кода
https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone
Супер крутая история: разработчик нашел уязвимость в iOS, которая позволяет "закирпичить" айфон буквально одной строчкой кода.…
https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone
Супер крутая история: разработчик нашел уязвимость в iOS, которая позволяет "закирпичить" айфон буквально одной строчкой кода.…
🤯7❤3