Хорошо, сделай глубокий вдох.
После того, как вы убедились, что ваш браузер не подвержен воздействию приведенной ниже таблицы, мы повеселимся, разобравшись в этой уязвимости.
| Браузер на базе Chrome | Я в безопасности? |
|---|---|
| Гугл Хром | убедитесь, что вы бежите Версия 145.7632.75 или новее. Идти Настройки > О Chrome И проверьте наличие обновлений. |
| Microsoft Край | Убедитесь, что вы используете версию 145.0.3800.58 или позже. Нажмите на три точки (…) в правой части окна. нажмите на Справка и обратная связь > О Microsoft Edge. |
| Вивальди | Убедитесь, что вы используете версию 7,8 или позже. Нажмите значок v (Меню) в левом верхнем углу выберите Помощь > О программе. |
| Храбрый | Убедитесь, что вы используете версию v1.87.188 или позже. Нажмите на гамбургер-меню в правом верхнем углу, выберите Помощь > О Brave. |
Итак, вы обновили браузер и помолились. Когда вы сможете складывать целые предложения вместе, ваш первый вопрос: Действительно ли CSS имеет сомнительную честь стать причиной этого? Первый эксплойт нулевого дня в браузерах на базе Chromium в 2026 году?
Я имею в виду, что на канале обновлений Chrome говорится, что они «исправили серьезную уязвимость, описанную как»[u]Бесплатное послепродажное обслуживание в CSS»… в пятницу, 13-го.й Не меньше! Если вы не можете доверять релизу с такими подробностями и датой, кому вы можете доверять? Google благодарит исследователя безопасности Шахина Фазима за то, что он сообщил об этом эксплойте в Google. В LinkedIn этого парня говорится, что он профессиональный охотник за ошибками, и я бы сказал, что он заслуживает максимально возможной награды за обнаружение того, что, по словам государственного учреждения, «в CSS в Google Chrome до версии 145.0.7632.75 позволяло удаленному злоумышленнику выполнять произвольный код внутри песочницы через созданную HTML-страницу».
Это действительно CSS-эксплойт?
Ничего не складывается. Даже этот исследователь безопасности клянется использовать CSS вместо JavaScript, поэтому его читателям, заботящимся о безопасности, не нужно включать JavaScript при чтении его блога. Она доверяет безопасности CSS, хотя понимает ее достаточно хорошо, чтобы создать чистый эмулятор CSS x86 (примечание: вау). К настоящему моменту большинство из нас предположили, что потенциальных проблем безопасности в CSS относительно немного. Конечно же, мы не живем внезапно в мире, где CSS может захватить чью-то ОС, верно?
Что ж, на мой взгляд, заголовки, описывающие ошибку в Chrome как эксплойт CSS, немного кликбейтны, потому что они создают впечатление, что это чистый эксплойт CSS, как будто вредоносного CSS и HTML было бы достаточно для его выполнения. Если честно, когда я читал эти статьи утром перед тем, как сесть на поезд на работу, то, как они были написаны, заставило меня представить себе вредоносный CSS вроде:
.malicious-class {
vulnerable-property: 'rm -rf *';
}
В гипотетической, кошмарной версии ошибки, которую придумало мое извращенное воображение, некоторый такой CSS мог быть «создан» для внедрения команды оболочки, которая запускалась бы на машине жертвы. Даже если перечитать отчеты более внимательно, они кажутся намеренно вводящими в заблуждение, и это касалось не только меня. Первый вопрос моего друга, заботящегося о безопасности, был: «Но… разве CSS не супердействителен?» А затем я копнул глубже и обнаружил, что CSS в доказательстве концепции эксплойта не содержит вредоносного бита, поэтому проверка CSS не помогла бы!
Это недопонимание не помогает, когда статья SitePoint о CVE-2026-2441 причудливо лжет своим читателям о том, что представляет собой этот эксплойт, вместо этого описывая отдельную ошибку средней серьезности, которая позволяет загружать изображения в CSS для отправки предоставленного значения поля ввода на вредоносный сервер. Это не только эта уязвимость.
На самом деле это не CSS-эксплойт в том смысле, что JavaScript является той частью, которая использует эту ошибку. Я предполагаю, что строка кода, которая создает условия, необходимые для выполнения этой атаки вредоносным скриптом, находится в компоненте Blink CSS Engine Google Chrome, но задействованный CSS не является вредоносной частью.
Итак, как сработал эксплойт?
Использование CSS в эксплойте заключается в том, что механизм рендеринга Chrome преобразует часть CSS в объектную модель CSS. Рассмотрим CSS ниже:
@font-feature-values VulnTestFont {
@styleset {
entry_a: 1;
entry_b: 2;
entry_c: 3;
entry_d: 4;
entry_e: 5;
entry_f: 6;
entry_g: 7;
entry_h: 8;
}
}
Когда этот CSS анализируется, CSSFontFeaturesValueMap был добавлен в коллекцию CSSRule в вещах document.styleSheets[0].cssRules. Произошла ошибка в управлении памятью Chrome. HashMap базовая структура данных в представлении JavaScript CSSFontFeaturesValueMapЧто непреднамеренно позволило вредоносному сценарию получить доступ к памяти, к которой он не должен был иметь доступ. Этого самого по себе недостаточно, чтобы причинить вред, кроме сбоя браузера, но оно может стать основой для эксплойта Use After Free (UAF).
В описании патча Chrome упоминается, что «Google знает, что эксплойт для CVE-2026-2441 существует в природе», хотя по очевидным причинам они уклоняются от подробностей полного сквозного эксплойта. с беспокойством, @font-feature-values Это не новость — она доступна с начала 2023 года, но обнаружение сквозного эксплойта UAF может быть недавним. Это имело бы смысл, если бы код, создавший этот эксплойт, устарел, но недавно кто-то придумал работающий эксплойт. Если вы посмотрите на это подробное описание уязвимости use-after-free 2020 года в Chrome в API WebAudio, у вас возникнет ощущение, что доступ к свободной памяти — это лишь одна часть головоломки для работы эксплойта UAF. Современные операционные системы создают препятствия, через которые злоумышленникам приходится пройти, что может значительно усложнить этот тип атаки.
Реальные примеры уязвимостей этого типа усложняются, особенно уязвимость Chrome, из-за которой вы можете только косвенно активировать операторы низкого уровня. Но если вы знаете C и хотите понять основные принципы на упрощенном примере, вы можете попробовать эту задачу по программированию. Еще один способ получить идеи — это недавняя публикация на Medium о Chrome. CSSFontFeaturesValueMap Эксплойт, который включает в себя красивую аналогию, в которой указатель объекта подобен поводку, который вы продолжаете держать даже после того, как отпустили собаку, но вместо этого злоумышленник привязывает поводок к кошке (так называемая путаница типов), поэтому, когда вы приказываете вашей «собаке» лаять, злоумышленник учит вашу кошку думать, что команда «лаять» означает вместо этого сделать что-то вредоносное.
Мир снова в безопасности, но как долго?
Мне пришлось изменить код блинка для работы с глубоким копированием в качестве однострочного исправления, предложенного Chrome. HashMap что является основой CSSFontFeaturesValueMap Вместо указателя на него, поэтому нет возможности обратиться к свободной памяти. Напротив, Firefox, похоже, переписал свой механизм рендеринга CSS на Rust, и поэтому он автоматически управляет памятью. Chromium начал поддерживать использование Rust в 2023 году. Одним из упомянутых источников вдохновения было «Безопасный (в целом менее сложный C++, также нет ошибок безопасности памяти в песочнице)” и “улучшить безопасность (Увеличение количества строк кода без ошибок памяти, снижение плотности ошибок кода) из хрома«Поскольку эксплуатация класса UAF, похоже, повторялась в Chromium за последние несколько лет, и эти уязвимости, как правило, имеют высокую степень опасности при обнаружении, защита от таких уязвимостей может потребовать более целостного подхода, поэтому мне не нужно беспокоить вас еще одной подобной статьей.