Один из докладов на BlackHat Europe 2017 указал на серьезные недостатки в некоторых языках программирования

Исследование показало, что даже самые защищенные программы остаются уязвимыми из-за проблем с безопасностью у языков программирования.

Речь идет об исследовании, представленном на конференции по компьютерной безопасности Black Hat Europe 2017. Согласно ему, в некоторых скриптовых языках программирования существуют уязвимости, которые подвергают опасности написанные на них приложения.

Автором доклада выступил эксперт IOActive по вопросам безопасности Фернандо Арнабольди. Он использовал фаззинг — автоматизированную систему тестирования ПО — для выявления уязвимостей в пяти популярных языках программирования. Исследованиям подверглись JavaScript, PHP, Ruby, Perl и Python.

Список протестированных интерпретаторов:

  • JavaScript: v8, ChakraCore, SpiderMonkey, NodeJS (v8), Node (ChakraCore);
  • PHP — PHP, HHVM;
  • Ruby — Ruby, JRuby;
  • Perl — Perl, ActivePerl;
  • Python — CPython, PyPy, Jython.

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

Ни один из языков не прошел проверку на прочность

Арнабольди использовал для наблюдений самописный фреймворк XDiFF (Extended Differential Fuzzing Framework — расширенный дифференциальный фреймворк для фаззинга), который заточен под анализ структуры языков программирования и их поведения. Исследователь «разобрал» языки до базовых функций, а затем протестировал каждую из них с помощью XDiFF.

Общее количество протестированных функций:

  • JavaScript — 450 функций;
  • PHP — 1405 функций;
  • Ruby — 2483 функции;
  • Perl — 3105 функций;
  • Python — 3814 функций.

В итоге проделанная работа помогла обнаружить серьезные уязвимости во всех пяти языках программирования:

  • Ядро Python содержит недокументированные методы и переменные окружения, которые могут быть использованы для выполнения команд операционной системы.
  • В Perl обнаружена typemap-функция, способная выполнять код аналогично функции eval().
  • Сообщения об ошибках в NodeJS могут частично раскрывать содержимое файлов.
  • JRuby может удаленно запускать код посредством функций, спроектированных не для этого.
  • Имена констант в PHP могут быть использованы, чтобы выполнить удаленный запуск команд.

Перед уязвимостями бессильны даже самые защищенные программы

Как уверяет Арнабольди, злоумышленники способны использовать изъяны интерпретаторов даже против самых устойчивых приложений, над защитой которых работали квалифицированные специалисты. Все из-за того, что разработчики могут включить в ПО строки кода, которые могут быть использованы непредвиденным путем.

Комментариев от разработчиков соответствующих языков программирования не поступало.

Автор проекта опубликовал исходный код XDiFF на GitHub. Подробное описание уязвимостей и процесса тестирования доступно в докладе «Exposing Hidden Exploitable Behaviors in Programming Languages Using Differential Fuzzing».

Источник: bleepingcopmuter.com