
Lehrreiche Demo einer Server-Side Request Forgery (SSRF)-Schwachstelle in Next.js (CVE-2024-34351), mit Schritt-für-Schritt-Ausnutzung und Minderungsbeispielen.
Dieses Repository kann als Grundlage für die Präsentation eines oder mehrerer Meetups dienen. Der Ablauf ist wie folgt…
Diese Arbeit basiert hauptsächlich auf zwei Quellen:
1-csr-load-data vanilla react SPA loading data[!IMPORTANT] CSR (Client-Side Rendering): React-Code wird an den Browser ausgeliefert, der Inhalte generiert, die in das DOM eingefügt werden.

cd 1-csr-load-data
npm start

2-csr-router vanilla react SPA routing[!IMPORTANT] Nach dem erstmaligen Laden der Seite verwendet die Navigation zu anderen Seiten derselben Website JavaScript, um Teile der Seite neu zu rendern, ohne dass ein vollständiger Seitenneuladevorgang erforderlich ist.
cd 2-csr-router
npm start

3-rsc-load-data React Server Components (Next.js-Implementierung) Laden von Daten[!IMPORTANT] React-Komponenten, die dafür geschrieben wurden, nur auf dem Server ausgeführt zu werden, nicht im Browser.

cd 3-rsc-load-data
npm run build
npm run start

4-rsc-router React Server Components (Next.js-Implementierung) Routing[!IMPORTANT] Komponenten werden nur auf dem Server ausgeführt. Das Standardverhalten ist statisches Rendering: Komponenten werden zur Build-Zeit ausgeführt.
cd 4-rsc-router
npm run build
npm run start

5-SSR SSR Server Side Rendering[!IMPORTANT] SSR bedeutet, Client-Komponenten auf dem Server vorzurendern. React-Code wird zum Zeitpunkt der Anforderung ausgeführt. Das Ergebnis kann für zukünftige Anfragen zwischengespeichert werden.
Best Practice: 'use client';-Komponenten so weit unten im Komponentenbaum wie möglich definieren.
[!IMPORTANT] „In React ist „Hydration" der Vorgang, bei dem React an vorhandenes HTML „anbindet", das bereits von React in einer Serverumgebung gerendert wurde. Während der Hydration versucht React, Ereignis-Listener an das vorhandene Markup anzuhängen und die Darstellung der App auf dem Client zu übernehmen. In vollständig mit React erstellten Apps hydriert man normalerweise nur eine „Wurzel", einmal beim Start, für die gesamte App."
https://react.dev/reference/react-dom/client/hydrateRoot
https://www.gatsbyjs.com/docs/conceptual/partial-hydration/
cd 5-ssr
npm run build
npm run start

6-pages-router-ssg (Next.js-Implementierung)[!IMPORTANT] SSG (Static Site Generation) mit dem Pages Router: React-Code wird beim Erstellen der Anwendung ausgeführt, und die generierte Ausgabe ist statisch.
cd 6-pages-router-ssg
npm run build
npm run start
7-pages-router-isr (Next.js-Implementierung)[!IMPORTANT] ISR (mit Pages Router): „Next.js ermöglicht es Ihnen, statische Seiten zu erstellen oder zu aktualisieren, nachdem Sie Ihre Website erstellt haben. Incremental Static Regeneration (ISR) ermöglicht es Ihnen, Static-Generation auf Seitenbasis zu verwenden, ohne die gesamte Website neu erstellen zu müssen. Mit ISR können Sie die Vorteile von statischen Seiten beibehalten und gleichzeitig auf Millionen von Seiten skalieren."
cd 7-pages-router-isr
npm run build
npm run start
„Die Daten könnten zum Zeitpunkt der Anforderung veraltet sein"
https://vercel.com/blog/nextjs-server-side-rendering-vs-static-generation
https://react.dev/reference/rsc/server-actions
...
8-ssrf-14.1.0https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps