Мы выпускаем пререлиз Svace 4.0.241016. По сравнению с svace 3.4 было сделано множество улучшений и исправлений, о которых будет написано ниже. Этот релиз не является стабильным. Мы выполнили базовое тестирование и исправили критические проблемы. Исправление некритичных регрессий будет выполнено в первом обновлении 4.0.
В Svace 4.0 мы обновили поддерживаемые версии для следующих языков:
Кроме этого для Go теперь будут игнорироваться обновления минорных версий.
На базе инфраструктуры UAST был реализован анализ на основе абстрактного синтаксического дерева для языка JavaScript. Реализованы следующие виды детекторов:
INVARIANT_RESULT
— выражение всегда принимает константное значение вне зависимости от значений операндов (например, x + 0
).SIMILAR_BRANCHES
— ветви условного или тернарного оператора являются одинаковыми.SIMILAR_BRANCHES.SWITCH
— ветви оператора switch
являются одинаковыми.DEFAULT_CASE_MISSING
— в операторе switch
отсутствует ветвь default
.CATCH.NO_BODY
— в catch
-блоке отсутствуют операторы.CATCH.EXCEPTION_ASSIGN
— присваивание значения в параметр-исключение, передаваемый в catch
-блок, что приводит к игнорированию исключения.BAD_COPY_PASTE
— частичный клон кода, в котором некоторые части кода могли быть случайно оставлены не изменёнными (например, не все использования одной переменной были заменены на другую).WRONG_ARGUMENTS_ORDER
— вызов функции с неправильным порядком аргументов.RETURN_IN_FINALLY
— использование оператора return
в finally
-блоке, что может привести к игнорированию исключения.INAPPROPRIATE_FOR_IN
— использование цикла for ... in
в тех случаях, когда уместнее было бы использовать for ... of
.INCORRECT_NAN_COMPARE
— проверка на значение NaN
через сравнение вида x == NaN
, а не вызов встроенной функции isNaN
.INCORRECT_TYPEOF_COMPARE
— сравнение результата typeof
с именем несуществующего типа.GETTER_WITHOUT_RETURN
— отсутствие оператора return
в геттере.SETTER_WITH_RETURN
— наличие оператора return
в сеттере.CONSTRUCTOR_WITH_RETURN
— наличие оператора return
в конструкторе.EMPTY_DESTRUCTURING_PATTERN
— пустой шаблон при деструктуризации.CALLBACK_WITHOUT_RETURN
— отсутствие возвращаемого значения в callback-функции, передаваемой в функцию высшего порядка, которая ожидает возвращаемое значение (например, передача void
-функции в Array.filter
).CALLBACK_WITH_RETURN
— наличие возвращаемого значения у callback-функции, передаваемой в функцию высшего порядка forEach
.В текущем релизе был существенно улучшен анализ python проектов. Мы переделали построение промежуточного представления (графа потока управления и графа вызовов), что позволило более точно моделировать семантику языка. Также добавлена базовая девиртуализация, которая помогает лучше устанавливать вызываемые функции для python кода.
Количество детекторов, доступных для python, достигло 50. Предыдущая версия имела 16 детекторов.
Количество поддерживаемых UAST детекторов увеличилось вдвое и достигло 70.
Для Go АСТ-детекторы были реализованы в отдельном компоненте Goa. В этом релизе мы реализовали АСТ-детекторы на инфраструктуре UAST. Благодаря этому возможности UAST-анализа доступны для языка Go, то позволит более активно развивать АСТ-детекторы для Go, и увеличит консистентность с другими языками.
Теперь UAST доступен для следующих языков: Java, Kotlin, Python, Go и JavaScript.
В этом релизе мы значительно переработали, расширили и упростили возможность написания пользовательских детекторов с помощью Svace API.
Мы добавили доступ к части внутренних свойств значений переменных:
Мы изменили интерфейс SvaceLightPlugin
чтобы упростить написание плагинов, а также унифицировали некоторые интерфейсы и сократили название методов API, чтобы улучшить читаемость вашего кода.
Tainted-детекторы осуществляют поиск уязвимостей использования данных из внешних источников. Внешними считаются данные, которые приходят из-вне программы. Например, это может быть пользовательский ввод; данные, полученные из сети; данные из файлов. Программа должна проверять такие данные перед использованием, иначе злоумышленник, имеющий возможность менять их, подберёт такие данные, что их использование вызовет возможные проблемы (падения программ, выполнение произвольного кода, утечку конфиденциальных данных и прочее).
Мы пометили общеизвестные функции, которые являются источником внешних данных. Пользователи могут расширять такие функции с помощью спецификаций Svace, комментариев к полям структур, а также JSON-файлов для языка C#.
Этот релиз содержит множество улучшений инфраструктуры taint-детекторов:
В обновлении 3.4.240516 мы усовершенствовали систему проверки наличия лицензии, что позволило существенно ускорить анализ. В ряде случаев (в зависисимости от используемого сервера и анализируемого проекта) анализ ускорился в 10 раз.
Для пользователей, которые уже используют Svace версии 3.4.240516
и выше, ничего не поменяется. Те, кто используют более старые версии, могут ожидать ускорение анализа в новой версии.