ApachePHPスクリプトに対するXSSの脆弱性

Dec 09 2020

MOD_PHPでApacheを実行している2台のCentOS8サーバーがあります。URLの末尾にスラッシュを追加すると、スクリプト内のbase-uriが変更され、XSSの脆弱性が発生することがわかりました。
例えばhttp://myserver.com/Login.php/ または http://myserver.com/Login.php/extra_stuff/相対リンクと画像のbase-uriが正しくなくなります。extra_stuffにjavascriptが含まれている場合、ページのコンテンツを変更できる可能性があります。

末尾にスラッシュがあり、404を返す場合、ApacheがPHPスクリプトをディレクトリのように扱わないようにするにはどうすればよいですか?タグを追加するためにすべてのページを編集する必要はありません。

私を混乱させるのは、以下のApache構成が、PHPスクリプトが実際には存在しないときに、末尾のスラッシュと無関係な文字と一致し、ハンドラーに送信する理由です。

FilesMatch \.(php|phar)$>
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>

回答

JackHandy42 Dec 10 2020 at 22:08

@CBroeがコメントで説明しているように:

ただし、リクエストURLパスをどこかにアクティブに出力しない限り、これによってどのように脆弱性が生じるかはわかりません。URLがでhttp://myserver.com/Login.php/extra_stuff/あり、それが暗黙的にすべての相対URLが解決されるベースURLであるという理由だけで、そこにあるJavaScriptコードが実行されることを意味するわけではありません。何の処理も考慮せずにURLをドキュメントに挿入すると、もちろんこれはXSSの問題になる可能性があります。

AcceptPathInfoは動作を説明します。ベンダーのコードには、私が修正した$ _Server ["PHP_SELF"]の無害化された使用法がたくさんありました。