PowerShell 5.1: Invoke-WebRequest: Mencegah eksekusi skrip dari konten web

Berlaku Untuk
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

Catatan

  • Tanggal publikasi asli: 9 Desember 2025
  • ID KB: 5074596

Catatan

Artikel ini menjelaskan perubahan yang terutama berdampak pada lingkungan yang dikelola perusahaan atau TI tempat skrip PowerShell digunakan untuk otomatisasi dan pengambilan konten web. People yang menggunakan perangkat di pengaturan pribadi atau rumah umumnya tidak perlu melakukan tindakan apa pun, karena skenario ini jarang terjadi di luar lingkungan yang dikelola TI.

Log perubahan
Ubah tanggal Ubah deskripsi
20 Desember 2025
  • Menambahkan "Peringatan Keamanan" ke bagian "Ringkasan".
  • Menambahkan paragraf berikut ke bagian "Ringkasan" untuk kejelasan:

    Perintah Invoke-WebRequest PowerShell membuat permintaan HTTP atau HTTPS ke server web dan mengembalikan hasilnya. Artikel ini mendokumentasikan perubahan pengerasan ketika Windows PowerShell 5.1 dengan sengaja menampilkan perintah konfirmasi keamanan saat menggunakan perintah Invoke-WebRequest untuk mengambil halaman web tanpa parameter khusus. Perilaku ini terjadi setelah klien dan server Windows yang didukung diinstal, instal Windows Updates yang dirilis pada dan setelah 9 Desember 2025. Untuk informasi selengkapnya, lihat CVE-2025-54100.
  • Menambahkan poin poin berikut ke "Untuk skrip otomatis atau tugas terjadwal" di Opsi 1 bagian "Ambil tindakan".
    • Untuk skrip yang berjalan dengan opsi no-profile: Jika skrip memiliki banyak kemunculan panggilan Invoke-WebRequest, deklarasikan $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true di bagian atas skrip.
    • Ketika Invoke-WebRequest digunakan dengan parameter -UseBasicParsing , penguraian Full Document Object Model (DOM) menggunakan komponen Internet Explorer (HTMLDocument Interface (mshtml)) tidak dimungkinkan.
  • Menambahkan poin poin berikut ke poin "Modernisasi pendekatan Anda terhadap interaksi web" dari Opsi 2 di bagian "Mengambil tindakan".
    • Invoke-Webrequest di Powershell Core (versi 7.x atau yang lebih baru) tidak mendukung penguraian DOM menggunakan komponen Internet Explorer. Pemilahan defaultnya akan mengambil konten dengan aman tanpa eksekusi skrip.

Ringkasan

Windows PowerShell 5.1 kini menampilkan perintah konfirmasi keamanan saat menggunakan perintah Invoke-WebRequest untuk mengambil halaman web tanpa parameter khusus.

Catatan

  • Peringatan Keamanan: Risiko Eksekusi Skrip Invoke-WebRequest mengurai konten halaman web. Kode skrip di halaman web mungkin dijalankan saat halaman dipilah.
  • TINDAKAN YANG DISARANKAN: Gunakan sakelar -UseBasicParsing untuk menghindari eksekusi kode skrip.
  • Anda ingin melanjutkan?

Perintah ini memperingatkan bahwa skrip di halaman dapat berjalan selama penguraian dan menyarankan untuk menggunakan
-UseBasicParsing untuk menghindari eksekusi skrip apa pun. Pengguna harus memilih untuk melanjutkan atau membatalkan operasi. Perubahan ini membantu melindungi dari konten web berbahaya dengan mewajibkan persetujuan pengguna sebelum tindakan yang berpotensi berisiko.

Perintah Invoke-WebRequest PowerShell membuat permintaan HTTP atau HTTPS ke server web dan mengembalikan hasilnya. Artikel ini mendokumentasikan perubahan pengerasan ketika Windows PowerShell 5.1 dengan sengaja menampilkan perintah konfirmasi keamanan saat menggunakan perintah Invoke-WebRequest untuk mengambil halaman web tanpa parameter khusus. Perilaku ini terjadi setelah klien dan server Windows yang didukung menginstal Windows Updates yang dirilis pada dan setelah 9 Desember 2025. Untuk informasi selengkapnya, lihat CVE-2025-54100.

Apa yang berubah?

  • Perilaku sebelumnya

    • Pemilahan Model Objek Dokumen Lengkap (DOM) menggunakan komponen Internet Explorer (HTMLDocument Interface (mshtml)), yang dapat menjalankan skrip dari konten yang diunduh.
  • Perilaku baru

    • Prompt konfirmasi keamanan: Setelah menginstal pembaruan Windows yang dirilis pada atau setelah 9 Desember 2025, menjalankan perintah Invoke-WebRequest (juga dikenal sebagai curl) di PowerShell 5.1 akan memicu perintah keamanan (ketika tidak ada parameter khusus yang digunakan). Perintah muncul di konsol PowerShell dengan peringatan tentang Risiko Eksekusi Skrip

      Artinya, PowerShell berhenti sejenak untuk memperingatkan Anda bahwa tanpa tindakan pencegahan, konten skrip halaman web dapat dieksekusi di sistem Anda saat diproses. Secara default, jika Anda menekan Enter (atau memilih Tidak), operasi akan dibatalkan untuk keamanan. PowerShell akan menampilkan pesan bahwa file tersebut dibatalkan karena masalah keamanan dan menyarankan untuk menjalankan ulang perintah dengan menggunakan
      -UseBasicParsing parameter untuk pemrosesan yang aman. Jika Anda memilih Ya, PowerShell akan melanjutkan untuk mengurai halaman menggunakan metode lama (penguraian HTML penuh), yang berarti PowerShell akan memuat konten dan skrip yang disematkan seperti dulu. Pada dasarnya, memilih Ya berarti Anda menerima risiko dan membiarkan perintah berjalan seperti sebelumnya, sementara memilih Tidak (default) menghentikan tindakan untuk melindungi Anda.

    • Penggunaan interaktif vs. skrip: Pengenalan perintah ini terutama memengaruhi penggunaan interaktif. Dalam sesi interaktif, Anda akan melihat peringatan dan harus merespons. Untuk skrip otomatis (skenario non-interaktif seperti tugas terjadwal atau alur CI), perintah ini dapat menyebabkan skrip macet saat menunggu input. Untuk menghindari hal tersebut, sebaiknya perbarui skrip tersebut untuk secara eksplisit menggunakan parameter aman (lihat di bawah), memastikan skrip tersebut tidak memerlukan konfirmasi manual.

Mengambil tindakan

Sebagian besar skrip dan perintah PowerShell yang menggunakan perintah Invoke-WebRequest akan terus berfungsi dengan sedikit atau tanpa modifikasi. Misalnya, skrip yang hanya mengunduh konten atau berfungsi dengan isi respons sebagai teks atau data tidak terpengaruh dan tidak memerlukan perubahan.

Jika Anda memiliki skrip yang terpengaruh oleh perubahan ini, gunakan salah satu pendekatan berikut.

Opsi 1: Gunakan default aman baru

Untuk mengambil konten, tidak ada tindakan yang diperlukan jika penggunaan umum perintah Invoke-WebRequest adalah untuk mengambil konten (seperti mengunduh file atau membaca teks statis) dan Anda tidak bergantung pada interaksi situs tingkat lanjut atau penguraian DOM HTML. Perilaku default baru lebih aman—skrip yang disematkan dalam konten web tidak akan berjalan tanpa izin Anda—dan ini adalah konfigurasi yang disarankan untuk sebagian besar skenario.

Untuk penggunaan interaktif, cukup jawab Tidak pada perintah keamanan baru (atau tekan Enter untuk menerima default) dan jalankan ulang perintah Anda dengan parameter -UseBasicParsing untuk mengambil konten dengan aman. Hal ini akan menghindari eksekusi kode skrip apa pun di halaman yang diambil. Jika Anda sering mengambil konten web secara interaktif, pertimbangkan untuk menggunakan parameter -UseBasicParsing secara default dalam perintah Anda untuk melewati perintah sama sekali dan memastikan keamanan maksimum.

Untuk skrip otomatis atau tugas terjadwal, perbarui agar menyertakan parameter -UseBasicParsing pada panggilan Invoke-WebRequest . Tindakan ini akan memilih perilaku aman sehingga perintah tidak muncul dan skrip Anda terus berjalan tanpa gangguan. Dengan melakukan hal ini, Anda memastikan bahwa otomatisasi berjalan lancar setelah pembaruan sambil tetap memanfaatkan keamanan yang ditingkatkan.

  • Untuk skrip yang berjalan dengan opsi -NoProfile: Jika skrip memiliki banyak kemunculan panggilan Invoke-WebRequest , deklarasikan $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true di bagian atas skrip.
  • Ketika Invoke-WebRequest digunakan dengan parameter -UseBasicParsing , penguraian Full Document Object Model (DOM) menggunakan komponen Internet Explorer (HTMLDocument Interface (mshtml)) tidak dimungkinkan.
Opsi 2: Ubah faktorkan skrip untuk keamanan jangka panjang

Untuk skrip atau otomatisasi yang berhubungan dengan konten web yang tidak tepercaya atau publik dan memerlukan pemrosesan struktur atau formulir HTML, pertimbangkan untuk memfaktorkan ulang atau memperbaruinya untuk keamanan jangka panjang. Daripada mengandalkan PowerShell untuk mengurai dan menjalankan skrip halaman web yang berpotensi berbahaya, Anda dapat:

  • Gunakan metode atau pustaka penguraian alternatif (misalnya, perlakukan konten halaman web sebagai teks biasa atau XML, menggunakan pustaka penguraian regex atau XML/HTML yang tidak menjalankan skrip).

  • Modernisasikan pendekatan Anda terhadap interaksi web, mungkin dengan menggunakan PowerShell Core yang lebih baru (versi 7.x atau yang lebih baru) yang tidak bergantung pada mesin Internet Explorer dan menghindari menjalankan skrip, atau dengan menggunakan alat pengikisan web khusus yang menangani konten dengan lebih aman. Batasi ketergantungan pada fitur khusus Internet Explorer, karena Internet Explorer tidak digunakan lagi. Rencanakan untuk menulis ulang bagian-bagian skrip Anda yang bergantung pada fitur tersebut agar dapat berfungsi di lingkungan di mana konten web ditangani dengan aman.

    • Invoke-WebRequest di PowerShell Core (versi 7.x atau yang lebih baru) tidak mendukung penguraian DOM menggunakan komponen Internet Explorer. Pemilahan defaultnya akan mengambil konten dengan aman tanpa eksekusi skrip.
  • Tujuan dengan pemfaktoran ulang adalah untuk mencapai fungsionalitas yang Anda butuhkan tanpa mengekspos diri Anda pada risiko keamanan, sehingga merangkul default yang lebih aman yang diperkenalkan oleh perubahan ini.

Opsi 3: Keikutsertakan perilaku warisan (skenario tepercaya saja)

Jika Anda memiliki kebutuhan khusus untuk menggunakan kemampuan penguraian HTML penuh perintah Invoke-WebRequest (seperti berinteraksi dengan bidang formulir atau mengikis data terstruktur) dan memercayai sumber konten web, Anda masih dapat melanjutkan perilaku penguraian warisan berdasarkan kasus per kasus. Dalam sesi interaktif, ini berarti memilih Ya pada perintah konfirmasi agar operasi dapat dilanjutkan. Anda akan menerima pengingat tentang risiko keamanan setiap kali Anda melakukannya. Melanjutkan tanpa parameter -UseBasicParsing harus dibatasi pada skenario di mana Anda sepenuhnya memercayai konten web (misalnya, aplikasi web internal di bawah kendali Anda atau situs web aman yang diketahui).

Penting

Pendekatan ini tidak disarankan untuk skrip yang berjalan terhadap konten web yang tidak tepercaya atau publik, karena memperkenalkan kembali risiko eksekusi skrip senyap yang dimaksudkan untuk dimitigasi oleh pembaruan ini. Selain itu, untuk otomatisasi non-interaktif, tidak ada mekanisme bawaan untuk menyetujui perintah secara otomatis, jadi tidak disarankan untuk mengandalkan penguraian penuh dalam skrip (selain berisiko). Gunakan opsi ini dengan hemat dan hanya sebagai tindakan sementara.

Tanya jawab umum

Apakah perubahan ini memengaruhi skrip saya?

Biasanya, skrip yang mengunduh file atau mengambil konten web sebagai teks akan tetap berfungsi. Untuk menghindari perintah, tambahkan parameter -UseBasicParsing .

Skrip yang menggunakan penguraian HTML tingkat lanjut (seperti formulir atau DOM) mungkin menggantung atau menghasilkan data mentah, bukan objek terstruktur; Anda perlu beralih ke penguraian dasar atau memodifikasi skrip agar menangani konten secara berbeda.

Bagaimana cara menghindari perintah konfirmasi baru dalam skrip saya?

Selalu gunakan parameter -UseBasicParsing dengan perintah Invoke-WebRequest dalam skrip PowerShell untuk memastikan eksekusi yang aman dan non-interaktif.

Apakah perubahan ini memerlukan tindakan apa pun untuk skrip lama?

Ya. Skrip yang bergantung pada penguraian warisan harus diperbarui untuk diikutsertakan atau difaktorkan ulang.

Bagaimana perubahan ini tercermin dalam pembaruan hotpatch dan standar?

Perubahan di PowerShell berlaku untuk pembaruan standar dan pembaruan hotpatch, sehingga menghasilkan perubahan perilaku yang sama.

Apakah perubahan ini selaras dengan PowerShell 7?

Ya. PowerShell 7 sudah menggunakan penguraian aman secara default.

Apa yang harus saya lakukan tentang skrip atau modul pihak ketiga?

Hubungi pemilik modul untuk paket dukungan. Gunakan keikutsertaan sementara untuk konten tepercaya saat melakukan migrasi.

Bagaimana cara memverifikasi bahwa lingkungan saya sudah siap?

Untuk mempersiapkan dan memvalidasi perubahan ini, kami menyarankan Anda:

  • Mengidentifikasi skrip menggunakan fitur DOM.
  • Uji otomatisasi dengan default baru.
  • Batasi keikutsertaan warisan ke sumber tepercaya.
  • Merencanakan pemfaktoran ulang untuk konten yang tidak tepercaya.