CVE-2025-57052:cJSON庫存在CVSS 9.8高危JSON解析漏洞(含PoC)
漏洞概述
安全研究員Salah Chafai(漏洞利用開發與安全專家)近日披露,輕量級C語言JSON解析庫cJSON存在一個高危漏洞(編號CVE-2025-57052,CVSS評分9.8)。攻擊者可構造畸形JSON指針繞過數組邊界檢查,導致內存越界訪問、段錯誤、權限提升或拒絕服務攻擊。

技術細節
該漏洞源于cJSON_Utils.c文件中的decode_array_index_from_pointer函數。研究報告指出:"循環錯誤地檢查pointer[0]而非pointer[position],導致非數字字符被當作數組索引處理。"
這種邏輯錯誤意味著類似"0A"的輸入會被解析為索引10,即使數組僅包含三個元素。此類越界訪問可能導致應用程序崩潰,或在特定場景下允許攻擊者讀取/篡改預期范圍外的內存。
漏洞驗證
Chafai發布了一個簡易C程序演示漏洞利用過程:當使用cJSON解析用戶JSON數組時,合法索引"0"和"1"能正確返回Alice和Bob的數據,但精心構造的索引"0A"會使cJSON嘗試訪問不存在的第10個元素。
報告強調:"提供索引0A將導致cJSON訪問越界的索引10,可能引發段錯誤(崩潰)。"
影響范圍
由于cJSON被嵌入到無數項目中,受影響軟件包括:
- 處理JSON指針的Web API
- 依賴輕量級解析器的嵌入式/IoT設備
- 需要結構化JSON輸入的桌面/服務器應用
報告警告:"任何使用cJSON解析JSON指針的軟件...都可能遭受拒絕服務攻擊。在可向JSON指針API提供畸形輸入的環境中,風險尤為嚴重。"
攻擊場景
攻擊者可利用CVE-2025-57052實現:
- 通過段錯誤使服務崩潰
- 利用cJSON與atoi函數解析差異繞過應用層檢查
- 通過讀取已分配內存區域外的數據實現權限提升或訪問敏感信息
修復方案
修復方法簡單直接:修正循環條件判斷。
漏洞代碼:
for (position = 0; (pointer[position] >= '0') && (pointer[0] <= '9'); position++)修復后代碼:
for (position = 0; (pointer[position] >= '0') && (pointer[position] <= '9'); position++)該修復確保指針字符串中的每個字符在被解析為數組索引前都經過正確驗證。


































