business_logic
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| business_logic [2025/02/08 10:09] – created 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 | + | 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 |
| - | ¸¸ | + | |
| + | 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=== | ||
| + | |||
| + | < | ||
| Možete li kupiti flag? | Možete li kupiti flag? | ||
| http:// | http:// | ||
| - | ¸¸ | + | </ |
| - | 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 51: | Line 59: | ||
| {{logicalhighlevel: | {{logicalhighlevel: | ||
| - | Prevencija business logic ranjivosti | + | ===Prevencija business logic ranjivosti=== |
| + | |||
| + | Business logic ranjivosti uvelike ovise o kontekstu aplikacije, stoga je potrebno dobro razumijevanje logike sustava, njegovih funkcionalnosti i namjene pri razvoju i implementaciji, | ||
| + | |||
| + | |||
| + | Dakle, tijekom razvoja, osim posvećivanja pažnje sigurnosti koda, treba voditi računa i o mogućim zlonamjernim korisnicima koji će pokušati koristiti sustav na nepredviđene načine. Treba primijeniti validaciju korisničkog unosa te provjere stanja sustava i njegovih vrijednosti uz precizno definirana ograničenja, | ||
| + | |||
| + | Na primjer, ako je očekivani korisnički unos cijeli broj u rasponu od 1 do 9, treba osigurati da su samo te vrijednosti dopuštene, dok se ostali unosi odbacuju uz odgovarajuću grešku. | ||
| + | |||
| + | 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. | ||
| - | Business logic ranjivosti uvelike ovise o samom kontekstu aplikacije, zato je potrebno dobro razumijevanje logike sustava, njegovih funkcionalnosti i namjena pri razvoju i implementaciji sustava, pogotovo kada više ljudi zajedno rade na razvoju. Kada jedna osoba radi na jednoj komponenti sustava koja je povezana s drugom komponentom, | + | Važno je imati na umu da ove provjere nije dovoljno implementirati samo na klijentskoj |
| - | Osim posvećivanja pažnje sigurnosti koda pri razvoju i svjesnosti o mogućim zlonamjernim akterima koji će pokušati koristiti sustav | + | |
| Izvori:\\ | Izvori:\\ | ||
business_logic.1739009381.txt.gz · Last modified: 2025/12/01 11:40 (external edit)