К содержимому
INCY
Назад

SQLITE_READONLY при подключении в TUN-режиме после повышения прав до администратора

БагОткрытКритичноПубличныйDesktop
Автор: 7**********@yandex.ru
Продукт: Приложение INCY
Создан: 20.09.2026, 10:16:25
Версия приложения: 3.8.6
Версия ОС: Windows 11 Pro 25H2 (Build 26200.9457)
Модель устройства: Desktop PC (x64-based)
 Шаги воспроизведения / описание
При подключении в TUN-режиме Incy запрашивает права администратора (диалог: "Для подключения VPN нужны права администратора (создание TUN-адаптера и настройка маршрутизации). Перезапустить INCY с правами администратора?"). После нажатия "Перезапустить от админа" и успешного перезапуска появляется ошибка:

Connection failed: [SQLITE_READONLY] Attempt to write a readonly database (attempt to write a readonly database)

=== Окружение ===
Windows 11 Pro 25H2, сборка 26200.9457
Incy v3.8.6, путь установки: C:\Program Files\INCY\
Пользовательские данные: C:\Users\nikolanp\AppData\Local\Incy\incy.db

=== Причина ===
- Файл БД находится в C:\Users\<user>\AppData\Local\Incy\ (per-user расположение)
- При автозапуске процесс работает от имени пользователя nikolanp с Medium Integrity Level
- При повышении прав через UAC процесс перезапускается от имени Администратора (другой SID, High Integrity Level)
- Несмотря на то, что:
  - Владелец файла: nikolanp
  - Группа BUILTIN\Администраторы имеет FullControl
  - Текущий пользователь имеет FullControl
  - SYSTEM имеет FullControl
  - High Mandatory Integrity Level был установлен на папку
  - Тест записи от админа в папку: ПРОЙДЕН
- Elevated-инстанс Incy всё равно получает SQLITE_READONLY

Это означает одно из:
a) Incy использует ДРУГОЙ путь к БД при запуске от админа (например, через UAC Virtualization в %LOCALAPPDATA%\VirtualStore\)
b) Incy использует connection string SQLite, которая принудительно включает read-only режим
c) Incy кэширует состояние read-only до повышения прав и не обновляет
d) Другой механизм блокирует запись, который стандартные ACL-инструменты не видят

=== Шаги воспроизведения ===
1. Установить Incy v3.8.6 на Windows 11 25H2
2. Запустить Incy (без прав админа) — запускается успешно
3. Нажать "Перезапустить от админа" при запросе
4. После UAC-запроса Incy перезапускается
5. Нажать "Подключить" в TUN-режиме
6. Наблюдать: "Connection failed: [SQLITE_READONLY]"

=== Ожидаемое поведение ===
Incy должен либо:
- Перенести БД в %PROGRAMDATA%\Incy\ (системное расположение, доступное и пользователю, и админу)
- ИЛИ перенастраивать ACL на файле БД при повышении прав
- ИЛИ выполнять операции с БД через impersonation исходного пользователя
- ИЛИ работать целиком как Windows Service с admin-токеном, а UI общается через IPC

=== Фактическое поведение ===
Incy показывает общую ошибку SQLITE_READONLY без пути к файлу, без возможности восстановления и без понятного сообщения.

=== Предлагаемое исправление ===
1. Логировать ТОЧНЫЙ путь к файлу SQLite-базы при возникновении SQLITE_READONLY
2. Логировать SID текущего пользователя процесса, integrity level и ACL на файле БД в момент ошибки
3. Перенести БД в %PROGRAMDATA%\Incy\ ИЛИ обеспечить, чтобы ACL включали и пользователя, и Администраторов с FullControl
4. Показывать более понятное сообщение с путём к файлу БД и кнопкой "Восстановить права"
5. Добавить опцию "Сбросить базу данных" в Настройки → Отладка

=== Применённое обходное решение ===
1. taskkill /f /im incy.exe, /im browser.exe
2. takeown /f "%LOCALAPPDATA%\Incy" /r /d y
3. icacls "%LOCALAPPDATA%\Incy" /grant "%USERNAME%:(F)" /t /c
4. icacls "%LOCALAPPDATA%\Incy" /grant "BUILTIN\Administrators:(F)" /t /c
5. Удалить incy.db, incy.db-shm, incy.db-wal
6. Добавить Incy в исключения Windows Defender
7. Отключить Controlled Folder Access в Defender

Даже после всех шагов ошибка SQLITE_READONLY периодически возвращается.

Но на текущий момент не вопроизводилась
Комментарии (0)

Пока нет комментариев

Добавить комментарий