读取环境变量时,Fortify SCA扫描报告出现日志伪造问题

时间:2019-04-26 06:27:24

标签: logging environment-variables fortify esapi log-forging

我使用了System.getenv("envVariableName"),它引发了Log Forging问题。 我什至尝试使用ESAPI编码器对返回的String进行编码,但这没有帮助。

我的代码段:

String envValue = encode(System.getenv("envVariableName"));

String encode(String message) {
        if (message != null) {
            String clean = message.replace('\n', '_').replace('\r', '_');
            if (ESAPI.securityConfiguration().getLogEncodingRequired()) {
                clean = ESAPI.encoder().encodeForHTML(message);
                if (!message.equals(clean)) {
                    clean += " (Encoded)";
                }
            }
            return clean;
        }
        return message;
    }

关于我所缺少的任何建议,将不胜感激。

3 个答案:

答案 0 :(得分:1)

Fortify(至少使用过)将ESAPI的编码器删除了“ web”污点标志,但我认为这仅是在Fortify的XSS规则中。我不认为他们在Log Forging的背景下做到了这一点,尽管我可以肯定他们肯定ESAPI的日志记录可提供“安全日志记录”。

如果我在这里了解您的需求,那么您不只是希望将此特定实例标记为“不是问题”并取消显示,而是希望它首先不要将此模式识别为Log Forging实例。不幸的是,您无法真正修改HP(现在称为Microfocus)Fortify规则。 (它们的规则包甚至都已加密,因此在调试器下无法运行AWB,甚至无法查看其规则。)如果您确定“环境变量”是“受信任的”,我想您可以设置并应用AWB过滤器集,它将忽略接收器上唯一的污点标志为“环境变量”的实例。 (或者仅将其应用于此“日志伪造”类别。)

但通常,您要么不得不忍受噪音(Fortify会产生很多误报),要么必须手动审核每个实例并将误报抑制为“不是问题” ”。这是通常的工作方式,尽管有时该功能仅限于AppSec专家。

希望有帮助。

答案 1 :(得分:0)

Fortify指定的行实际上位于String envValue = encode(System.getenv(“ envVariableName”));?

当您从不受信任的来源向日志中写入一些信息时,通常会发生日志伪造问题:https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.log_forging#C%23%2FVB.NET%2FASP.NET

答案 2 :(得分:0)

问题:如果您已经在使用ESAPI,那么为什么不使用ESAPI的日志记录,因为它提供了“安全日志记录”,如防止Log Forging攻击一样?