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/02/10 12:27] – kresimir | 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 ove skupine ranjivosti su: mogućnom kupnje negativne količine nekog proizvoda u web trgovini, npr. umjesto kupnje dviju majici, u košaricu se za broj majci stavi minus dva za količinu, čime cijena kupovine bude negativna i novci se prebace kupcu s računa web aplikacije umjesto slanja novaca s računa kupca na račun web aplikacije. 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 „minus dvije“ majice i dvoje hlača. 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 dvoje majici. | + | |
| - | Ova demonstracija ukazuje na potrebu implementiranja validacija i provjera 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, kako bi detektirali da je negativna vrijednost količine proizvoda ili broja artikla 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=== | + | Jednostavan primjer ove skupine ranjivosti je kupnja negativne količine nekog proizvoda u web trgovini. Na primjer, umjesto kupnje dvije majice, u košaricu se za broj majica unese minus dva za količinu, čime cijena kupnje postaje negativna, a novac se prenosi s računa web aplikacije na račun kupca, umjesto obrnuto. |
| + | |||
| + | |||
| + | 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 13: | 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 29: | 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 37: | 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) | ||
| - | ¸¸ | + | </ |
| Prikazano na slici 7. | Prikazano na slici 7. | ||
| Line 53: | 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.1739190437.txt.gz · Last modified: 2025/12/01 11:40 (external edit)