Хром исправила уязвимость CVE-2025-0291 которая как утверждают могла привести к выполнению произвольного кода.
ссылочка для ознакомления https://chromereleases.googleblog.com/2025/01/stable-channel-update-for-desktop.html
Сам патч исправления можно ознакомиться здесь https://chromium-review.googlesource.com/c/v8/v8/+/6092870
Что примерно понятно
В анализаторе типов, который генерирует информацию для компиляции WebAssembly, неправильно обрабатывались входы Phi-узлов, если цикл состоял всего из одного блока. В норме, когда анализатор встречает цикл, он должен аккуратно сверять данные на входах Phi-узлов между итерациями. Но в коде, который был до фикса, происходила путаница: вместо того, чтобы корректно использовать данные обратного ребра (backedge), анализатор либо делал лишнюю итерацию, либо пропускал уточнение типа.
До исправления логика выглядела так:
Этот код не учитывал, что в одноблоковых циклах loop_header и сам блок — это одно и то же. Теперь логика исправлена, и добавлена корректная проверка для таких случаев.
В чем же уязвимость.
В коде обрабатываются различные блоки (например, Block, WasmGCTypeAnalyzer). Блоки могут быть либо обычными блоками, либо циклами (loops). Когда один блок связан с другим через backedge (обратную связь в цикле), происходит повторная оценка типов для каждого блока.
В коде мы видим, что типы блоков анализируются через снимки состояний (snapshots). Ошибка возникает, когда анализ типов не выполняется корректно при повторных оценках, что может привести к ошибочной интерпретации типов.
Можно ли выполнить RCE и обход песочницы, я думаю да
Если WebAssembly-код обрабатывает данные, связанные с указателями на функции, можно переписать их на свои функции или использовать ошибочное сопоставление типов для перезаписи указателей на защищенные объекты. Ошибка в анализе типов может привести к тому, что данные, относящиеся к одному уровню безопасности, будут интерпретированы как данные другого уровня. Таким образом, можно заставить браузер выполнить код в контексте защищенной области, что приведет к обходу песочницы.
Исправление внесли в логику анализа циклов. Теперь WasmGCTypeAnalyzer учитывает специфику одноблоковых циклов и обрабатывает их корректно. Добавлены дополнительные проверки для Phi-узлов, чтобы анализатор не завершал стабилизацию до полной обработки всех входов. Убраны избыточные DCHECK, которые иногда ошибочно срабатывали даже вне контекста одноблоковых циклов.
ссылочка для ознакомления https://chromereleases.googleblog.com/2025/01/stable-channel-update-for-desktop.html
Сам патч исправления можно ознакомиться здесь https://chromium-review.googlesource.com/c/v8/v8/+/6092870
Что примерно понятно
В анализаторе типов, который генерирует информацию для компиляции WebAssembly, неправильно обрабатывались входы Phi-узлов, если цикл состоял всего из одного блока. В норме, когда анализатор встречает цикл, он должен аккуратно сверять данные на входах Phi-узлов между итерациями. Но в коде, который был до фикса, происходила путаница: вместо того, чтобы корректно использовать данные обратного ребра (backedge), анализатор либо делал лишнюю итерацию, либо пропускал уточнение типа.
Код:
v113 = Phi(v26, v113)
v114 = Phi(v26, v113)
До исправления логика выглядела так:
Код:
if (block.index() != loop_header.index()) {
iterator.MarkLoopForRevisitSkipHeader();
} else {
iterator.MarkLoopForRevisit();
}
Этот код не учитывал, что в одноблоковых циклах loop_header и сам блок — это одно и то же. Теперь логика исправлена, и добавлена корректная проверка для таких случаев.
В чем же уязвимость.
В коде обрабатываются различные блоки (например, Block, WasmGCTypeAnalyzer). Блоки могут быть либо обычными блоками, либо циклами (loops). Когда один блок связан с другим через backedge (обратную связь в цикле), происходит повторная оценка типов для каждого блока.
В коде мы видим, что типы блоков анализируются через снимки состояний (snapshots). Ошибка возникает, когда анализ типов не выполняется корректно при повторных оценках, что может привести к ошибочной интерпретации типов.
Можно ли выполнить RCE и обход песочницы, я думаю да
Если WebAssembly-код обрабатывает данные, связанные с указателями на функции, можно переписать их на свои функции или использовать ошибочное сопоставление типов для перезаписи указателей на защищенные объекты. Ошибка в анализе типов может привести к тому, что данные, относящиеся к одному уровню безопасности, будут интерпретированы как данные другого уровня. Таким образом, можно заставить браузер выполнить код в контексте защищенной области, что приведет к обходу песочницы.
Исправление внесли в логику анализа циклов. Теперь WasmGCTypeAnalyzer учитывает специфику одноблоковых циклов и обрабатывает их корректно. Добавлены дополнительные проверки для Phi-узлов, чтобы анализатор не завершал стабилизацию до полной обработки всех входов. Убраны избыточные DCHECK, которые иногда ошибочно срабатывали даже вне контекста одноблоковых циклов.
Последнее редактирование: