CWE

普遍的弱点

社区开发的软件和硬件弱点类型清单

2021 CWE最重要的硬件弱点
CWE前25个最危险的弱点
>CWE列表> CWE-单个字典定义(4.9)
ID

CWE-1265:通过嵌套呼叫对非诱因代码的意外重新入侵调用

弱点ID:1265
抽象:根据
结构:简单的
查看自定义信息:
+描述
在执行非伦敦代码期间,该软件执行一个无意中产生非伦敦代码的嵌套调用的调用。
+扩展描述
在复杂的软件中,单个函数调用可能导致许多可能的代码路径,其中一些可能涉及深度嵌套的调用。可能很难预见所有可能从给定函数调用中散发出来的代码路径。在某些系统中,外部演员可以操纵系统的输入,从而实现广泛的控制流。这通常是从不受信任来源执行脚本的软件中关注的。此类软件的示例是Web浏览器和PDF阅读器。当函数调用导致的可能的代码路径之一变化时,就会存在弱点,该程序在调用过程中假定原始呼叫者认为原始呼叫者不变。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 支柱支柱 - 弱点是最抽象的弱点类型,代表了与之相关的所有类别/基础/变体弱点的主题。从技术上讲,柱子与类别不同,因为在技术上仍然是一种描述错误的弱点,而类别代表用于分组相关事物的常见特征。 691 控制流量管理不足
peerof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 663 在并发的上下文中使用非诱因函数
canpreceede 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 416 免费使用后使用
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 371 国家问题
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

班级:不是特定语言的(不确定的患病率)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
正直

技术影响:意外状态

对这种弱点的开发可能会使应用程序处于意外状态,并在第一次调用完成之前将变量重新分配。这最终可能导致内存损坏或意外的代码执行。
未知
+示例的例子

示例1

在以下C ++代码中实现Widget类是代码的一个示例,并非被设计为重新进入。如果一种小部件方法的调用无意间产生了小部件方法的第二个嵌套调用,则数据成员背景图可能会在执行外呼叫时出乎意料地改变。

(不良代码)
示例语言:C ++
类小部件
{
私人的:
图像*背景图像;

民众:
void click()
{
if(背景图像)
{
背景图像 - > click();
}
}

void ChanchbackgroundImage(图像* newimage)
{
if(背景图像)
{
删除背景图像;
}
背景图= newImage;
}
}

类图像
{
民众:
void click()
{
ScriptEngine-> fironimageclick();
/ *使用“此”指针执行一些操作 */
}
}

仔细观察此示例,widget :: click()调用backgroundImage-> click(),它依次呼叫scriptEngine-> firononimageclick()。Fireonimageclick()中的代码调用了由文档渲染的文档定义的适当脚本处理程序例程。在这种情况下,此脚本例程由对手提供,此恶意脚本呼叫widget :: ChandlackgroundImage(),从而删除了由背景图指向的映像对象。当控件返回到Image ::单击时,函数的背景图像“此”指针(这是背景图的前值)是一个悬空的指针。这种弱点的根源是,虽然窗口小部件上的一个操作(click)在执行中,但可以调用小部件对象上的第二个操作(在这种情况下,第二个调用是对不同方法的调用,即换回了backbackgroundImage)这修改了非本地变量。

示例2

这是C ++代码的另一个示例,并非被设计为重新进入。

(不良代码)
示例语言:C ++
类请求
{
私人的:
std :: string uri;
/ * ... */

民众:
void设置(scriptObject* _uri)
{
this-> uri = scriptEngine-> coercetostring(_uri);
/ * ... */
}

void send(scriptObject* _data)
{
凭证凭证= getCredentials(uri);
std :: string data = scriptEngine-> coercetostring(_data);
dosend(URI,凭据,数据);
}
}

预期的操作顺序是呼叫请求:: setup(),然后打电话给请求:: send()。请求:: send()调用scriptEngine-> coercetostring(_data)将脚本提供的参数胁到字符串。此操作可能会产生脚本执行。例如,如果脚本语言是eCmascript,则如果_data是具有自定义toString方法的对手支持的ecmascript对象,则可能会导致任意脚本执行。如果对手的脚本对请求::设置进行了新的调用,则当控件返回请求::发送时,URI和本地变量凭据将不再与彼此保持一致。结果,一个资源的凭据将与其他资源不正确。这种弱点的根源是,尽管按要求进行一次操作(发送)在执行中,但可以调用第二个操作(设置)。

+观察到的例子
参考 描述
在此漏洞中,通过注册恶意的OnError处理程序,对手可以产生意外的重新进入CDONANGE对象。[[Ref-1098这是给予的
该CVE涵盖了通过Microsoft VBScript中滥用class_termination功能来实现的几个脆弱方案。在一种情况下,class_terminate用于在执行该对象的破坏者期间产生不良的脚本限制。在另一种情况下,脆弱的条件是由属性设置器方法的递归入口引起的。该递归调用会产生第二个虚假的调用,以使参考计数对象的发行方法提前释放该对象时,会导致UAF。这种脆弱性模式被普及为“双重杀戮”。[[Ref-1099这是给予的
+潜在的缓解

阶段:建筑和设计

在构建将对事件响应事件执行不信任的代码的系统时,请考虑异步执行不信任的事件处理程序(异步消息传递),而不是在每个事件触发时同步执行它们。不受信任的代码应在线程消息循环的下一次迭代开始时执行。通过这种方式,严格序列化了呼叫到非伦敦代码,因此每个操作都在下一个操作开始之前完全完成。必须特别注意所有类型强制可能导致脚本执行的地方。在操作开始时,执行所有必要的胁迫可以帮助减少在意外关头执行操作的机会。

有效性:高

阶段:实施

通过不利用非本地数据,不要修改自己的代码,也不会调用其他非诱因代码,请确保代码(例如,函数或类)是重新进入的。

有效性:高

+弱点
条件 描述
基本的
(弱点独立于其他弱点的地方)
+参考
[Ref-1098] Jack Tang。“ CVE-2014-1772的根本原因分析 - 自由漏洞后使用Internet Explorer”。2014-11-05。<https://blog.trendmicro.com/trendlabs-security-intelligence/root-cause-analysis-of-cve-cve-2014-1772-an-internet-internet-ecplorer-use-use-use-ferre-free-vulnerability/>。
[Ref-1099] Simon Zuckerbraun。“是时候终止终结者了”。2018-05-15。<https://www.zerodayinitiatiative.com/blog/2018/5/15/its time-time-tim-to-to-to-terminate-the-terminator>。
+内容历史记录
+提交
提交日期 提交者 组织
2018-12-20 西蒙·扎克布劳恩(Simon Zuckerbraun) 趋势微观
+修改
修改日期 修饰符 组织
2020-08-20 CWE内容团队 MITER
更新的示例_examples,rected_attack_patterns
2022-10-13 CWE内容团队 MITER
更新的引用
提供更多信息 - 请选择其他过滤器。
页面最后更新:2022年10月13日