04.07.2022

Выпуск утилиты GNU cflow 1.7 с устранением уязвимостей

После трёх лет разработки опубликован выпуск утилиты GNU cflow 1.7, предназначенной для построения наглядного графа вызовов функций в программах на языке Си, который может использоваться для упрощения изучения логики работы приложения. Граф строится только на основе анализа исходных текстов, без необходимости выполнения программы. Поддерживается генерация как прямых, так и обратных графов потоков выполнения, а также генерация списков перекрёстных ссылок для файлов с кодом.

Выпуск примечателен реализацией поддержки формата вывода «dot» (‘—format=dot’) для формирования результата на языке DOT для последующей визуализации в пакете Graphviz. Добавлена возможность указания нескольких стартовых функций через дублирование опций ‘—main’, для каждой из подобных функций будет сгенерирован отдельный граф. Также добавлена опция «—target=FUNCTION» позволяющая ограничить результирующий граф только веткой, включающей определённые функции (опцию «—target» можно указывать несколько раз). В режим cflow-mode добавлены новые команды для навигации по графу: «c» — переход к вызывающей функции, «n» — переход к следующей функции на данном уровне вложенности и «p» — переход к предыдущей функции с тем же уровнем вложенности.

В новой версии также устранены две уязвимости, которые были выявлены ещё в 2019 году и приводят к повреждению памяти при обработке в cflow специально оформленных исходных текстов. Первая уязвимость (CVE-2019-16165) вызвана обращением к памяти после её освобождения (use-after-free) в коде парсера (функция reference в parser.c). Вторая уязвимость (CVE-2019-16166) связана с переполнением буфера в функции nexttoken(). По мнению разработчиков, указанные проблемы не представляют угрозы безопасности, так как ограничиваются аварийным завершением утилиты.

Источник.