[Rust] CVE-RS for dummies. Как работают уязвимости в Memory Safety из-за недочета в компиляторе
Дата: 27.09.25 Спикер: Влад Лежебоков. tg: @nullzert Член команды ITMOteam, менеджер Rust-коммьюнити Университета ИТМО CVE-RS (https://github.com/Speykious/cve-rs)
в Rust: решение и объяснение, как в Rust располагаются структуры в памяти и обеспечивается ее безопасность Уровень сложности материала: 🔑x4/5 — для изучения материала слушателям рекомендуется иметь базовые навыки эксплуатации уязвимостей или использования инструментов Тайминги: 00:00 - Постановка задачи с CTF: Описание "песочницы" под код на Rust и её ограничений (запрет unsafe, :: и др.). 02:33 - Идея решения: Использование уязвимости в лайфтаймах компилятора для обхода ограничений. 05:27 - Адаптация эксплойта под ограничения "песочницы": 06:17 - Замена функций на замыкания. 08:49 - Обход запрета на :: при создании Box. 14:03 - Использование Result::unwrap вместо запрещённого match. 15:03 - Создание поддельной строки в памяти для чтения флага. 25:23 - Решение задачи: Успешное извлечение и вывод флага, обходя запрет на макрос println!. 36:03 - Технический разбор уязвимости: Как это работает? 37:27 - Основы лайфтаймов: Наглядное объяснение того, как компилятор Rust отслеживает время жизни переменных. 46:21 - Суть бага: Как Higher-Ranked Trait Bounds (HRTB, конструкция for 'a) позволяет обмануть компилятор и "стереть" ограничения на лайфтаймы. 57:39 - Механизм transmute: Как перезапись enum с другим вариантом позволяет интерпретировать одни данные как совершенно другой тип. 1:03:37 - Роль Box и "ниш": Почему в оригинальном эксплойте используется Box для обеспечения одинакового представления в памяти и обхода оптимизаций компилятора. 1:10:47 - Где это можно применить на практике? Обсуждение замаскированного unsafe кода и вредоносного ПО.
Смотрите также
