
pfSense CE 2.9.0-DEVELOPMENT — средний уровень — удалённый — SQLi — voucher_expire WHERE
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-voucher-expire-sqli
Класс: SQLi Доступ: Удалённый
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
voucher.inc captiveportal_read_db("WHERE username = '{$voucher}'"), затем sessionid первой строки в captiveportal_remove_entries. Неаутентифицированный INSERT при входе использует SQLite3::escapeString.
| ID | CVE пока нет |
| Класс | SQLi |
| Доступ | Удалённый (аутентифицированный WebGUI, если не указано иное) |
| CWE | CWE-89 |
| CVSS | Средний: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L |
| Продукт | pfSense CE |
| Затронуто | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Аутентификация | Сессия WebGUI с page-status-captiveportal-expire / page-services-captiveportal-vouchers |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал публичный master 9363ac5. Лаборатория — это PHP-гаджет зафиксированного sink, loopback HTTP на 127.0.0.1:19280.
Серия статей: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Метод | Sink | Привилегия |
|---|---|---|
| POST voucher expire token | captiveportal_read_db WHERE username = '{$voucher}' | Целостность: Доказано в лаборатории: UNION выбрал другой sessionid, а stacked-UPDATE перезаписал эту строку. CONTROL expire удалил только A. Неаутентифицированный путь входа остался экранированным. |
| тот же остаток | тот же sink | Разведка: Предположительно: UNION может читать другие столбцы сессий из captiveportal{zone}.db. |
| тот же остаток | тот же sink | Доступность: Доказано в лаборатории: отключение внедрённой первой строки; можно удалить/перезаписать другую сессию в этой зонной БД. |
Требуется: page-status-captiveportal-expire / page-services-captiveportal-vouchers. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
Требуется: page-status-captiveportal-expire / page-services-captiveportal-vouchers. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
Экранирование при неаутентифицированном входе. voucher_auth по-прежнему использует escapeshellarg. Shell отсутствует. Другая зонная БД отсутствует. GUI cookie отсутствует.
Diagnostics: Command отсутствует, если эта страница также не предоставлена.
cd lab
./run.sh
Loopback 127.0.0.1:19280. Compose-проект pfsense-voucher-expire-sqli. Свидетель PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS. Только loopback: 127.0.0.1:19280. Compose-проект pfsense-voucher-expire-sqli. Свидетель PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS. PHP-гаджет зафиксированных строк. Стек разбирается после запуска.
Последняя строка:
SUCCESS PFSENSE-VOUCHER-EXPIRE-SQLI control-expire-only-a=yes control-login-escaped=yes trigger-rewrite-b=yes PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS
Привязывайте параметры. Прекратите конкатенацию voucher в SQL.
9363ac5b8651a1c7a333180425ce7719070f95f9