Скопированный Код Является Уязвимым Кодом


Мы все ищем код в Интернете, а затем изменяем его и включаем в наши программы, но является ли это безопасной практикой? Новые исследования показывают, что это определенно не так.

Повторное использование кода с форумов, в частности переполнение стека, является преимуществом производительности, но есть много вопросов о качестве кода. Большая часть его не является качеством производства — это очевидно, поскольку он создан просто в попытке ответить на какой-то небольшой вопрос, поднятый в вопросе, но, конечно, ничего плохого не может произойти, просто используя его?

Исследователи из Университета Шираза (Иран), Монреальского университета (Канада) и Университета Чамрана (Иран) решили взглянуть на код C++ и посмотреть, содержит ли он какие — либо уязвимости-так оно и было.

В наборе данных из 72 483 фрагментов кода C++, используемых по крайней мере в одном проекте GitHub, они обнаружили 69 уязвимостей и 29 различных типов уязвимостей. Что не менее тревожно, так это то, что 69 уязвимых фрагментов кода были найдены в 2589 файлах GitHub. Наиболее распространенной уязвимостью, перенесенной из переполнения стека, была CWE-150:

«Программное обеспечение получает входные данные от вышестоящего компонента, но оно не нейтрализует или неправильно нейтрализует специальные элементы, которые могут быть интерпретированы как последовательности символов escape, meta или управляющих символов, когда они отправляются нижестоящему компоненту.»

Вот пример кода, который был помечен как уязвимый:

void gen_random(char *s, const int len) { static const char alphanum[] = «0123456789» «ABCDEFGHIJKLMNOPQRSTUVWXYZ» «abcdefghijklmnopqrstuvwxyz»; for (int i = 0; i < len; ++i) { s[i] = alphanum[rand() % (sizeof(alphanum) - 1)]; } s[len] = 0;} Вы, вероятно, можете заметить проблемы - если len-это длина строки, не включающая null, то установка ее в ноль является переполнением; и если строка заканчивается null, зачем передавать len и зачем устанавливать ее в null? Менее очевидным является то, что rand устарел, и принятие мод возвращает младшие биты, которые не очень случайны. Что действительно удивительно, так это то, что этот фрагмент кода был повторно использован, поскольку после него следуют различные критические комментарии, указывающие на то, что он не очень хорош. В частности: Нам нужен способ потопить устаревшие ответы в stackoverflow. – Вэлкан 23 мая 17 в 6:20 При использовании фрагмента кода есть о чем подумать. Предположительно, если бы программист был в курсе проблемы, они бы не искали решение в горшке, и для того, чтобы проверить код, им пришлось бы понимать его на довольно глубоком уровне. Чтобы помочь с этой проблемой исследователи создали расширение браузера, которое помечает ответы, содержащие уязвимый код: В оригинальной статье есть много других интересных примеров и идей, но она также содержит ошибки и опечатки - это первый черновик.


Добавить комментарий