В марте 2026 года в почтовом клиенте FreeScout обнаружилась уязвимость класса zero-click RCE: достаточно, чтобы письмо дошло до ящика — открывать вложение, переходить по ссылке и даже читать сообщение жертве не нужно. Для дипломника-безопасника это не просто новость — это готовый каркас для целой главы: есть конкретная точка входа (IMAP-обработчик), есть вектор эксплуатации (недоверенный MIME), есть измеримый ущерб (полный захват сервера) и есть что защищать. Разберём, как превратить разбор PoC из статьи в защищаемую ВКР, а не в пересказ анонса.
Не нужен боевой контур. Разворачиваете FreeScout в Docker на локальной виртуалке, изолируете сеть, ставите себе ограничение: только собственный стенд. Юридически это чистый учебный сценарий, и его легко описать в главе «Методика исследования».
Через метрики, а не «стало лучше». Например: время от поступления письма до срабатывания фильтра, доля заблокированных MIME-паттернов (TPR), процент ложных срабатываний (FPR), CVSS-дельту до и после патча. Всё это ложится в таблицу экспериментов.
В приложение, отдельным листингом, с указанием окружения и версии. В основном тексте — псевдокод и схема последовательности. Эксплойт целиком в главе 2 защищать не дадут, и правильно: нормоконтроль по ГОСТ 19 требует листинги оформлять аккуратно.
Приложите хронологию: дата CVE, дата патча, наличие похожих кейсов в OWASP Top 10 (A03 Injection, A06 Vulnerable and Outdated Components). Одна такая таблица закрывает вопрос актуальности быстрее десяти абзацев «в современном мире».
Начните с того, что FreeScout — PHP-приложение с модульным ядром, общающееся с почтой по IMAP. Событийная модель «письмо получено → модуль обработал → данные ушли дальше» — это классический источник недоверенного ввода. Постройте диаграмму компонентов в нотации C4 (уровень Container) и UML sequence для сценария доставки письма. Отметьте красным те места, где содержимое письма касается парсинга: тема, тело, имя вложения, заголовки. Именно там zero-click и живёт.
Здесь пригодится Docker Compose: сервис FreeScout, сервис почты, отдельная сеть, отдельный пользователь. Опишите изоляцию и почему вы не работаете с боевой почтой. Далее — минимальный санитайзер, который отбрасывает подозрительные MIME-структуры до передачи в бизнес-логику.
# docker-compose.fragment.yml — изолированный стенд
services:
freescout:
image: freescout/freescout:latest
networks: [lab_net]
read_only: true
tmpfs: ["/tmp"]
restart: unless-stopped
mailhog:
image: mailhog/mailhog
networks: [lab_net]
ports: ["8025:8025"]
networks:
lab_net:
driver: bridge
internal: true # нет выхода в интернет — изоляция PoC
// Псевдокод MIME-санитайзера: режем до бизнес-логики
function sanitizeMime(array $mime): array {
$allowed = ['text/plain', 'text/html', 'image/png', 'application/pdf'];
$maxParts = 20;
$parts = $mime['parts'] ?? [];
if (count($parts) > $maxParts) {
throw new SuspiciousMailException('Too many MIME parts');
}
foreach ($parts as $p) {
if (!in_array($p['content_type'], $allowed, true)) {
throw new SuspiciousMailException('Unexpected content type');
}
if (!empty($p['filename']) && !preg_match('/^[\w\- .]{1,128}$/u', $p['filename'])) {
throw new SuspiciousMailException('Suspicious filename');
}
}
return $mime;
}
Прогоните три сценария: чистый стенд, стенд без санитайзера с тестовым письмом, стенд с санитайзером. Замерьте время реакции, число обработанных писем в секунду, долю заблокированных. Сведите это в таблицу «до/после» и приложите логи. Если добавите OpenTelemetry-трейсинг обработки письма — получите красивый график latency и аргумент для защиты.
| Метрика | Без защиты | С санитайзером | Комментарий |
|---|---|---|---|
| TPR (обнаружение) | 0 % | 92 % | на тестовом наборе |
| FPR (ложные) | — | 3 % | приемлемо для шлюза |
| Время обработки письма | 41 мс | 47 мс | накладные ~15 % |
| CVSS до/после | 9.8 | 4.3 | эффект изоляции кода |
1. Пересказ статьи вместо исследования. Студент копирует описание уязвимости и на этом останавливается. Комиссия сразу видит компиляцию. Лечится просто: добавьте собственную модель угроз и хотя бы один воспроизведённый эксперимент — да, именно свой, а не чужой.
2. PoC на боевой системе. Даже «только посмотреть» на чужом сервере — это статья. Работайте на локальной виртуалке с выключенным сетевым доступом, фиксируйте конфигурацию стенда в приложении.
3. Метрики из головы. «Эффективность выросла на 80 %» без методики замера — гарантированный вопрос на защите. Распишите, что и чем измеряли: инструмент, датасет, число повторов.
Если тема кажется объёмной, а дедлайн близко — можно начать с бесплатной консультации: разберём ваш черновик, подскажем, где усилить эксперимент и как уложиться в 120 часов работы над текстом. Помогаем с темами любой сложности, включая разбор уязвимостей и оформление по ГОСТ.
Источник: Zero-click во FreeScout. Как работает захват сервера одним письмом (опубликовано 2026-03-25)