RSS Проект Ноль
Подписаться
Превзойдя WebP
Эксплойт NSO BLASTPASS iMessage представлял собой zero-click (без клика), zero-day (нулевого дня) уязвимость, которая компрометировала iPhone, работающие под управлением последней версии iOS, без какого-либо взаимодействия со стороны жертвы. Эксплойт использовал вложения PassKit, содержащие вредоносные изображения, отправленные с учетной записи iMessage злоумышленника жертве. Apple выпустила внеочередное обновление безопасности для iOS 7 сентября 2023 года, чтобы исправить уязвимость. Команда WebP также выпустила предлагаемое исправление проблемы, которое позже было интегрировано в Chrome.Основной причиной уязвимости была проблема повреждения памяти в формате изображений WebP Lossless, а именно в кодировании Хаффмана, используемом в этом формате. Уязвимость позволяла злоумышленнику определять недопустимые деревья Хаффмана, что могло вызывать повреждение памяти при построении таблицы декодирования. Однако примитив повреждения был ограничен, и разбор изображения прекращался вскоре после срабатывания ошибки.Эксплуатация уязвимости оставалась загадкой, поскольку было неясно, как осуществить эксплойт в одноразовой zero-click конфигурации. Примитив повреждения был очень ограниченным, и без доступа к образцам было практически невозможно понять, как использовать уязвимость.В середине ноября автор получил несколько образцов файлов BLASTPASS PKPass и журналы сбоев неудачных попыток эксплуатации, что позволило ему проанализировать образцы и понять, как работает эксплойт. Анализ показал, что уязвимость использовалась путем отправки вредоносного файла изображения, который вызывал проблему повреждения памяти, а затем с помощью ограниченного примитива повреждения выполнялся произвольный код.Формат WebP — это относительно современный формат файлов изображений, в котором для сжатия изображений используется кодирование Хаффмана. Формат Lossless использует RIFF-контейнер и отдельный формат Lossless, где и была обнаружена уязвимость. Уязвимость находилась в кодировании Хаффмана, используемом в формате Lossless, а именно в способе построения таблицы декодирования.Анализ образцов, проведенный автором, показал, что в эксплойте использовалась комбинация методов для выполнения произвольного кода, включая использование ограниченного примитива повреждения для перезаписи указателя функции и последующего выполнения вредоносного кода. Анализ также показал, что эксплойт был очень сложным и требовал глубокого понимания формата WebP и используемого в нем кодирования Хаффмана.В целом, эксплойт NSO BLASTPASS iMessage был очень сложной и комплексной уязвимостью, требующей глубокого понимания формата WebP и используемого в нем кодирования Хаффмана. Эксплуатация уязвимости оставалась загадкой, но анализ образцов показал, что можно выполнять произвольный код, используя комбинацию методов.