× Install ThecoreGrid App
Tap below and select "Add to Home Screen" for full-screen experience.
B2B Engineering Insights & Architectural Teardowns

Удаленная атака Spectre на Cloudflare Workers

Атака Remote Spectre на Cloudflare Workers показала, что изоляция на уровне языка перестаёт быть достаточной связью. Исследование подтвердило, что производственно-окружение создает шум, но не выбирает сам класс риска.

Cloudflare Workers исполняет untrusted JavaScript на edge и опирается на V8 isolates, чтобы десятки тысяч tenants могли делить один OS process. Это даёт низкую startup latency и высокую плотность размещения. Но такая модель оставляет жёсткое ограничение: один arbitrary read внутри процесса может привести к cross-tenant leakage. Именно поэтому remote Spectre attack on Cloudflare Workers остаётся архитектурно опасной темой, даже если платформа уже содержит несколько слоёв защиты.

Проблема в том, что Spectre использует speculative execution. CPU сначала предсказывает ветку, затем выполняет код transiently, а после ошибки откатывает результат. Архитектурно результат исчезает, но след в cache state остаётся. Этого достаточно, чтобы закодировать бит информации и затем считать его по latency доступа. В production этот канал становится сложнее, потому что attacker должен пережить interrupts, context switches, shared hardware noise и coarse-grained timers. Но сложнее не значит невозможно.

Команда уже имела защиту Dynamic Process Isolation, или DyPrIs. Она определяет подозрительные скрипты и переводит их в отдельные processes. Это прагматичный выбор, потому что он снижает blast radius без отказа от основной модели isolates. Однако исследование показало limitation в реализации DyPrIs. Именно этот разрыв и позволил reliably демонстрировать remote Spectre attack с утечкой до 12 bit/s при 99% accuracy в production environment Cloudflare Workers.

Сама атака потребовала решить сразу несколько инженерных задач. Нужно было гарантировать co-location attacker и victim в одном process. Нужен был remote timer с достаточной стабильностью. Нужен был Spectre gadget, который даёт 64-bit out-of-bounds access и не разваливается под production noise. И нужен был способ усилить слабый cache signal, потому что разница между cache hit и miss измеряется наносекундами, а удалённый таймер даёт куда более грубую сетку.

В реализации использовали два типа Spectre gadget. Первый позволял утекать compressed heap pointers, включая heap base address. Второй опирался на speculative type confusion и работал с attacker-crafted userspace 64-bit pointer. На момент исследования V8 Sandbox в Cloudflare Workers ещё не был внедрён, поэтому TypedArray с raw 64-bit pointer к backing store оставался удобной точкой для такого чтения. Это важная деталь: защита на уровне языковой модели не закрывает все низкоуровневые представления данных.

Для стабилизации сигнала применили tree-based PLRU cache-replacement policy. В сочетании с правильным access pattern это позволило амплифицировать один cache event до различимого timing delta. Remote timer в этом случае мог быть WebSocket connection к внешнему серверу с high-resolution timestamps. Исследование также показало, что на median можно было надёжно получить sub-ms resolution даже на большем топологическом расстоянии, хотя точные параметры зависят от условий и в исходнике не раскрыты полностью.

Отдельная сложность была в повторяемости измерений. Production machines noisy by design. Поэтому перед каждым round нужно было сбрасывать cache state, evicting both the branch condition and the probe line. Вместо точного eviction set использовали более грубый, но практичный подход: большой pool attacker and victim object pairs, который превышает last-level cache. Это компромисс между точностью и стоимостью. Метод медленнее, но он обходится без дорогого поиска eviction set и лучше подходит под noisy remote timer.

Итог исследования не ограничился демонстрацией атаки. Cloudflare улучшила DyPrIs, добавила V8 Sandbox и in-process isolation mechanism, чтобы дальше снизить риск memory disclosure attacks. Сам описанный attack уже mitigated в production system благодаря countermeasures от Workers Runtime team. Также не было найдено indicators of active exploitation за последние три года. Для архитектуры это важный результат: уязвимость была не только теоретической, но и достаточно практичной, чтобы требовать усиления нескольких уровней защиты одновременно.

Ознакомиться с источником

×

🚀 Deploy the Blocks

Controls: ← → to move, ↑ to rotate, ↓ to drop.
Mobile: use buttons below.