Blog 24/7

CSRF (Cross-Site Request Forgery)

TAB. 1Hasłobez tłumaczenia
Po angielskucross-site request forgery (CSRF)
Którą formą pisaćbez tłumaczenia Skrót, nazwa własna albo nazwa standardu — nie tłumaczymy w ogóle.
Inne formyfałszowanie żądań
KategoriaPodatności i klasy błędów

CSRF (Cross-Site Request Forgery) to atak zmuszający zalogowanego użytkownika do nieświadomego wysłania żądania, które zmienia stan jego konta albo witryny. Według MITRE podatność polega na tym, że aplikacja internetowa nie potrafi dostatecznie sprawdzić, czy żądanie zostało wysłane przez użytkownika celowo [1]. OWASP opisuje CSRF jako atak, który nakłania ofiarę do wysłania złośliwego żądania z wykorzystaniem jej uwierzytelnionej sesji [2]. W zestawieniu CWE Top 25 za 2025 rok słabość CWE-352 zajęła trzecie miejsce [6].

Jak działa

Przeglądarka dołącza do żądania ciasteczka przypisane do danej witryny, w tym ciasteczko z tokenem sesyjnym. Robi to także wtedy, gdy żądanie wywołała inna strona. OWASP zwraca uwagę, że skoro żądanie wysyła przeglądarka ofiary, to ona, a nie atakujący, otrzymuje odpowiedź [2]. Dlatego celem CSRF-a są żądania zmieniające stan, takie jak przelew, zmiana adresu e-mail albo hasła; zmuszanie ofiary do pobrania danych nic atakującemu nie daje [2].

Atak wymaga socjotechniki: ofiarę trzeba skłonić do otwarcia przygotowanej strony albo wiadomości. OWASP podaje jako przykład e-maile z treścią HTML i adresy podrzucone na stronach, które ofiara odwiedza [2]. Może to być również link w kampanii phishing. Przebieg ataku na panel administracyjny pokazuje schemat poniżej.

RYS. 1CSRF przeciw zalogowanemu administratorowi

MITRE zaznacza, że CSRF jest słabością złożoną: do jej powstania musi dojść jednocześnie kilka warunków, w tym brak weryfikacji pochodzenia żądania i niewystarczające wygasanie sesji [1].

Odmiany i błędne zabezpieczenia

CSRF ma wiele nazw. OWASP wymienia między innymi XSRF, „Sea Surf”, Session Riding, Hostile Linking i atak jednym kliknięciem (one-click attack) [2]. Opisuje też zabezpieczenia, które nie działają, choć bywają stosowane.

PomysłDlaczego nie chroni
Tajne ciasteczkokażde ciasteczko jest wysyłane z każdym żądaniem [2]
Akceptowanie tylko POSTukryty formularz może wysłać POST automatycznie [2]
Transakcja wieloetapowanie pomaga, jeśli kroki da się przewidzieć [2]
Samo HTTPSsamo w sobie nie chroni przed CSRF [2]
Sprawdzanie nagłówka Referernagłówek bywa podrabiany albo legalnie pomijany [2]

Nie należy mylić CSRF z SSRF. W SSRF to serwer jest nakłaniany do wysłania żądania, a w CSRF przeglądarka użytkownika.

W WordPressie

WordPress chroni formularze i adresy akcji tokenem nazywanym nonce. Dokumentacja wyjaśnia, że nonce w WordPressie nie jest liczbą jednorazową w ścisłym sensie, tylko skrótem złożonym z cyfr i liter, o ograniczonym czasie życia [4]. Przy domyślnym czasie 24 godzin token jest ważny w bieżącym i poprzednim „tyknięciu”, więc faktycznie żyje od 12 do 24 godzin [4]. Atakujący, który nie zna tokenu, nie może go umieścić w podrobionym żądaniu [4].

ZadanieFunkcja
Pole ukryte w formularzuwp_nonce_field() [4]
Token w adresie URLwp_nonce_url() [4]
Token do własnego użyciawp_create_nonce() [4]
Weryfikacja na ekranach panelucheck_admin_referer() [4]
Weryfikacja w żądaniach AJAXcheck_ajax_referer() [4]
Weryfikacja w innych miejscachwp_verify_nonce() [4]

Dokumentacja podkreśla, że na nonce nigdy nie wolno polegać przy uwierzytelnianiu, autoryzacji ani kontroli dostępu; funkcje trzeba chronić wywołaniem current_user_can() [4]. Obsługa zapisu ustawień we wtyczce powinna więc łączyć oba sprawdzenia.

// formularz
wp_nonce_field( 'zapisz_ustawienia' );

// obsługa zapisu
check_admin_referer( 'zapisz_ustawienia' );
if ( ! current_user_can( 'manage_options' ) ) {
    wp_die( 'Brak uprawnień' );
}

Brak którejkolwiek z tych linii jest typowym źródłem luk; zob. podatność we wtyczce oraz brak kontroli uprawnień. Sprawdzenie uprawnień to weryfikacja uprawnień oparta na systemie, który opisują role i uprawnienia użytkowników.

Zagrożenia i skutki

Skutek CSRF-a zależy od uprawnień ofiary. MITRE wymienia nieautoryzowane operacje, ujawnienie danych i eskalację uprawnień, a przy ofierze z uprawnieniami administratora nawet przejęcie całej aplikacji [1]. Na stronie WordPress podrobione żądanie wysłane z przeglądarki administratora może na przykład zmienić ustawienia wtyczki albo założyć nieautoryzowane konto administratora.

CSRF bywa też ogniwem łańcucha. Jeśli podrobione żądanie trafia do funkcji podatnej na inny błąd, atakujący uruchamia ten błąd rękami zalogowanego użytkownika.

Jak się bronić

OWASP jako główne zabezpieczenie zaleca wzorzec tokenu synchronizującego: token unikalny dla sesji, tajny, nieprzewidywalny i sprawdzany po stronie serwera [3]. MITRE zaleca podobnie nieprzewidywalny nonce dla każdego formularza oraz osobne potwierdzenie operacji niebezpiecznych [1]. Obie organizacje odradzają zmienianie stanu żądaniami GET [1] [3].

Warstwą uzupełniającą jest atrybut SameSite ciasteczek, jedna z flag ciasteczek. MDN podaje, że daje on pewną ochronę przed niektórymi atakami między witrynami, w tym przed CSRF [5]. Wartość Strict wysyła ciasteczko tylko w żądaniach z tej samej witryny, a Lax dopuszcza dodatkowo nawigację najwyższego poziomu metodą bezpieczną [5]. OWASP traktuje SameSite jako obronę uzupełniającą, a nie jedyną [3]. Jako lżejszą metodę dla nowszych przeglądarek wskazuje nagłówki Fetch Metadata, w tym Sec-Fetch-Site [3].

Ochrona przed CSRF zakłada brak XSS. OWASP ostrzega, że XSS może obejść wszystkie techniki ochrony przed CSRF [3], bo skrypt działający na stronie może odczytać token.

Historia i przykłady

CERT Polska 10 lipca 2024 roku opublikował informację o dwóch podatnościach w otwartym projekcie Phoniebox [7]. Luka CVE-2024-3798 pozwalała przez modyfikację parametru w żądaniach GET na wstrzyknięcie poleceń powłoki, a także na ataki Reflected XSS i Cross-Site Request Forgery [7]. Ponieważ urządzenie nie powinno być dostępne z internetu, scenariusz ataku zakładał, że użytkownik odwiedzi stronę wysyłającą żądania do hostów w jego sieci lokalnej [7]. To typowy wzorzec CSRF: przeglądarka ofiary staje się pośrednikiem. W katalogu CWE ta klasa podatności ma numer 352 [1].

TAB. 2

Przypisy

7
  1. [1] CWE-352: Cross-Site Request Forgery (CSRF) · MITRE
  2. [2] Cross Site Request Forgery (CSRF) · OWASP
  3. [3] Cross-Site Request Forgery Prevention Cheat Sheet · OWASP
  4. [4] Nonces — Common APIs Handbook · WordPress.org
  5. [5] Set-Cookie header · MDN Web Docs
  6. [6] 2025 CWE Top 25 Most Dangerous Software Weaknesses · MITRE
  7. [7] Podatności w oprogramowaniu Phoniebox (CVE-2024-3798, CVE-2024-3799) · CERT Polska
TAB. 3

Hasła w tym artykule

15
TAB. 4

Linkują tutaj

22

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com