[研究][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 的場景。
********************************************************************************
(完)
相關
沒有留言:
張貼留言