2023年11月20日 星期一

[研究][ASP.NET]弱點掃描出現Cookies with missing, inconsistent or contradictory properties之解決

[研究][ASP.NET]弱點掃描出現Cookies with missing, inconsistent or contradictory properties(部分Cookie屬性設定有衝突、缺少或不符合格式)之解決

2023-11-09

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C#

弱點名稱:Cookies with missing, inconsistent or contradictory properties(Cookies with missing, inconsistent or contradictory properties)

弱點中文名稱:部分Cookie屬性設定有衝突、缺少或不符合格式

風險等級:Low

弱點描述:At least one of the following cookies properties causes the cookie to be invalid or incompatible with either a different property of the same cookie, of with the environment the cookie is being used in. Although this is not a vulnerability in itself, it will likely lead to unexpected behavior by the application, which in turn may cause secondary security issues.

弱點中文描述:部分Cookie屬性設定有衝突、缺少或不符合格式,包含相同cookie有多種設定;雖然此漏洞對網站難以造成直接衝擊,但可能造成網站有非預期的行為,而導致其他安全性議題。

建議修補方式:Ensure that the cookies configuration complies with the applicable standards.

建議修補方式中文:請確認Cookie設置是否有缺少或設定不當;相關資訊可參考報告欄位"參數資訊"。

常見修補方式包含,針對Cookie加入SameSite屬性,cookie屬性缺少SameSite瀏覽器可能會使用不同的預設值,使用的預設值不同可能會產生非預期的結果,建議選擇適當的值進行設定(“ Strict”,“ Lax”或“ None”)

參考資料:

MDN | Set-Cookie
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

Securing cookies with cookie prefixes
https://www.sjoerdlangkemper.nl/2017/02/09/cookie-prefixes/

Cookies: HTTP State Management Mechanism
https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05

SameSite Updates - The Chromium Projects
https://www.chromium.org/updates/same-site

draft-west-first-party-cookies-07: Same-site Cookies
https://tools.ietf.org/html/draft-west-first-party-cookies-07

參數資訊:

List of cookies with missing, inconsistent or contradictory properties:

https://xxx.xxx.xxx.xxx/ 

Cookie was set with: Set-Cookie: __AntiXsrfToken=32efd5d9624c49e9bc1ead9e0bad97e5; path=/; HttpOnly

This cookie has the following issues:

 - Cookie without SameSite attribute.

When cookies lack the SameSite attribute, Web browsers may apply different and sometimes unexpected defaults. It is therefore recommended to add a SameSite attribute with an appropriate value of either ''Strict'', ''Lax'', or ''None''.

測試語法:

:GET / HTTP/1.1

Referer: https://xxx.xxx.xxx.xxx/

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding: gzip,deflate,br

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

Host: xxx.xxx.xxx.xxx

Connection: Keep-alive

********************************************************************************

以測試報告來看,問題關鍵在於 Cookie without SameSite attribute.

********************************************************************************

User

ASP.NET WebForm 網站如何防護 Cookies with missing, inconsistent or contradictory properties 弱點 ?

ChatGPT

防護 Cookies with missing, inconsistent, or contradictory properties 的弱點需要採取一系列的安全性措施來確保 Cookies 的正確使用。以下是一些方法,你可以在 ASP.NET WebForm 中實施來提高對這類弱點的防護:

1.Secure 和 HttpOnly 屬性的使用:

設置 Secure 屬性確保 Cookies 只能透過安全的 HTTPS 連線進行傳輸。

設置 HttpOnly 屬性防止 JavaScript 存取 Cookies,從而減少受到 XSS 攻擊的風險。

HttpCookie cookie = new HttpCookie("your_cookie_name", "cookie_value");

cookie.Secure = true;

cookie.HttpOnly = true;

Response.Cookies.Add(cookie);

2.SameSite 屬性的使用:

使用 SameSite 屬性來限制 Cookies 是否應該在跨站點請求中發送。這可以有助於減少跨站點請求偽造(CSRF)攻擊的風險。

HttpCookie cookie = new HttpCookie("your_cookie_name", "cookie_value");

cookie.SameSite = SameSiteMode.Strict;

Response.Cookies.Add(cookie);

3.Expires 屬性的設置:

確保 Cookies 的 Expires 屬性被正確設置,以限制 Cookies 的生命週期。避免使用過長的持續時間,從而減少被盜用的風險。

HttpCookie cookie = new HttpCookie("your_cookie_name", "cookie_value");

cookie.Expires = DateTime.Now.AddHours(1); // 根據需要設定有效期限

Response.Cookies.Add(cookie);

4.Secure Flag 的應用:

在敏感性操作中,確保僅在安全的 HTTPS 連線下設置 Cookies,這可以通過檢查 Request.IsSecureConnection 屬性實現。

if (Request.IsSecureConnection)

{

    HttpCookie cookie = new HttpCookie("your_cookie_name", "cookie_value");

    cookie.Secure = true;

    Response.Cookies.Add(cookie);

}

5.定期監控和審查:

定期監控和審查 Cookies 的使用情況,確保沒有意外的設置或不正確的配置。

這些措施應該有助於確保 ASP.NET WebForm 網站對 Cookies with missing, inconsistent, or contradictory properties 的弱點進行了一定的防護。在實施這些措施之前,請確保你了解你的應用程式和安全需求,以適應最佳的配置。

********************************************************************************

User

ASP.NET WebForm 網站如何測試是否對 Cookies with missing, inconsistent or contradictory properties 已經有防護 ?

ChatGPT

要測試 ASP.NET WebForm 網站是否對 Cookies with missing, inconsistent, or contradictory properties 有防護,你可以採取以下一些建議的方法:

1.手動測試:

使用瀏覽器開發者工具,檢查網站設置的 Cookies。確保它們具有正確的 Secure、HttpOnly、SameSite 和 Expires 屬性。

嘗試修改這些屬性,看看網站是否能夠正確地處理這些更改,並在必要時拒絕或忽略不正確的 Cookies。

2.自動化測試:

使用自動化測試框架,模擬不同情境下的 Cookies 設置和修改,並檢查網站是否正確地處理這些情境。

這可以包括使用 Selenium 或其他測試工具,模擬不同的瀏覽器和裝置。

3.測試 XSS 漏洞:

測試網站是否容易受到跨站腳本(XSS)攻擊。如果網站存在 XSS 漏洞,攻擊者可能能夠修改 Cookies。

使用測試工具或手動嘗試插入惡意腳本,觀察網站的反應。

4.模擬不同環境:

模擬不同的瀏覽器、裝置和操作系統,確保網站在各種環境下都能正確處理 Cookies。

不同的瀏覽器和裝置可能會有不同的行為,因此測試這些變數是很重要的。

5.使用測試工具:

有一些專門用於測試 Web 應用程式安全性的工具,例如 OWASP ZAP 或 Burp Suite。這些工具可以幫助你檢測安全性漏洞,包括對 Cookies 的不正確設置。

6.進行代碼審查:

檢查應用程式的源代碼,確保在設置和處理 Cookies 的地方有正確的安全性檢查和處理邏輯。

確保沒有任何不安全的操作,例如未經驗證的來源修改 Cookies。

總體而言,結合手動測試、自動化測試、漏洞測試工具和代碼審查是確保 ASP.NET WebForm 網站對 Cookies with missing, inconsistent, or contradictory properties 進行了防護的有效方法。

********************************************************************************

User

ASP.NET WebForm 可以只設定 Web.Config 來防止 Cookies with missing, inconsistent or contradictory properties ? 如何設定 ?

ChatGPT

在 ASP.NET WebForms 中,你可以透過 Web.config 中的 <httpCookies> 部分來配置一些與 Cookies 相關的安全性設定。然而,不是所有的安全性屬性都能夠直接在 Web.config 中設定,一些屬性可能需要透過程式碼來實現。

以下是一個例子,展示如何在 Web.config 中設定 <httpCookies> 以提高對 Cookies 安全性的控制:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="Strict" />
</system.web>

這個例子中使用了三個屬性:

httpOnlyCookies: 將這個屬性設為 true 將防止 JavaScript 存取 Cookies,減少 XSS 攻擊的風險。

requireSSL: 將這個屬性設為 true 將確保 Cookies 只在安全的 HTTPS 連線下傳輸。

sameSite: 這個屬性設置了 SameSite 標頭,以限制 Cookies 是否應該在跨站點請求中發送。在這個例子中,將其設為 Strict,這表示只有當來源網站與目標網站相同時才允許發送 Cookies。

請注意,某些版本的 ASP.NET 可能不支援 sameSite 屬性。如果你的應用程式運行的是較舊的版本,你可能需要透過程式碼來實現這個設定。

( 實際測試,Visual Studio 2019 + Windows Server 2019 環境,Web.config 中顯示【不允許 'samSite' 屬性。】 )

除了上述設定外,一些進階的 Cookies 安全性配置可能需要透過程式碼來實現,例如 Secure 屬性和 Expires 屬性。你可以在程式碼中設定這些屬性,根據你的應用程式需求和安全性政策。

HttpCookie cookie = new HttpCookie("your_cookie_name", "cookie_value");

cookie.Secure = true;

cookie.Expires = DateTime.Now.AddHours(1);

Response.Cookies.Add(cookie);

這些設定應該有助於提高對 Cookies with missing, inconsistent, or contradictory properties 的防護。在實施這些設定之前,建議先進行測試,以確保不會影響應用程式的正常運作。

********************************************************************************

User

ASP.NET WebForm,web.config 中不支援 SameSite="Strict",Default.aspx 和 Default.aspx.cs 中該如何用程式來達成 ?

ChatGPT

在 ASP.NET WebForms 中,SameSite 的屬性通常是透過 Set-Cookie 頭部來設置的,而 SameSite 的設置是針對 Cookie 的。由於 SameSite 屬性需要在 Set-Cookie 頭部中進行設置,因此你需要透過程式碼在 Default.aspx.cs 中設置相應的 SameSite 屬性。

以下是一個示例,展示如何在 Default.aspx.cs 中設置 SameSite 屬性:

using System;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 設置一個名為 "MySameSiteCookie" 的 Cookie
        HttpCookie myCookie = new HttpCookie("MySameSiteCookie", "CookieValue");

        // 檢查是否支援 SameSite,如果是,設置 SameSite 屬性為 Strict
        if (SupportsSameSite())
        {
            myCookie.SameSite = System.Web.SameSiteMode.Strict;
        }

        // 將 Cookie 加入 Response 中
        Response.Cookies.Add(myCookie);

        // 其他頁面邏輯
    }

    // 檢查瀏覽器是否支援 SameSite 屬性
    private bool SupportsSameSite()
    {
        // 根據實際情況檢查瀏覽器是否支援 SameSite
        // 這裡的示例僅檢查 UserAgent,實際應根據需要進行更全面的檢查
        string userAgent = Request.Headers["User-Agent"];
        return !userAgent.Contains("MSIE") && !userAgent.Contains("Trident");
    }
}


這裡的 SupportsSameSite 方法僅是一個簡單的示例,檢查 UserAgent 是否包含 "MSIE" 或 "Trident" 來判斷是否支援 SameSite。這是一個簡單的檢查方式,實際上你可能需要更全面的檢查或使用一些庫來處理。

請注意,當你在 Default.aspx.cs 中設置 SameSite 時,也需要確保在 web.config 中的 httpCookies 部分沒有設置 sameSite。這是因為在 web.config 中設置 sameSite 會導致 Set-Cookie 頭部的 SameSite 被覆蓋,你希望透過程式碼控制 SameSite 的場景。

********************************************************************************


(完)

相關

沒有留言:

張貼留言