Skip to content

Security: iinquisitor/TextFormatter

SECURITY.md

Политика безопасности

Поддерживаемые версии

Обновления безопасности получает только последняя выпущенная версия. Более старые версии могут содержать уязвимости и не поддерживаются.

Версия Поддерживается
0.5.x ✅
0.4.x ✅
< 0.4 ❌

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

https://github.com/iinquisitor/TextFormatter/releases/latest

  • Внимание! Если вы используете старую версию TextReplacer версии 0.3-alpha и ниже, вам необходимо скачать новую программу TextFormatter вручную, старая программа потеряла свою актуальность и поддержку.

Как сообщить об уязвимости

Не открывайте публичный issue на GitHub по вопросам безопасности.

Сообщайте об уязвимостях приватно через один из каналов:

Пожалуйста, приложите:

  1. Описание проблемы — в чём уязвимость, какое влияние.
  2. Шаги воспроизведения — в идеале минимальный пример.
  3. Затронутая версия — видна в заголовке окна приложения и в Настройки → Об авторе.
  4. Операционная система — Windows / macOS / Linux, версия.
  5. Proof of concept — если применимо (скриншот, файл-пример, видео).

Что ожидать

  • Первый ответ в течение 72 часов.
  • Оценка (серьёзность, затронутые версии, план) в течение 7 дней.
  • Исправление и скоординированное раскрытие — я согласую с вами график. Обычно:
    • Критичные / высокие — патч в течение 7 дней, публичное раскрытие после того, как исправленная версия доступна не менее 14 дней.
    • Средние / низкие — патч в следующем плановом релизе.
  • Указание авторства в примечаниях к релизу, если хотите быть названным.

Область действия

В области проверки

  • Удалённое выполнение кода (RCE) через парсинг файлов (YAML, JSON, Markdown, конфиги)
  • Обход доверенных папок (path traversal)
  • Повышение привилегий через модель доверенных папок
  • Обход подписи в механизме автообновления
  • Внедрение кода через подсветчик синтаксиса Minecraft
  • Утечка данных за пределы заявленной сетевой активности
  • Отказ в обслуживании (DoS) через специально сформированные файлы (OOM, бесконечные циклы)

Вне области проверки

  • Атаки, требующие физического доступа к машине жертвы
  • Атаки, требующие от пользователя установить вредоносную версию вручную
  • Уязвимости сторонних библиотек без практического пути эксплуатации в приложении (сообщайте о них разработчикам библиотеки)
  • Социальная инженерия
  • Отсутствие «best practice» заголовков, не влияющих на функциональность
  • Проблемы, уже зарегистрированные и подтверждённые в трекере

Модель безопасности

Приложение следует этим принципам:

1. Доверенные папки

Приложение может читать и записывать файлы только внутри папок, которые пользователь явно сделал доверенными. Доверие выдаётся:

  • выбором папки через нативный диалог «Открыть папку»;
  • перетаскиванием папки в окно приложения;
  • ручным добавлением папки в Настройки → Доверенные папки.

Ни одна папка не является доверенной по умолчанию, кроме собственной подпапки приложения storage/ (используется для черновиков).

Список доверенных папок сохраняется в директории конфигурации приложения и восстанавливается при каждом запуске.

2. Подписанные автообновления

Пакеты обновлений криптографически подписаны приватным ключом Ed25519. Приложение проверяет подпись перед установкой любого обновления, сверяя её с публичным ключом, вшитым в скомпилированный бинарник на этапе сборки.

Если подпись не совпадает, обновление отклоняется, и пользователь видит сообщение об ошибке. Это защищает от атак «человек посередине» (MITM) и скомпрометированных точек распространения.

Приватный ключ подписи никогда не покидает машину разработчика (или GitHub Secrets в CI-пайплайне релиза).

3. Отсутствие телеметрии

Приложение не собирает и не передаёт:

  • статистику использования;
  • отчёты о падениях;
  • содержимое файлов;
  • пути к файлам;
  • идентификаторы пользователя.

Единственный сетевой запрос — проверка обновлений по адресу https://github.com/iinquisitor/TextFormatter/releases/latest/download/latest.json раз в сутки (или по ручному запросу). Запрос содержит только стандартные HTTP-заголовки — никакой идентифицирующей информации.

Все операции с файлами выполняются локально. Настройки хранятся локально в localStorage приложения; снимки истории — локально в директории данных приложения.

4. Безопасность контента

  • Редактор CodeMirror изолирован средствами стандартного WebView.
  • Рендеринг Markdown в модалках «История изменений» и «Обновление» вырезает сырой HTML.
  • Цветовые коды Minecraft и теги MiniMessage отображаются как текст, никогда не вычисляются как HTML.

Известные ограничения

  • Приложение не изолировано на уровне ОС — оно работает с привилегиями пользователя, который его запустил. Скомпрометированный бинарник или supply-chain атака на зависимости могли бы затронуть файлы пользователя.
  • Механизм обновлений доверяет цепочке TLS-сертификатов GitHub. Если бы сам GitHub был очень специфично скомпрометирован, атакующий мог бы подсунуть валидно выглядящий latest.json — но проверка подписи всё равно отклонила бы вредоносный бинарник.
  • WebView может генерировать crash-дампы на уровне ОС; приложение никуда их не отправляет.

Зависимости

Приложение зависит от экосистемы Tauri, React, CodeMirror и небольшого числа Rust-крейтов. Уязвимости зависимостей отслеживаются через cargo audit и npm audit в CI. Безопасностно-значимые обновления зависимостей выпускаются как патч-версии.

Вопросы

Если у вас есть вопросы по модели безопасности, не покрытые здесь, открывайте нечувствительный GitHub Discussion или пишите в Discord.

There aren't any published security advisories