2026年6月5日 星期五

[研究]Mend (WhiteSource) 第三次建議修改了

[研究]Mend (WhiteSource) 第三次建議修改了

2026-06-05

已經照建議改過2次了,結果又來了第3次,每次都說有弱點 (雖然是 Low),都建議修改。

原本

if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri))


第1次建議修改為

if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && targetUri.IsAbsoluteUri && targetUri.Host == Request.Url.Host)


第2次建議修改為

if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && !targetUri.IsAbsoluteUri)

=====

Remediation Description

The code is vulnerable to an Open Redirect attack (CWE-601). Added a check to ensure that the URL is a local URL before redirecting.

第3次建議修改為

if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && !targetUri.IsAbsoluteUri && targetUri.ToString().StartsWith("/"))




********************************************************************************
問一下 AI,

第1版,這個條件其實邏輯矛盾:
UriKind.Relative代表只允許 Relative URI。
但後面又檢查:targetUri.IsAbsoluteUri
表示必須是 Absolute URI。
兩者通常不會同時成立。
等於:幾乎永遠是 False。

推測原因,可能是:
Mend 舊版規則誤判
自動修補 AI 產生錯誤建議
套用了「驗證 Host」的通用範本,但忘記調整 UriKind
這版其實不合理。

**********

第2版,
Open Redirect 最常見攻擊:
https://evil.com
//evil.com

如果只允許 Relative URI:
/Home.aspx
/Login.aspx
就不能跳到外部網站。

因此:
!targetUri.IsAbsoluteUri
是合理的。

但其實有點多餘,因為 UriKind.Relative 本來就已經要求 Relative。
所以:
&& !targetUri.IsAbsoluteUri
幾乎只是再次確認。

**********

第3版,
防止:
Login.aspx
../Admin.aspx
~/Home.aspx
這些相對路徑。

只允許:
/Default.aspx
/Account/Login.aspx

也就是:
Root Relative URL

**********

會不會又出現第 4 次修改?
有可能。
因為 Mend 並不是在理解你的商業邏輯,而是在套規則。

(完)

沒有留言:

張貼留言