Это исследование фокусируется на уязвимости загрязнения прототипа, «новым» типам уязвимости безопасности, впервые обнаруженной в 2018 году, который не был изучен подробно. Уязвимость использует ориентированный прототип дизайна JavaScript. Модифицируя прототип нативных объектов, таких как объект, от которых большинство других объектов наследуют свойства и методы, возможно, в зависимости от логики конкретного применения, переходить практически к любой другой веб -уязвимости.
Мы собрали код JavaScript, содержащий реальные примеры уязвимости уязвимости прототипа прототипа слов, поиск в базах данных уязвимости, таких как консультант GitHub и другие источники. Чтобы быть уверенным, что собранные примеры на самом деле уязвимы, мы написали простое доказательство концепции эксплойта для каждой уязвимой функции. Мы запустили инструменты статического анализа, рассматриваемые против уязвимых приложений. Среди набора данных уязвимости мы выбрали некоторые тематические исследования, которые мы подробно проанализировали, чтобы объяснить различные модели кода, которые приводят к уязвимости. Эти тематические исследования были выбраны, чтобы показать интересные результаты, которые позволили нам выделить сильные стороны и ограничения каждого инструмента.
Odgen/objlupansys Новый подход, основанный на графике объектов, который успешно моделирует поиск объектов на основе цепочки прототипа, может обнаружить почти все случаи уязвимости. Однако на текущую экспериментальную реализацию влияют ошибки, когда она сталкивается с некоторыми шаблонами кода. Это также страдает от серьезных проблем с производительностью при анализе больших пакетов или определенных моделей. Кроме того, он очень подвержен ложным срабатыванию при выполнении против исправленной версии предварительно уязвимых функций.
Правила SEMGREP не охватывают все случаи, такие как прямые назначения, из -за различия включения этого случая без очень высокой ложной положительной скорости. Двигатель SEMGREP предлагает только ограниченный внутрипроцедурный анализ данных, и, как и ожидалось, не всегда может обнаружить уязвимость, которые распределены по различным функциям (например, косвенные рекурсивные вызовы). Правила отмечают много ложных срабатываний при выполнении против исправленной версии предварительно уязвимых функций, поскольку большинство методов смягчения даже не рассматриваются.
CodeQL может идентифицировать почти все собранные примеры уязвимости. Рассматриваемые запросы, кажется, хорошо написаны, возникающие проблемы, скорее всего, являются ограничением двигателя с закрытым исходным кодом. Для того, что касается ложных постов, большинство методов смягчения рассматриваются, таким образом, запросы CodeQL работают значительно лучше, чем другие инструменты.
Более подробная информация в тезисе pdf