Luka XSS w skryptach Apache PHP

Dec 09 2020

Mam dwa serwery CentOS8 z Apache z MOD_PHP. Odkryliśmy, że dodanie ukośnika na końcu adresu URL zmienia podstawowy-uri w skryptach, tworząc lukę w zabezpieczeniach XSS.
Na przykładhttp://myserver.com/Login.php/ lub http://myserver.com/Login.php/extra_stuff/powoduje, że podstawowy-uri dla linków względnych i obrazów jest niepoprawny. Jeśli extra_stuff zawiera javascript, możesz potencjalnie zmienić zawartość strony.

Jak powstrzymać Apache przed traktowaniem skryptów PHP jak katalogu, jeśli mają one końcowy ukośnik i zwracają 404? Wolałbym nie musieć edytować każdej strony, aby dodać tag.

Co mnie wprawia w zakłopotanie, to dlaczego poniższa konfiguracja Apache dopasowuje skrypt PHP z końcowym ukośnikiem i dodatkowymi znakami, gdy tak naprawdę nie istnieje, i wysyła go do programu obsługi.

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

Odpowiedzi

JackHandy42 Dec 10 2020 at 22:08

Jak wyjaśnia @CBroe w komentarzu :

Nie widzę jednak, jak mogłoby to stworzyć jakąkolwiek lukę w zabezpieczeniach, chyba że aktywnie wyprowadzisz gdzieś ścieżkę adresu URL żądania. Tylko dlatego, że adres URL jest http://myserver.com/Login.php/extra_stuff/i domyślnie jest to podstawowy adres URL, względem którego zostaną rozwiązane wszystkie względne adresy URL, nie oznacza to, że jakikolwiek kod JavaScript w tym miejscu zostałby wykonany. Kiedy wstawiasz adres URL do dokumentu bez żadnego traktowania i rozważania, może to być oczywiście problem z XSS.

AcceptPathInfo wyjaśnia zachowanie. Kod dostawców rzeczywiście miał wiele nieanityzowanych zastosowań $ _Server ["PHP_SELF"], które poprawiłem.