
pfSense CE 2.9.0-DEVELOPMENT - 높음 - 원격 - RCE - IPsec login_banner 시작 스크립트
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
분류: RCE 도달 범위: 원격
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
IPsec Mobile 로그인 배너는 길이 검사만 수행한 뒤 strongswan.conf에 charon.plugins.attr.28672로 따옴표 없이 그대로 기록됩니다. strongSwan은 따옴표 없는 값을 }에서 종료합니다. Form_Input에 안전한 배너(줄바꿈 없음)는 attr / plugins를 닫고 charon.start-scripts를 열 수 있습니다. 해당 페이지에서 Apply는 strongswanrc restart입니다. charon은 시작할 때 start-scripts 경로를 popen합니다. 권한은 page-vpn-ipsec-mobile이며, IPsec advanced / Diagnostics: Command가 아닙니다.
| ID | 아직 CVE 없음 |
| 분류 | RCE |
| 도달 범위 | 원격 (인증된 WebGUI) |
| CWE | CWE-74 |
| CVSS | High: 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) IPsec login_banner |
| 인증 | page-vpn-ipsec-mobile 권한의 WebGUI 세션 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
공개 master 9363ac5를 고정했습니다. 랩은 ipsec_strongswan_confgen과 실제 /usr/lib/ipsec/charon을 고정합니다. 루프백 127.0.0.1:18850. include 접두사는 사용하지 않았습니다.
| 방법 | 싱크 | 권한 |
|---|---|---|
login_banner_enable과 함께 attr/plugins를 닫고 charon.start-scripts를 여는 배너로 vpn_ipsec_mobile.php 저장 POST 후 apply POST | ipsec_strongswan_confgen의 따옴표 없는 key = {$value} (ipsec.inc:1378-1384); charon의 start-scripts popen | 무결성 (랩 입증): 실제 charon이 생성된 conf를 로드하고 start-scripts 경로를 popen했습니다 (charon=yes). 대조 배너 Welcome은 attr 내부에 머물렀습니다 (control-no-scripts=yes). |
| 동일한 popen | 호스트 파일시스템 | 정찰 (추정): config.xml, 키. |
잘못된 strongswan.conf 또는 IPsec 재시작 | charon | 가용성 (추정): IPsec 터널이 끊기거나 시작에 실패합니다. Apply는 이미 IPsec을 재시작합니다. |
랩 입증 vs 추정: control-no-scripts, 생성된 conf 내 start-scripts, 실제 charon popen은 랩에서 입증되었습니다. 파일시스템 정찰은 해당 popen에서 추정됩니다. 주입된 블록 뒤의 더미 섹션들이 confgen의 세 개 닫는 괄호를 흡수하여 파일이 유효한 설정 트리로 유지됩니다.
요구 사항: page-vpn-ipsec-mobile 권한의 WebGUI 세션. CSRF 토큰. 같은 페이지에서 저장 후 Apply. page-all, page-vpn-ipsec-editphase1, 또는 IPsec raw-config 텍스트영역은 필요하지 않습니다.
| 표면 | 랩 |
|---|---|
대조 배너 Welcome | attr 내부에 머물고 start-scripts 없음 |
| 미인증 / 토큰 없는 CSRF | 닫힘 |
OpenVPN config.ovpn | 다른 잔여물 (G2) |
| P1 HTML XSS | SA-26_14 skip-list |
page-vpn-ipsec-editphase1 | 필요하지 않음 |
| Diagnostics: Command | 함께 부여되지 않는 한 닫힌 채로 유지 |
이 페이지의 IPsec mobile dns_domain은 이미 is_domain()을 사용합니다.
cd lab
./run.sh
루프백 127.0.0.1:18850. Compose 프로젝트 pfsense-ipsec-login-banner. 이미지 태그 pfsense-ipsec-login-banner:2.9.0-dev. Witness PFSENSE-IPSEC-LOGIN-BANNER-WITNESS. 마지막 줄:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
ipsec_strongswan_confgen에서 login_banner를 인용 / 이스케이프하십시오. 저장 시 } # 및 줄바꿈을 거부하십시오 (HTML 위젯은 이미 단일 행 Form_Input입니다). is_domain()은 DNS 도메인을 위해 이 페이지에 이미 존재합니다; 배너에도 동일한 종류의 검사가 필요합니다.
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts