湾曲した設定を使用したPHP + nginxバンドルの脆弱性
まとめ
発表:2010-05-20
クレジット: 80sec
影響:fastcgi_passを使用してディレクトリにファイルをアップロードする機能を持つngnix + phpのサイト

背景
多くの場合、php-fpm / php-cgiでnginxバンドルを設定する方法は、次のような行になります。
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
問題の説明
ただし、サーバーに
example.com/1px.gif/test.phpを要求すると、URIは
1px.gif/test.phpように
1px.gif/test.php 、
location \.php$に
SCRIPT_FILENAME 、
SCRIPT_FILENAMEは
SCRIPT_FILENAMEに等しくなります
/scripts/1px.gif/test.phpさらに、
cgi.fix_pathinfo == 1 (デフォルト)の場合、
SCRIPT_FILENAMEは
/scripts/1px.gifに等しくなり、
PATH_INFOは
test.php等しくなり
test.phpNB! 一部の構成では、この脆弱性により、
1px.gif%00test.phpという形式のURLがトリガーされます。
その結果、PHPインタープリターは
/scripts/1px.gifを処理し
/scripts/1px.gif 。 つまり、
インパクト
すべてのユーザーは、サーバー(たとえば、アバター)にファイルをアップロードできます。その後、GDサイズを検証し、PHPインタープリターによって実行される特別なイメージを作成して、PHPプロセス権限を持つサーバーで任意のコードを実行する権利があります。
回避策
php.ini介し
php.ini cgi.fix_pathinfo=0
またはnginx.conf configを介して
location ~ \.php$ { try_files $fastcgi_script_name =404; fastcgi_index index.php; fastcgi_param script_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
これにより、実際には存在しないすべての
.phpファイルへのアクセスが閉じられます。
Source: https://habr.com/ru/post/J100961/
All Articles