2013-04-25 199 views
7

我得到了我的javaEE应用程序的veracode报告。它在任何日志记录上都有缺陷(使用log4j),所以我将StringEscapeUtils.escapeJava(log)添加到它们中,但veracode一直将它们报告为安全缺陷。安全漏洞 - veracode报告 - crlf注入

这是一个正确的解决方案吗? 我还能做什么?

这是报告信息: 标题:日志

不正确的输出中和

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

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

他们建议使用ESAPI,但它是一个非常大的项目,所以我需要最简单的办法,谓就是为什么我用String.escape“StringEscapeUtils.escapeJava(日志)”

THX先进试过!

+0

您能否提供来自Veracode报告的更多信息?当然可以剥离任何识别信息 – 2013-04-26 00:02:11

回答

7

我领导Veracode应用安全咨询小组,并且可以详细解答您的问题。对话的最佳场所是通过[email protected],因为讨论可能涉及您的发现的具体细节,我们可能希望避免公开。

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

该Veracode系统有一个机制,适当标记这些调查结果,所以他们不会造成混淆。

请联系Veracode支持([email protected]),我们将能够详细讨论。

此致敬礼, 吉姆。

+1

您能否详细说明Veracode寻找的已批准机制? – 2017-10-23 10:14:22

5

本报告中存在两个相互矛盾的问题。

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

当您在日志行内使用自己的分隔符时,也可能发生日志注入,例如Bad thing happened with parameters {0} and {1}。在这种情况下,如果攻击者在其中一个参数中包含字符串" and ",那么您将无法准确重新创建哪个数据属于哪个参数。这里的答案是围绕带有分隔符的参数,这些分隔符不出现在转义函数的输出中 - 例如,在每个值周围放置双引号,并使用escapeJava来转义该值中的任何双引号字符。

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

如果您可以确定您只是查看工具中的日志,而不会遇到像这样的愚蠢错误,则无需担心。

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

同样,Veracode将无法自动计算出您正在做的事情必然是安全的,因此您必须在这些报告被忽略/处理后将其标记为一次。

+0

我upvoted这个,但我想评论“用于查看日志文件工具的缺陷”:如果该工具有缺陷,该工具应该是固定的。没有好的/明智的方式来使破损工具的日志数据“安全”。 – 2015-06-01 10:24:40

+0

确实。然而,在当天,“用于查看日志文件的工具”可能是IE,在这种情况下,您遇到了两个问题:首先,文本日志中的HTML标记导致文件被嗅探为text/html,其次文件被从本地机器上查看,结束于我的计算机区域,此时该计算机拥有足够高的权限以便能够通过ActiveX执行任意代码。幸运的是,从那时起,MIME嗅探和区域权限就被驯服了,所以日志文件中的HTML问题更为罕见。 – bobince 2015-06-01 19:32:32

+0

使用IE查看日志文件?这就像将子弹放入枪中一样聪明,俯视枪管并将其射入你的眼睛,以便**看到它是否有效。 – 2015-06-02 08:11:33

1

使用StringEscapeUtils.escapeHtml(日志)来避免HTML注入并可能解决您的问题。

+0

我这样做了,Veracode继续报告crlf问题。为了说服Veracode,我必须添加'ESAPI.encoder()。encodeForHTML(raw)'。 – cjungel 2015-10-06 18:35:30

1

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

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

当你这样做时,你可以放心地忽略所有这些缺陷。另外,如果系统管理员使用错误的工具查看日志文件(执行转义序列的任何事件,\r和退格键),他应该被解雇。