PowerShell 5.1: Invoke-WebRequest: Impedindo a execução de scripts a partir de conteúdo da Web

Aplica-se A
Win 10 Ent LTSB 2016 Win 10 Ent LTSC 2019 Windows 10 IoT Enterprise LTSC 2021 Windows 10, version 22H2, all editions Windows 11 Home and Pro, version 22H2 Windows 11 Enterprise Multi-Session, version 22H2 Windows 11 Enterprise and Education, version 22H2 Windows 11 IoT Enterprise, version 22H2 Windows 11 SE, version 23H2 Windows 11 Home and Pro, version 23H2 Windows 11 Enterprise and Education, version 23H2 Windows 11 Enterprise Multi-Session, version 23H2 Windows 11 version 24H2, all editions Windows 11 version 25H2, all editions Windows Server 2008 Premium Assurance Windows Server 2008 R2 Premium Assurance Windows Server 2012 ESU Windows Server 2012 R2 ESU Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025

Nota

  • Data de publicação original: 9 de dezembro de 2025
  • ID BDC: 5074596

Nota

Este artigo descreve uma alteração que afeta principalmente os ambientes empresariais ou geridos por TI em que os scripts do PowerShell são utilizados para automatização e obtenção de conteúdos Web. People utilizar dispositivos em ambientes pessoais ou domésticos geralmente não precisam de efetuar qualquer ação, uma vez que estes cenários são incomuns fora dos ambientes geridos por TI.

Registo de alterações
Alterar data Descrição da alteração
20 de dezembro de 2025
  • Adicionado o "Aviso de Segurança" à secção "Resumo".
  • Para maior clareza, é aditado o seguinte parágrafo à secção "Resumo":

    O comando Invoke-WebRequest do PowerShell faz uma solicitação HTTP ou HTTPS para um servidor Web e retorna os resultados. Este artigo documenta uma alteração de proteção em que o Windows PowerShell 5.1 exibe intencionalmente um prompt de confirmação de segurança ao usar o comando Invoke-WebRequest para buscar páginas da Web sem parâmetros especiais. Este comportamento ocorre após os clientes e servidores Windows suportados instalarem as Atualizações do Windows lançadas a partir de 9 de dezembro de 2025. Para obter mais informações, consulte CVE-2025-54100.
  • Adição das seguintes marcas de lista a "Para scripts automatizados ou tarefas agendadas" na Opção 1 da secção "Tomar medidas".
    • Para scripts executados com a opção sem perfil: Se o script tiver muitas ocorrências das chamadas Invoke-WebRequest, declare $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true na parte superior do script.
    • Quando Invoke-WebRequest é usado com o parâmetro -UseBasicParsing , a análise do DOM (Full Document Object Model) usando componentes do Internet Explorer (HTMLDocument Interface (mshtml)) não é possível.
  • Adição do seguinte marcador ao marcador "Modernize a sua abordagem às interações na Web" da Opção 2 na secção "Tomar medidas".
    • Invoke-Webrequest no Powershell Core (versão 7.x ou posterior) não suporta a análise DOM utilizando componentes do Internet Explorer. Sua análise padrão recuperará com segurança o conteúdo sem execução de script.

Resumo

Windows PowerShell 5.1 agora exibe um prompt de confirmação de segurança ao usar o comando Invoke-WebRequest para buscar páginas da Web sem parâmetros especiais.

Nota

  • Aviso de Segurança: Risco de Execução de Script Invoke-WebRequest analisa o conteúdo da página Web. O código de script na página Web pode ser executado quando a página é analisada.
  • AÇÃO RECOMENDADA: Use a opção -UseBasicParsing para evitar a execução de código de script.
  • Pretende continuar?

Este aviso avisa-o de que os scripts na página podem ser executados durante a análise e aconselha a utilização do
-UseBasicParsing parâmetro para evitar qualquer execução de script. Os utilizadores têm de optar por continuar ou cancelar a operação. Esta alteração ajuda a proteger contra conteúdos Web maliciosos ao exigir o consentimento do utilizador antes de ações potencialmente arriscadas.

O comando Invoke-WebRequest do PowerShell faz uma solicitação HTTP ou HTTPS a um servidor Web e retorna os resultados. Este artigo documenta uma alteração de proteção onde o Windows PowerShell 5.1 exibe intencionalmente um prompt de confirmação de segurança ao usar o comando Invoke-WebRequest para buscar páginas da Web sem parâmetros especiais. Este comportamento ocorre após clientes e servidores Windows suportados terem instalado Atualizações Windows lançados a 9 de dezembro de 2025 e após essa data. Para obter mais informações, consulte CVE-2025-54100.

O que mudou?

  • Comportamento anterior

    • Análise do DOM (Full Document Object Model) usando componentes do Internet Explorer (HTMLDocument Interface (mshtml)), que podem executar scripts a partir de conteúdo baixado.
  • Novo comportamento

    • Pedido de confirmação de segurança: Depois de instalar as atualizações do Windows lançadas em ou depois de 9 de dezembro de 2025, executar o comando Invoke-WebRequest (também conhecido como curl) no PowerShell 5.1 acionará um prompt de segurança (quando nenhum parâmetro especial for usado). A mensagem é apresentada na consola do PowerShell com um aviso sobre o Risco de Execução de Scripts

      Isto significa que o PowerShell está a efetuar uma pausa para o avisar de que, sem precauções, o conteúdo do script da página Web poderá ser executado no seu sistema quando for processado. Por predefinição, se premir Enter (ou selecionar Não), a operação será cancelada por motivos de segurança. O PowerShell mostrará uma mensagem a indicar que foi cancelado devido a questões de segurança e sugere que o comando seja executado novamente utilizando o
      -UseBasicParsing parâmetro para processamento seguro. Se você escolher Sim, o PowerShell continuará a analisar a página usando o método mais antigo (análise HTML completa), o que significa que ele carregará o conteúdo e todos os scripts incorporados como costumava fazer. Essencialmente, escolher Sim significa que você está aceitando o risco e permitindo que o comando seja executado como antes, enquanto escolher Não (o padrão) interrompe a ação para protegê-lo.

    • Utilização interativa vs. scripted: A introdução deste pedido afeta principalmente a utilização interativa. Em sessões interativas, você verá o aviso e terá que responder. Para scripts automatizados (cenários não interativos, como tarefas agendadas ou pipelines de CI), esse prompt pode fazer com que o script trave enquanto aguarda a entrada. Para evitar isso, recomendamos atualizar esses scripts para usar explicitamente parâmetros seguros (veja abaixo), garantindo que eles não exijam confirmação manual.

Tome medidas

A maioria dos scripts e comandos do PowerShell que usam o comando Invoke-WebRequest continuarão a funcionar com pouca ou nenhuma modificação. Por exemplo, os scripts que só transferem conteúdo ou funcionam com o corpo da resposta como texto ou dados não são afetados e não necessitam de alterações.

Se tiver scripts que são afetados por esta alteração, utilize uma das seguintes abordagens.

Opção 1: Utilize a nova predefinição segura

Para buscar conteúdo, nenhuma ação é necessária se seu uso típico do comando Invoke-WebRequest for buscar conteúdo (como baixar arquivos ou ler texto estático) e você não depender de interação avançada do site ou análise HTML DOM. O novo comportamento predefinido é mais seguro — os scripts incorporados em conteúdos Web não serão executados sem a sua permissão — e esta é a configuração recomendada para a maioria dos cenários.

Para uso interativo, basta responder Não ao novo prompt de segurança (ou pressionar Enter para aceitar o padrão) e executar novamente o comando com o parâmetro -UseBasicParsing para recuperar o conteúdo com segurança. Isto evitará executar qualquer código de script na página obtida. Se você frequentemente buscar conteúdo da Web de forma interativa, considere usar o parâmetro -UseBasicParsing por padrão em seus comandos para ignorar o prompt completamente e garantir a máxima segurança.

Para scripts automatizados ou tarefas agendadas, atualize-as para incluir o parâmetro -UseBasicParsing em chamadas Invoke-WebRequest . Esta ação pré-seleciona o comportamento seguro para que o pedido não seja apresentado e o script continue a ser executado sem interrupções. Ao fazer isso, você garante que sua automação seja executada perfeitamente após a atualização, sem deixar de aproveitar a segurança aprimorada.

  • Para scripts executados com a opção -NoProfile: Se o script tiver muitas ocorrências das chamadas Invoke-WebRequest , declare $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true na parte superior do script.
  • Quando Invoke-WebRequest é usado com o parâmetro -UseBasicParsing , a análise do DOM (Full Document Object Model) usando componentes do Internet Explorer (HTMLDocument Interface (mshtml)) não é possível.
Opção 2: refatorar scripts para segurança a longo prazo

Para scripts ou automação que lidam com conteúdo da Web público ou não confiável e exigem processamento de estruturas ou formulários HTML, considere refatorá-los ou atualizá-los para segurança a longo prazo. Em vez de depender do PowerShell para analisar e executar scripts de páginas Web potencialmente perigosos, pode:

  • Use bibliotecas ou métodos de análise alternativos (por exemplo, trate o conteúdo da página da Web como texto simples ou XML, usando bibliotecas de análise regex ou XML/HTML que não executam scripts).

  • Modernize a sua abordagem às interações Web utilizando, por exemplo, o mais recente PowerShell Core (versão 7.x ou posterior), que não depende do motor do Internet Explorer e evita a execução de scripts, ou utilizando ferramentas especializadas de extração da Web que lidam com o conteúdo de forma mais segura. Limite a dependência de recursos específicos do Internet Explorer, já que o Internet Explorer foi preterido. Planeie reescrever partes dos seus scripts que dependem dessas funcionalidades, para que possam trabalhar num ambiente onde o conteúdo Web é tratado em segurança.

    • Invoke-WebRequest no PowerShell Core (versão 7.x ou posterior) não suporta a análise DOM utilizando componentes do Internet Explorer. Sua análise padrão recuperará com segurança o conteúdo sem execução de script.
  • O objetivo com a refatoração é alcançar a funcionalidade necessária sem se expor a riscos de segurança, adotando assim os padrões mais seguros introduzidos por essa mudança.

Opção 3: Optar ativamente por participar no comportamento legado (apenas cenários fidedignos)

Se você tiver uma necessidade específica de usar os recursos completos de análise HTML do comando Invoke-WebRequest (como interagir com campos de formulário ou raspar dados estruturados) e confiar na origem do conteúdo da Web, ainda poderá prosseguir com o comportamento de análise herdado caso a caso. Em sessões interativas, isso significa simplesmente escolher Sim no prompt de confirmação para permitir que a operação continue. Receberá um lembrete do risco de segurança sempre que o fizer. Prosseguir sem o parâmetro -UseBasicParsing deve ser limitado a cenários em que você confia totalmente no conteúdo da Web (por exemplo, aplicativos da Web internos sob seu controle ou sites seguros conhecidos).

Importante

Esta abordagem não é recomendada para scripts executados em conteúdo Web público ou não fidedigno, porque reintroduz o risco de execução de script silencioso que esta atualização pretende mitigar. Além disso, para automação não interativa, não há nenhum mecanismo interno para consentir automaticamente com o prompt, portanto, confiar na análise completa em scripts não é aconselhável (além de arriscado). Utilize esta opção com moderação e apenas como medida temporária.

Perguntas mais frequentes

Esta alteração afeta os meus scripts?

Na maioria dos casos, os scripts que transferem ficheiros ou obtêm conteúdo Web como texto continuarão a funcionar. Para evitar o prompt, adicione o parâmetro -UseBasicParsing .

Scripts que usam análise avançada de HTML (como formulários ou DOM) podem travar ou produzir dados brutos em vez de objetos estruturados; Terá de mudar para a análise básica ou modificar o script para processar o conteúdo de forma diferente.

Como posso evitar o novo pedido de confirmação nos meus scripts?

Sempre use o parâmetro -UseBasicParsing com o comando Invoke-WebRequest em scripts do PowerShell para garantir uma execução segura e não interativa.

Esta alteração exige alguma ação para scripts legados?

Sim. Os scripts que dependem da análise herdada têm de ser atualizados para serem ativados ou refatorados.

Como é que esta alteração se reflete nas atualizações padrão e de aplicação dinâmica de patches?

A alteração no PowerShell é aplicável tanto a atualizações padrão como a atualizações de hotpatches, resultando na mesma alteração de comportamento.

Esta alteração está alinhada com o PowerShell 7?

Sim. O PowerShell 7 já utiliza a análise segura por predefinição.

O que devo fazer em relação a scripts ou módulos de terceiros?

Contacte os proprietários dos módulos para obter planos de suporte. Utilize temporariamente a opção ativa de participação para conteúdos fidedignos durante a migração.

Como devo proceder para verificar se o meu ambiente está pronto?

Para se preparar e validar esta alteração, recomendamos que:

  • Identifique scripts usando recursos DOM.
  • Automatização de testes com a nova predefinição.
  • Limite a opção ativa de participação legada a origens fidedignas.
  • Planeie a refatoração de conteúdos não fidedignos.