Welcome! Log In Create A New Profile

Advanced

Уязвимость связки PHP+nginx

Posted by PandoraBox2007 
Уязвимость связки PHP+nginx
August 06, 2010 10:10AM
Summary

Announced: 2010-05-20
Credits: 80sec
Affects: сайты на ngnix+php с возможностью загрузки файлов



Background

Во всех HowTo по настройке связки nginx с php-fpm / php-cgi есть
похожие строчки:

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

Problem Description

Однако если попросить у сервера отдать example.com/1px.gif/test.php,
то URI примет вид 1px.gif/test.php что подойдёт под location \.php$, а
script_FILENAME станет равным /scripts/1px.gif/test.php.

Далее, если cgi.fix_pathinfo == 1 (по дефолту), то script_FILENAME
станет равным /scripts/1px.gif, а PATH_INFO будет равен test.php

В итоге php интерпретатор обработает /scripts/1px.gif. То есть,

Impact

Любой пользователь будет иметь возможность заливать файлы на сервер
(например, аватары) то создав особенное изображение, которое будет
одновременно проходить валидацию размеров GD и исполняться php
интерпретатором, будет иметь права на исполнение произвольного кода на
сервере с правами php процесса.

Workaround

Дописываем в php.ini

cgi.fix_pathinfo=0

или же менее предпочитаемый, дописываем в nginx.conf
location ~ \.php$ {
if ( -f $request_filename ) {
fastcgi_pass unix:/tmp/php-fpm.sock;
}
fastcgi_index index.php;
fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

это фактически закроет доступ ко всем файлам .php лежащим по пути
содержащем точку и /.
Dima Golovchenko
Re: Уязвимость связки PHP+nginx
August 06, 2010 11:30AM
Хорошо указывать источник инфы: http://habrahabr.ru/blogs/sysadm/100961/

Кроме того, рекомендую прочитать этот камент:
http://habrahabr.ru/blogs/sysadm/100961/#comment_3125823

2010/8/6 PandoraBox2007 <pandorabox2007@gmail.com>

> Summary
>
> Announced: 2010-05-20
> Credits: 80sec
> Affects: сайты на ngnix+php с возможностью загрузки файлов
>
>
>
> Background
>
> Во всех HowTo по настройке связки nginx с php-fpm / php-cgi есть
> похожие строчки:
>
> location ~ \.php$ {
> fastcgi_pass 127.0.0.1:9000;
> fastcgi_index index.php;
> fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
> include fastcgi_params;
> }
>
> Problem Description
>
> Однако если попросить у сервера отдать example.com/1px.gif/test.php,
> то URI примет вид 1px.gif/test.php что подойдёт под location \.php$, а
> script_FILENAME станет равным /scripts/1px.gif/test.php.
>
> Далее, если cgi.fix_pathinfo == 1 (по дефолту), то script_FILENAME
> станет равным /scripts/1px.gif, а PATH_INFO будет равен test.php
>
> В итоге php интерпретатор обработает /scripts/1px.gif. То есть,
>
> Impact
>
> Любой пользователь будет иметь возможность заливать файлы на сервер
> (например, аватары) то создав особенное изображение, которое будет
> одновременно проходить валидацию размеров GD и исполняться php
> интерпретатором, будет иметь права на исполнение произвольного кода на
> сервере с правами php процесса.
>
> Workaround
>
> Дописываем в php.ini
>
> cgi.fix_pathinfo=0
>
> или же менее предпочитаемый, дописываем в nginx.conf
> location ~ \.php$ {
> if ( -f $request_filename ) {
> fastcgi_pass unix:/tmp/php-fpm.sock;
> }
> fastcgi_index index.php;
> fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
> include fastcgi_params;
> }
>
> это фактически закроет доступ ко всем файлам .php лежащим по пути
> содержащем точку и /.
Aleksandr Sytar
Re: Уязвимость связки PHP+nginx
August 06, 2010 11:46AM
Ну собственно как вы лоду назовете...

Не используйте регекспы там где это не нужно.

6 августа 2010 г. 17:21 пользователь PandoraBox2007
<pandorabox2007@gmail.com> написал:
> Summary
>
> Announced: 2010-05-20
> Credits: 80sec
> Affects: сайты на ngnix+php с возможностью загрузки файлов
>
>
>
> Background
>
> Во всех HowTo по настройке связки nginx с php-fpm / php-cgi есть
> похожие строчки:
>
> location ~ \.php$ {
> fastcgi_pass 127.0.0.1:9000;
> fastcgi_index index.php;
> fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
> include fastcgi_params;
> }
>
> Problem Description
>
> Однако если попросить у сервера отдать example.com/1px.gif/test.php,
> то URI примет вид 1px.gif/test.php что подойдёт под location \.php$, а
> script_FILENAME станет равным /scripts/1px.gif/test.php.
>
> Далее, если cgi.fix_pathinfo == 1 (по дефолту), то script_FILENAME
> станет равным /scripts/1px.gif, а PATH_INFO будет равен test.php
>
> В итоге php интерпретатор обработает /scripts/1px.gif. То есть,
>
> Impact
>
> Любой пользователь будет иметь возможность заливать файлы на сервер
> (например, аватары) то создав особенное изображение, которое будет
> одновременно проходить валидацию размеров GD и исполняться php
> интерпретатором, будет иметь права на исполнение произвольного кода на
> сервере с правами php процесса.
>
> Workaround
>
> Дописываем в php.ini
>
> cgi.fix_pathinfo=0
>
> или же менее предпочитаемый, дописываем в nginx.conf
> location ~ \.php$ {
> if ( -f $request_filename ) {
> fastcgi_pass unix:/tmp/php-fpm.sock;
> }
> fastcgi_index index.php;
> fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
> include fastcgi_params;
> }
>
> это фактически закроет доступ ко всем файлам .php лежащим по пути
> содержащем точку и /.



--
Have a nice day
Re: Уязвимость связки PHP+nginx
August 06, 2010 07:03PM
>> Хорошо указывать источник инфы: http://habrahabr.ru/blogs/sysadm/100961/
ну правильно PHP разработчики виноваты что по дефалту включен cgi.fix_pathinfo
silly sad
Re: Уязвимость связки PHP+nginx
August 07, 2010 05:20AM
On 08/06/10 17:21, PandoraBox2007 wrote:
> Summary
>
> Announced: 2010-05-20
> Credits: 80sec
> Affects: сайты на ngnix+php с возможностью загрузки файлов
>
>
>
> Background
>
> Во всех HowTo по настройке связки nginx с php-fpm / php-cgi есть
> похожие строчки:
>
> location ~ \.php$ {
> fastcgi_pass 127.0.0.1:9000;
> fastcgi_index index.php;
> fastcgi_param script_FILENAME /scripts$fastcgi_script_name;
> include fastcgi_params;
> }
>
> Problem Description
>
> Однако если попросить у сервера отдать example.com/1px.gif/test.php,
> то URI примет вид 1px.gif/test.php что подойдёт под location \.php$, а
> script_FILENAME станет равным /scripts/1px.gif/test.php.
>
> Далее, если cgi.fix_pathinfo == 1 (по дефолту), то script_FILENAME
> станет равным /scripts/1px.gif, а PATH_INFO будет равен test.php
>
> В итоге php интерпретатор обработает /scripts/1px.gif. То есть,
>
> Impact
>
> __ЕСЛИ__ Любой пользователь будет иметь возможность заливать файлы на сервер
> (например, аватары) __В КАТАЛОГ С ИСПОЛНЯЕМЫМИ СКРИПТАМИ__ то создав особенное изображение, которое будет
> одновременно проходить валидацию размеров GD и исполняться php
> интерпретатором, будет иметь права на исполнение произвольного кода на
> сервере с правами php процесса.


ключевые слова с подчерками добавил я.
короче можно сказать так:

Impact:
если владелец феерический имбецил, то его php-fpm+nginx под угрозой.
Re: Уязвимость связки PHP+nginx
August 10, 2010 09:30AM
кстате проверил у себя нихрена не показал содержимое файла просто два символа какихто
Kayo Ayanami
Re: Уязвимость связки PHP+nginx
August 10, 2010 11:56AM
у себя вообще запрещаю вызов php скриптов в подкаталогах

10 августа 2010 г. 19:30 пользователь paranoidchaos
<nginx-forum@nginx.us> написал:
> кстате проверил у себя нихрена не
> показал содержимое файла просто два
> символа какихто
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?25,117082,118279#msg-118279
>
>



--
-------------------------------------------------------------
Kayo Ayanami

jabber: kayo@neko.im
gtalk-xmpp: kayo.k11.4@gmail.com
sourceforge: phoenix11@users.sf.net
luaforge: phoenix11@users.luaforge.net

За последнюю тысячу лет мы постигли печальную часть наук..
Настало время заняться чем-то другим.. (C) БГ ^_~
Re: Уязвимость связки PHP+nginx
September 01, 2010 10:34AM
Вместо
> if ( -f $request_filename ) {
> fastcgi_pass unix:/tmp/php-fpm.sock;

лучше написать

try_files $uri =404;
silly sad
Re: Уязвимос�
September 02, 2010 01:14AM
On 09/01/10 18:34, ig0r wrote:
> Вместо
>> if ( -f $request_filename ) {
>> fastcgi_pass unix:/tmp/php-fpm.sock;
>
> лучше написать
>
> try_files $uri =404;
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?25,117082,125992#msg-125992
>


в этой теме (судя по тому что они назвали уязвимостью) трудно ожидать
try_files, да и вообще... глупо лечить мегрень у больного гангреной.
nrr
Re: Уязвимость связки PHP+nginx
March 30, 2011 10:59PM
а как запретить запросы вида в урл ../../../ - выдавать 404-ую ошибку?

http://bikubik.com/ru/
Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 195
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready