// SECURITY AUDIT

Отчёт об аудите безопасности

Доверяй, но проверяй — каждое заключение аудита публикуется здесь.

Обзор аудита

3-й раунд проверки · 2026-08-18
📅 Даты аудита: 2026-08-16 / 17 / 18 (три раунда)📄 Охват: все 279 .dart-файлов в lib/ · android/ (сервис записи экрана — полная первая проверка) · docs/ · test/ (351 выполнен)🔬 Метод: перекрёстная проверка + построчное чтение + Semgrep SAST (634 правила / 510 файлов) + динамические проверки
0
Высокий · всё исправлено
0
Средний · всё исправлено
0
Низкий · всё исправлено
0
Инфо · подтверждено
0
Безопасные решения

Итог: три раунда сошлись — поверхность атаки обнулена. Конвертная шифровка, поперечная проверка сети, песочница с правами и безопасная миграция стабильно выдерживали все три раунда; новые зоны аудита (запись / сценарии / перевод / упаковщик / голос) без новых высоких/средних; Semgrep SAST: ноль срабатываний в lib/. Готово к релизу.

🔧
Три раунда, всё исправлено: раунд 1 — 08-16 (все 20 разделов A–T) → перекрёстный аудит 08-17 → повторная проверка 08-18. Итого 2 высоких / 14 средних / 9 низких + 4 инфо — все высокие/средние закрыты, остаток низких исправлен в тот же день. Подробности в журнале изменений.

Ход аудита и исправления

Раунд 1 · 2026-08-16 (все 20 разделов A–T)

Высокий · исправлено
Запросы ИИ следовали перенаправлениям — перехваченная цепочка могла менять ответы. Исправлено: явный followRedirects=false + исключение при 3xx (ai_task_client.dart:27-54).
Высокий · исправлено
Буфер обмена без защиты чувствительных данных — читать мог любой инструмент. Исправлено: защищён по умолчанию, требуется проверка центра безопасности.
Средний · исправлено
Обход SSRF вариантами — восьмеричные / короткие / шестнадцатеричные IP обходили блокировку частных сетей. Исправлено: resolveIpLiteral разбирает все варианты + 6 юнит-тестов (http_safe.dart:72-127).
Средний · исправлено
Мост плагинов без ограничения размера — вредоносный плагин мог исчерпать память. Исправлено: лимиты 10 МБ storage / 50 МБ file.
Средний · исправлено
Запись в буфер обмена во время восстановления — могла загрязнить новые данные. Исправлено: мьютекс restorePaused (backup_service.dart).
Средний · исправлено
Копирование больших файлов блокировало главный поток — риск ANR. Исправлено: фоновый поток + @Volatile (MainActivity.kt:1331-1343).
Низкий · исправлено
6 низких находок — остатки пароля перед блокировкой, URL в уведомлениях, избыточные логи; всё исправлено.

Раунд 2 · 2026-08-17 (перекрёстный аудит)

Высокий · исправлено
Цепочка HTML-инъекции в переводе (H1) — неэкранированный перевод напрямую в WebView. Исправлено: HTML-экранирование + CSP meta script-src 'none'.
Высокий · смягчено
tool_keys в открытом виде (H2) — ключи плагинов в Hive без шифрования. Смягчено: внешнее шифрование паролем резервной копии + принудительная инструкция по экспорту.
Средний · исправлено
Не-loopback http-эндпоинты ИИ — можно было задать незашифрованные адреса. Исправлено: isAllowedEndpoint на трёх уровнях — глобально, по проекту и на уровне запроса.
Средний · исправлено
Внешний импорт перезаписывал данные — серьёзный риск потери. Исправлено: объединяющий импорт + атомарная замена.
Средний · исправлено
Остатки незашифрованных входов (WebDAV / мост) — всё сведено к обязательному HTTPS или белому списку loopback.

Раунд 3 · 2026-08-18 (повторная проверка + новые зоны)

Пройдено
Новые зоны без высоких/средних — сервис записи экрана / действия сценариев / цепочка перевода / упаковщик APK / голосовой помощник, всё чисто.
Низкий · исправлено
3 низких находки исправлены в тот же день — безлимитная задержка сценария (ограничена 10 мин), следование редиректам перевода (_postNoRedirect), утечка URL в уведомлениях об ошибке (только host).
Пройдено
Скан Semgrep SAST — 634 правила / 510 файлов, ноль срабатываний в lib/.
Пройдено
Проверка на устройстве: 10/10 — запуск / установка пароля / перезапуск после kill / защита буфера обмена / повторная блокировка AppLock / подтверждение отправки.
Пройдено
Динамические проверки — flutter analyze 0 ошибок · тесты 351/351 пройдены · релизная сборка OK.

Подтверждённые безопасные решения

Следующие механизмы прошли перекрёстную проверку файлов и подтверждены как безопасные и эффективные:

#МеханизмПуть проверкиСтатус
1Аппаратная защита ключей шифрования HiveFlutterSecureStorage → Android Keystore / iOS Keychain
27/7 чувствительных боксов зашифрованыперекрёстно проверено в main.dart; чувствительные боксы открываются с cipher
3Резервные копии принудительно шифруютсябез пароля → UnencryptedBackupException
4Алгоритм шифрования резервных копийPBKDF2 (300k раундов) + AES-256-GCM
5Ноль нагрузки логирования в релизевесь вывод логов внутри kDebugMode
6WebDAV: HTTPS принудительноHTTP-конфигурации отклоняются напрямую
7Отключение eval / Function в песочницеполное покрытие Object.defineProperty
8Внедрение CSP в песочницеmeta-тег + HTTP-заголовок, двойной путь
9Защита от path traversalпроверки безопасности при импорте плагинов и восстановлении копий
10Прочие подтверждённые пунктышифр копий v3, атомарный процесс восстановления, FLAG_SECURE на чувствительных страницах и др.
🔬
Полный отчёт (с местами в коде и исправлениями) — в docs/security_audit_report_2026-08-18_ZCode.md проекта.Безопасность — наша основа: сообщайте о проблемах через обратную связь.
МАТРИЦА: ВКЛ — повторите ввод или ESC для выхода