9.1分漏洞炸了!微软紧急发补丁,Linux/macOS上的.NET用户赶紧更新
4月22日,微软悄咪咪发了一个.NET带外安全更新,版本号10.0.7。表面看是个常规补丁,但里面修的这个漏洞,CVSS评分高达9.1分,接近满分了。漏洞是什么情况?
攻击链是这样的:攻击者先伪造一个认证Cookie,然后解密安全载荷,利用解密过程中的bug实现权限提升,最终拿到系统权限。一旦拿到系统权限,读取文件、篡改数据,随你。漏洞出在Microsoft.AspNetCore.DataProtection这个NuGet包里。微软的解释有点技术:受管认证加密器在计算HMAC验证标签的时候,覆盖了载荷的错误字节,然后直接把算出来的哈希值丢掉了。用人话来说就是:校验逻辑写反了,攻击者可以绕过验证直接提权。说实话,这种bug挺离谱的。正常情况下,哈希值是用来校验数据完整性的,你算出来不用,那校验的意义在哪?但凡有人review过代码,这种逻辑不太容易漏过去。谁受影响?
非Windows系统(Linux、macOS等)上运行.NET 10.0.6的设备。第一,应用或库引用了10.0.0到10.0.6版本的Microsoft.AspNetCore.DataProtection包。第二,构建时 targeting了net462或netstandard2.0目标框架。也就是说,你的应用不是直接 targeting .NET 10,而是用net8.0、net9.0、net481这些老框架开发的。第三,运行在Linux、macOS或其他非Windows系统上。这个影响范围说实话不算小。.NET Core这两年在服务器端用得很多,很多项目为了兼容性都会用netstandard2.0作为目标框架。如果你的服务跑在Linux服务器上,用的是旧版框架开发的,那就要小心了。怎么发现的?
微软在调查用户报告的解密失败问题时,顺带挖出了这个更严重的安全漏洞。也就是说,这个bug本来是导致用户解密失败的,结果一查,发现这玩意儿居然能被攻击者利用。好消息是,顺手把这个漏洞也修了。10.0.7版本同时修复了回归性解密Bug和安全漏洞。坏消息是,.NET 10.0.6的用户不知道已经有多少人的服务器被扫过了。现在怎么办?
第一步,下载安装.NET 10.0.7。这个没得说,先把补丁打上。第二步,命令行运行dotnet --info,确认版本已经更新到10.0.7。第三步,用更新后的包重新构建和部署依赖软件。这一步很关键,光更新.NET Runtime不够,你得把引用了DataProtection包的应用程序重新构建一遍,重新发布部署。如果你不确定自己的项目有没有用到这个包,可以去项目文件里搜一下:Microsoft.AspNetCore.DataProtection说两句
9.1分的漏洞,说实话这几年见得不多。上一次让我有印象的还是那个Log4Shell,CVSS 10分满分,直接把整个Java生态搅了个底朝天。这次这个漏洞,虽然影响范围有限(主要是Linux/macOS服务器),但评分这么高,说明一旦被利用,后果确实严重。提权漏洞拿到系统权限,服务器基本就沦陷了,数据想拿就拿。微软这次反应算快,发现之后立刻发了带外更新,没拖到下个月例行补丁日。但我更想知道的是,这个漏洞从10.0.6发布到被发现,中间过了多久?有多少台服务器在这个窗口期被扫过了?