
OPNsense 26.7.6 - 높음 - 원격 - 구성 라인 주입 - tunables 로더
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
분류: 설정 라인 주입 도달 범위: 원격
OPNsense 코어 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables는 여전히 name/value를 /boot/loader.conf에 보간합니다. GHSA-fq94의 남은 형제입니다. Tunables.xml의 tunable / value는 순수 TextField(줄바꿈 허용)입니다. system_login_configure()는 {$param}="{$value}"를 기록합니다. Tunables 재구성은 login도 재시작합니다. 라이브 sysctl(8)은 shell_safe와 OID 필터를 거치므로 그 지점은 셸 주입이 아닙니다. 남은 문제는 다음 부팅 시 추가 로더 지시문입니다. 권한은 page-all이 아닌 page-system-advanced-sysctl입니다.
이 GitHub 팩은 조정된 공개 전까지 비공개로 유지됩니다.
| ID | 아직 CVE 없음 |
| 분류 | 설정 라인 주입 |
| 도달 범위 | 원격 (인증된 WebGUI / API) |
| CWE | CWE-93 |
| CVSS | 높음: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 제품 | OPNsense core |
| 영향받음 | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| 인증 | page-system-advanced-sysctl 권한이 있는 WebGUI 세션 또는 API 키 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | compose exec gadget (hunt slot 18850) |
태그 26.7.6 peel a842fe48을 고정했습니다. 랩은 고정된 system_login_configure() 보간의 PHP gadget입니다. Compose 프로젝트 opnsense-tunables-loader. 18800-18860 gadget 패밀리의 hunt slot 18850; 이 compose 파일은 공개된 HTTP 바인드가 아닌 docker compose exec php를 사용합니다.
| 방법 | 싱크 | 권한 |
|---|---|---|
Tunables 값 CR/LF (hw.usb.no_boot_wait + "\n# witness) | /boot/loader.conf에 system_login_configure() 추가 라인 고정 | 무결성 (랩 입증): 닫힌 할당 뒤에 별도 줄로 추가된 # OPNSENSE-TUNABLES-LOADER-WITNESS. 랩: newline-extra-line=yes. |
깨끗한 값 1 | 동일한 기록기 | 부정 (랩 입증): 단일 할당 줄, witness 없음. 랩: clean-value-single-line=yes. |
| 다음 부팅 시 동일한 추가 로더 라인 | 로더 init_path / module_path / *_load / vfs.root.mountfrom / 콘솔 | 무결성 (추론): 다음 부팅 로더가 공격자 키를 반영. 이 gadget에서는 재부팅하지 않음. |
잘못된 로더 라인 / 잘못된 vfs.root.mountfrom | /boot/loader.conf | 가용성 (추론): 부팅 실패 또는 잘못된 루트. |
POST /api/core/tunables/searchItem | tunables API | 정찰 (추론): tunables 목록 조회, current/default/type 포함. 이 ACL에 의도된 기능. |
유효한 OID의 라이브 sysctl -w | set_sysctl + OID 필터 | 의도된 페이지 작업. 추가 로더 라인이 남은 문제. |
랩 입증 vs 추론: 줄바꿈 추가 로더 라인과 깨끗한 값 단일 줄은 랩 SUCCESS. 다음 부팅 로더 적용은 추론. 전체 OPNsense FreeBSD VM이 아닌 gadget.
요구 사항: 로그인한 사용자 또는 해당 사용자의 Local API 키에 page-system-advanced-sysctl이 있고 page-all이 없어야 함. POST /api/core/tunables/*. 세션 POST에 CSRF. 재구성은 login을 재시작함; rc.reload_all과 부팅도 system_login_configure를 호출함.
| 표면 | 랩 |
|---|---|
| 라이브 sysctl 셸 주입 | shell_safe + OID 필터 |
| 깨끗한 값 | 단일 할당 줄 |
| 미인증 | 401 |
page-system-advanced-sysctl이 없는 사용자 | 403 |
user-config-readonly | save() 예외 발생 |
실제 OID를 설정하는 page-all tunables 관리자 | 의도됨 |
| GHSA-fq94 패치된 GUI 텍스트 필드 | 다른 싱크; 이 필드는 명시되지 않음 |
미인증 없음. 라이브 sysctl 셸 없음. Diagnostics: Command 없음.
cd lab
./run.sh
Compose 프로젝트 opnsense-tunables-loader. Witness OPNSENSE-TUNABLES-LOADER-WITNESS. 마지막 줄:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
루트 런처: python3 opnsense-tunables-loader-Abraxas-Labs.py.
tunables name과 value에서 CR/LF와 "를 제거하십시오. GHSA-fq94와 같은 분류입니다. name을 순수 TextField가 아닌 OID 마스크로 타입 지정하십시오. 할당을 닫을 수 없는 헬퍼로 인용하십시오. 알려진 로더 키가 아니면 tunable을 /boot/loader.conf에 기록하지 마십시오.
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc system_login_configure loader.conf 보간Tunables.xml 순수 TextField name/value