Fortify 认为强类型对象上有日志锻造,除非我手动调用 .toString()



我有一个页面标记对象,它是一个Long的包装器,里面有一个静态String来拥有名称空间。在我的应用程序中,我们使用Spring@PathVariable让Jackson构建这些对象,然后记录失败时的页面标记。Fortify认为这是潜在的日志伪造,但实际上不可能,因为我们的toString((方法只是:return PREFIX + StringUtils.leftPad(Long.toString(value), 7, '0')

我试过两种方法让Fortify对此感到满意,但都不太合适。我可以添加一个抑制规则:

<SuppressionRule formatVersion="17.20">
<RuleID>94236098-4C10-41F0-9C2A-27A3919830000</RuleID>
</SuppressionRule>

然而,这也会使它无法从@PathVariable Strings中找到实际的日志伪造。

我尝试添加DataflowCleanseRule:

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
<RulePackID>55290199-F943-4BF1-9DCE-A3E28DD1342A</RulePackID>
<SKU>SKU-cleanse</SKU>
<Name><![CDATA[cleanse]]></Name>
<Version>1.0</Version>
<Description><![CDATA[Tell Fortify that Page Identifiers can't cause log forging.]]></Description>
<Rules version="17.20">
<RuleDefinitions>
<DataflowCleanseRule formatVersion="17.20" language="java">
<RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID>
<TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags>
<FunctionIdentifier>
<NamespaceName>
<Pattern>page.id.</Pattern>
</NamespaceName>
<ClassName>
<Pattern>Id</Pattern>
</ClassName>
<FunctionName>
<Pattern>toString</Pattern>
</FunctionName>
<ApplyTo implements="true" overrides="true" extends="true"/>
</FunctionIdentifier>
<OutArguments>return</OutArguments>
</DataflowCleanseRule>
</RuleDefinitions>
</Rules>
</RulePack>

但这并没有阻止伪造日志的警告。ID是类似于page.id.v1.NewsId的类。

此外,如果我把newsId.toString()放在包里的任何地方,它就会意识到它们都是安全的,我的警告就会全部消失。这是Fortify中的一个错误,还是我遗漏了一些明显的东西?

清理规则中的FunctionIdentifier值应该指生成本例标识符的函数的完全限定包、类和函数名,而不是用于在jsp/模板等中获取标识符的字符串

@andersonshatch让我走上了正确的道路,意识到我需要说服Fortify,无论发生什么,只要看到其中一个物体,它都是安全的。最终为我工作的文件是:

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
<RulePackID>55290199-F943-4BF1-9DCE-A3E28DD1342A</RulePackID>
<SKU>SKU-cleanse</SKU>
<Name><![CDATA[cleanse]]></Name>
<Version>1.0</Version>
<Description><![CDATA[Tell Fortify that Page Identifiers can't cause XSS or log forging.]]></Description>
<Rules version="17.20">
<RuleDefinitions>
<CharacterizationRule formatVersion="17.20" language="java">
<RuleID>34711D7A-C2BC-40B3-B1DE-B5C48EF65646</RuleID>
<StructuralMatch><![CDATA[VariableAccess va: va.type.name matches "page.id.*"]]>
</StructuralMatch>
<Definition><![CDATA[TaintCleanse(va)]]></Definition>
</CharacterizationRule>
</RuleDefinitions>
</Rules>
</RulePack>

相关内容

最新更新