<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    CVE-2021-45232分析(APISIX網關未授權訪問)

    VSole2022-03-08 10:59:25

    背景


    apisix網關之前出過一個dashboard api未授權訪問漏洞 [1]:因為訪問下面兩個接口不需要身份認證,所以可以利用這兩個接口進行rce。



    在剛分析這個漏洞時,我有點困惑:



    filter目錄下的代碼看著像是"中間件"(或者叫"過濾器")的實現,而"中間件"應該是所有請求都會經過"中間件"的業務邏輯,那為什么訪問上面的兩個接口就沒有經過filter.AuthenticationMiddleware中間件的認證邏輯呢?為什么訪問其他接口就會經過filter.AuthenticationMiddleware中間件的認證邏輯呢?


    雖然動態調試下個斷點,就能看到函數調用流程,但是我還想知道"路由"和"中間件"從web框架層來看是怎么設計的。


    apisix項目用到了gin框架和droplet框架,本文記錄我對這兩個框架"路由"和"中間件"使用和設計的研究,以解決自己的疑惑。



    分析


    01.為什么其他接口就會經過filter.AuthenticationMiddleware中間件的邏輯?


    "業務代碼"可以使用"gin框架提供的Use接口"注冊中間件,比如下面這樣



    從上圖中并沒有看到filter.AuthenticationMiddleware中間件被注冊,那么為什么其他接口就會經過auth中間件的邏輯?


    比如GET /apisix/admin/routes HTTP/1.1


    答案在droplet庫:apisix通過droplet接口注冊了filter.AuthenticationMiddleware中間件。



    這樣當訪問/apisix/admin/routes路徑時,請求會經過gin框架注冊的"中間件"、droplet注冊的"中間件"。



    有一個不嚴謹的結論:上面的兩張圖中,handlers和mws數組中的所有"函數"會被依次調用。


    02.為什么

    /apisix/admin/migrate/export接口不會經過filter.AuthenticationMiddleware中間件的邏輯?


    /apisix/admin/migrate/export路由對應的"處理函數"并不是wgin.Wraps包裝的,這樣代碼流程會不從gin框架轉移到droplet框架。



    對比可以看到/apisix/admin/routes路由對應的"處理函數"是wgin.Wraps返回的,這樣代碼流程會從gin框架轉移到droplet框架。



    小結:gin框架和droplet框架通過wgin.Wraps包裝的func(ctx *gin.Context)函數類型連接到了一起。


    03.怎么修復的?


    從這個commit[2]中可以看到:


    • gin框架中
    • filter.AuthenticationMiddleware中間件被添加
    • droplet框架中
    • filter.AuthenticationMiddleware中間件被刪除




    總結


    本文只零散地記錄一小部分gin和droplet框架的內部邏輯,對gin路由和中間件實現有興趣的可以看《gin框架源碼解析》[3]這篇文章。


    在分析過程中感覺"實現一個web框架"非常需要"接口"或者"函數類型",比如net/http和gin框架的連接、gin框架和droplet框架的連接,都是依靠"接口"或者"函數類型"來通信。


    參考鏈接:


    [1]https://apisix.apache.org/zh/blog/2021/12/28/dashboard-cve-2021-45232/


    [2]https://github.com/apache/apisix-dashboard/commit/b565f7cd090e9ee2043fbb726fbaae01737f83cd


    [3]https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/


    [4]漏洞分析:

    https://mp.weixin.qq.com/s/WEfuVQkhvM6k-xQH0uyNXg

    接口框架
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    引言Prompt Injection 是一種攻擊技術,黑客或惡意攻擊者操縱 AI 模型的輸入值,以誘導模型返回非預期的結果。這里提到的屬于是SSTI服務端模板注入。這允許攻擊者利用模型的安全性來泄露用戶數據或扭曲模型的訓練結果。介紹在 LangChain 到 0.0.131 中,LLMMathChain 允許快速注入攻擊,可以通過 Python exec 方法執行任意代碼。
    Java 開發中常用的幾款日志框架有很多種,并且這些日志框架來源于不同的開源組織,給用戶暴露的接口也有很多不同之處,所以很多開源框架會自己定義一套統一的日志接口,兼容上述第三方日志框架,供上層使用。
    #配置文件存儲位置。當以classpath開頭時,為只讀模式
    為簡化應用軟件的網絡通信開發工作,提出了一種基于異步網絡通信機制的通用高性能網絡框架方案,滿足應用軟件的網絡通信和業務處理要求,提高軟件開發成果的復用性。方案基于Boost.Asio庫實現Proactor模式的跨平臺高性能異步網絡通信,使用可擴展標記語言(Extensible Markup Language,XML)實現框架內外的功能業務關聯配置滿足通用要求,通過將網絡連接及關聯數據抽象為...
    —2020 信息技術 安全技術 密鑰管理 第1部分:框架 —2021 信息技術 安全技術 密鑰管理 第3部分:采用非對稱技術的機制 17964—2008 信息安全技術 分組密碼算法的工作模式 —2000 信息技術 安全技術 散列函數 第1...
    Springboot更是封裝了Spring,遵循約定大于配置,加上自動裝配的機制。讓使用者以最小的代價接入。當然了解了bean的各個生命周期也能促進我們加深對spring的理解。在網上搜索spring擴展點,發現很少有博文說的很全的,只有一些常用的擴展點的說明。并且整理出了一個bean在spring內部從被加載到最后初始化完成所有可擴展點的順序調用圖。這個點允許被用戶自己擴展。用戶可以在整個spring容器還沒被初始化之前做一些事情。
    推薦 goleak 的背景goroutine 作為 golang 并發實現的核心組成部分,非常容易上手使用,但卻很難駕馭得好。我們經常會遭遇各種形式的 goroutine 泄漏,這些泄漏的 goroutine 會一直存活直到進程終結。等性能分析工具更多是作用于監控報警/故障之后的復盤。我們需要一款能在編譯部署前識別 goroutine 泄漏的工具,從更上游把控工程質量。
    各位師傅勿噴,寫的不好見諒又是吃老板畫餅的一天目標url:xxxx.info(非法站點)目前這套ui看見過很多套了,有的是tp框架有的shiro日常掃描器工作時間到,打開tp掃描器掃了一遍tp漏洞無果,這是為什么呢前臺爆破無果,我本來想釣魚下客服,但客服不跟領導一樣摸魚高手老規矩掃掃端口:這玩意還掛cdn不講武德了ip還這么多,當我翻著翻著的時候發現這些ip有一個開著ssh的這不就有路子來了嗎,先
    一個換行或者空格就行拿下,點到為止
    Log4j2漏洞出現有大半年的時間了,這個核彈級別的漏洞危害很大,但是這個漏洞檢測起來卻很麻煩,因為黑盒測試無法預判網站哪個應用功能在后臺調用了log4j2記錄日志功能。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类