business_logic
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| business_logic [2025/04/22 16:59] – ppale | business_logic [2026/06/15 19:01] (current) – Dodavanje i promjena sadržaja poglavlja o mitigacijama mbunic | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====Business logic vulnerabilites==== | + | ====Business logic vulnerabilities==== |
| - | Business logic vulnerabilites | + | **Business logic vulnerabilities** |
| - | Najjednostavniji primjeri | + | Jednostavan primjer |
| - | Ako postoji provjera da ukupna cijena ne može biti negativna, ali ne postoji provjera da ne može biti negativan broj proizvoda, tad se može kupiti dvoje hlača i „minus dvije“ majice. Ako ova transakcija nije provjerena i sustav ju odobri, tada se dobiju naručenih dvoje hlača, ali ne po punoj cijeni, nego po cijeni umanjenoj za cijenu dvije majice. | + | |
| - | Ovaj primjer ukazuje na potrebu provjere i parametara koje unose korisnici i stanja sustava, kako se sustav ne bi mogao iskoristiti na nepredviđen način. Sigurnosni alati za skeniranje i analizu ne mogu znati kontekst aplikacije, pa onda ni detektirati da je negativna vrijednost količine proizvoda ili broja artikala za narudžbu zapravo ranjivost. Što je sustav kompleksniji i sastoji se od više povezanih komponenti, veća je mogućnost pojavljivanja ovog tipa ranjivosti. | + | |
| - | Također za iskorištavanje ovakvih ranjivosti, često nisu potrebni nikakvi alati niti složene tehnike napada, nego se mogu jednostavno izvršiti kroz sama sučelja aplikacije. | + | |
| - | ===PRIMJER -Zadatak s Hacknite platforme – Voće, povrće i flagovi=== | + | |
| + | Ako postoji provjera da ukupna cijena ne može biti negativna, ali ne postoji provjera da broj proizvoda ne može biti negativan, tada se može kupiti dvoje hlača i „minus dvije“ majice. Ako ova transakcija nije ispravno provjerena i sustav je odobri, dobivaju se naručene hlače, ali ne po punoj cijeni, nego po cijeni umanjenoj za cijenu dvije majice. | ||
| + | |||
| + | |||
| + | Ovaj primjer ukazuje na potrebu provjere korisničkih ulaznih parametara i stanja sustava kako se sustav ne bi mogao iskoristiti na nepredviđen način. Sigurnosni alati za skeniranje i analizu ne mogu znati kontekst aplikacije, pa stoga ne mogu detektirati da je negativna vrijednost količine proizvoda ili broja artikala za narudžbu zapravo ranjivost. Što je sustav kompleksniji i sastoji se od više povezanih komponenti, to je veća mogućnost pojave ovog tipa ranjivosti. | ||
| + | |||
| + | |||
| + | Također, za iskorištavanje ovakvih ranjivosti često nisu potrebni nikakvi alati niti složene tehnike napada, nego se napadi mogu jednostavno izvršiti kroz sama sučelja aplikacije. | ||
| + | |||
| + | ===PRIMJER - Zadatak s Hacknite platforme – Voće, povrće i flagovi=== | ||
| < | < | ||
| Line 15: | Line 21: | ||
| </ | </ | ||
| - | Vidi se da je zadatak web trgovina i da je cilj kupiti „Flag“ koji je ponuđen kao artikl u web trgovini. Također, dostupan je izvorni kod zadatka. Pri daljnjem pregledu stranice, vidi se da je ponuđen odabir za količinu | + | Vidi se da je zadatak web trgovina i da je cilj kupiti „Flag“ koji je ponuđen kao artikl u web trgovini. Također, dostupan je izvorni kod zadatka. Pri daljnjem pregledu stranice, vidi se da je ponuđen odabir za količinu |
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| - | Dodavanjem jabuka u košaricu i pokušajem kupnje, pojavljuje se pogreška „ Nedovoljno sredstava na računu „ prikazana na slici 2. | + | Dodavanjem jabuka u košaricu i pokušajem kupnje, pojavljuje se pogreška „Nedovoljno sredstava na računu„ prikazana na slici 2. |
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| - | Pregledom HTML koda za ovaj segment stranice, korištenjem ugrađenih alata za razvoj u web pregledniku (F12) ili drugim načinom, vidi se da je vrijednost koja se odabire definirana | + | Pregledom HTML koda za ovaj segment stranice, korištenjem ugrađenih alata za razvoj u web pregledniku (F12) ili drugim načinom, vidi se da je vrijednost koja se odabire definirana |
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| Line 31: | Line 37: | ||
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| - | Slanjem ovog zahtjeva i pregledom košarice, može se vidjeti da jest ovaj zahtjev obrađen bez izazivanja greške i da je sad ukupna cijena proizvoda u košarici negativna. Prikazano na slici 5. | + | Slanjem ovog zahtjeva i pregledom košarice, može se vidjeti da je ovaj zahtjev obrađen bez izazivanja greške i da je sad ukupna cijena proizvoda u košarici negativna. Prikazano na slici 5. |
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| Line 39: | Line 45: | ||
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| - | U gornjem lijevom kutu se vidi da je stanje na računu 0 €. Uzevši u obzir da ukupna cijena svih proizvoda ne smije biti manje od nule i da vjerojatno mora biti manja ili jednaka stanju na računu, može se deducirati da se vjerojatno može izvršiti kupnja, ukoliko je ukupna cijena svih proizvoda u košarici jednaka nuli. Kako bi se uspješno kupio flag, treba se odabrati jedan ili više flag artikl | + | U gornjem lijevom kutu se vidi da je stanje na računu 0 €. Uzevši u obzir da ukupna cijena svih proizvoda ne smije biti manje od nule i da vjerojatno mora biti manja ili jednaka stanju na računu, može se deducirati da se vjerojatno može izvršiti kupnja, ukoliko je ukupna cijena svih proizvoda u košarici jednaka nuli. Kako bi se uspješno kupio flag, treba se odabrati jedan ili više flag artikala |
| - | Ovaj problem ima više od jednog rješenja, te se može jednostavno riješiti uz malo matematike, isprobavanjem par linearnih jednadžbi, ili isprobavajući različite kombinacije približavajući se rješenju dok se ne uspije složit odgovarajuća kombinacija. | + | Ovaj problem ima više od jednog rješenja, te se može jednostavno riješiti uz malo matematike, isprobavanjem par linearnih jednadžbi, ili isprobavajući različite kombinacije približavajući se rješenju dok se ne uspije složiti odgovarajuća kombinacija. |
| - | Jedno od kombinacija koja ima ukupnu cijenu nula i sadrži flag je sljedeće: | + | Jedna od kombinacija koja ima ukupnu cijenu nula i sadrži flag je sljedeće: |
| < | < | ||
| Flag - (1*trešnje + 9*šljive + 1* banane + 40* jabuke + 5* bonsai) | Flag - (1*trešnje + 9*šljive + 1* banane + 40* jabuke + 5* bonsai) | ||
| Line 55: | Line 61: | ||
| ===Prevencija business logic ranjivosti=== | ===Prevencija business logic ranjivosti=== | ||
| - | Business logic ranjivosti uvelike ovise o samom kontekstu aplikacije, | + | Business logic ranjivosti uvelike ovise o kontekstu aplikacije, |
| - | Osim posvećivanja pažnje sigurnosti koda pri razvoju | + | |
| + | |||
| + | Dakle, tijekom razvoja, osim posvećivanja pažnje sigurnosti koda, treba voditi računa | ||
| + | |||
| + | Na primjer, ako je očekivani korisnički unos cijeli broj u rasponu od 1 do 9, treba osigurati | ||
| + | |||
| + | Ako je očekivani korisnički unos nešto složeniji, primjerice IBAN, mogu se koristiti gotove implementacije koje provjeravaju je li unos u validnom formatu i ne sadrži nedopuštene znakove ili kombinacije znakova. | ||
| + | |||
| + | Također, sama validacija korisničkog unosa nije dovoljna, nego je potrebno i provjeriti relevantan kontekst stanja sustava te poslovna pravila koja određuju je li određena radnja dopuštena. Na primjer, korisnik može unijeti valjan iznos novca koji želi poslati, ali za izvršenje transakcije mora imati dovoljno sredstava na računu. | ||
| + | |||
| + | Važno je imati na umu da ove provjere nije dovoljno implementirati samo na klijentskoj | ||
| Izvori:\\ | Izvori:\\ | ||
business_logic.1745341184.txt.gz · Last modified: 2025/12/01 11:40 (external edit)