WordPress / NGINX HTTP Response Splitting

最近開始使用 Detectify – 一款個人十分喜歡的在線網站掃描工具。驚訝的發現由於 WordPress 官方的一個 Nginx 推薦配置,很多人都因此存在這個問題。

長話短說,WordPress 官方推薦的一個 wp-admin 轉發規則:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

然而這個規則的 $uri 是可以帶有轉義字符的函數,於是就導致了下面的漏洞。

curl https://holywhite.com/%0d%0asplitting:/wp-admin --http1.1 -v

Response:

< HTTP/1.1 301 Moved Permanently
< Server: nginx
< Date: Fri, 26 Oct 2018 01:05:04 GMT
< Content-Type: text/html
< Content-Length: 162
< Location: https://holywhite.com/
< splitting:/wp-admin/
< Connection: keep-alive
<

經過一點點研究,目前個人改為了更為安全的函數去解決這個問題。

rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;