A Google company lançou a versão do navegador web Chrome 90. Ao mesmo tempo, está disponível a versão estável do projeto de código aberto Chromium, que serve de base para o Chrome. O navegador Chrome se destaca pelo uso dos logotipos do Google, pela implementação de um sistema de envio de notificações em caso de falha, por módulos para reprodução de conteúdo de vídeo protegido (DRM), por um sistema de instalação automática de atualizações e pela transmissão de parâmetros RLZ durante as buscas. A próxima versão do Chrome 91 está agendada para 25 de maio.
Principais mudanças no Chrome 90:
- Para todos os usuários, a abertura de sites por padrão agora é feita via HTTPS ao inserir nomes de host na barra de endereços. Por exemplo, ao digitar o host example.com, o site https://example.com será aberto por padrão, e se houver problemas, haverá um retrocesso para http://example.com. Uma configuração chamada "chrome://flags#omnibox-default-typed-navigations-to-https" foi proposta para gerenciar o uso padrão de "https://".
- Foi implementada a possibilidade de atribuir diferentes rótulos às janelas para facilitar sua visualização na barra de tarefas. O suporte à alteração do nome da janela simplificará a organização ao utilizar janelas separadas do navegador para diferentes tarefas, como ao abrir janelas específicas para tarefas profissionais, interesses pessoais, entretenimento, materiais adiados etc. O nome pode ser alterado através da opção "Adicionar nome à janela" no menu de contexto que aparece ao clicar com o botão direito em uma área vazia da barra de abas. Após a mudança de nome, na barra de aplicativos, em vez do título do site da aba ativa, será exibido o nome escolhido, o que pode ser útil ao abrir sites iguais em diferentes janelas vinculadas a contas separadas. A vinculação é mantida entre sessões, e após reiniciar, as janelas serão restauradas com os nomes selecionados.

- Foi adicionada a opção de ocultar a 'Lista de Leitura' sem necessidade de alterar configurações em 'chrome://flags' ('chrome://flags#read-later'). Para ocultar, agora é possível usar a opção 'Show Reading List' na parte inferior do menu de contexto que aparece ao clicar com o botão direito na barra de favoritos. Lembramos que na versão passada, para alguns usuários, ao clicar na estrela na barra de endereços, além do botão 'Adicionar aos Favoritos', aparecia um segundo botão 'Adicionar à Lista de Leitura', e no canto direito da barra de favoritos aparecia um menu 'Lista de Leitura', que lista todas as páginas anteriormente adicionadas à lista. Ao abrir uma página da lista, ela é marcada como lida. As páginas na lista também podem ser marcadas manualmente como lidas ou não lidas, ou removidas da lista.
- Foi adicionado suporte para segmentação de rede para proteção contra métodos de rastreamento de movimentação do usuário entre sites, baseados na armazenagem de identificadores em áreas não destinadas ao armazenamento permanente de informações ('Supercookies'). Como os recursos em cache são armazenados em um espaço de nomes compartilhado, independentemente do domínio de origem, um site pode determinar o carregamento de recursos de outro site verificando a presença desse recurso no cache. A proteção é baseada na aplicação da segmentação de rede, cuja essência é adicionar ao cache compartilhado um vínculo adicional aos registros com domínio, de onde a página principal foi aberta, o que limita a abrangência do cache para scripts de rastreamento de movimentações apenas ao site atual (o script de um iframe não poderá verificar se o recurso foi carregado de outro site). O custo da segmentação é a redução da eficácia do cache, levando a um leve aumento no tempo de carregamento da página (no máximo 1,32%, mas para 80% dos sites entre 0,09-0,75%).
- Foi atualizado a lista negra de portas de rede para as quais é bloqueada a envio de requisições HTTP, HTTPS e FTP, com o objetivo de proteger contra o ataque NAT slipstreaming, que permite ao abrir uma página web especialmente preparada pelo atacante no navegador estabelecer uma conexão de rede com servidor atacante a qualquer porta UDP ou TCP no sistema do usuário, mesmo com a aplicação de intervalos de endereços internos (192.168.x.x, 10.x.x.x). Entre as portas bloqueadas, foram adicionadas 554 (protocolo RTSP) e 10080 (usada no backup Amanda e VMWare vCenter). Anteriormente, as portas 69, 137, 161, 554, 1719, 1720, 1723, 5060, 5061 e 6566 já haviam sido bloqueadas.
- Adicionada a suporte inicial para abrir documentos PDF com formulários XFA no navegador.
- Para alguns usuários, foi ativada uma nova seção de configurações ‘Chrome Settings > Privacy and security > Privacy sandbox’, permitindo gerenciar as opções da API FLoC, destinada a identificar a categoria de interesses do usuário sem a realização de identificação individual e sem vínculo com o histórico de visita a sites específicos.
- Fornecido um aviso mais claro com uma lista de ações permitidas, exibido quando o usuário se conecta a um perfil para o qual o gerenciamento centralizado está habilitado.
- O interface de solicitação de permissões foi tornado menos intrusivo. As solicitações que o usuário provavelmente não irá aprovar agora são bloqueadas automaticamente, com a exibição de um indicador apropriado na barra de endereços, permitindo que o usuário acesse a interface de gerenciamento de permissões para cada site.

- Incluída a suporte para extensões Intel CET (Intel Control-flow Enforcement Technology) para proteção de hardware contra a execução de exploits construídos usando técnicas de programação orientada a retorno (ROP, Return-Oriented Programming).
- O trabalho de tradução do navegador para a utilização de terminologia inclusiva continua. O arquivo ‘master_preferences’ foi renomeado para ‘initial_preferences’, para não ferir os sentimentos dos usuários que interpretam a palavra master como uma alusão à antiga escravidão de seus ancestrais. Para manter a compatibilidade, o suporte a ‘master_preferences’ será mantido por um tempo no navegador. Anteriormente, o navegador já se livrou do uso das palavras ‘whitelist’, ‘blacklist’ e ‘native’.
- Na versão para Android, ao ativar o modo de economizar dados "Lite", foi implementada a redução da taxa de bits durante o carregamento de vídeos ao se conectar via redes de operadoras móveis, o que permitirá diminuir os custos dos usuários que têm planos que consideram o tráfego. No modo "Lite", também é garantida a compressão das imagens solicitadas de recursos publicamente acessíveis (que não requerem autenticação) por HTTPS.
- Adicionado o codificador do formato de vídeo AV1, otimizado especificamente para uso em videoconferências baseadas no protocolo WebRTC. O uso do AV1 em videoconferências permite aumentar a eficiência da compressão e garantir a possibilidade de transmissão em canais com largura de banda de 30 kbit/s.
- No JavaScript, nos objetos Array, String e TypedArrays, foi implementado o método at(), permitindo usar indexação relativa (com uma posição relativa especificada como o índice do array), inclusive com valores negativos em relação ao final (por exemplo, "arr.at(-1)" retornará o último elemento do array).
- No JavaScript, para expressões regulares, foi adicionado a propriedade ".indices", que contém um array com as posições iniciais e finais dos grupos de correspondência. Esta propriedade é preenchida somente quando a expressão regular é executada com a flag "\/d". const re = \/(a)(b)\/d; const m = re.exec('ab'); console.log(m.indices[0]); \/\/ 0 — todos os grupos de correspondência \/\/ → [0, 2] console.log(m.indices[1]); \/\/ 1 — primeiro grupo de correspondência \/\/ → [0, 1] console.log(m.indices[2]); \/\/ 2 — segundo grupo de correspondência \/\/ → [1, 2]
- Foi realizada uma otimização de desempenho das propriedades "super" (por exemplo, super.x), para as quais o cache inline é aplicado. O desempenho do uso de "super" agora está próximo do desempenho de acesso às propriedades normais.
- A chamada de funções WebAssembly a partir do JavaScript foi significativamente acelerada através da aplicação de expansão inline. A otimização mencionada permanece experimental e requer a execução com a flag "—turbo-inline-js-wasm-calls".
- Adicionado o API WebXR Depth Sensing, que permite medir a distância entre objetos no ambiente do usuário e o dispositivo do usuário, por exemplo, para criar aplicativos de realidade aumentada mais realistas. Vale lembrar que o API WebXR unifica o funcionamento de diferentes classes de dispositivos de realidade virtual, desde headsets 3D fixos até soluções baseadas em dispositivos móveis.
- A funcionalidade WebXR AR Lighting Estimation foi estabilizada, permitindo que nas sessões WebXR para realidade aumentada sejam determinados os parâmetros de iluminação do ambiente para conferir um aspecto mais natural aos modelos e uma integração mais harmoniosa com o ambiente do usuário.
- No modo Origin Trials (funcionalidades experimentais que exigem ativação separada), foram adicionados vários novos APIs, que estão limitados à plataforma Android no momento. O Origin Trial implica a possibilidade de trabalhar com o API indicado a partir de aplicativos carregados de localhost ou 127.0.0.1, ou após registro e obtenção de um token especial que funciona por tempo limitado para um site específico.
- O método getCurrentBrowsingContextMedia(), que possibilita capturar um fluxo de vídeo MediaStream que reflete o conteúdo da aba atual. Ao contrário do método semelhante getDisplayMedia(), ao chamar getCurrentBrowsingContextMedia(), o usuário verá um simples diálogo para confirmar ou bloquear a operação de transmissão de vídeo com o conteúdo da aba.
- O API Insertable Streams, que permite manipular fluxos de mídia crus (raw) transmitidos através do API MediaStreamTrack, como dados de câmeras e microfones, resultados da captura de tela ou dados intermediários de decodificação por codec. Para representar quadros crus, são utilizadas as interfaces WebCodec, após o que é formado um fluxo semelhante ao que o API WebRTC Insertable Streams gera com base em RTCPeerConnections. Do ponto de vista prático, o novo API permite implementar funcionalidades como a aplicação de métodos de aprendizado de máquina para identificação ou anotação de objetos em tempo real, ou para adicionar efeitos como remoção de fundo, antes da codificação ou após a decodificação por codec.
- A possibilidade de empacotar recursos em pacotes (Web Bundle) para organizar um carregamento mais eficiente de um grande número de arquivos adicionais (estilos CSS, JavaScript, imagens, iframe). Entre as desvantagens do suporte existente para pacotes de arquivos JavaScript (webpack), que estão tentando ser eliminadas no Web Bundle: o pacote em si pode ser armazenado no cache HTTP, mas não suas partes constituintes; a compilação e a execução podem começar apenas após o carregamento completo do pacote; recursos adicionais, como CSS e imagens, devem ser codificados na forma de strings JavaScript, resultando em um aumento de tamanho e em uma execução de mais uma etapa de análise.
- Suporte para manipulação de exceções em WebAssembly.
- API Declarative Shadow DOM estabilizada para criar novas ramificações raiz no Shadow DOM, por exemplo, para separar o estilo externo importado de um elemento e seu respectivo sub-ramo DOM do documento principal. A API declarativa proposta permite desconectar ramificações DOM apenas com HTML, sem necessidade de escrever código em JavaScript.
- Na propriedade CSS aspect-ratio, que permite vincular explicitamente a razão de aspecto a qualquer elemento (para calcular automaticamente o tamanho ausente ao especificar apenas a altura ou a largura), foi implementada a possibilidade de interpolação de valores durante a animação (uma transição suave de uma razão de aspecto para outra).
- Foi adicionada a possibilidade de refletir o estado de elementos HTML personalizados (custom element) no CSS através da pseudo-classe ':state()'. Essa funcionalidade foi implementada de forma análoga à capacidade dos elementos HTML padrão de mudar seu estado com base na interação do usuário.
- Na propriedade CSS 'appearance', foi adicionado o suporte para o valor 'auto', que é definido como padrão para e , e na plataforma Android, adicionalmente para , , , e .
- Na propriedade CSS 'overflow', foi adicionado o suporte para o valor 'clip', que, quando definido, corta o conteúdo que ultrapassa os limites do bloco na borda do overflow permitido sem possibilidade de rolagem. O valor que define o quanto o conteúdo pode ultrapassar os limites reais do bloco antes de ser cortado é definido pela nova propriedade CSS 'overflow-clip-margin'. Em comparação com 'overflow: hidden', o uso de 'overflow: clip' oferece um desempenho mais elevado.


- O cabeçalho HTTP Feature-Policy foi substituído pelo novo cabeçalho Permissions-Policy para gerenciar a delegação de permissões e habilitar recursos avançados, que agora suporta valores estruturados para os campos (por exemplo, agora é possível especificar "Permissions-Policy: geolocation=()" em vez de "Feature-Policy: geolocation 'none'").
- Foi reforçada a proteção contra o uso de Protocol Buffers para ataques causados pela execução especulativa de instruções nos processadores. A proteção é implementada adicionando o tipo MIME "application/x-protobuffer" à lista de tipos MIME nunca analisados (sniffed), cuja manipulação é feita através do mecanismo Cross-Origin-Read-Blocking. Anteriormente, o tipo MIME "application/x-protobuf" já havia sido incluído nessa lista, mas o "application/x-protobuffer" foi esquecido.
- Na API File System Access, agora é possível deslocar a posição atual em um arquivo além do final, preenchendo o espaço vazio com zeros durante a gravação subsequente através da chamada FileSystemWritableFileStream.write(). Essa possibilidade permite criar arquivos esparsos com lacunas e simplifica significativamente a organização da gravação em arquivos de fluxos com a chegada desordenada de blocos de dados (por exemplo, isso é praticado no BitTorrent).
- Adicionado o construtor StaticRange com a implementação de tipos leves de Range, que não exigem a atualização de todos os objetos relacionados a cada alteração na árvore DOM.
- Foi implementada a possibilidade de especificar os parâmetros width e height para os elementos <source>, especificados dentro do elemento <picture>. Essa possibilidade permite calcular a razão de aspecto para os elementos <picture>, assim como foi feito para <img>, <canvas> e <video>.
- O suporte não padronizado a canais de dados RTP (RTP Data Channels) foi removido do WebRTC, sendo recomendáveis os canais de dados baseados em SCTP.
- As propriedades navigator.plugins e navigator.mimeTypes agora sempre retornam um valor vazio (após a descontinuação do Flash, não há mais necessidade dessas propriedades).
- Uma grande quantidade de pequenas melhorias foi feita nas ferramentas para desenvolvedores web e uma nova ferramenta foi adicionada para depuração de CSS flexbox.

Além das inovações e correções de erros, a nova versão eliminou 37 vulnerabilidades. Muitas das vulnerabilidades foram identificadas por meio de testes automatizados com as ferramentas AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer e AFL. Não foram encontradas falhas críticas que permitam contornar todos os níveis de proteção do navegador e executar código no sistema fora do ambiente sandbox. No âmbito do programa de recompensas por descoberta de vulnerabilidades para esta versão, a Google pagou 19 prêmios totalizando 54.000 dólares (um prêmio de 20.000 dólares, um prêmio de 10.000 dólares, dois prêmios de 5.000 dólares, três prêmios de 3.000 dólares, um prêmio de 2.000 dólares, um de 1.000 dólares e quatro prêmios de 500 dólares). O valor de 6 prêmios ainda não foi definido.
Vale ressaltar que ontem, após a formação do lançamento corretivo 89.0.4389.128, mas antes do lançamento do Chrome 90, foi publicado mais um exploit que utilizava uma nova vulnerabilidade 0-day, não corrigida no Chrome 89.0.4389.128. Ainda não está claro se essa questão foi resolvida no Chrome 90. Assim como no primeiro caso, o exploit abrange apenas uma vulnerabilidade e não contém código para contornar a proteção de isolamento sandbox (quando o chrome é iniciado com a flag '—no-sandbox', o exploit ao abrir uma página web na plataforma Windows permite a execução do notepad). A vulnerabilidade relacionada ao novo exploit afeta a tecnologia WebAssembly.
Fonte: opennet.ru





