Podręcznik
4. Błędy kontroli dostępu
4.4. CSRF – Cross Site Request Forgery
Kategorią zagrożeń, którą można umieścić zarówno w tej sekcji jak i w sekcji wstrzykiwań jest CSRF. Generalizując, problem polega na braku kontroli czy zapytanie jest wysłane intencjonalnie przez użytkownika posiadającego uwierzytelnioną sesję czy też wykonane zostało bez jego wiedzy.
Prosty schemat takiego działania opiera się na ukryciu na podstawionej stronie w domenie X formularza, który wykonuje akcję na stronie Y np. stronie banku. Po ,,zachęceniu’’ użytkownika do otwarcia zainfekowanej strony, bez jego wiedzy zostanie wykonane zapytanie do strony Y i jeżeli w danej chwili miał on aktywną sesję akcja się wykona. Celem ataku jest wywołanie zmiany stanu w systemie docelowym Y a nie kradzież danych, gdyż atakujący nie ma dostępu do wyniku ataku. Dzieje się to za sprawą polityki Same-Origin zaimplementowanej przez wszystkie współczesne przeglądarki, która uniemożliwia dostęp do zawartości strony Y z kontekstu strony X [23]. Przykładem tej podatności może być zdarzenie z 2016 roku w systemie PayPal.me pozwalająca na zmiany w profilu użytkownika [22]. Innym przykładem jest podatność w routerach Netgear pozwalająca na modyfikację konfiguracji [26]
Paradoksalnie, obrona przed tym atakiem, dzięki polityce Same-Origin jest dość prosta. Istnieje kilka metod, wykorzystujących podobną koncepcję – zasób, który nie jest możliwy do zgadnięcia przez atakującego. Najprostszym mechanizmem są losowe tokeny jednorazowe posiadające odpowiednią entropię dołączane do każdego formularza lub żądania zmieniającego stan (tokeny synchronizujące). Nie mogą zostać odczytane przez atakującego (Same-Origin) i nie mogą być odgadnięte więc stanowią unikatowy identyfikator konkretnej instancji formularza. Dodatkowo są powiązane z sesją użytkownika i mają ograniczony czas ważności. Po wysłaniu żądania (POST fomularza) po stronie serwera następuje weryfikacja poprawności tokenu i odpowiednia reakcja. W niektórych przypadkach przechowywanie tokenów po stronie serwera jest kłopotliwe w wykonaniu, gdyż generuje dodatkowy stan do śledzenia. Alternatywnym rozwiązaniem może być wykorzystanie ciasteczek. Ponieważ ciasteczko może zostać ustawione przez atakującego, zaleca się, aby do tego celu wykorzystać podpisywane kryptograficznie tajnym kluczem serwera wartości, których poprawność serwer może zweryfikować wyłącznie na ich podstawie, nie przechowując dodatkowej informacji po swojej stronie. Takie ciasteczko zostanie automatycznie wysłane w każdym żądaniu.

