티스토리 뷰

토요일에 정말 오랜만에 친구들과 술 한잔 하고 있었는데 긴급 연락이 왔다

뉴스 링크가 걸려 있었는데 마인크래프트에서 시작한 java logging framework의 문제에 관한 기사였다

밖이라서 바로 대응은 못 했는데 logback 쓰고 있던 게 기억나서 더 찾아보았다

원격으로 코드를 밀어 넣을 수 있어 엄청난 문제긴 한데 특정 버전 (2.0-beta9 ~ 2.14.1)에만 해당하는 문제다

다행히 log4j2의 1.x 버전과 logback은 해당 사항 없어서 별 다른 대응 없이 잘 지나갈 수 있었다

 

원인으로는 log4j-core 모듈이라는데 대충 찾아본 바에 따르면 유연성과 편의 기능을 위해 작성된 코드로 인해

SQL injection 마냥 코드가 들어와서 실행되는 게 문제라고 한다

 

개인적으로 진행하는 프로젝트에는 log4j2 2.14.1 버전을 쓰고 있다

완성도 아니고 ec2 올려둔 것도 아니라 내버려둬도 상관없지만 대응 방법까지 찾아본 거 바로 적용해보기로 했다

레거시 스프링이 아니라면 거의 다 메이븐 혹은 그래들을 쓰고 있을 것이다

레거시의 경우엔 직접 jar를 다운 받고 교체해주면 되니 그래들을 통한 해결 방법을 살펴보자

 

Gradle의 경우 Log4j2를 사용하기 위해 boot-starter-logging 의존성을 빼주었을 것이고 log4j2를 넣어뒀을 것이다

때문에 configurations에서 exclude 하는 부분이 있을 것이다

log4j 버전을 2.15.0 으로 맞춰주는 건 그 밑에 resolutionStrategy 쪽을 참고하면 된다

2.15.0은 안정화 버전이 아니기 때문에 2.15.0으로 맞추지 않아도 되고 문제가 되는 버전만 피해서 맞춰주면 된다

루트 build.gradle 에 적용시키면 된다

 

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
        all {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
            resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                if (details.requested.group == 'org.apache.logging.log4j') {
                    details.useVersion '2.15.0'
                }
            }
        }
    }

 

pom.xml 에서는 아래와 같이 설정해주면 된다고 한다

<properties>
    <log4j2.version>2.15.0</log4j2.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.15.0</version>
    </dependency>
</dependencies>

 

댓글
링크
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday