安全漏洞 - veracode报告 - crlf注射

dav*_*vid 9 java security code-injection java-ee

我收到了我的javaEE应用程序的veracode报告.它在任何日志记录中都存在缺陷(使用log4j),因此我将其添加StringEscapeUtils.escapeJava(log)到所有日志记录中,但是veracode会将其报告为安全漏洞.

这是正确的解决方案吗?我还可以做些什么?

这是报告信息:标题:日志的输出中和不正确

说明:函数调用可能导致日志伪造攻击.将未经过授权的用户提供的数据写入日志文件允许攻击者伪造日志条目或将恶意内容注入日志文件.损坏的日志文件可用于覆盖攻击者的跟踪或作为攻击日志查看或处理实用程序的传递机制.例如,如果Web管理员使用基于浏览器的实用程序来查看日志,则可能会发生跨站点脚本攻击.

建议:尽可能避免将用户输入直接嵌入日志文件中.使用安全日志记录机制(例如OWASP ESAPI Logger)清理用户提供的用于构造日志条目的数据,该机制将自动删除意外的回车符和换行符,并且可以配置为对非字母数字数据使用HTML实体编码.只在绝对必要时编写自定义黑名单代码.始终验证用户提供的输入,以确保它符合预期的格式,尽可能使用集中数据验证例程.

他们建议使用ESAPI,但这是一个非常大的项目,所以我需要最简单的解决方案,这就是我尝试使用String.escape'StringEscapeUtils.escapeJava(log)'的原因.

先进的!

小智 6

我领导Veracode应用安全咨询小组,可以详细回答您的问题.对话的最佳场所是通过Support@veracode.com,因为讨论可能涉及我们可能希望避免公开的有关您的发现的具体细节.

简短的回答是StringEscapeUtils.escapeJava()可以有效地消除典型的CRLF风险,但它不是我们的系统自动识别的机制之一,因为在某些情况下它可能不足.

Veracode系统有一个适当标记这些发现的机制,因此它们不会引起混淆.

请联系Veracode支持(support@veracode.com),我们将能够详细讨论.

最好的问候,吉姆.

  • 你能详细说明Veracode所寻求的批准机制吗? (4认同)

bob*_*nce 5

本报告中有两个问题.

首先,有日志注入 - 使用换行符溢出到单独的日志行.StringEscapeUtils.escapeJava生成具有行分隔符和非ASCII字符转义的输出,这原则上可以确保解决此问题.然而,Veracode并不知道 - 作为一个自动扫描仪,它不能充分了解该方法正在做什么才能确定,所以它必须报告可能仍然存在漏洞.当然,Veracode无法了解第三方库代码中的每个转义函数.

例如,当您在日志行中使用自己的分隔符时,也会发生日志注入Bad thing happened with parameters {0} and {1}.在这种情况下,如果攻击者" and "在其中一个参数中包含字符串,则无法准确地重新创建哪个数据位于哪个参数中.这里的答案是用转义函数的输出中没有出现的分隔符来包围参数 - 例如,在每个值周围加上双引号,并用于escapeJava转义值中的任何双引号字符.

当使用某个工具查看日志时,第二次攻击发生在应用程序之外.如果该工具具有注入漏洞,则日志数据中的元字符可以变为活动状态.典型的例子是在Web界面中查看日志,将其直接复制到页面中而不进行转义,从而导致HTML注入,从而在日志查看应用程序中进行跨站点脚本编写.

如果你可以确定你只是查看没有像这样的愚蠢错误的工具中的日志,你不需要担心它.

否则,尝试从您认为可能受影响的语言中转义任何元字符.通常<&HTML.如果您不希望HTML转义所有非HTML日志数据,那么您可以采用的另一种方法是将这些字符替换\u003E为输出中的转义等效字符escapeJava.

同样,Veracode将无法自动解决您所做的事情在那里必然是安全的,所以一旦您对它感到满意,您就必须将这些报告标记为忽略/处理.

  • 我对此表示赞同,但我想评论“用于查看日志文件的工具中的缺陷”:如果该工具有缺陷,则应修复该工具。没有好的/明智的方法可以使损坏的工具的日志数据“安全”。 (2认同)

Aar*_*lla 5

我遇到了同样的问题,我通常会忽略这个缺陷,原因很简单:记录器只是给我一个日志事件。它不应该关心格式(暴露敏感数据是另一个问题)。

这里的解决方案是在附加程序中添加适当的过滤/后处理,将日志事件写入日志文件。在此步骤中,您可以删除特殊字符(\0\r- 回车、\b- 退格、\x1b- 转义和\x7f- 删除)并替换\n\n...,以使其无法将假日志行注入到日志中。

当您这样做时,您可以安全地忽略所有这些缺陷。

此外,如果系统管理员使用错误的工具来查看日志文件(任何执行转义序列\r和退格键的文件),他应该被解雇。