
OpenLiteSpeed 1.9.3 - 高 - リモート - 権限残留 - HTTP/1 の重複 Cookie が litespeed_role の 403 を回避; lsphp は依然として HTTP_COOKIE を受け取る
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openlitespeed-dup-cookie-litespeed-role
クラス: 権限の残存 到達範囲: リモート
OpenLiteSpeed 1.9.3 (edbe7f7db12577e905291955a6d416200942fb8b) は、単一の Cookie: litespeed_role= に対して依然として 403 を返す (1.8.2.1 のブロック)。HTTP/1 の重複した Cookie は 400 にならない。Host / Content-Length / Transfer-Encoding / Authorization の重複は 400 になる。2 番目の Cookie 行は unknown に降格され、litespeed_role= のスキャンは実行されず、IS_BL_COOKIE は未設定のままとなり、lsphp は依然として HTTP_COOKIE を受け取る。LSAPI は最後が優先: PHP の $_SERVER['HTTP_COOKIE'] は 2 番目の行になる。
HTTP/2 はすでにすべての Cookie ヘッダーをスキャンする。この残存は HTTP/1.1 である。ラボでは $_COOKIE['litespeed_role'] は設定されなかった。WordPress ATO ではない。RCE ではない。
| ID | CVE 未割り当て |
| クラス | 権限の残存 (1.8.2.1 の litespeed_role= 403 スキップ) |
| 到達範囲 | リモート (未認証の HTTP/1.1) |
| CWE | CWE-693, CWE-436 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| 製品 | OpenLiteSpeed |
| 影響を受けるバージョン | 1.9.3 (edbe7f7); HTTP/1.1 と lsphp |
| 認証 | なし |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18750 のみ |
1 つの HTTP/1.1 リクエストで 2 つの Cookie ヘッダーを送信する。1 番目は無害である。2 番目は litespeed_role= を運ぶ。OpenLiteSpeed は、単一の Cookie ヘッダー上およびすべての HTTP/2 Cookie ヘッダー上でその名前に対して 403 を返す。HTTP/1 の重複 Cookie は 403 をスキップする。lsphp は依然として HTTP_COOKIE 内でそのロールを認識する。
HTTP_COOKIE を解析するアプリは、1.8.2.1 の制御がワーカーから遠ざけようとしていた値を取得する。$_COOKIE['litespeed_role'] のみを読み取るアプリは、このラボではそれを認識しなかった。
Caddy と lighttpd の後、v1.9.3 のソースを 20 回探索した。1.8.2.1 のブロックは、最初の共通 Cookie に対する memmem(..., "litespeed_role=", 15) である。重複 Cookie は 400 のリストに含まれていない。
誤った方向性: urllib が 2 つの Cookie ヘッダーを送信できるとみなすこと (urllib はそれらをマージする); 公式 docker が 8088 でリッスンすると期待すること (Hub イメージは 80); $_COOKIE が HTTP_COOKIE の最後優先に従うと期待すること (LSAPI は最初のヘッダーから Cookie テーブルを埋めた)。
cd lab
./run.sh
イメージ litespeedtech/openlitespeed:1.9.3-lsphp84。オラクル lab/www/cookie.php。生の HTTP/1.1 ソケット。ループバックにバインド。
SUCCESS openlitespeed-dup-cookie-litespeed-role single-cookie=403 dummy=200 dup-cookie=200 php-sees-role=yes how=php-http-cookie OLS-DUP-COOKIE-LITESPEED-ROLE-WITNESS
HTTP/2 がすでに行っているように、すべての HTTP/1 Cookie ヘッダーをスキャンするか、Host が 400 になるのと同じように重複 Cookie を 400 にする。
edbe7f7db12577e905291955a6d416200942fb8b)src/http/httpreq.cpp 重複する共通ヘッダー、最初の Cookie の litespeed_role= スキャン、IS_BL_COOKIE 403src/http/httpcgitool.cpp unknown ヘッダーを HTTP_COOKIE としてエクスポートlitespeed_role Cookie