强化 SCA 扫描报告读取环境变量时的日志伪造问题



我用了System.getenv("envVariableName"),它给我带来了日志锻造问题。 我甚至尝试使用 ESAPI 编码器对返回的字符串进行编码,但没有帮助。

我的代码片段:

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;
}

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

Fortify(至少使用过)将ESAPI的编码器识别为删除"web"污点标志,但我认为这只是在Fortify的XSS规则的背景下。我不认为他们在日志锻造的背景下已经这样做了,尽管我很确定他们认识到 ESAPI 的日志记录提供了"安全日志记录"。

如果我理解您在这里的愿望,您不仅希望将此特定实例标记为"不是问题"并禁止它,而是希望它首先不将此模式识别为日志锻造实例。不幸的是,您无法真正修改HP(现在的Microfocus)强化规则。(他们的规则包甚至是加密的,因此除非在调试器下运行AWB,您甚至无法查看其规则。如果您决定"环境变量"是"受信任的",我想您可以设置并应用一个 AWB 过滤器集,该过滤器集将忽略接收器上唯一污点标志是"环境变量"的实例。(或者仅将其应用于此日志锻造类别。

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

希望有帮助。

Fortify 指定的行实际上是在字符串上 envValue = encode(System.getenv("envVariableName"));?

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

问题:如果您已经在使用 ESAPI,那么为什么不只使用 ESAPI 的日志记录,因为它提供了"安全日志记录",就像防止日志伪造攻击一样?

最新更新