log4j2, CWE 117 - уязвимость внедрения журнала - PullRequest
0 голосов
/ 23 января 2020

Я пытался обеспечить безопасность log4j2 в нашем весеннем приложении для передачи в Veracode. Особенно CWE 117 - уязвимость, связанная с инжекцией журнала. У нас есть приложение spring с spring-boot-starter-log4j2. Я попытался настроить шаблон 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 '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'
}

Приложение. 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>
...