+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

У популярних високорівневих мовах програмування містяться вразливості, які ставлять під загрозу будь-які програми, написані ними.

Помилки в найпопулярніших мовах програмування можуть становити загрозу для будь-яких написаних на них програм, стверджують експерти. Йдеться насамперед про такі мови як JavaScript, Perl, PHP, Python та Ruby.

Проблема інтерпретаторів

У популярних високорівневих мовах програмування містяться вразливості, які ставлять під загрозу будь-які програми, написані ними. Навіть ті, чия безпека неодноразово перевірена. Про це заявив, виступаючи на конференції Black Hat Europe 2017 експерт з інформаційної безпеки IOActive Фернандо Арнабольді (Fernando Arnaboldi).

Арнабольді досліджував функціональність кількох найбільш популярних мов: JavaScript, Perl, PHP, Python і Ruby, тих, які найчастіше використовуються для створення веб-додатків.

Для виявлення вразливостей він застосовував методику автоматичного тестування ПЗ під назвою «фазинг», що полягає у передачі додатку на вхід неправильних, несподіваних чи випадкових даних. Предметом інтересу є падіння та зависання, порушення внутрішньої логіки та перевірок у коді програми, витоку пам'яті, викликані такими даними на вході. Спеціально для тестування мов та їх компіляторів Арнабольді розробив спеціалізований розширений фреймворк XDiFF, за допомогою якого тестується сама структура мов.

Дослідженню піддалися мови JavaScript (транслятори v8, ChakraCore, Spidermonkey, NodeJS, Node), PHP (транслятори PHP та HHVM), Ruby (Ruby, JRuby), Perl (Perl, ActivePerl) та Python (CPython, PyPy, Jython) .

«Перед виконанням фазер генерує всі можливі варіанти тестування, роблячи перестановки між функціями та варіантами корисного навантаження. Тест одноразово зіставляв одну функцію мови з різними такими варіантами», - йдеться у дослідженні, опублікованому Арнабольді.

Знаходження цікавих уразливостей повністю залежить від правильного введення, - пояснив дослідник. - Для цього тестування використовувалися менше тридцяти примітивних величин (число, літера тощо), скомбіновані зі спеціальними прикладами корисного навантаження так, щоб можна було визначити, коли програмне забезпечення намагається отримати доступ до зовнішніх ресурсів.

Незадокументовані функції та імена констант

У результаті дослідження Арнабольді виявив такі проблеми.

У Python містяться незадокументовані методи та змінні локального середовища, які можна використовувати для виконання команд на рівні операційної системи.

У Perl міститься функція typemaps, здатна виконати код eval().

NodeJS видає помилки, що частково розкривають вміст файлу.

JRuby завантажує та виконує сторонній код на функції, що цього не передбачає.

Імена констант PHP можна використовувати для віддаленого виконання команд.

На думку Арнабольді, ці вразливості стали наслідком помилок розробників або їх спроб спростити написання ПЗ. Вразливості в результаті впливають на стандартні додатки, парсинг яких здійснюють перелічені компілятор; і саме компілятори повинні бути виправлені.

Дослідник також зазначив, що навіть найбезпечніші програми, створені за допомогою цих мов та компіляторів, можуть бути вразливими.

«Розробники ПЗ можуть ненавмисно впровадити код у додаток, який потім буде використаний не так, як припускали самі автори програми. Деякі варіанти його поведінки можуть становити серйозний ризик для безпеки додатків, навіть якщо їх розробка велася у повній відповідності до норм безпеки», - заявив Арнабольді.

Інші новини

Найкраща ціна