2021년 12월9일 해당 취약점 나온듯?
현재 CVE 번호는 CVE-2021-44228 임
## 핵심 Flow 는 아래와 같음
A : Log4j 취약한 버전을 사용하는 서버
B : 공격자
- A의 서버에서 사용자의 입력을 로그로 저장하는 곳이 존재함 (ex. HTTP Header 중 X-Api-Version)
- 해당 장소에 B가 페이로드를 넘김
- 서버가 B의 입력을 로그 기록함
- JNDI Lookup을 통해 해당 구문이 실행됨 (코드는 JNDI Injection 페이로드로 구성되며, 해당 코드를 실행시키는건 JNDI Lookup을 통해 이루어짐)
CVE-2021-44228 공격 시나리오
JNDI Injection 관련 내용은 아래 링크에 있음
## JNDI ?
JNDI는 Java Naming and Directory Interface로 디렉터리 서비스(LDAP, DNS, NIS, 파일 시스템)를 발견하고 Lookup을 통해 디렉터리 Object를 Naming 해주는 Java API이다.
Naming을 사용할 때 ${protocol:value} 이런식으로 Binding 되기 때문에 이번 공격의 페이로드가 ${ldap:127.0.0.0/a} 이런모양이다
취약한 코드 ?
사용자의 입력을 따로 가공하지 않고 로깅하는 경우 취약하다고 볼 수 있다.
@RestContorller
public class MainController{
private static final Logger logger = LogManager.getLogger("LOG");
@GetMapping("/")
public String putLog(@RequestHeader("User-agent") String agent){
logger.info("User agent is " + agent);
}
}
위와 같이 User-agent 던 X-Api-Version 이던 사용자가 조작 가능한 데이터에 대해 서버에서 해당 데이터를 받아 로깅하면 취약하다
##JNDI Lookup 원본
아래와 같이 String으로 넘어올 수 있는 사용자 입력에 대해 필터링이 별도로 존재하지 않았음
링크는 https://github.com/apache/logging-log4j2/commit/d82b47c6fae9c15fcb183170394d5f1a01ac02d3 요기서 확인 가능함.
현재는 입력(name) argu에 대한 프로토콜 / class / ldap 서버에 대한 필터링이 추가됨
public <T> T lookup(final String name) throws NamingException {
return (T) this.context.lookup(name);
}
취약한 버전 ?
취약한 버전은 아래과 같음
Apache Log4j 2.0-beta9 ~ 2.14.1 까지의 모든 버전이 취약하다
##12.20 추가
이게 취약점이 맨날 나와서 현재 계속 바뀌고 있다.
현재 2.16 버전까지 DoS 공격에 취약하다고 한다.
Mitigation / 조치방법 ?
가장 간단한 조치방법은 log4j의 버전을 업그레이드 하는 것이다.
현재 조치된 버전은 2.15.0 이며 Java8 이상에서 사용 가능하기 때문에 이보다 낮은 자바 버전을 사용하는 경우 자바 버전업을 하던 다른 조치방법을 사용해야 한다.
- Log4j를 2.15.0 으로 업그레이드
- 2.0-beta 9 ~ 2.10.0 버전의 경우 JndiLookup 클래스를 경로에서 제거 zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- 2.10 ~ 2.14.1 log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경변수를 true로 설정
12.20 추가
조치방법은 최신버전으로의 패치는 현재 2.17이다. 2.16까지 DoS 공격이 가능하다고함.
참고
https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389
'Technical Docs > Web Application' 카테고리의 다른 글
DOM Invader (Burp Suite) (0) | 2022.06.23 |
---|---|
CVE-2022-26134 Confluence 취약점 (내용추가) (0) | 2022.06.03 |
Source Map 이 뭘까요~ (0) | 2022.06.01 |
CVE-2022-22978 Authorization Bypass in RegexRequestMatcher (0) | 2022.05.31 |
Log4j JNDI Injection 부분 간단정리 ? (0) | 2022.02.12 |