前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA2153:避免处理损坏状态异常

CA2153:避免处理损坏状态异常

作者头像
用户4268038
发布2022-02-20 19:46:02
5600
发布2022-02-20 19:46:02
举报
文章被收录于专栏:stcnbstcnb

规则 ID

CA2153

类别

安全性

修复是中断修复还是非中断修复

非中断

原因

损坏状态异常 (CSE) 指示进程中存在内存损坏。 如果攻击者可以将攻击放置到损坏的内存区域,则捕获它们(而非允许进程崩溃)可能导致安全漏洞。

规则说明

CSE 指示进程状态已损坏且未被系统捕获。 在损坏状态的情况下,仅当你使用 System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute 特性标记方法时,常规处理程序才会捕获异常。 默认情况下,公共语言运行时 (CLR) 不会为 CSE 调用 catch 处理程序。

最安全的选项是允许进程发生故障而不捕获这些类型的异常。 甚至日志记录代码都可以使攻击者利用内存破坏 bug。

当使用捕获所有异常的常规处理程序(例如,没有异常参数的 catch (System.Exception e) 或 catch)捕获 CSE 时,将触发此警告。

如何解决冲突

若要解决此警告,请执行以下其中一项操作:

请删除 HandleProcessCorruptedStateExceptionsAttribute 属性。 这将恢复为默认运行时行为,其中 CSE 不会传递到 catch 处理程序。

删除常规 catch 处理程序,而不是捕获特定异常类型的处理程序。 这可能包括假定处理程序代码可以安全处理它们的 CSE(罕见)。

重新引发 catch 处理程序中的 CSE,该处理程序会将异常传递给调用方,并应导致结束正在运行的进程。

何时禁止显示警告

不禁止显示此规则发出的警告。

伪代码示例

冲突

下面伪代码说明此规则检测到的模式。

[HandleProcessCorruptedStateExceptions]

// Method that handles CSE exceptions.

void TestMethod1()

{

try

{

FileStream fileStream = new FileStream("name", FileMode.Create);

}

catch (Exception e)

{

// Handle exception.

}

}

解决方案 1 - 删除特性

删除 HandleProcessCorruptedStateExceptionsAttribute 特性可确保方法将不会处理损坏状态异常。

void TestMethod1()

{

try

{

FileStream fileStream = new FileStream("name", FileMode.Create);

}

catch (Exception e)

{

// Handle exception.

}

}

解决方案 2 - 捕获特定异常

删除常规的 catch 处理程序并只捕获特定异常类型。

void TestMethod1()

{

try

{

FileStream fileStream = new FileStream("name", FileMode.Create);

}

catch (IOException e)

{

// Handle IOException.

}

catch (UnauthorizedAccessException e)

{

// Handle UnauthorizedAccessException.

}

}

解决方案 3 - 重新引发

重新引发异常。

[HandleProcessCorruptedStateExceptions]

void TestMethod1()

{

try

{

FileStream fileStream = new FileStream("name", FileMode.Create);

}

catch (Exception e)

{

// Rethrow the exception.

throw;

}

}

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档