Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security aspnetcore是否有一个银河系大小的控制器安全漏洞,或者我遗漏了什么?_Security_Asp.net Core Mvc_.net 5 - Fatal编程技术网

Security aspnetcore是否有一个银河系大小的控制器安全漏洞,或者我遗漏了什么?

Security aspnetcore是否有一个银河系大小的控制器安全漏洞,或者我遗漏了什么?,security,asp.net-core-mvc,.net-5,Security,Asp.net Core Mvc,.net 5,在查看一位同事的库时,我看到了他描述的两种使用新StatusController的方法。要么重写GetStatus方法以返回更具体的数据,要么简单地让默认实现工作。 好的,所以我做了覆盖,因为我还不确定他对后者的意思,这是有效的。另一位同事问我是否看过后者,我回答 “不,因为如果我只是引用项目/nuget,而不以某种方式告诉框架它是不起作用的” “那就试试吧” “好的,但如果它起作用,我会错愕的。” 我现在感到震惊 然后,我继续通过间接引用尝试这个方法,它仍然有效。我故意不显示任何代码,因为它只

在查看一位同事的库时,我看到了他描述的两种使用新StatusController的方法。要么重写GetStatus方法以返回更具体的数据,要么简单地让默认实现工作。 好的,所以我做了覆盖,因为我还不确定他对后者的意思,这是有效的。另一位同事问我是否看过后者,我回答

“不,因为如果我只是引用项目/nuget,而不以某种方式告诉框架它是不起作用的”

“那就试试吧”

“好的,但如果它起作用,我会错愕的。”

我现在感到震惊

然后,我继续通过间接引用尝试这个方法,它仍然有效。我故意不显示任何代码,因为它只是来自VisualStudioMVCWeb应用程序或WebAPI的锅炉板控制器代码,您可以在几分钟内完成。但让我给你举个例子

假设我正在为编写一个应用程序,我想对特定的文件格式进行一些特殊的字符串解析,有一个nuget包可以帮助我,让我们称之为VotingMachineFormatParser,我不知道它使用了一个名为Tviker(俄文意为Tweaker)的包,我不知道为什么,但他们发现它很有用。Tviker内部有一个名为GosudarsTvennoyevMeshatelestVoController的控制器类,它做了一些事情——它意味着状态干扰

如果您现在转到某个代码正在运行的地方,执行任何操作

我以为您应该使用应用程序部件的概念从另一个程序集中拉入控制器。拜托,我错过了什么?这肯定不是我想的那个洞吧

编辑: 我没有包含任何代码,因为这是重点,您不需要任何代码。我忘了说这是.NETCore3.1+的“新”行为,它以前不是这样工作的。从另一个程序集拉入控制器的唯一方法是通过ApplicationParts

测试这一点很容易,只需重命名两个boiler plate类即可

让VStudio在.NetCore 5中创建一个boiler plate WebAPI,并选中OpenAPI复选框。在两个单独的文件夹中执行此操作,但其中一个文件夹将WeatherForecastController重命名为ToldYouController,并将WeatherForecast类重命名为WeatherForecast1(通过重构)


在第一个项目中,使用ToldYouController引用该项目,运行之后,您将看到两个控制器都在大摇大摆地运行,而您实际上只做了引用就实现了这一点!您可以通过使用间接引用来尝试这一点,它也会这样做。

.NET Core 3.x为引用MVC的程序集自动注册应用程序零件

发件人:

请注意,在ASP.NET Core 3.x中,编译程序集时 引用ASP.NET Core,将程序集属性添加到输出中, [应用程序部分]。ASP.NET Core 3.x应用程序在上查找此属性 引用的程序集并将其注册为应用程序部件 自动地

关于上的应用程序部件属性:

指定要添加为ApplicationPart的程序集

在普通情况下,MVC将生成ApplicationPartAttribute 条目程序集上引用的每个依赖项的实例 MVC。每个程序集都被视为ApplicationPart



由于
GosudarstvennoyeVmeshatelStvoController
是一个
控制器
,它的程序集将引用
MVC
,因此将注册为应用程序部件。

我向微软安全中心提交了此问题,并通过电子邮件进行了以下简短讨论;太长,读不下去了这是(正如@pfx之前评论的那样)“设计”,但他们承认我有一个观点(即存在问题)

2021年1月5日星期二00时08分,微软安全响应中心写道: 你好,威廉

再次感谢你的报告。我们的团队已经完成了审查,我们已经确定这是扫描或加载程序集时.NET Core的预期行为。根据.NET团队: “自动扫描程序集是MVC的一项功能,我们提供框架功能,如Identity.UI和其他依赖它的Razor类库

如果一个无害的nuget包碰巧引用了另一个包含bad actor控制器的包,并且一个应用程序利用了无害包中可用的优秀选项,那么他们会在不知情的情况下将bad actor控制器合并到他们的应用程序中

我们有一个小文档部分,讨论如何配置MVC可以在ASP.NET Core | Microsoft文档中查找资源的程序集-共享控制器、视图、Razor页面等等

除此之外,建议您清楚了解引用NuGet包或应用程序中任何其他外部依赖的含义。当应用程序引用有害包时,MVC发现其他控制器可能不是唯一的问题。”

再次感谢您给我们机会回顾您的发现。我们将结束这个案件,但我鼓励发送任何未来的调查结果给我们在

问候,, 丹尼尔 MSRC

发件人:威廉·霍普金斯 收到日期:2021年1月5日星期二02:03:28 GMT-0800(太平洋标准时间) 致:;微软安全响应中心;微软安全响应中心 主题:回复:MSRC案例62669 CRM:0279001377

谢谢你的回复,丹尼尔

我必须说这是一个令人失望的立场。NETCore3中引入的行为改变了对未知控制器的加入,而没有对后果进行真正的宣传。是的,我知道它使一些新的框架功能变得更简单和“更酷”,但即使是那些,也可以通过初始化调用来打开“搜索”和“包含”。有一个很短的未发布的文档,即使在那时似乎也需要知道具体的内容