Kerentanan XSS pada skrip Apache PHP

Dec 09 2020

Saya memiliki dua server CentOS8 yang menjalankan Apache dengan MOD_PHP. Kami telah menemukan bahwa menambahkan garis miring ke akhir url mengubah basis-uri dalam skrip yang membuat kerentanan XSS.
Sebagai contohhttp://myserver.com/Login.php/ atau http://myserver.com/Login.php/extra_stuff/menyebabkan basis-uri untuk tautan dan gambar relatif menjadi salah. Jika extra_stuff berisi javascript, Anda berpotensi mengubah konten pada halaman.

Bagaimana cara menghentikan Apache memperlakukan skrip PHP seperti direktori jika skrip tersebut memiliki garis miring dan mengembalikan 404? Saya lebih suka tidak perlu mengedit setiap halaman untuk menambahkan tag.

Yang membingungkan saya adalah mengapa konfigurasi Apache di bawah ini mencocokkan skrip PHP dengan garis miring dan karakter asing ketika tidak benar-benar ada, dan mengirimkannya ke penangan.

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

Jawaban

JackHandy42 Dec 10 2020 at 22:08

Seperti yang dijelaskan @CBroe dalam komentar :

Saya tidak melihat bagaimana ini akan membuat kerentanan apa pun, kecuali Anda secara aktif menampilkan jalur URL permintaan di suatu tempat. Hanya karena URL-nya adalah http://myserver.com/Login.php/extra_stuff/dan secara implisit adalah URL dasar semua URL relatif akan diselesaikan, tidak berarti kode JavaScript di sana akan dieksekusi. Saat Anda memasukkan URL ke dalam dokumen tanpa perawatan dan pertimbangan apa pun, maka ini tentu saja bisa menjadi masalah XSS.

AcceptPathInfo menjelaskan perilakunya. Kode vendor memang memiliki banyak penggunaan $ _Server ["PHP_SELF"] yang tidak dibersihkan yang telah saya koreksi.