## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-WHITESQUIRRELL-C0DEVARI4NT
# C0deVari4nt


## Описание
C0deVari4nt — это инструмент для анализа вариантов и визуализации, который проверяет кодовые базы на наличие схожих уязвимостей. Он использует CodeQL — семантический движок анализа кода, для выполнения запросов к коду на основе шаблонов запросов CodeQL, управляемых пользователем, и передает результаты в клиентский интерфейс, построенный на vis.js и React, для дальнейшего изучения и визуализации. Это позволяет быстро и всесторонне проводить анализ вариантов на основе предыдущих отчетов об уязвимостях. Функция визуализации vis.js предоставляет разработчикам дополнительную информацию об уязвимых путях кода и позволяет эффективно сортировать потенциальные варианты.

## Мотивация
Инцидент Log4Shell в декабре 2021 года высветил трудности, с которыми сталкиваются разработчики открытого кода при реагировании на отчеты об уязвимостях. После первоначального патча для CVE-2021-44228, который позволял неаутентифицированным удаленным злоумышленникам получать контроль над устройствами, работающими под уязвимыми версиями Log4j 2, Apache выпустила 3 дополнительных патча для устранения связанных уязвимостей и неучтенных крайних случаев.
Разработчикам открытого кода часто не хватает навыков всестороннего анализа кода, и они сталкиваются с проблемами при выявлении вариантов уязвимости, что приводит к неполным исправлениям. Хотя существуют наборы запросов CodeQL для быстрого анализа кодовой базы, результаты этих наборов могут иметь высокий уровень ложноположительных срабатываний. Более того, эти наборы полагаются на предопределенные запросы, которые не поддерживают анализ вариантов и не адаптированы под конкретные кодовые базы. В результате проекты с открытым исходным кодом часто реагируют на отчеты об уязвимостях фрагментарно, упуская потенциальные варианты.
C0deVari4nt предоставляет разработчикам платформу для легкого проведения анализа вариантов без значительных накладных расходов на написание собственных запросов CodeQL. Это дает разработчикам возможность настраивать шаблоны CodeQL, предоставляя информацию, специфичную для кодовой базы, например, конкретный источник и сток уязвимости. Результаты будут визуализированы в виде графовой базы данных на основе vis.js, что позволит разработчикам быстро выявлять потенциальные варианты. Таким образом, разработчики смогут эффективно устранять целые классы ошибок на основе одного отчета об уязвимости.
## Компоненты инструмента
C0deVari4nt построен с использованием Python, CodeQL, vis.js и React для создания интерактивного GUI-приложения, которое принимает пользовательский ввод и демонстрирует связи между различными уязвимыми путями кода.

C0deVari4nt состоит из следующих 2 основных компонентов:
* **Клиентский интерфейс** : Этот компонент построен на React и браузерной библиотеке визуализации vis.js. Пользователи взаимодействуют с этим компонентом для настройки запроса CodeQL и анализа результатов CodeQL через представление графовой визуализации.
* **API-сервер** : Этот компонент построен на веб-фреймворке Python FastAPI для получения запросов от клиентского интерфейса и выполнения команд CodeQL для списка файлов баз данных, готовых для CodeQL. Затем сервер возвращает обработанные результаты данных клиентскому интерфейсу.
Больше деталей о клиентском интерфейсе можно увидеть ниже: 
# Использование v1
## Настройка папки с базами данных
* Перейдите в каталог api-server и выполните `dbextractor.py <zip-файл базы codeql>`, чтобы распаковать содержимое базы данных codeql
## Запуск бэкенд-сервера
* Перейдите в каталог api-server
* Установите зависимости: `pip install -r requirements.txt`
* Выполните `uvicorn main:app --reload` для запуска локального сервера разработки на порту 8000
## Запуск React-интерфейса
* Перейдите в каталог react-gui
* Установите зависимости: `npm i`
* Выполните `npm start` для запуска локального сервера разработки
## Использование инструмента

* Введите параметры запроса в поле параметров и нажмите «Применить»
* Подождите несколько секунд, пока бэкенд обработает запрос
* Используйте правую панель свойств, чтобы изолировать пути и просмотреть свойства узлов
## Использование
### Запуск кодовой базы по предопределенным источникам и стокам уязвимостей (Вариант 1)
1. Найти все исходные функции, ведущие к запрещенным строковым функциям (на основе списка запрещенных вызовов функций Microsoft SDL)
2. Найти все вызовы функций `strcat` без проверки границ аргумента источника
3. Найти все вызовы функций `strncpy` без проверки границ аргумента источника
4. Найти все случаи отсутствия проверки границ для возвращаемого значения вызова `snprintf`
1. Например: когда операция достигает конца буфера и отбрасывается более 1 символа, возвращаемое значение будет больше размера буфера
5. Найти все вызовы `malloc`, `calloc` или `realloc` без выделения достаточного объема памяти для хранения экземпляра типа указателя
### Запуск кодовой базы по источникам и стокам на ваш выбор (Вариант 2)
1. Найти все исходные выражения, ведущие к опасной функции-стоку
2. Найти конкретную исходную функцию, ведущую к опасной функции-стоку
3. Найти конкретную исходную функцию, ведущую к опасной функции-стоку (Загрязненная функция)
1. Используйте метод `isAdditionalTaintStep` для передачи заражения между двумя несвязанными функциями
4. Найти конкретную исходную функцию, ведущую к опасной функции-стоку (Загрязненное выражение)
1. Используйте метод `isAdditionalTaintStep` для передачи заражения между указателями, которые имеют одинаковые значения во время выполнения
## Упрощение результатов CodeQL и связей между узлами
Ниже показаны результаты CodeQL для запроса с recvfrom в качестве источника, mempool_alloc в качестве дополнительного шага заражения и memcpy в качестве стока:

Этот результат дает в общей сложности **180 узлов в 27 различных путях кода**. Результаты отображаются в простом интерфейсе neo4j ниже:

Пропустив этот запрос через наш инструмент, мы смогли выявить повторяющиеся вхождения каждого узла, источника и стока и объединить связи узлов.
Это привело к значительно более чистому графу с общим количеством **11 уникальных узлов** , при этом сохранились все 27 уникальных путей кода:

Результаты могут быть далее распределены по соответствующим путям с помощью нашей функции маркировки путей:

