W bibliotece mJS 1.26 (Cesanta MongooseOS) specjalnie spreparowany ciąg JSON może wywołać przepełnienie bufora sterty (heap-based buffer overflow) typu off-by-one w funkcji mjs_json_parse. Podatność sklasyfikowana jako CRITICAL może potencjalnie prowadzić do przejęcia kontroli nad przepływem wykonania programu.
▸ Pokaż oryginał (EN)
In mjs_json.c in Cesanta MongooseOS mJS 1.26, a maliciously formed JSON string can trigger an off-by-one heap-based buffer overflow in mjs_json_parse, which can potentially lead to redirection of control flow. NOTE: the original reporter disputes the significance of this finding because "there isn’t very much of an opportunity to exploit this reliably for an information leak, so there isn’t any real security impact."
Błąd polega na przekroczeniu granic bufora o jeden bajt (off-by-one) podczas przetwarzania złośliwie sformatowanego ciągu JSON w pliku mjs_json.c. Nieprawidłowe obliczenie rozmiaru bufora (CWE-193) skutkuje zapisem poza jego granicami w obszarze sterty (CWE-787, heap-based buffer overflow). Atakujący może dostarczyć specjalnie spreparowany ciąg JSON, który wywołuje ten błąd. Wektor ataku jest sieciowy, nie wymaga uwierzytelnienia ani interakcji użytkownika.
Udane wykorzystanie podatności może potencjalnie doprowadzić do przekierowania przepływu sterowania programem (redirection of control flow), co w skrajnym przypadku może skutkować wykonaniem dowolnego kodu. Warto odnotować, że oryginalny badacz zakwestionował praktyczną możliwość niezawodnego wykorzystania tej podatności do wycieku informacji lub osiągnięcia realnego skutku bezpieczeństwa.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Dostępna jest wersja 1.26 z poprawką opublikowaną w repozytorium GitHub (https://github.com/cesanta/mjs/releases/tag/1.26) oraz pull request w repozytorium 418sec (https://github.com/418sec/mjs/pull/2).
Cesanta MongooseOS mJS w wersji 1.26 (plik mjs_json.c, funkcja mjs_json_parse)
Oryginalny reporter podatności zakwestionował jej praktyczne znaczenie, wskazując na brak realnego wpływu na bezpieczeństwo ze względu na trudność niezawodnego wykorzystania do wycieku informacji. Ocena CVSS 9.8 (CRITICAL) pochodzi od klasyfikatora, a nie od oryginalnego badacza.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HCesanta Mongooseos Mjs
APPCesanta1.26
Powiązane podatności
Cesanta MJS: out-of-bounds read w funkcji getprop_builtin_foreign
Przejęcie wskaźnika funkcji w Cesanta MJS umożliwiające RCE
Zapis plików poza docelowym folderem w Cesanta Mongoose (mg_http_upload)
Zapis poza granicami pamięci (OOB write) w Cesanta Mongoose HTTP server 7.0
Zapis poza granicami bufora (OOB write) w Cesanta Mongoose HTTPS — mg_tls_init