haker.info | Etyczny hacking |

haker.info  — Etyczny hacking

 Web Parameter Tampering (w tym Overposting)

09 września 2019 godz. 20:24    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 2 miesiące 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.