Кто-то смог обойти защиту Google kernelCTF, используя AVX512. Это круто и страшно одновременно — уязвимости находят даже в таких сложных системах. 🔥👨💻
28 мая 2025 года команда Crusaders of Rust в составе Тимоти Херчена, Уильяма Лю и Сэви Диканосы успешно эксплуатировала уязвимость типа use-after-free в планировщике пакетов Linux и выиграла $51,000 в соревновании kernelCTF от Google. Ключевым фактором победы стала оптимизация Proof of Work (PoW) с использованием инструкций AVX512IFMA, сократившая время решения с 4 до 0.23 секунды на процессоре AMD Zen 5.
Технический контекст
kernelCTF — это программа вознаграждений Google за уязвимости в ядре Linux с уникальным механизмом подачи: каждые две недели открывается 5-секундное окно, и только первая успешная команда получает награду. Для предотвращения флуда используется криптографическая функция задержки (VDF) под названием «sloth», реализующая PoW:
def sloth_root(x, difficulty=7337):
for _ in range(difficulty):
for _ in range(1277):
x = (x * x) % (2**1279 - 1) # Мерсенново простое число
x = x.bit_flip(0) # Инвертирование младшего бита
return int(x)Оптимизационный прорыв
-
Математическое ускорение: Использование свойств модуля Мерсенна (2¹²⁷⁹-1) позволило заменить дорогостоящую операцию
%на комбинацию битовых сдвигов и сложений:uint128_t mod = (x & p) + (x >> 1279); if (mod >= p) mod -= p;
-
AVX512IFMA: Инструкции
vpmadd52luqиvpmadd52huq(52×52-битное умножение с накоплением) процессоров Zen 5 обеспечили 8-кратный параллелизм. Ключевые оптимизации:- Представление 1280-битного числа в 25 limbs по 52 бита
- 14 аккумуляторов для полной загрузки исполнительных блоков
- Безмасочные inline-ассемблерные вставки для минимизации накладных расходов
-
Исключение store-forwarding stalls: Замена невыровненных загрузок из памяти на инструкцию
valignqдля работы с регистрами.
Практические результаты
- 1.9 сек → базовая оптимизация на M1 Macbook Pro
- 0.45 сек → первая версия на Ryzen 9950X
- 0.23 сек → финальная версия с ручной ассемблерной оптимизацией
16 мая 2025 года команда установила рекорд — отправка эксплойта за 3.6 секунды, включая:
- Решение PoW (0.23 сек)
- Загрузку VM (2.5 сек)
- Исполнение эксплойта (0.55 сек)
- Отправку флага (0.32 сек)
Инженерные инсайты
- Латентность vs throughput: Для VDF критично минимизировать задержку (использование 14 аккумуляторов вместо 7)
- Бранчлесс-подход: Условное вычитание модуля реализовано через маскирование без ветвлений
- Особенности Zen 5: Широкие регистры AVX512 (32 zmm) и 2×vpmadd52luq/cycle
28 мая Google отключил PoW в kernelCTF, что завершило эпоху аппаратных оптимизаций для этого соревнования. Исходный код опубликован под GNU AGPL 3.0.