水文警告
前陣子自己在做的研究剛好打到 Apache Nifi 去,就心血來潮 Survey 了一下有什麼才有今天這篇
今天的主角是 ZeroPath,是一家成立於 2024 年的網路安全新創公司,其核心產品是一款基於 AI 原生的應用程式安全(AppSec)與靜態應用程式安全測試(SAST)平台。
然後他們今年提出了在 Apache Nifi 安裝了常用 Plugins 後的 RCE 漏洞。
https://zeropath.com/blog/nifi-cve-2026-39816-privesc-rce
(TinkerpopClientService 與 nifi-other-graph-services-nar)
Apache Nifi 本身是資料流管理平台,而 Tinkerpop 則可以讓它很方便的操作圖資料庫與圖分析系統,而它本身還是基於 Gremlin 這種語言來完成查詢的。
然而,在 Nifi 調用的過程中它使用了如下的程式來完成搜尋前的 Query 解析(yep, Meta-Programming again)
// 位於 TinkerpopClientService 的處理路徑
compiled = groovyShell.parse(s);
於是靜態流程如下:
TinkerpopClientService 接收圖查詢字串。bytecodeSubmission(...) 呼叫 groovyShell.parse() 處理文字。其實我覺得比較有趣的是他們的 Patch,他們認為在 Admin side 本來 run code 就沒什麼問題,重點是做權限檢查,所以有了以下修補和檢查:
@Restricted(
restrictions = {
@Restriction(
requiredPermission = RequiredPermission.EXECUTE_CODE,
explanation = "Enables configuration of scripted queries"
)
}
)
先去確認是否有 EXECUTE_CODE
補充個有趣的事情,一樣作為資料庫的 Neo4j 不曉得有多少人知道其實可以編寫所謂的 "User-Defined Procedures and Functions" 來新增 Cypher Query Functions,而這樣的功能其實也常常會造成不少其他的漏洞 xD