티스토리 뷰
토요일에 정말 오랜만에 친구들과 술 한잔 하고 있었는데 긴급 연락이 왔다
뉴스 링크가 걸려 있었는데 마인크래프트에서 시작한 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>
'Spring > Spring Framework' 카테고리의 다른 글
[AOP] 시간 측정, 로그 AOP 개선하기 (0) | 2022.02.06 |
---|---|
[Spring] @Cacheable Cannot resolve bean 'cacheManager' (0) | 2021.12.17 |
[Test] 기묘한 병렬 테스트 (0) | 2021.12.06 |
[Test] JPA DataIntegrityViolationException 발생 테스트 복구 (0) | 2021.11.19 |
[MapStruct] DTO 안의 DTO (0) | 2021.10.07 |