The OpenNET Project / Index page

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

Уязвимость php-fpm, позволяющая удалённо выполнить код на сервере

24.10.2019 19:39

Доступны корректирующие релизы PHP 7.3.11, 7.1.33 и 7.2.24, в которых устранена критическая уязвимость (CVE-2019-11043) в расширении PHP-FPM (менеджер процессов FastCGI), позволяющая удалённо выполнить свой код в системе. Для атаки на серверы, использующие для запуска PHP-скриптов PHP-FPM в связке с Nginx, уже публично доступен рабочий эксплоит.

Атака возможна в конфигурациях nginx, в которых проброс в PHP-FPM осуществляется c разделением частей URL при помощи "fastcgi_split_path_info" и определением переменной окружения PATH_INFO, но без предварительной проверки существования файла директивой "try_files $fastcgi_script_name" или конструкцией "if (!-f $document_root$fastcgi_script_name)". Проблема в том числе проявляется в настройках, предлагаемых для платформы NextCloud. Например, уязвимы конфигурации с конструкциями вида:


   location ~ [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      fastcgi_param PATH_INFO       $fastcgi_path_info;
      fastcgi_pass   php:9000;
   }

Проследить за устранением проблемы в дистрибутивах можно на данных страницах: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arch, Fedora. В качестве обходного метода защиты после строки "fastcgi_split_path_info" можно добавить проверку существования запрошенного PHP-файла:


   try_files $fastcgi_script_name =404;

Проблема вызвана ошибкой при манипуляции с указателями в файле sapi/fpm/fpm/fpm_main.c. При присвоении указателя предполагается, что значение переменной окружения PATH_INFO обязательно содержит префикс, совпадающий с путём к PHP-скрипту. Если в директиве fastcgi_split_path_info указано разделение пути к скрипту с использованием регулярного выражения, чувствительного к передаче символа перевода строки (например, во многих примерах предлагается использовать "^(.+?\.php)(/.*)$"), то атакующий может добиться записи в переменную окружения PATH_INFO пустого значения. В этом случае далее по ходу выполнения осуществляется запись в path_info[0] нуля и вызов FCGI_PUTENV.

Запросив определённым образом оформленный URL атакующий может добиться смещения указателя path_info на первый байт структуры "_fcgi_data_seg", а запись нуля в этот байт приведёт к перемещению указателя "char* pos" на ранее идущую область памяти. Вызываемый следом FCGI_PUTENV перезапишет данные в этой памяти значением, которое может контролировать атакующий. В указанной памяти в том числе хранятся значения других переменных FastCGI и записав свои данные атакующий может создать фиктивную переменную PHP_VALUE и добиться выполнения своего кода.

Эксплуатация сводится к отправке цикличных запросов вида


   GET /index.php/PHP_VALUE%0Asession.auto_start=1;;;?много_данных_для_смещения_указателя
для охвата ими всех обработчиков nginx. После компрометации обработчика можно запустить любую команду через обращение к произвольному скрипту с коротким параметром ("GET /script.php?a=ls" приведёт к запуску ls).

  1. Главная ссылка к новости (https://lab.wallarm.com/php-re...)
  2. OpenNews: Обновление PHP 5.5.12 с устранением уязвимости в PHP-FPM
  3. OpenNews: Уязвимости в PHP и PHPMailer
  4. OpenNews: Проект Snuffleupagus развивает PHP-модуль для блокирования уязвимостей
  5. OpenNews: Уязвимость, позволяющая совершить MITM-атаку через манипуляцию с HTTP-заголовком Proxy
  6. OpenNews: Выпуск ngx_php 0.0.13, модуля с интерпретатором PHP для nginx
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: php, fpm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (96) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.8, Darth Revan (ok), 20:46, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    https://salsa.debian.org/nginx-team/nginx/blob/buster/debian/conf/snippets/fas
    Использующие /etc/nginx/snippets/fastcgi-php.conf из Debian, существующий с 2014-го года, проблеме не подвержены.
     
  • 1.1, Аноним (1), 20:10, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –31 +/
    Кто-то ещё php использует?!
     
     
  • 2.2, анонимус (??), 20:14, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    да
     
  • 2.3, Аноним (3), 20:14, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Более 80% сайтов
    https://haydenjames.io/80-percent-web-powered-by-php/
     
     
  • 3.7, Аноним (7), 20:46, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >80%

    в 2000 году?

     
  • 3.9, Аноним (1), 20:46, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Большинство ошибается.
     
     
  • 4.15, Аноним (15), 20:56, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    нет
     
  • 3.36, anonn (?), 22:35, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    большинство из них - сайты визитки одностраничники
     
     
  • 4.46, OpenEcho (?), 02:32, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > большинство из них - сайты визитки одностраничники

    Эти что ли ?

        Facebook
        Yahoo!
        Wikipedia
        WordPress
        Tumblr
        MailChimp
        Flickr
        Digg

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

     
     
  • 5.49, Аноним (49), 04:32, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > > > > Кто-то ещё php использует?!
    > > > Более 80% сайтов
    > > большинство из них - сайты визитки одностраничники
    > Эти что ли ?
    > Facebook
    > [...]
    > Digg

    Я так понимаю, это исчерпывающий список большинства сайтов в интернете?

     
     
  • 6.65, OpenEcho (?), 11:01, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Я так понимаю, это исчерпывающий список большинства сайтов в интернете?

    Я привел конкретные доказательства, который каждый может перепроверить...

    И в чем вообще "криминал" с большинством "сайты визитки одностраничники" ?

     
  • 6.74, Ананнимас (?), 12:41, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Открываем hh и смотрим вакансии. похапе на бекэнде и пару вкраплений смузихлебов.
    Открываем любую фриланс биржу - сплошные вордпресы с битриксами  (если у нас) и джумлами с опенкартом.

    А вот где поделия на ноде?

     
     
  • 7.76, Аноним (49), 13:01, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    1 488 вакансий «php» ( https://hh.ru/search/vacancy?area=1&st=searchVacancy&text=php )
    2 915 вакансий «python» ( https://hh.ru/search/vacancy?area=1&st=searchVacancy&text=python )

    где твой бог теперь?

     
     
  • 8.78, Ананнимас (?), 15:11, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сам-то вакансии смотрел Там к вебу мало что имеет отношение ... текст свёрнут, показать
     
  • 5.63, anonn (?), 10:42, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    уж гугл то точно не на пхп

    То что ты описал это единственные крупные ребята кто пхп действительно поддерживает.
    Остальные его вертят для небольших сайтов из-за того что CMS готовые есть и разрабов завались. Именно отсюда статистика в 99%.

    Если взять среди компаний-гигантов выборку по nodejs, php, go, c++, python, то получишь примерно одинаковый список по каждому из.

     
     
  • 6.66, OpenEcho (?), 11:15, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Остальные его вертят для небольших сайтов из-за того что CMS готовые есть
    > и разрабов завались. Именно отсюда статистика в 99%.

    Так в этом то и есть ответ на оригинальный вопрос "Кто-то ещё php использует?!" в этой ветке

    > Если взять среди компаний-гигантов выборку по nodejs, php, go, c++, python, то
    > получишь примерно одинаковый список по каждому из.

    Да никто об этом и не спорит, есть просто инструменты, где каждый в чем то хорош, а в чем то плох. Проблема только в людях, которые пытаются все делать одним инструментом (вероятно от не знания, что есть другой тулз)

     
  • 4.55, Аноним (55), 09:25, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > большинство из них - сайты визитки одностраничники

    На одностраничниках как правило нет PHP

     
     
  • 5.67, OpenEcho (?), 11:21, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> большинство из них - сайты визитки одностраничники
    > На одностраничниках как правило нет PHP

    К сожалению большинству "строителям" интернета даже одностранички влом писать вручную или хотя бы заюзать тот же hugo чтоб сваять статику, так нет же, им проще влепить вордпресс даже для таких целей...

     
     
  • 6.75, Ананнимас (?), 12:48, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    потому как есть куча плагинов, магазинов, галерей и наконец скинов.
    юзерам хочемтся все в один клик делать.
    а если еще вспомнить seo хрень, которую на себя берут те же плагины, руками там совсем грустно будет. А без правльных, угодных гуглу, тегов и правльной разметки будет сложо засветиться в поиске.

     
  • 3.54, Тортик с кремом (?), 09:25, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Читай внимательно, там дата есть
    December 15, 2017 by Hayden James, in Blog Linux
     
  • 2.17, OpenEcho (?), 21:03, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Просвяти плыз заблудших, что рекомендовать юзерам в замену пыха?
     
     
  • 3.23, 123 (??), 21:22, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • –11 +/
    Пихон.
     
     
  • 4.26, OpenEcho (?), 21:26, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Скорость не пробовали сравнивать ?
     
     
  • 5.34, zzz (??), 22:02, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    >Скорость

    Глупость какая-то в 2к19-ом. На первом месте - стильность, модность, молодежность.

     
     
  • 6.43, OpenEcho (?), 02:06, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Глупость какая-то в 2к19-ом. На первом месте - стильность, модность, молодежность.

    К великому сожалению... Вы - правы

     
  • 4.62, VEG (ok), 10:40, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вы предлагаете вместо одного из самых быстрых скриптовых языков использовать один из самых медленных. Не надо так. На планете и так слишком много медленного кода.
     
  • 3.27, Аноним (27), 21:39, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • –10 +/
    Ноду конечно же
     
     
  • 4.31, Евгений (??), 21:46, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Джаваскрипт ещё большее гавно, чем пхп
     
     
  • 5.48, Аноним (27), 03:16, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ну не пиши на говне, возьми другой яп
     
  • 5.84, foi (?), 03:41, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С чего это JavaScript гавно?
     
  • 4.32, OpenEcho (?), 21:46, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Повторюсь и здесь A cкорость не пробовали сравнивать И чем оно лучше чем пы... текст свёрнут, показать
     
     
  • 5.47, Аноним (27), 03:15, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты пробовал? Или только на leftpad онанировать умеем?
     
     
  • 6.51, Аноним (49), 08:42, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я всем говарил :вспомнити npm leftpad и что Js быт не должно . Но вам как горохи об-стену
     
  • 6.64, OpenEcho (?), 10:47, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А ты пробовал?

    Не пробывал бы, тогда бы и не писал... логика где?


    > Или только на leftpad онанировать умеем?

    А при чем здесь leftpad, если разговор о том, чем заменить PHP ???


     
     
  • 7.68, Аноним (68), 11:35, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >Не пробывал бы, тогда бы и не писал...

    ну так удиви нас результатами

    >А при чем здесь leftpad, если разговор о том, чем заменить PHP ???

    ты же сам его притянул?

     
     
  • 8.72, OpenEcho (?), 11:49, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А тебя в гугле забанили что ли Слушай, перечитай еще раз, я не гнал на ноду, a ... текст свёрнут, показать
     

  • 1.4, Аноним (49), 20:32, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    то есть теперь сторонний код можно запускать не только через phar://? Это здорово.
     
     
  • 2.12, OpenEcho (?), 20:54, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Удачи !

    [code]
    location ~* [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      if (!-f $document_root$fastcgi_script_name) {
        return 404 "<!doctyle html><div style="font-size:800%;text-align:center;">🖕</div>";
      }

    ...
    }
    [/code]

     
     
  • 3.13, Аноним (49), 20:56, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это запрещает выполнение 3rd-party-кода из phar://?
     
     
  • 4.16, Аноним (16), 20:58, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://snuffleupagus.readthedocs.io/config.html#whitelist-of-stream-wrappers
     
  • 4.19, OpenEcho (?), 21:05, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чукча писатель ?

    > то есть теперь сторонний код можно запускать ^^^не только через phar://^^^ ?

     
  • 3.14, Аноним (16), 20:56, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    только mime забыл изменить с бинарного
     
     
  • 4.21, OpenEcho (?), 21:11, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Просвяти, - а то не понятна глубина мысли
     
     
  • 5.22, Аноним (16), 21:13, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вместо отображения файла скачает поток

    default_type application/octet-stream;

     
     
  • 6.25, OpenEcho (?), 21:24, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Телепатия не удалась :)

    default_type text/plain;

    И вообще не понятно к чему это, вместо ... там еще есть что почитать ;)

     
     
  • 7.86, конь в пальто (?), 14:22, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    но ты отдаешь html а не text
     
     
  • 8.87, OpenEcho (?), 14:52, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Друг, - Это динамика nginx в этом случае просто прокси, что выставит пых, то ... текст свёрнут, показать
     
     
  • 9.88, конь в пальто (?), 15:16, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    при чем тут это я про твой return 404 doctyle html div style font-size 80... текст свёрнут, показать
     
     
  • 10.90, OpenEcho (?), 16:40, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вы не поняли юмора Это doctyle html div style font-size 800 text-align ... текст свёрнут, показать
     

  • 1.5, Аноним (16), 20:34, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    VestaCP пора ломать
     
     
  • 2.6, Аноним (16), 20:35, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    # grep -R fastcgi_path_info /usr/local/vesta/
     

  • 1.10, Аноним (16), 20:48, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    В nginx wiki ubuntu есть еще одна уязвимость связанная с localhost

    там по дефолту смотрит в /var/www

    а сайты обычно кладут в подкаталог

    curl -H 'Host: localhost' и скачиваем все сорцы школоты

     
     
  • 2.24, Anduy (?), 21:23, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ссылочку плз
     
     
  • 3.28, Аноним (16), 21:43, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://help.ubuntu.ru/wiki/nginx-phpfpm#%D0%BD%D0%B0%;D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_nginx
     
  • 3.29, Аноним (16), 21:44, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://help.ubuntu.ru/wiki/nginx-phpfpm#настройка_nginx
     
     
  • 4.30, Аноним (16), 21:45, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Корневая директория сайта работающего на данном сервере

    root /var/www;

     
  • 2.33, OpenEcho (?), 21:57, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пугает наличие кучи "rewrite" директив к конфигах нджинкса наводящие на не хорошие мысли у этой вики...
     
  • 2.44, Аноним (44), 02:17, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> еще

    насчёт описанной в статье траблы, там же есть try_files перед split_path_info

     
     
  • 3.70, OpenEcho (?), 11:41, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >>> еще
    > насчёт описанной в статье траблы, там же есть try_files перед split_path_info

    try_files сбрасывает переменную PATH_INFO(!!!), поэтому либо надо запоминать контент PATH_INFO в другой переменной перед вызовом try_files и подсовывать сохранненый PATH_INFO как
    fastcgi_param PATH_INFO $my_saved_path_info;
    или проверять наличие физического файла с
    if (!-f $document_root$fastcgi_script_name)

    https://trac.nginx.org/nginx/ticket/321

     
     
  • 4.77, Аноним (77), 14:53, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ну так если try_files вызывется до path_info то это не проблема и в вики path_info сохраняется через промежуточную преременную
     
     
  • 5.80, OpenEcho (?), 16:39, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > ну так если try_files вызывется до path_info то это не проблема и

    Нет. В этом то и есть проблема, $fastcgi_path_info заполняется после вызова fastcgi_split_path_info и если try_files вызовется до того как содержимое $fastcgi_path_info будет пересохраненно в своей переменной, то PATH_INFO будет утерян

    > в вики path_info сохраняется через промежуточную преременную

    где это видно что он сохраняется до или после try_files ?

     
  • 4.85, Аноним (85), 04:04, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > https://trac.nginx.org/nginx/ticket/321

    mdounin деградант

     

  • 1.18, Аноним (18), 21:04, 24/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    В эксплоите есть забавные моменты: https://github.com/neex/phuip-fpizdam/blob/d43b788a65f83ba6fd3f95bf0710432c01f

     
     
  • 2.20, Darth Revan (ok), 21:08, 24/10/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    С таким названием ничего удивительного %).
     
  • 2.40, Аноним (40), 00:34, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ёпрст, автор-то Электроник. ))
     

  • 1.35, Онаним (?), 22:26, 24/10/2019 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • –9 +/
     

     ....ответы скрыты модератором (3)

  • 1.41, хотел спросить (?), 00:44, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    There must be a PATH_INFO variable assignment via statement fastcgi_param PATH_INFO $fastcgi_path_info;. At first, we thought it is always present in the fastcgi_params file, but it's not true.

    CentOS 7

    если я правильно помню, то это дефолтовый конфиг
    проверьте свои дистры на всякий


    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;

    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REQUEST_SCHEME     $scheme;
    fastcgi_param  HTTPS              $https if_not_empty;

    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;

    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param  REDIRECT_STATUS    200;


    PATH_INFO там нет... и это радует

     
     
  • 2.59, Ilya Indigo (ok), 09:57, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А с чего ей там вообще быть?
    PATH_INFO - это костыль для определения SCRIPT_FILENAME, на каких-то неведомых серверах с неведомой конфигурацией. Сама по себе она никому и не нужна.
     
     
  • 3.83, OpenEcho (?), 22:09, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > PATH_INFO - это костыль для определения SCRIPT_FILENAME, на каких-то неведомых серверах

    Чиво?????

    SCRIPT_FILENAME => The absolute pathname of the currently executing script.

    > с неведомой конфигурацией. Сама по себе она никому и не нужна.

    Приехали....

    PATH_INFO => Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available.

    А если по человечески, то PATH_INFO используется (и не только в PHP) для передачи параметров в GET методе. Все что будет после реального, физического файла, можно на стороне сервера получить в виде path и распарсить, при этом можно еще опционально задействовать стандартные GET параметры передаваемые после "?"

    Простой пример: http://domain.tld/script.php/param1/param2/param3

    PATH_INFO в этом случае: /param1/param2/param3
    Красиво и без rewrite-тов переаданные параметры

    Один из самых модных сейчас фреймворков - laravel использует PATH_INFO в реквест классе

    До засилия упрощенной симфонии ака ларавель, был еще один, очень популярный (в принципе и сейчас живой, т.к. до сих пор - один из самых быстрых MVC фраймворков и не отягёщенный зависимостями composer-а) фрейворк под названием CodeIgniter, так в нем на сколько помню передача параметров в контроллер осуществлялась как раз таки тоже через PATH_INFO

    Так что PATH_INFO - это не для "неведомых серверов с неведомой конфигурацией", а широко применяемая технология...

     
     
  • 4.94, Ilya Indigo (ok), 00:02, 28/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут я извиняюсь, недопонимал какой именно это костыль и как именно с ним извраща... текст свёрнут, показать
     

  • 1.50, Ilya Indigo (ok), 06:13, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > fastcgi_split_path_info ^(.+?\.php)(/.*)$;

    Я недавно перешёл на nginx и не знаю его так хорошо как и Apache, но я сразу отбросил этот костыль, как и cgi.fix_pathinfo, в пользу чёткого задания SCRIPT_FILENAME, а не угадывания его сервером.
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;

     
     
  • 2.52, Аноним (52), 09:05, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    держи в курсе - твои васян-сайты очень важны этой планетке. (нет)

    К сожалению, все еще существуют безумные разработчики, не видящие смысла весь сайт запихивать целиком в /index.php - начитались, понимаешь, каких-то дурацких книжек про необходимость сегментации проектов, особенно на интерпретируемых языках, а выбить из их голов эти бредни эффективного менеджера не нашлось.

    И у них этих файлов бывает два, а то и даже четыре!

     
     
  • 3.58, Ilya Indigo (ok), 09:48, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Держу в курсе Вас и других Васянов, пишущих что PHP # (это слово даже блокировано цензурой опеннета) и даже не бум-бум в программировании.
    Чтобы воспроизвести эту, как и все другие уязвимости в PHP это нужно специально и намеренно родится с руками из попы.

    Если не используется ЧПУ, то за глаза хватит этих блоков, хоть у Вас 40 разных php-скриптов распиханных по разным директориям.
    [code]
    location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    location / {
    index index.html index.php;
    try_files $uri $uri/ =404;
    }
    [/code]

    Сайт и не нужно запихивать весь в index.php, но index.php должен быть единой точкой входа сайта.

     
     
  • 4.71, Григорий Федорович Конин (?), 11:47, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Если не используется ЧПУ, то за глаза хватит этих блоков

    Ну да, это такая редкость чтобы использовались ЧПУ, вообще нигде их нет.

     
     
  • 5.73, Ilya Indigo (ok), 12:13, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Если не используется ЧПУ, то за глаза хватит этих блоков
    > Ну да, это такая редкость чтобы использовались ЧПУ, вообще нигде их нет.

    Если используется ЧПУ, тогда я тем более проблемы не вижу!
    Или в каждом блоке можно без проблем указать SCRIPT_FILENAME.
    fastcgi_param SCRIPT_FILENAME path/to/app.php;
    Нормального случая где бы в одном location вызывались бы разные скрипты точно нет!

    Или, если на сайте единая точка входа path/to/app.php (по нормальному так и должно быть с ЧПУ-сайтами) можно вообще всё прокинуть в Ваш PHP-контроллер и пусть он дальше сам разбирается что нужно дальше подключать, в зависимости от $_SERVER['REQUEST_URI']
    [code]
    location @php {
        fastcgi_pass unix:/run/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME path/to/app.php;
        include fastcgi_params;
    }
    location / {
        index index.html index.php;
        try_files $uri $uri/ @php;
    }
    [/code]

    Опять же не понимаю зачем и кому может понадобится PATH_INFO?

     
  • 4.89, OpenEcho (?), 16:32, 26/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вот эта вот конфигурация сверху - очень большой подарок кулхацкерам, классический пример копи/пасте с "гениальных просторов" интернета...

    Не, не в обиду, но почему не подумать о элементарном, - зачем разрешать выполнение пхп сриптов везде начиная от корня ??? Вы правда хотите чтоб в директории upload кто нибудь скинул скрипт и потом выполнил ?

    nginx позволяет вложенные location, ну так и вставляйте свой
    location ~ \.php$ {...} только в тех директориях где есть ВАШИ(!!!) скрипты

    Сысоев как то на конференции говорил, что в nginx метод copy/paste - самый лучший способ избежать ошибок, поэтому не надо пытаться строить конфиги нджикса по принципу програмирования, комбинируя в логически разбросанные локэйшены. nginx - так НЕ РАБОТАЕТ, для того чтобы понимать как применяется конфигурация, нужно понимать фазы, в которых применются определенные директивы и почему они выполняются не по порядку как в конвиге и почему if - is evil...

    Know your tool, - don't copy blindly! (c) - народная мудрость

     
     
  • 5.92, Аноним (92), 04:01, 27/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Сысоев как то на конференции говорил, что в nginx метод copy/paste - самый лучший способ избежать ошибок

    В nginx встроили  js, чтобы логику с if'ами писать. Можно считать этот шаг признанием предыдущих проблем.

    > Know your tool, - don't copy blindly! (c) - народная мудрость

    То есть, чтобы заиспользовать if надо прочитать кучу хреновой nginx документации? Ну это не есть плюс технологии.

    Народна мудрость гласит "люди не читают документацию".

     
     
  • 6.93, OpenEcho (?), 18:27, 27/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    No comments... :)

     
  • 6.101, Аноним (101), 19:37, 29/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    хуже - не документации, а записок углем на чьих-то манжетах, где разжевываются с... текст свёрнут, показать
     
  • 5.95, Ilya Indigo (ok), 00:41, 28/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вы читали сообщение на которое я отвечал Цитирую Я вот сам не знаю зачем они та... текст свёрнут, показать
     
     
  • 6.102, Аноним (102), 21:04, 29/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    видимо, Илюша, ты не только в назначении path info не силен, но мнение имеешь к... текст свёрнут, показать
     
  • 5.100, Аноним (101), 19:17, 29/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    разумеется не потому, что в корне они и лежат, ну конечно же, нет проблема с... текст свёрнут, показать
     

  • 1.56, Аноним (56), 09:28, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Аффтар хорош: помнится, он ещё в 2017-ом сношал баг-баунти программы у видеохостингов, эксплуатируя ffmpeg и в хвост, и в гриву.
     
  • 1.60, BrainFucker (ok), 09:57, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    То есть в связке Apache + PHP-FPM не воспроизводится?
     
     
  • 2.61, Нанобот (ok), 10:17, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В новости об этом ничего не сказано, скорее всего тоже должно работать, просто никто пока не потрудился эксплоит сделать и расшарить
     

  • 1.69, Аноним (69), 11:38, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я правильно понимаю, что если сделать так, то эксплойт не страшен?

    fastcgi_split_path_info  ^([^\n\r]+\.php)(/[^\n\r]+)$;

     
     
  • 2.81, cewlhazkx0r (?), 17:46, 25/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Я правильно понимаю, что если сделать так, то эксплойт не страшен?

    о времена, о админчики-девляляпляп...

     

  • 1.79, KonstantinB (ok), 15:28, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    О, этот многострадальный код - это несколько модифицированная копипаста из древнего CGI sapi, написано сто лет назад.

    Похоже, в CGI та же уязвимость:
    https://github.com/php/php-src/blob/master/sapi/cgi/cgi_main.c#L1293

     
  • 1.82, Анимайзер (?), 22:08, 25/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Уязвимость ..., позволяющая удалённо выполнить код на сервере

    Всегда, когда читаю новости с такими заголовками, то начинаю нервничать, руки автоматически тянутся к успокоительному, но потом вспоминаю, что являюсь админом локалхоста и на сердце сразу становится легче.

     
  • 1.91, spumer (ok), 19:07, 26/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    О похожем писали ещё в 2010 (почти 10 лет назад)

    https://forum.nginx.org/read.php?2,88845,page=3

    И лечилось ещё тогда так же:
    try_files $uri =404;

     
  • 1.96, FSA (??), 07:43, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В Ubuntu 18.04 LTS болт положили на исправление.
     
     
  • 2.99, FSA (??), 23:54, 28/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не. Всё-таки исправили.
     

  • 1.97, InuYasha (?), 13:21, 28/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На опеннете деликатно не стали упоминать о названиях эксплоитов, а на THN полный трэш ))))))
    https://thehackernews.com/2019/10/nginx-php-fpm-hacking.html
    "In the background, the PoC exploit..."
     

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



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру