Biblioteka cJSON w wersjach do 1.7.19 włącznie jest podatna na niekontrolowaną rekurencję powodującą wyczerpanie stosu wątku podczas stosowania niezaufanego dokumentu JSON Patch (RFC 6902). Atakujący mogący dostarczyć dokument patch może doprowadzić do awarii procesu, skutkując odmową usługi (DoS).
▸ Pokaż oryginał (EN)
cJSON through 1.7.19 is vulnerable to uncontrolled recursion leading to stack exhaustion when an untrusted RFC 6902 JSON Patch is applied via cJSONUtils_ApplyPatches() or cJSONUtils_ApplyPatchesCaseSensitive(). A patch containing add and copy operations grafts duplicated subtrees to amplify document depth beyond the parser's nesting limit: cJSON_Delete() recurses with no depth bound, and the cJSON_Duplicate() guard CJSON_CIRCULAR_LIMIT is set to 10000, ten times the parser's 1000-level nesting limit and high enough to overflow a default thread stack. An attacker who can supply the patch document can crash the process, resulting in denial of service.
Błąd (CWE-674) polega na braku ograniczenia głębokości rekurencji w funkcjach cJSONUtils_ApplyPatches() oraz cJSONUtils_ApplyPatchesCaseSensitive(). Spreparowany patch zawierający operacje 'add' i 'copy' powoduje powielanie poddrzew dokumentu JSON, co sztucznie zwiększa głębokość zagnieżdżenia struktury. Stała CJSON_CIRCULAR_LIMIT, ograniczająca głębokość w cJSON_Duplicate(), wynosi 10 000 — czyli dziesięciokrotnie więcej niż limit parsera (1 000 poziomów). Funkcja cJSON_Delete() rekuruje bez żadnego ograniczenia głębokości, co przy tak głębokiej strukturze powoduje przepełnienie domyślnego stosu wątku i awarię procesu.
Atakujący mogący dostarczyć dokument JSON Patch jest w stanie spowodować awarię (crash) procesu wykorzystującego bibliotekę cJSON, co skutkuje odmową usługi (DoS) dla aplikacji lub usługi opartej na tej bibliotece.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Tymczasowo zaleca się unikanie przetwarzania niezaufanych dokumentów JSON Patch przez podatne funkcje oraz rozważenie wprowadzenia zewnętrznej walidacji głębokości zagnieżdżenia przed przekazaniem danych do biblioteki.
Biblioteka cJSON w wersjach do 1.7.19 włącznie — dotyczy aplikacji korzystających z funkcji cJSONUtils_ApplyPatches() lub cJSONUtils_ApplyPatchesCaseSensitive() przy przetwarzaniu niezaufanych dokumentów JSON Patch (RFC 6902).
Podatność dotyczy wyłącznie komponentu cJSONUtils (obsługa RFC 6902 JSON Patch), nie głównego parsera cJSON. Szczegóły techniczne wraz z analizą kodu źródłowego zostały opublikowane pod adresem https://joshua.hu/cjson-json-parser-cve-vulnerabilities.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XDavegamble Cjson
APPDavegamble≤ 1.7.19
Powiązane podatności
Out-of-bounds access w cJSON przez funkcję decode_array_index_from_pointer
cJSON: out-of-bounds access przez znak \x00 w literale tekstowym
Dostęp poza zakresem pamięci w cJSON związany z komentarzami wieloliniowymi
Buffer over-read w funkcji parse_string biblioteki cJSON
Use-after-free w bibliotece cJSON umożliwiający RCE