Wpływ
Brakujące nagłówki zabezpieczeń można wykorzystać do przechwytywania kliknięć, wykonywania skryptów między witrynami (XSS) lub do zbierania informacji o środowisku serwera [S2]. Gdy nagłówki takie jak Content-Security-Policy (CSP) lub X-Frame-Options są niespójnie stosowane na trasach, osoby atakujące mogą obrać za cel określone niechronione ścieżki, aby ominąć kontrolę bezpieczeństwa obowiązującą w całej witrynie [S2].
Główna przyczyna
Next.js umożliwia programistom konfigurowanie nagłówków odpowiedzi w next.config.js przy użyciu właściwości headers [S2]. W tej konfiguracji używane jest dopasowywanie ścieżek obsługujące symbole wieloznaczne i wyrażenia regularne [S2]. Luki w zabezpieczeniach zazwyczaj wynikają z:
- Niekompletne pokrycie ścieżki: Wzorce wieloznaczne (np.
/path*) mogą nie obejmować wszystkich zamierzonych podtras, pozostawiając zagnieżdżone strony bez nagłówków zabezpieczeń [S2]. - Ujawnianie informacji: Domyślnie Next.js może zawierać nagłówek
X-Powered-By, który ujawnia wersję frameworka, chyba że zostanie jawnie wyłączony poprzez konfiguracjępoweredByHeader[S2]. - CORS Błędna konfiguracja: Nieprawidłowo zdefiniowane nagłówki
Access-Control-Allow-Originw obrębie tablicyheadersmogą umożliwiać nieautoryzowany dostęp między źródłami do wrażliwych danych [S2].
Poprawki betonu
- Wzorce ścieżki audytu: Upewnij się, że wszystkie wzorce
sourcewnext.config.jsużywają odpowiednich symboli wieloznacznych (np./:path*), aby w razie potrzeby zastosować nagłówki globalnie. [S2]. - Wyłącz odcisk palca: Ustaw
poweredByHeader: falsewnext.config.js, aby zapobiec wysyłaniu nagłówkaX-Powered-By[S2]. - Ogranicz CORS: Ustaw
Access-Control-Allow-Originna określone zaufane domeny zamiast symboli wieloznacznych w konfiguracjiheaders[S2].
Jak FixVibe to testuje
FixVibe może przeprowadzić aktywną sondę bramkowaną, przeszukując aplikację i porównując nagłówki zabezpieczeń różnych tras. Analizując nagłówek X-Powered-By i spójność Content-Security-Policy na różnych głębokościach ścieżki, FixVibe może zidentyfikować luki konfiguracyjne w next.config.js.
