Mõistet JSON-süst (ingl k JSON injection) kasutatakse peamiselt kahte tüüpi turvaprobleemide kirjeldamiseks: 

  • Serveripoolne JSON-süst leiab aset siis, kui ebausaldusväärsest allikast pärit andmed jäävad serveri poolt desinfitseerimata ning sisestatakse otse JSON-i voogu. 
  • Kliendipoolne JSON-süst leiab aset siis, kui ebausaldusväärsest JSON-allikast pärit andmed jäävad desinfitseerimata ning parsitakse  JavaScript eval funktsiooni kaudu otse.  

Mis on JSON 

JSON (JavaScript Object Notation) on kerge andmevahetusvorming, mida kasutatakse rakenduste vaheliseks suhtluseks. See sarnaneb XML-iga, kuid on lihtsam ja sobib paremini JavaScripti töötlemiseks. 

Paljud veebirakendused kasutavad seda vormingut omavaheliseks suhtlemiseks ja andmete järjestamiseks/järjestuse muutmiseks. Mõni veebirakendus kasutab JSON-i ka olulise teabe, näiteks kasutajaandmete salvestamiseks. JSON-i kasutatakse tavaliselt REST-põhistes API-des ja AJAX-i rakendustes. 

Näiteid JSON-süsti rünnetest 

Lihtsat serveripoolset JSON-süsti võidakse PHP-s läbi viia järgmiselt:  

  1. Server säilitab kasutaja andmeid, sealhulgas konto tüüpi, JSON-jadana 
  2. Kasutaja ja parool saadakse otse kasutaja sisestatud andmetest ilma desinfitseerimata 
  3. JSON-jada luuakse lihtsa järjestikku ühendamise teel: $json_string = '{"account":"user",
    "user":"'.$_GET['user'].'","pass":"'.$_GET['pass'].'"}';
     
  4. Pahatahtlik kasutaja lisab andmed oma kasutajanimele: john%22,%22account%22:%22administrator%22 
  5. Selle tulemuseks on JSON-jada: { "account":"user","user":"john", "account":"administrator", "pass":"password"}
  6. Salvestatud jada lugedes kohtab JSON parser (json_decode) kahte account kannet ning võtab viimase, andes john’ile administraatori õigused. Pange tähele, et json_decode käitumine ei ole ebakorrektne – RFC-7159 määratleb, et „objektis sisalduvad nimed PEAKSID olema unikaalsed“ (mitte PEAVAD),  jättes interpretatsiooniks ruumi. 

Lihtsat kliendipoolset JSON-süsti võidakse teha järgmiselt: 

  1. JSON-jada on sama, mis ülaltoodud näites 
  2. Server saab JSON-jada ebausaldusväärsest allikast 
  3. Klient parsib JSON-jada eval funktsiooniga: var result = eval("(" + json_string + ")");
    document.getElementById("#account").innerText = result.account;
    document.getElementById("#user").innerText = result.name;
    document.getElementById("#pass").innerText = result.pass;
  4. account väärtus on: user"});alert(document.cookie);({"account":"user 
  5. eval funktsioon käivitab alert’i. 
  6. Parsimise tulemuseks on skriptisüstimise (XSS-i) rünnak (document.cookie avalikustatakse). 

JSON-süst vs. JSON-i kaaperdamine 

Kuigi JSON-i kaaperdamine (skriptisüstimise, ingl k Cross-site Script Inclusion – XSSI alamliik) on seotud ka JSON-i märkimisega, on tegu pisut teistsuguse ründega, mis teatud määral sarnaneb  päringuvõltsingule (ingl k Cross-site Request Forgery – CSRF). JSON-i kaaperdamise puhul on häkkeri eesmärgiks lõigata vahelt JSON-andmed, mida serverist veebirakendusse saadetakse. 

  1. Ründaja loob pahatahtliku veebisaidi ja sisestab selle koodi skriptisildi, mis üritab pääseda ligi rünnatud veebirakenduse JSON-andmetele. 
  2. Kasutajat, kes on ründe all olevasse veebirakendusse sisse logitud, meelitatakse pahatahtlikku veebilehte külastama (tavaliselt suhtlusründe abil). 
  3. Kuna ühisallika poliitika (ingl k Same-Origin Policy – SOP) lubab ükskõik millise veebilehe JavaScripti lisada ja käivitada ükskõik millise teise veebilehe kontekstis, pääseb kasutaja JSON-andmetele ligi.  
  4. Pahatahtlik veebileht kaaperdab JSON-andmed. 

JSON-süstimise vältimine 

Nagu enamiku süstimise haavatavuste puhul, on veebirakenduste turvalisuse säilitamise ja JSON-i süstimiste vältimise võti andmete desinfitseerimine. See kehtib nii serveripoolse kui ka kliendipoolse JSON-i süstimise kohta. 

Serveripoolsete JSON-süstide vältimiseks desinfitseerige kõik andmed enne JSON-iga edastamist. Kui kasutate näiteks Javat, on hea võimalus JSON-andmete desinfitseerimiseks OWASP JSON Sanitizer. 

Parim viis kliendipoolsete JSON-süstide vältimiseks on mitte kasutada funktsiooni eval JSON-andmete hindamiseks. Kui kasutate funktsiooni eval ja ebausaldusväärsed andmed sisaldavad JavaScripti koodi, siis see kood käivitatakse. Selle vältimiseks kasutage JSON.parse’i. Võite jõustada ka sisuturbepoliitika, mis vaikimisi takistab eval funktsiooni kasutamist. 

Allikas:- https://www.acunetix.com/blog/web-security-zone/what-are-json-injections/

haavatavuse