Blog 24/7

nonce

TAB. 1Hasłopo angielsku
Po angielskunonce
Którą formą pisaćpo angielsku Polski odpowiednik istnieje, ale w praktyce nikt tak nie pisze. Zostaw angielski, polski trzymaj jako synonim.
Inne formytoken akcji WordPressa (mimo nazwy nie jednorazowy) · token chroniący przed CSRF · wartość używana raz w danym kontekście (znaczenie kryptograficzne)
KategoriaStrony WWW, WordPress i hosting

Nonce (od ang. „number used once”) to w WordPressie token bezpieczeństwa dołączany do formularzy, linków i żądań AJAX, który potwierdza, że żądanie pochodzi ze strony witryny, a nie z obcego serwisu [1]. Mimo nazwy nonce WordPressa nie jest liczbą ani wartością jednorazową: to skrót złożony z liter i cyfr, ważny wielokrotnie w swoim oknie czasowym [1]. Jego głównym zadaniem jest obrona przed atakami CSRF (Cross-Site Request Forgery) [1]. Poza WordPressem to samo słowo oznacza w kryptografii wartość, która w danym kontekście nie może się powtórzyć.

Jak działa

Atak CSRF polega na tym, że złośliwa strona, e-mail albo program nakłania przeglądarkę zalogowanego użytkownika do wykonania niechcianej akcji w zaufanym serwisie [3]. Przeglądarka dołącza do takiego żądania ciasteczka sesji, więc serwer bez dodatkowego sprawdzenia uzna je za działanie użytkownika. MITRE opisuje tę słabość jako brak wystarczającej weryfikacji, czy żądanie zostało wysłane przez użytkownika celowo [4].

Nonce rozwiązuje ten problem wzorcem tokenu synchronizującego: serwer wstawia do formularza wartość, której obca strona nie zna, i odrzuca żądanie bez niej [3]. MITRE zaleca generowanie osobnej, nieprzewidywalnej wartości dla formularza i sprawdzanie jej po odebraniu [4]. Przebieg w WordPressie pokazuje schemat poniżej.

RYS. 1Nonce w formularzu panelu WordPressa

WordPress wylicza nonce z identyfikatora użytkownika, tokenu jego sesji i nazwy akcji [2]. Ta sama akcja daje temu samemu użytkownikowi identyczny nonce w obrębie jednego okresu ważności [1]. Nazwa akcji powinna być konkretna, na przykład obejmować identyfikator usuwanego wpisu, bo wtedy token z jednego formularza nie zadziała w innym.

W WordPressie

Rdzeń udostępnia komplet funkcji do tworzenia i sprawdzania tokenów [1].

FunkcjaRola
wp_create_nonce()zwraca nonce dla akcji [1]
wp_nonce_field()dodaje ukryte pole do formularza [1]
wp_nonce_url()dopisuje nonce do adresu URL [1]
wp_verify_nonce()sprawdza nonce; zwraca 1, 2 albo false [2]
check_admin_referer()sprawdza nonce z formularza panelu [1]
check_ajax_referer()sprawdza nonce w żądaniu AJAX [1]

Czas życia. Domyślny okres ważności wynosi 24 godziny i dzieli się na dwa „tiki” po 12 godzin [1]. Funkcja wp_verify_nonce() zwraca 1 dla tokenu wygenerowanego w ciągu ostatnich 12 godzin, 2 dla tokenu sprzed 12–24 godzin i false dla nieprawidłowego [2]. W praktyce nonce traci ważność po 12–24 godzinach, zależnie od tego, kiedy powstał względem granicy tiku [1]. Okres można zmienić filtrem nonce_life, podając liczbę sekund [1].

Użytkownicy niezalogowani. Token zależy od identyfikatora użytkownika i jego sesji [2], a gość nie ma ani jednego, ani drugiego. Do ochrony formularzy dla gości dokumentacja wskazuje filtr nonce_user_logged_out, którym można powiązać weryfikację z własną sesją [1].

Typowe użycie w kodzie wtyczki wygląda tak:

wp_nonce_field( 'usun_wpis_' . $post_id );
// ...po wysłaniu formularza:
check_admin_referer( 'usun_wpis_' . $post_id );
if ( ! current_user_can( 'delete_post', $post_id ) ) {
    wp_die( 'Brak uprawnień' );
}

Dokumentacja dla twórców motywów zaleca nonce przy każdym formularzu HTML i każdym żądaniu HTTP, które coś zmienia [5].

Czego nonce nie zapewnia

Dokumentacja WordPressa stwierdza wprost, że na nonce nigdy nie wolno polegać przy uwierzytelnianiu, autoryzacji ani kontroli dostępu [1]. Każdy nonce trzeba łączyć z weryfikacją uprawnień przez current_user_can() i zakładać, że token może zostać ujawniony [2]. Nonce odpowiada na pytanie, czy użytkownik chciał wykonać akcję, a nie, czy wolno mu ją wykonać. Wtyczka, która sprawdza tylko nonce, ma brak kontroli uprawnień (missing authorization): każdy zalogowany użytkownik, także subskrybent, może pobrać token ze strony i wywołać akcję.

Drugą granicą jest XSS (Cross-Site Scripting). OWASP zaznacza, że podatności XSS pozwalają obejść zabezpieczenia przed CSRF [3], a MITRE dodaje, że większość takich zabezpieczeń da się ominąć skryptem kontrolowanym przez atakującego [4]. Skrypt działający na stronie odczyta nonce tak samo jak przeglądarka użytkownika.

OWASP wymienia też zasady przekazywania tokenów: nie w ciasteczkach i nie w parametrach adresu, a zmiany stanu nie przez żądania GET [3]. Funkcja wp_nonce_url() umieszcza nonce właśnie w adresie [1], dlatego lepiej używać jej do linków, które tylko potwierdzają akcję, a dane zmieniać formularzem POST. Uzupełnieniem jest atrybut SameSite, opisany przy flagach ciasteczek (cookie flags) [3].

Znaczenie kryptograficzne

W kryptografii nonce to wartość użyta dokładnie raz z danym kluczem. Jej powtórzenie może złamać poufność szyfrowania. Przykładem jest atak KRACK na protokół WPA2, opisany przez CERT Polska 17 października 2017 roku pod tytułem „Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2” [8]. Podatne urządzenia po ponownym odebraniu trzeciej wiadomości uzgadniania czterostronnego przywracały klucz do wartości początkowej i ponownie używały nonce [8]. CERT Polska sklasyfikował ten błąd jako CWE-323, ponowne użycie nonce i pary kluczy w szyfrowaniu [8]. To znaczenie nie ma związku z tokenami WordPressa poza nazwą.

Historia i przykłady

Błędne użycie nonce bywa przyczyną poważnych podatności we wtyczkach. W listopadzie 2024 roku Sekurak opisał podatność CVE-2024-10924 we wtyczce Really Simple Security, używanej na około 4 milionach witryn i wykrytej przez zespół Wordfence [6]. Funkcja check_login_and_get_user() w interfejsie REST sprawdzała nonce, ale ignorowała wynik tego sprawdzenia [6]. Przy włączonym uwierzytelnianiu dwuskładnikowym (2FA) kod logował użytkownika wskazanego samym identyfikatorem w żądaniu, bez znajomości hasła, także administratora [6]. Było to obejście uwierzytelniania prowadzące do przejęcia konta. W dzienniku zmian wtyczki wersja 9.1.2 ma wpis o poprawce obejścia uwierzytelniania [7].

Przypadek pokazuje, że wywołanie funkcji sprawdzającej nie jest zabezpieczeniem, jeśli kod nie przerywa działania po negatywnym wyniku. Przy przeglądzie wtyczki warto więc sprawdzać, co dzieje się z wartością zwróconą przez wp_verify_nonce(), a nie tylko, czy funkcja jest wywołana. Ten rodzaj błędu zalicza się do kategorii podatności we wtyczkach.

TAB. 2

Przypisy

8
  1. [1] Nonces — Common APIs Handbook · WordPress.org
  2. [2] wp_verify_nonce() — Code Reference · WordPress.org
  3. [3] Cross-Site Request Forgery Prevention Cheat Sheet · OWASP
  4. [4] CWE-352: Cross-Site Request Forgery (CSRF) · MITRE
  5. [5] Common Vulnerabilities — Common APIs Handbook · WordPress.org
  6. [6] Jak przy włączonym 2FA można się zalogować na dowolnego użytkownika (podatność w popularnym pluginie do WordPressa) · Sekurak
  7. [7] Really Simple Security – Simple and Performant Security (changelog) · WordPress.org
  8. [8] Podatność w protokole WPA2: Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2 · CERT Polska
TAB. 3

Hasła w tym artykule

12
TAB. 4

Linkują tutaj

29

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