
pfSense CE 2.9.0-DEVELOPMENT - 높음 - 원격 - RCE - timezone php.ini prepend
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-timezone-phpini
분류: RCE 도달 범위: 원격
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
system.php는 system_get_timezone_list()에 대한 in_array 검사 없이 $_POST['timezone']을 기록합니다. is_timezone()은 끝에 붙은 슬래시만 거부합니다. system_timezone_configure는 /var/db/zoneinfo를 기록합니다. rc.php_ini_setup은 date.timezone="${TIMEZONE}"을 php.ini에 보간합니다. 따옴표와 개행을 추가하면 auto_prepend_file이 추가됩니다.
| ID | 아직 CVE 없음 |
| 분류 | RCE |
| 도달 범위 | 원격 (별도 언급이 없는 한 인증된 WebGUI) |
| CWE | CWE-94 |
| CVSS | 높음: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 제품 | pfSense CE |
| 영향받는 버전 | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| 인증 | page-system-generalsetup 권한이 있는 WebGUI 세션 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
공개 master 9363ac5를 고정했습니다. 랩은 고정된 싱크의 PHP 가젯이며, 127.0.0.1:18940에서 루프백 HTTP를 사용합니다.
시리즈 분석 글: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 방법 | 싱크 | 권한 |
|---|---|---|
| POST system.php timezone | rc.php_ini_setup date.timezone="${TIMEZONE}" | 무결성: 랩에서 입증됨: 생성된 php.ini가 auto_prepend_file을 허용했고, php -c와 php-fpm 유사 스크립트가 prepend를 실행하고 증거를 기록했습니다. |
| 동일한 잔여 취약점 | 동일한 싱크 | 정찰: 추론됨: prepend는 php.ini 재빌드 / php-fpm 재시작 후 root PHP로 실행됩니다. |
| 동일한 잔여 취약점 | 동일한 싱크 | 가용성: 추론됨: 손상된 php.ini는 복구될 때까지 GUI를 다운시킬 수 있습니다. |
필요 조건: page-system-generalsetup. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 root입니다.
필요 조건: page-system-generalsetup. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 root입니다. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 root입니다.
Form_Select는 UI 전용입니다. hostname/domain에는 자체 문자셋 검사가 있습니다. 비인증 N/A.
해당 페이지도 함께 부여되지 않는 한 Diagnostics: Command는 없습니다.
cd lab
./run.sh
루프백 127.0.0.1:18940. Compose 프로젝트 pfsense-timezone-phpini. 증거 PFSENSE-TIMEZONE-PHPINI-WITNESS. 루프백 전용: 127.0.0.1:18940. Compose 프로젝트 pfsense-timezone-phpini. 증거 PFSENSE-TIMEZONE-PHPINI-WITNESS. 고정된 라인의 PHP 가젯. 실행 후 스택은 해체됩니다.
마지막 줄:
SUCCESS PFSENSE-TIMEZONE-PHPINI control-clean=yes trigger-prepend=yes is-timezone-accepts=yes not-allowlisted=yes PFSENSE-TIMEZONE-PHPINI-WITNESS
timezone을 system_get_timezone_list()에 대해 in_array로 검사하십시오. rc.php_ini_setup 보간에서 따옴표를 이스케이프하십시오.
9363ac5b8651a1c7a333180425ce7719070f95f9