我有一个页面令牌对象,该对象是Long的包装,其中有一个静态String来包含名称空间。在我的应用程序中,我们使用Spring @PathVariable让Jackson生成这些对象,然后在失败时记录页面令牌。 Fortify认为这是潜在的日志伪造,但是实际上没有任何机会,因为我们的toString()方法只是:return PREFIX + StringUtils.leftPad(Long.toString(value), 7, '0')
。
我尝试了两种方法使Fortify对此感到满意,但都不适合。 我可以添加一个SuppressionRule:
<SuppressionRule formatVersion="17.20">
<RuleID>94236098-4C10-41F0-9C2A-27A3919830000</RuleID>
</SuppressionRule>
但是,这也将使其无法从@PathVariable字符串中找到实际的日志伪造。
我尝试添加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中的错误,还是我缺少明显的东西?
答案 0 :(得分:0)
清理规则中的FunctionIdentifier
值应引用生成这种情况下的标识符的函数的标准包,类和函数名,而不是用于在jsp中获取标识符的字符串。 / template等,
答案 1 :(得分:0)
@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>