天天看點

遠端代碼執行漏洞

漏洞描述

攻擊者可以向batch-requests插件發送請求來繞過管理API的IP限制。Apache APISIX的預設配置(帶有預設的API密鑰)容易受到遠端代碼執行的攻擊。當管理密鑰更改或管理API端口更改為與資料面闆不同的端口時,影響較小。但是,繞過Apache APISIX資料面闆的IP限制仍然存在風險。在batch-requests插件中有一個檢查,它用真實的遠端IP覆寫用戶端IP。但是由于代碼中的一個bug,這個檢查可以被繞過。

batch-requests 插件介紹

batch-requests 插件可以一次接受多個請求并以 http pipeline的方式在網關發起多個 http 請求,合并結果後再傳回用戶端,這在用戶端需要通路多個接口時可以顯著地提升請求性能。

在漏洞版本中、預設是啟用狀态。

https://apisix.apache.org/zh/docs/apisix/2.12/plugins/batch-requests/

複現思路:

1、搭建漏洞環境。(注意需要修改:conf.yaml/allow_admin)

2、檢視diff記錄、進行簡單調試,漏洞分析。

3、漏洞測試。

漏洞版本

Apache APISIX 1.3 ~ 2.12.1 之間的所有版本(不包含 2.12.1 )

Apache APISIX 2.10.0 ~ 2.10.4 LTS 之間的所有版本(不包含 2.10.4)
           

環境搭建

【一一幫助安全學習,所有資源關注我,私信回複“資料”擷取一一】

①網絡安全學習路線

②20份滲透測試電子書

③安全攻防357頁筆記

④50份安全攻防面試指南

⑤安全紅隊滲透工具包

⑥網絡安全必備書籍

⑦100個漏洞實戰案例

⑧安全大廠内部視訊資源

遠端代碼執行漏洞
cd CVE-2022-24112-main/apisix-docker/example/

vi apisix_conf/config.yaml
           

将 allow_admin 修改為 127.0.0.0/24,此處修改的實際為nginx.conf。

使用 docker-compose 建立docker容器。

docker-compose -p apisixCveTest up -d
           

在服務啟動階段、會讀取config.yaml、生成nginx.conf 。

1、會基于 Lua 模闆 apisix/cli/ngx_tpl.lua 檔案生成 nginx.conf。

2、調用 ngx_http_access_module 子產品。該子產品限制用戶端對某些位址的通路。

遠端代碼執行漏洞

進入到容器中檢視,conf/nginx.conf。allow/deny 是設定允許與拒絕通路的位址。隻允許127.0.0.1/24 通路 /apisix/admin 接口。

遠端代碼執行漏洞

Admin api 接口如下:

遠端代碼執行漏洞
遠端代碼執行漏洞

漏洞分析

diff :

遠端代碼執行漏洞
遠端代碼執行漏洞

檢視diff記錄後、修複方式是将real_ip_hdr 轉化為小寫。

1、檢視插件batch-requests 代碼,問題是出現在 set_common_header() 函數中

遠端代碼執行漏洞

函數參數為data是我們傳入的請求體經過json.decode()後的資料、類型為"table"。

遠端代碼執行漏洞

檢視代碼,real_ip_hdr 為調用 try_read_attr()函數擷取到的傳回值。通過周遊表結構、擷取到 real_ip_header 的值然後再指派給real_ip_hdr 。

select(‘#’, …) 擷取輸入參數的數量,

select(i, …) 擷取第 n 個參數,

遠端代碼執行漏洞
遠端代碼執行漏洞

注意:此時的real_ip_hdr 為 X-Real-IP 為大寫。該值為在系統啟動後、給定的預設值。

遠端代碼執行漏洞

2、通過周遊data.pipeline和data.headers 、将data.headers 出現的頭資訊指派給data.pipline。發現data.headers中出現了x-real-ip:127.0.0.1 ,這是我們調用batch-requests插件傳遞的頭資訊,而此時系統預設的X-Real-IP為大寫。

遠端代碼執行漏洞

在請求頭覆寫中、因為 real_ip_hdr 為 X-Real-IP , 函數core.request.get_remote_clinte_ip()擷取遠端用戶端ip、不能将 x-real-ip給覆寫。

遠端代碼執行漏洞

檢視此時的棧資料。在data.headers 中出現了 x-real-ip 與 X-Real-IP。

遠端代碼執行漏洞

最後經由batch-requests 插件、使用PUT方法将請求發送到 /apisix/admin/xxxx 注冊新的路由。通過filter_func 參數可寫入一段lua代碼、造成遠端代碼執行。

遠端代碼執行漏洞

漏洞測試

遠端代碼執行漏洞

利用條件

  • batch-requests插件預設開啟狀态。
  • 使用者使用了 Apache APISIX 預設配置(啟用 Admin API ,使用預設 Admin Key 且沒有額外配置設定管理端口),攻擊者可以通過 batch-requests 插件調用 Admin API 。

攻擊思路

1、利用batch-requests 插件漏洞、繞過請求頭檢測;

2、通過僞造請求頭、向Admin API 注冊路由;

3、注冊路由時、攜帶參數filter_func 傳遞 lua代碼、造成遠端代碼執行漏洞。

修複意見

  • 更新至最新版本
  • 禁用batch-requests 插件
遠端代碼執行漏洞

繼續閱讀