React v16.4.2: Correção de vulnerabilidade no lado do servidor

01 de agosto de 2018 por Dan Abramov

Nós descobrimos uma pequena vulnerabilidade que pode afetar alguns aplicativos usando ReactDOMServer. Nós estamos lançando uma versão de correção para cada release minor afetado do React para que você possa atualizar sem conflito. Leia para mais detalhes.

Pequena Descrição

Hoje, nós estamos lançando uma correção para uma vulnerablidade que encontramos na implementação do react-dom/server. Foi introduzido com a versão 16.0.0 e existiu em todas as versões subsequentes até hoje.

Essa vulnerabilidade só pode afetar alguns aplicativos React renderizados no lado do servidor. Puramente, aplicativos renderizados no lado cliente não são afetados. Adicionalmente, nós esperamos que a maioria dos aplicativos renderizados no lado servidor não contêm o padrão vulnerável descrito abaixo. No entanto, recomendamos seguir as instruções de mitigação assim que possível.

Enquanto estávamos investigando essa vulnerabilidade, nós encontramos vulnerabilidades semelhantes em algumas outras populares bibliotecas de front-end. Nós coordenamos esta release junto com Vue e Preact releases, arrumando o mesmo problema. O número de rastreamento para esta vulnerabilidade é CVE-2018-6341.

Mitigação

Preparamos uma pacote de correção, com uma correção para cada versão secundária afetada.

16.0.x

Se você estiver utilizando react-dom/server com esta versão:

  • react-dom@16.0.0

Atualize para a versão:

  • react-dom@16.0.1 (contém a mitigação)

16.1.x

Se você estiver usando react-dom/server com uma destas versões:

  • react-dom@16.1.0
  • react-dom@16.1.1

Atualize para a versão:

  • react-dom@16.1.2 (contém a mitigação)

16.2.x

Se você estiver usando react-dom/server com esta versão:

  • react-dom@16.2.0

Atualize para a versão:

  • react-dom@16.2.1 (contém a mitigação)

16.3.x

Se você estiver utilizando react-dom/server em uma destas versões:

  • react-dom@16.3.0
  • react-dom@16.3.1
  • react-dom@16.3.2

Atualize para a versão:

  • react-dom@16.3.3 (contém a mitigação)

16.4.x

Se você estiver utilizando react-dom/server com uma destas versões:

  • react-dom@16.4.0
  • react-dom@16.4.1

Atualize para a versão:

  • react-dom@16.4.2 (contém a mitigação)

Se você estiver usando a versão mais recente do react-dom, nenhuma ação é necessária.

Repare que apenas o pacote react-dom precisa ser atualizado.

Descrição Detalhada

O seu aplicativo apenas pode ser afetado por essa vulnerabilidade, se essas duas condições forem verdadeiras:

  • Seu aplicativo está renderizando HTML usando ReactDOMServer API, e
  • Seu aplicativo inclui um nome de atributo fornecido pelo usuário em uma tag HTML.

Especificamente, o padrão vulnerável se parece com isso:

let props = {};
props[userProvidedData] = "hello";
let element = <div {...props} />;
let html = ReactDOMServer.renderToString(element);

Para explorá-lo, o invasor precisaria criar um nome de atributo especial que acionasse uma vulnerabilidade XSS. Por exemplo:

let userProvidedData = '></div><script>alert("hi")</script>';

Nas versões vulneráveis ​​de react-dom/server, a saída deixaria o atacante injetar marcação arbitrária:

<div ></div><script>alert("hi")</script>

Nas versões após, a vulnerabilidade foi ajustada (e antes de ser introduzido), atributos com nomes inválidos são ignorados:

<div></div>

Você também veria um aviso sobre um nome de atributo inválido.

Observe que esperamos que os nomes de atributos baseados na entrada do usuário sejam muito raros na prática. Ele não serve a nenhum caso de uso prático comum e tem outras possíveis implicações de segurança que o React não pode proteger contra.

Instalação

O React v16.4.2 está disponível no registro npm.

Para instalar o React 16 com Yarn, rode:

yarn add react@^16.4.2 react-dom@^16.4.2

Para instalar o React 16 com npm, rode:

npm install --save react@^16.4.2 react-dom@^16.4.2

Nós também disponibilizamos UMD builds do React via CDN:

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

Consulte a documentação para instruções detalhadas de instalação.

Changelog

React DOM Server

  • Corrige uma potencial vulnerabilidade de XSS quando o invasor controla um nome de atributo (CVE-2018-6341). Esta correção está disponível no mais recente react-dom@16.4.2, bem como nas versões secundárias afetadas anteriores: react-dom@16.0.1, react-dom@16.1.2, react-dom@16.2.1, e react-dom@16.3.3. (@gaearon em #13302)

  • Corrige uma falha no renderizador do servidor quando um atributo é chamado hasOwnProperty. Essa correção só está disponível em react-dom@16.4.2. (@gaearon em #13303)