Исследователи кибербезопасности провели удалённую атаку Spectre в производственной среде Cloudflare Workers и извлекли JSON Web Token (JWT) из памяти соседнего Worker. Скорость утечки достигла 12 бит в секунду при точности 99,16%. Это в 360 раз быстрее результата 2021 года: тогда удавалось получать 2 бита в минуту, или 120 бит в час. В эксперименте участвовали подконтрольные исследователям атакующий и жертвенный Workers, причём JWT намеренно поместили в память жертвы. Авторы работы заявили, что данные клиентов не затрагивались.

Cloudflare Workers исполняет код разных арендаторов в отдельных изолятах V8, но несколько изолятов могут находиться внутри одного процесса операционной системы. Такая схема опирается преимущественно на изоляцию на уровне языка и сокращает задержку запуска по сравнению с отдельным процессом для каждого клиента. Плата за скорость известна: по признанию Cloudflare, чтение памяти внутри общего процесса Worker способно привести к межклиентской утечке данных.
Для атаки требовалось совместное размещение двух Workers: отдельные изоляты V8 должны были попасть в один базовый процесс Worker. Злоумышленник при этом управлял легитимным кодом лишь в собственном изоляте. Нативный код, уязвимость V8 и выход из песочницы V8 не требовались; выполнение нативного кода прямо исключалось из принятой исследователями модели угроз.
Среда Workers уже мешала классическим атакам по сторонним каналам. Во время вычислений локальные таймеры замораживаются либо теряют точность, общая память и многопоточность скриптам не предоставляются. Обход нашёлся в WebSocket: сетевой обмен превратился в удалённый источник времени, по которому атакующий мог замечать небольшие различия в длительности операций. Получилось измерять последствия спекулятивного выполнения без высокоточного локального таймера.
Вторую лазейку дали Durable Objects. Они удерживали один изолят Worker активным не менее пяти часов, а в отдельных случаях более 20 часов. Защитный механизм Dynamic Process Isolation, или DyPrIs, переносил подозрительный скрипт в отдельный процесс лишь после завершения вызова. Пока длительный вызов Durable Object продолжался, перенос откладывался, а атакующий сохранял часы на извлечение секрета.
Интенсивный обмен через WebSocket вдобавок мешал самому обнаружению. Большой объём ввода-вывода увеличивал активность буфера трансляции инструкций iTLB и снижал нормализованный сигнал ошибочных предсказаний переходов, за которым следил DyPrIs. Значение опускалось ниже порога срабатывания. Исследователи сочли фундаментальными сразу две слабости: изоляция начиналась только после окончания вызова, а наблюдаемый сигнал можно было подавить операциями ввода-вывода.
Испытания шли на производственных Linux-серверах с процессорами AMD EPYC Zen 2 и AMD EPYC Zen 3. Замеры намеренно проводили ночью, когда загрузка CPU держалась в пределах 10–25%, чтобы получить лучшие возможные показатели. При росте нагрузки скорость утечки падала, но более медленные варианты атаки оставались осуществимыми. В благоприятных условиях результат составил те самые 12 бит в секунду с точностью 99,16%.
Почти за пять лет до нового раскрытия Cloudflare и TU Graz опубликовали прежнюю удалённую атаку Spectre на Cloudflare Workers. Она передавала 120 бит в час и привела к появлению DyPrIs. Для механизма указывали 0,61% ложных срабатываний, а статистическую защиту оценивали как эквивалент строгой процессной изоляции против изученных тогда вариантов Spectre. Новая работа показала, что эта оценка не охватывала длительные вызовы и возможность маскировать аппаратный сигнал сетевой активностью.
Cloudflare назвала проблему ограничением своей реализации DyPrIs и сообщила, что атака уже нейтрализована в производственной среде. Исследователи сформулировали претензию жёстче: «Мы показываем, что производственная реализация DyPrIs была недостаточной». По их мнению, надёжное обнаружение должно работать прямо во время исполнения скрипта, а не после завершения вызова, и опираться на сигнал, который нельзя заглушить вводом-выводом. Cloudflare не обнаружила признаков реальной эксплуатации за последние три года.
В сентябре 2025 года Cloudflare описала дополнительное усиление Workers: улучшенный DyPrIs, V8 Sandbox и внутрипроцессную изоляцию на основе Memory Protection Keys, или MPK. Обновлённый DyPrIs точнее выявляет подозрительное исполнение. V8 Sandbox ограничивает временный доступ к 64-битным указателям и тем самым сужает область памяти, доступную атакующему при спекулятивном выполнении. MPK помещает кучи Workers за аппаратно контролируемые ключи защиты, разделяя память изолятов внутри одного процесса.
На современных системах x64 для такой схемы остаётся примерно 12 ключей. Одно лишь случайное назначение MPK, по оценке Cloudflare от сентября 2025 года, остановило бы или вызвало бы ловушку примерно для 92% межизолятных обращений к памяти. Остальные случаи возникали бы при совпадении ключей у двух изолятов. Поэтому MPK объединили с V8 Sandbox и строгой ротацией размещения памяти, которая не позволяет соседним песочницам пользоваться одним ключом. Эта комбинация рассчитана на закрытие оставшегося пробела в пределах модели угроз внутри песочницы.

Изображение носит иллюстративный характер
Cloudflare Workers исполняет код разных арендаторов в отдельных изолятах V8, но несколько изолятов могут находиться внутри одного процесса операционной системы. Такая схема опирается преимущественно на изоляцию на уровне языка и сокращает задержку запуска по сравнению с отдельным процессом для каждого клиента. Плата за скорость известна: по признанию Cloudflare, чтение памяти внутри общего процесса Worker способно привести к межклиентской утечке данных.
Для атаки требовалось совместное размещение двух Workers: отдельные изоляты V8 должны были попасть в один базовый процесс Worker. Злоумышленник при этом управлял легитимным кодом лишь в собственном изоляте. Нативный код, уязвимость V8 и выход из песочницы V8 не требовались; выполнение нативного кода прямо исключалось из принятой исследователями модели угроз.
Среда Workers уже мешала классическим атакам по сторонним каналам. Во время вычислений локальные таймеры замораживаются либо теряют точность, общая память и многопоточность скриптам не предоставляются. Обход нашёлся в WebSocket: сетевой обмен превратился в удалённый источник времени, по которому атакующий мог замечать небольшие различия в длительности операций. Получилось измерять последствия спекулятивного выполнения без высокоточного локального таймера.
Вторую лазейку дали Durable Objects. Они удерживали один изолят Worker активным не менее пяти часов, а в отдельных случаях более 20 часов. Защитный механизм Dynamic Process Isolation, или DyPrIs, переносил подозрительный скрипт в отдельный процесс лишь после завершения вызова. Пока длительный вызов Durable Object продолжался, перенос откладывался, а атакующий сохранял часы на извлечение секрета.
Интенсивный обмен через WebSocket вдобавок мешал самому обнаружению. Большой объём ввода-вывода увеличивал активность буфера трансляции инструкций iTLB и снижал нормализованный сигнал ошибочных предсказаний переходов, за которым следил DyPrIs. Значение опускалось ниже порога срабатывания. Исследователи сочли фундаментальными сразу две слабости: изоляция начиналась только после окончания вызова, а наблюдаемый сигнал можно было подавить операциями ввода-вывода.
Испытания шли на производственных Linux-серверах с процессорами AMD EPYC Zen 2 и AMD EPYC Zen 3. Замеры намеренно проводили ночью, когда загрузка CPU держалась в пределах 10–25%, чтобы получить лучшие возможные показатели. При росте нагрузки скорость утечки падала, но более медленные варианты атаки оставались осуществимыми. В благоприятных условиях результат составил те самые 12 бит в секунду с точностью 99,16%.
Почти за пять лет до нового раскрытия Cloudflare и TU Graz опубликовали прежнюю удалённую атаку Spectre на Cloudflare Workers. Она передавала 120 бит в час и привела к появлению DyPrIs. Для механизма указывали 0,61% ложных срабатываний, а статистическую защиту оценивали как эквивалент строгой процессной изоляции против изученных тогда вариантов Spectre. Новая работа показала, что эта оценка не охватывала длительные вызовы и возможность маскировать аппаратный сигнал сетевой активностью.
Cloudflare назвала проблему ограничением своей реализации DyPrIs и сообщила, что атака уже нейтрализована в производственной среде. Исследователи сформулировали претензию жёстче: «Мы показываем, что производственная реализация DyPrIs была недостаточной». По их мнению, надёжное обнаружение должно работать прямо во время исполнения скрипта, а не после завершения вызова, и опираться на сигнал, который нельзя заглушить вводом-выводом. Cloudflare не обнаружила признаков реальной эксплуатации за последние три года.
В сентябре 2025 года Cloudflare описала дополнительное усиление Workers: улучшенный DyPrIs, V8 Sandbox и внутрипроцессную изоляцию на основе Memory Protection Keys, или MPK. Обновлённый DyPrIs точнее выявляет подозрительное исполнение. V8 Sandbox ограничивает временный доступ к 64-битным указателям и тем самым сужает область памяти, доступную атакующему при спекулятивном выполнении. MPK помещает кучи Workers за аппаратно контролируемые ключи защиты, разделяя память изолятов внутри одного процесса.
На современных системах x64 для такой схемы остаётся примерно 12 ключей. Одно лишь случайное назначение MPK, по оценке Cloudflare от сентября 2025 года, остановило бы или вызвало бы ловушку примерно для 92% межизолятных обращений к памяти. Остальные случаи возникали бы при совпадении ключей у двух изолятов. Поэтому MPK объединили с V8 Sandbox и строгой ротацией размещения памяти, которая не позволяет соседним песочницам пользоваться одним ключом. Эта комбинация рассчитана на закрытие оставшегося пробела в пределах модели угроз внутри песочницы.