序列号和日志注入



搜索了很长时间后,我找不到关于Serilog如何处理日志提要清理的信息。又称对抗";对数注入";或";原木锻造";(参见https://owasp.org/www-community/attacks/Log_Injection)。所有的搜索都指向";依赖性注入";这是一个完全不同的话题:(

我假设通过将Serilog与字符串参数一起使用(https://github.com/serilog/serilog/wiki/Writing-Log-Events)对可能的危险内容进行消毒。但是,是吗?

有人知道这样做了吗?我应该担心吗?

如果有人在没有字符串参数的情况下使用Serilog,而使用带有字符串串联的Serilog(违反指令(,该怎么办?

如果配置得当,Serilog可以完全解决这个问题。

然而,这是特定于格式化程序/接收器的,并且依赖于将Serilog用作结构化记录器(写入非结构化输出流肯定会阻碍这一点(。

如果您以OWASP文章中的示例为例:

var val = request["val"];
try {
int value = Int32.Parse(val);
}
catch (Exception ex) {
log.Information("Failed to parse val {Val}");
}

然后CLEF格式的Serilog事件将看起来像:

{"@t":"...","@mt":"Failed to parse val {Val}","Val":"twenty-one"}

想象";坏家伙;场景:

如果攻击者提交字符串"21th%0a%0aINFO:+User+logged+out%3dbadgoy"。。。

Serilog将生成一个结构化事件,如:

{"@t":"...","@mt":"Failed to parse val {Val}","Val":"twenty-onennINFO: User logged out=badguy"}

注意,注入的";事件";完全在CCD_ 1字段内;真实的";事件

即使注入的事件看起来像JSON,这也是有效的,因为Serilog的JSON格式化程序正确地转义了JSON值,因此假事件仍然完全在";Val";领域

即使误用了Serilog API,并且没有将Val正确记录为结构化数据,注入的内容仍然只会出现在消息字段或其所在的任何字段中,并且不能伪装成完全独立的事件。

为了再次强调这一点,您需要检查格式化程序和接收器的行为。我说的是Serilog中的格式化程序。格式化。此处压缩

相关内容

  • 没有找到相关文章

最新更新