問題
Checkmarx 版本為 V9.5.5.1007 HF14。
ASP.NET Core Minimal API 的程式中,
有 Inject Service 時,全都被 Checkmarx 判斷有*Reflected_XSS_All_Clients***的 Issue。
程式碼如下,
1 | app.MapGet("/users/{userId}", (string userId, [FromServices] IAccessControlService accessControlService) => { |
Checkmarx 說明如下,
方法 app.MapGet 在 Program.cs 的第 54 行使用 LoadUserAccessControlAsync 將不受信用的資料嵌入生成的輸出。這些不受信任的資料被嵌入輸出而沒有進行適當的消毒或編碼,使攻擊者能夠將惡意程式碼注入生成的網頁。
攻擊者可通過簡單地在使用者輸入 accessControlService 中提供修改過的資料,該資料由 Program.cs 中的 app.MapGet 方法在第 54 行讀取。然後該輸入資料直接通過程式碼流到輸出網頁,而不經過任何消毒處理。
在使用者輸入 accessControlService???,這個是系統的服務,怎麼會從使用者輸入取得呢?
看來 Checkmarx 應該是不認得ASP.NET Core Minimal API 注入 Service的寫法,
導致將注入的 Service 當成是使用者的輸入來判斷,而導致誤判。
解法
要等 Checkmarx 修正!