当前位置: 首页 > 知识库问答 >
问题:

log4j2,CWE 117-日志注入漏洞

时向文
2023-03-14

我一直在尝试在我们的Spring应用程序中处理log4j2的安全性以传递Veracode。尤其是CWE 117-日志注入漏洞。我们有一个带有spring-boot-starter-log4j2的Spring应用程序。
我尝试配置log4j2模式:

<PatternLayout pattern="%d{DEFAULT} [%t] %-5level %logger{36} - %encode{%m}%n" /> 

但它不起作用。我还尝试了这样的方法:

<PatternLayout pattern="%d{ISO8601} %-5p - %encode{ %.-500m }{CRLF}%n" /> 

<PatternLayout pattern="%d{HH:mm:ss.SSS} %marker [%t] %-5level %logger{36} - %encode{%msg}{CRLF}%n"/>

我仍然得到veracode结果:

117   Improper Output Neutralization for Logs   WelcomeResource.java: 15
117   Improper Output Neutralization for Logs   WelcomeResource.java: 16

我们不想使用ESAPI或任何日志外观,我们不想更改代码中的所有日志行,有数千次出现。我们希望使用下面或此处的代码片段中的straigt设置:https://owasp.org/www-project-cheat-sheets/cheatsheets/Injection_Prevention_Cheat_Sheet_in_Java.html#Log_Injection或https://github.com/javabeanz/owasp-security-logging/wiki/Log-Forging

但它不起作用。哪里有问题?

下面是我们的代码片段:

build.gradle:

plugins {
    id 'org.springframework.boot' version '2.2.0.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id 'html" target="_blank">maven'
}

group = 'com.example'
version = '0.0.2-SNAPSHOT'

repositories {
    mavenCentral()
}

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}

pp.java:

package com.example.demoLog4j2;

import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

    public class App {

        final static org.slf4j.Logger Logger = LoggerFactory.getLogger("App");

        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
            System.out.println(" //---------------------->> DemoLog4j2 Application started... ");
            Logger.info(" Logger implementation: " + Logger.getClass().getName());
        }
    }

WelcomeResource。java:

package com.example.demoLog4j2;

import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

@RestController
public class WelcomeResource {

    private static final String welcomeMessage = "Welcome...";

    final org.slf4j.Logger Logger = LoggerFactory.getLogger(this.getClass());

    @GetMapping("/name")
    public String getName(@RequestParam(name="name", required = false, defaultValue = "Josef") String name) {
        Logger.info( "----- name: " + name);
        Logger.debug( "--- name: " + name );
        return "name: " + name;
    }
}

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO ">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!-- <PatternLayout pattern="%d{DEFAULT} [%t] %-5level %logger{36} - %encode{%m}%n" /> -->
            <!-- <PatternLayout pattern="%d{HH:mm:ss.SSS} %marker [%t] %-5level %logger{36} - %encode{%msg}{CRLF}%n" /> -->
            <PatternLayout pattern="%d{ISO8601} %-5p - %encode{ %.-500m }{CRLF}%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

共有1个答案

常俊侠
2023-03-14

最后,我们用log4j2配置文件中的“%encode{%msg}”解决了日志注入威胁。它解决了威胁,但没有解决veracode报告。我们忽略了它,因为它是虚假报告。我不知道veracode是否修复了它。

 类似资料:
  • 在中有一个,可以将日志写入到。 我需要在中使用相同的功能,但我还没有找到这样做的选项。有人知道如何使用实现同样的效果吗?

  • 我们使用spring boot 2.1.5和starter parent作为pom依赖项。 Spring启动使用默认的日志回馈进行日志记录,我们尚未显式切换到Log4j2或更改任何配置。下面是我们的项目依赖关系树。 我们的项目中有很多lombok@log4j2注释。但是,我们在依赖关系树中发现我们没有任何log4j2-core jar依赖项(发现它容易受到最近log4j问题的影响)。 lombok

  • 我希望由log4j2创建的日志文件在其文件名中包含日期模式,包括当前活动文件。也就是说,如果今天的日期是2016-12-15,我希望当前日志文件是lager-2016-12-15.log。当日期改变时,我希望创建一个名为lager-2016-12-16.log的新文件。 使用,我无法使当前活动日志文件的文件名中具有日期模式。我的log4j2.xml: 使用此配置,翻转时的复制被搞乱了。从fileN

  • 我正在使用带有log4j2的Spring Boot1.5.9,当我测试日志记录功能时,创建了日志文件,但没有将日志写入其中,而控制台日志记录程序运行良好。请在pom.xml&log4j2.properties配置下面找到。 log4j2.properties文件:

  • 我创建了以下groovy脚本,以展示如何使用简单的注释将日志字段注入我们的类 当我运行groovy脚本时,我得到以下结果(在GROOVY CONSOLE上) 请告知我们如何将结果打印到WIN机器中的日志文件中,以及需要向groovy脚本中添加什么才能启用它? 例如: 日志文件 C: \程序文件\日志\我的。非常棒。日志 (应包含结果:)

  • 像这样的陈述 符合SQL注入条件。但PreparedStatement如何帮助防止SQL注入呢?考虑以下场景: 如果有人输入和怎么办,因为这也将被视为有效的字符串...