CVE-2020-5398:Spring MVC 或 Spring WebFlux 應用程式透過源自請求輸入的“Content-Disposition”頭導致的反射檔案下載 (RFD) 攻擊
描述
在使用 Spring Framework 的應用程式中,版本 5.2.x 在 5.2.3 之前、版本 5.1.x 在 5.1.13 之前以及版本 5.0.x 在 5.0.16 之前,當在響應中設定了“Content-Disposition”頭,並且其 filename 屬性來源於使用者提供輸入時,應用程式易受到反射檔案下載 (RFD) 攻擊。
具體來說,當以下所有條件都滿足時,應用程式是脆弱的
- 該頭是透過 org.springframework.http.ContentDisposition 構建的。
- 檔名透過以下方法之一設定
- ContentDisposition.Builder#filename(String),或
- ContentDisposition.Builder#filename(String, US_ASCII)
- 檔名的值來源於使用者提供的輸入。
- 使用者提供的輸入未被應用程式淨化。
- 下載的響應內容被攻擊者注入惡意命令(詳情參見 RFD 論文參考)。
如果以下任何條件滿足,則應用程式不脆弱
- 應用程式未設定“Content-Disposition”響應頭。
- 該頭不是透過 org.springframework.http.ContentDisposition 構建的。
- 檔名透過以下方法之一設定
- ContentDisposition.Builder#filename(String, UTF_8),或
- ContentDisposition.Builder#filename(String, ISO_8859_1)
- 檔名不來源於使用者提供的輸入。
- 檔名來源於使用者提供的輸入,但已被應用程式淨化。
受影響的 Spring 產品和版本
- Spring Framework
- 5.2.0 到 5.2.2
- 5.1.0 到 5.1.12
- 5.0.0 到 5.0.15
緩解措施
受影響版本的使用者應採取以下緩解措施。5.2.x 使用者應升級到 5.2.3。 5.1.x 使用者應升級到 5.1.13。 5.0.x 使用者應升級到 5.0.16。 無需採取其他步驟。 已修復此問題的版本包括
- Spring Framework
- 5.2.3
- 5.1.13
- 5.0.16
鳴謝
此問題由 EPAM 的 Roman Shalymov 發現並負責任地報告。