haker.info  — Etyczny hacking_
Spreading knowledge like a virus.

 Web Parameter Tampering (w tym Overposting)

   Dawid Farbaniec    680 s艂贸w

1. S艂owem wst臋pu

azw膮 zawart膮 w tytule (Web Parameter Tampering) okre艣la si臋 zbi贸r podatno艣ci w aplikacjach internetowych, kt贸re polegaj膮 na manipulowaniu parametrami u偶ywanymi podczas przesy艂ania 偶膮da艅 HTTP. Okre艣lenie Web Parameter Tampering w wolnym t艂umaczeniu z j臋zyka angielskiego oznacza manipulowanie czy te偶 fa艂szowanie parametr贸w w aplikacji webowej. Nieoczekiwane modyfikacje danych przesy艂anych jako parametry 偶膮dania mog膮 prowadzi膰 do b艂臋dnego dzia艂ania witryny. Przyk艂adowym scenariuszem mo偶e by膰 zmiana warto艣ci zam贸wienia w sklepie internetowym czy te偶 np. modyfikacja wypowiedzi innych u偶ytkownik贸w na forum internetowym. Mi艂ej lektury!

2. Ukryte pola formularza (<input type="hidden"...)

Przyk艂adowy scenariusz z wideo 2.1. Deweloperzy aplikacji internetowych korzystaj膮 z ukrytych p贸l formularza (<input type="hidden" ... />) do przesy艂ania danych, kt贸rych nie widzi (dop贸ki nie podejrzy 藕r贸de艂 HTML) u偶ytkownik witryny. W przyk艂adzie (wideo 2.1) na podstronie edycji wiadomo艣ci w ukrytym polu znajduje si臋 jej identyfikator. Dzi臋ki temu przy wysy艂aniu formularza witryna mo偶e okre艣li膰 kt贸ry post na forum jest modyfikowany i odnale藕膰 go w bazie danych. Nie ma potrzeby wy艣wietlania identyfikatora u偶ytkownikowi, gdy偶 jest on wewn臋trzn膮 warto艣ci膮 liczbow膮 nadawan膮 (cz臋sto) automatycznie. Identyfikator znajduje si臋 r贸wnie偶 w adresie URL podstrony edycji:
https://localhost:44330/Forum/Edit/1
Akurat w tym scenariuszu przej艣cie do edycji nie swojej wiadomo艣ci poprzez zmian臋 parametru Id w adresie URL zosta艂o pomy艣lnie zablokowane.

B艂膮d zosta艂 pope艂niony poprzez brak sprawdzenia po stronie serwera, czy u偶ytkownik na pewno pr贸buje modyfikowa膰 w艂asn膮 wypowied藕 czy mo偶e inn膮. Deweloper uzna艂, 偶e pola typu hidden nie mog膮 by膰 zmieniane co jest nieprawd膮.

Forum internetowe z wideo 2.1 to tylko jeden z wielu scenariuszy. Mo偶na spotka膰 aplikacje internetowe, kt贸re w polach typu hidden przesy艂aj膮 np. warto艣膰 zam贸wienia, kt贸r膮 bez problemu da si臋 zani偶y膰 i narazi膰 sklep internetowy na straty finansowe.

Wideo 2.1. Manipulowanie ukrytym polem formularza (<input type="hidden"...)

3. Inne dane, kt贸rymi mo偶na manipulowa膰

Nieautoryzowanym modyfikacjom mog膮 podlega膰 r贸wnie偶 m.in.:

  • Pliki cookie — niewielkie pliki zostawiane w pami臋ci przegl膮darki,
  • Nag艂贸wki HTTP — mog膮 by膰 zmienione poprzez zastosowanie w艂asnego klienta zamiast zwyk艂ej przegl膮darki,
  • Parametry adresu URL — mog膮 by膰 edytowane bezpo艣rednio w pasku adresu przegl膮darki internetowej,
  • Pola formularza — wszelkie kontrolki HTML mog膮 by膰 modyfikowane nawet je艣li si臋 je ukryje czy ustawi na disabled.

4. Podatno艣膰 Overposting w ASP.NET MVC

Z tego typu nieoczekiwanym dla niekt贸rych programist贸w dzia艂aniem mo偶na spotka膰 si臋 w ASP.NET MVC, gdzie wyst臋puje powi膮zanie z modelem danych (ang. model binding). Mimo, 偶e deweloper pominie powi膮zanie danego pola w modelu z widokiem np. utworzenia czy edycji, to mo偶liwe jest ustawienie warto艣ci temu polu np. poprzez modyfikacje formularza.

Jako przyk艂ad pos艂u偶y prosty model, kt贸ry opisuje profil u偶ytkownika w aplikacji ASP.NET MVC:

public class UserProfile { public int Id { get; set; } public string Name { get; set; } public string Website { get; set; } public bool IsAdmin { get; set; } }

Do tego modelu nie艣wiadomy programista tworzy widok i akcj臋 kontrolera, kt贸re daj膮 u偶ytkownikowi mo偶liwo艣膰 edycji profilu. Dodatkowo dla bezpiecze艅stwa usun膮艂 z formularza pole IsAdmin, kt贸re nadaje prawa administratora.

Nie chroni to jednak przed atakiem typu Overposting.

Je艣li w sygnatur臋 metody wpisany jest po prostu model (UserProfile model) tak jak poni偶ej:

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(UserProfile model) { //(...) }

a cia艂o metody (pomi臋dzy klarmami { i }) nie posiada dodatkowych zabezpiecze艅 poprzez odpowiedni kod, to aplikacja ASP.NET MVC przyjmie i powi膮偶e wszystkie pola modelu (w艂膮cznie z polem IsAdmin). Co mo偶e spowodowa膰, 偶e z艂o艣liwy u偶ytkownik edytuje kod HTML formularza dodaj膮c pole IsAdmin i nada sobie prawa administratora w aplikacji.

Polecan膮 praktyk膮 jest stosowanie atrybutu Bind np. w ten spos贸b:

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "Id,Name,Website")] UserProfile userProfile) { //(...) }

Powy偶szy zapis [Bind(Include = "...")] kontroluje, kt贸re pola modelu maj膮 by膰 powi膮zane. Jak wida膰 nie ma tam pola IsAdmin.

Na koniec dodam, 偶e atak typu Overposting polegaj膮cy na przesy艂aniu dodatkowych danych jest tak znany, 偶e samo 艣rodowisko Visual Studio, gdy generuje (ang. scaffolding) akcje i widoki to umieszcza w kontrolerach nast臋puj膮cy komentarz:

// POST: UserProfile/Edit // Aby zapewni膰 ochron臋 przed atakami polegaj膮cymi na przesy艂aniu dodatkowych danych, // w艂膮cz okre艣lone w艂a艣ciwo艣ci, z kt贸rymi chcesz utworzy膰 powi膮zania. // Aby uzyska膰 wi臋cej szczeg贸艂贸w, zobacz https://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "Id,Name,Website")] UserProfile userProfile) { //(...) }

5. Zako艅czenie

Dzi臋kuj臋 za czas po艣wi臋cony na przeczytanie tego wpisu.

Dawid Farbaniec




Tagi:  security  websecurity  asp-net-mvc 

Komentarze czytaj膮cych

Czytelnik napisa艂:

Brakuje mi przyk艂adu b艂臋du, kt贸ry kiedy艣 by艂 bardzo popularny. Wr臋cz 偶elazny przyk艂ad na parameter tampering.
https://jaki艣-sklep/order.php?id=287
I kilkoma linijkami kodu mamy dane wszystkich klient贸w i zam贸wienia lec膮c po numerach w p臋tli.

 ponad 9 miesi臋cy temu (09 wrze艣nia 2019 godz. 22:02)


Wszystkie tre艣ci umieszczone na tej witrynie s膮 chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawarto艣ci tej witryny bez zgody autora. Wszelkie opublikowane tutaj tre艣ci (w tym kody 藕r贸d艂owe i inne) s艂u偶膮 wy艂膮cznie celom informacyjnym oraz edukacyjnym. W艂a艣ciciele tej witryny nie ponosz膮 odpowiedzialno艣ci za ewentualne niezgodne z prawem wykorzystanie zasob贸w dost臋pnych w witrynie. U偶ytkownik tej witryny o艣wiadcza, 偶e z zamieszczonych tutaj danych korzysta na w艂asn膮 odpowiedzialno艣膰. Wszelkie znaki towarowe i nazwy zastrze偶one zosta艂y u偶yte jedynie w celach informacyjnych i nale偶膮 wy艂膮cznie do ich prawnych w艂a艣cicieli. Korzystaj膮c z zasob贸w witryny haker.info o艣wiadczasz, 偶e akceptujesz powy偶sze warunki oraz polityk臋 prywatno艣ci.