drošība · 5 min · 24.07.2026

fastjson caurums CVE-2026-16723 dod attālu koda izpildi ar noklusējuma iestatījumiem

Drošības pētnieks Kirils Firsovs 19. jūlijā atklāja caurumu populārajā Java bibliotēkā fastjson, kas ļauj attāli izpildīt patvaļīgu kodu uz upura servera. Kļūda CVE-2026-16723 saņēmusi bīstamības vērtējumu 9,0 no 10. Tā strādā ar bibliotēkas noklusējuma iestatījumiem: uzbrucējam nav vajadzīgs ne ieslēgts AutoType, ne kāda konkrēta gadžeta klase servera klašu ceļā.

Ievainojamas ir versijas no 1.2.68 līdz 1.2.83, ja izslēgts SafeMode. Versijas 1.2.60 un vecākas nav skartas, tāpat kā jaunākā fastjson 2.x saime. Ķīnas drošības uzņēmums Qi’anxin lēš, ka internetā pieejami miljoniem serveru ar skarto versiju.

Kas ir fastjson un kur to lieto

fastjson izstrādāja Alibaba. Tā gadiem bija viena no ātrākajām JSON bibliotēkām Java ekosistēmā un joprojām darbojas daudzos vecākos servisos, mikroservisos un API vārtejās. Bibliotēkas uzdevums ir pārvērst ienākošo JSON tekstu par Java objektiem. Tieši šī pārvēršana jeb deserializācija ir bijusi fastjson vājākā vieta: uzbrucējs padod JSON, kas liek serverim izveidot objektu no klases, kuru izstrādātājs nekad nav gaidījis.

Lai to apturētu, Alibaba pievienoja AutoType kontroli un bloķēto klašu sarakstus. Vēlākās versijās parādījās arī SafeMode, kas tipu izšķiršanu pēc nosaukuma atslēdz pilnībā. Jaunā kļūda parāda, ka pat šie slāņi ne vienmēr aizsargā.

Kā uzbrukums strādā

Iepriekšējie fastjson caurumi prasīja tā saukto gadžeta klasi upura klašu ceļā. Šis to neprasa. Uzbrukums izmanto anotāciju @JSONType un kļūdu funkcijā checkAutoType. Kad tur nonāk īpaši sagatavota klase, pārbaude izbeidzas priekšlaikus un izlaiž bīstamo bāzes klašu kontroli. Radusies SSRF ļauj serverim ielādēt klasi no uzbrucēja norādītas adreses.

Pēdējo soli dod Spring Boot. Tā biezā jar faila klašu ielādētājs LaunchedURLClassLoader prot atrast klases resursus pa HTTP. Uzbrucējs to savieno ar /proc/self/fd triku un panāk, ka serveris lejupielādē un palaiž svešu kodu. Ļauno lietderīgo slodzi var paslēpt Object vai Map tipa laukos, tāpēc parastā JSON validācija to nepamana. Rezultātā pietiek ar vienu HTTP pieprasījumu, lai serveris sāktu izpildīt uzbrucēja kodu.

Kāpēc vecās aizsardzības nelīdz

Java izstrādātāji fastjson caurumus gadiem risināja ar diviem paņēmieniem: izslēdza AutoType un papildināja bloķēto klašu sarakstus. Šoreiz neviens no tiem nepalīdz.

Kļūdai nav vajadzīga gadžeta klase, tāpēc riskanto atkarību izņemšana vai bloķēto sarakstu paplašināšana neko nedod, raksta securityonline.info.

AutoType izslēgšana neaizsargā, jo uzbrukums apiet tieši to loģiku, kas parasti šo iestatījumu kontrolē. Arī konkrētas mērķa klases norādīšana nepasargā, jo lietderīgo slodzi var ielikt objekta iekšējos laukos. Tas nozīmē, ka drošības komandām nepietiek ar vienu konfigurācijas maiņu.

Kā pārbaudīt, vai esat skarti

Pārbaude sākas ar bibliotēkas versiju. Java projektos versiju atrod atkarību kokā. Komanda mvn dependency:tree vai gradle dependencies izvada sarakstu, kurā jāmeklē rinda ar com.alibaba:fastjson. Ja versija ir robežās no 1.2.68 līdz 1.2.83 un SafeMode nav ieslēgts, sistēma ir ievainojama. SafeMode ieslēdz ar sistēmas īpašību fastjson.parser.safeMode vai programmatiski ar izsaukumu ParserConfig.getGlobalInstance().setSafeMode(true).

Bieži fastjson ienāk kā netieša atkarība caur citu bibliotēku, tāpēc jāpārskata viss atkarību koks līdz netiešajām atkarībām. Īpaši svarīgi tas ir servisiem, kas pieņem JSON no interneta un darbina to caur Spring Boot.

Ko darīt tagad

fastjson 1.x ir sasniegusi pēdējo laidienu, tāpēc oficiāla labojuma tai vairs nebūs. Projekta autori iesaka divus ceļus. Pirmais ir ieslēgt SafeMode, kas pilnībā atslēdz tipu izšķiršanu pēc nosaukuma. Otrais ir pāriet uz fastjson 2.x, kur šī kļūda nav. securityonline.info raksta, ka publisks darbojošos PoC kods jau ir pieejams. GitHub ievietota Docker vide ar vienu lietderīgo slodzi un aizsardzības skeneri, ar ko pārbaudīt savu sistēmu.

Pāreja uz fastjson 2.x nav vienkārša nomaiņa, jo daļa API ir mainījusies un dažviet būs jālabo kods. Kā pagaidu solis der izejošā tīkla trafika ierobežošana no lietojumprogrammu serveriem, lai serveris nevarētu ielādēt klasi no svešas adreses. Tīmekļa lietojumu ugunsmūri var bloķēt pieprasījumus ar laukiem @type un @JSONType, taču arī tā ir tikai daļēja aizsardzība.

Cik liels ir risks

Ja uzbrukums izdodas, uzbrucējs iegūst tādas pašas tiesības kā pati lietojumprogramma. Praksē tas nozīmē piekļuvi datubāzes parolēm, iekšējiem servisiem un iespēju virzīties dziļāk tīklā. Tieši tāpēc deserializācijas caurumi Java pasaulē tiek vērtēti tik augstu.

Apstiprinātu uzbrukumu savvaļā līdz publikācijas brīdim nebija. Tomēr publisks PoC kopā ar to, ka pietiek noklusējuma konfigurācijas, nozīmē zemu slieksni uzbrukumam. fastjson vēsturē jau bija līdzīgi deserializācijas caurumi, piemēram 2022. gada vilnis pret versijām līdz 1.2.80, kad daudzi servisi tika uzlauzti pirms labojuma. Kirils Firsovs pilnu tehnisko aprakstu publicēja fearsoff.org lapā 23. jūlijā.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie