Baca dalam bahasa Inggris

Bagikan melalui


3181759 Microsoft Security Advisory

Kerentanan dalam Komponen Tampilan Inti ASP.NET Dapat Memungkinkan Elevasi

Diterbitkan: 13 September 2016

Versi: 1.0

Ringkasan Eksekutif

Microsoft merilis saran keamanan ini untuk memberikan informasi tentang kerentanan dalam versi publik ASP.NET Core MVC 1.0.0. Saran ini juga memberikan panduan tentang apa yang dapat dilakukan pengembang untuk membantu memastikan bahwa aplikasi mereka diperbarui dengan benar.

Microsoft mengetahui kerentanan keamanan dalam versi publik ASP.NET Core MVC 1.0.0 di mana Komponen Tampilan dapat menerima informasi yang salah, termasuk detail pengguna yang diautentikasi saat ini. Jika Komponen Tampilan bergantung pada kode yang rentan dan membuat keputusan berdasarkan pengguna saat ini, maka Komponen Tampilan dapat membuat keputusan yang salah yang menghasilkan peningkatan hak istimewa.

Faktor Mitigasi

Komponen Tampilan harus menggunakan properti Pengguna yang diekspos oleh kelas ViewComponent untuk membuat keputusan atau mengubah output berdasarkan konten properti Pengguna. Kode pihak ketiga juga dapat menyertakan Komponen Tampilan yang bertindak singgah itu. Microsoft mendorong semua pengembang untuk memperbarui paket mereka, terlepas dari apakah mereka menggunakan Komponen Tampilan atau properti Pengguna di dalamnya, untuk melindungi dari penggunaan komponen di masa mendatang dengan sendirinya atau perangkat lunak pihak ketiga.

Perangkat Lunak yang Terpengaruh

Proyek Microsoft ASP.NET Core dipengaruhi oleh kerentanan jika menggunakan salah satu versi paket yang terpengaruh dalam tabel berikut.

Paket dan versi yang terpengaruh
Nama paket Versi paket
Microsoft.AspNetCore.Mvc 1.0.0
Microsoft.AspNetCore.Mvc.Abstractions 1.0.0
Microsoft.AspNetCore.Mvc.ApiExplorer 1.0.0
Microsoft.AspNetCore.Mvc.Core 1.0.0
Microsoft.AspNetCore.Mvc.Cors 1.0.0
Microsoft.AspNetCore.Mvc.DataAnnotations 1.0.0
Microsoft.AspNetCore.Mvc.Formatters.Json 1.0.0
Microsoft.AspNetCore.Mvc.Formatters.Xml 1.0.0
Microsoft.AspNetCore.Mvc.Localization 1.0.0
Microsoft.AspNetCore.Mvc.Razor 1.0.0
Microsoft.AspNetCore.Mvc.Razor.Host 1.0.0
Microsoft.AspNetCore.Mvc.TagHelpers 1.0.0
Microsoft.AspNetCore.Mvc.ViewFeatures 1.0.0
Microsoft.AspNetCore.Mvc.WebApiCompatShim 1.0.0

Tanya Jawab Umum Penasihat

Bagaimana cara mengetahui apakah saya terpengaruh?
ASP.NET Core memiliki dua jenis dependensi yang berbeda: langsung dan transitif. Jika proyek Anda memiliki dependensi langsung atau transitif pada salah satu paket yang terpengaruh yang tercantum di bagian "Perangkat Lunak yang Terpengaruh", maka mungkin terpengaruh.

Dependensi Langsung

Dependensi langsung terjadi ketika Anda secara khusus menambahkan paket ke proyek Anda. Misalnya, jika Anda menambahkan paket Microsoft.AspNetCore.Mvc ke proyek Anda, maka Anda telah mengambil dependensi langsung pada Microsoft.AspNetCore.Mvc.

Dependensi langsung dapat ditemukan dengan meninjau file project.json Anda.

Dependensi Transitif

Dependensi transitif terjadi ketika Anda menambahkan paket ke proyek Anda yang pada gilirannya bergantung pada paket lain. Misalnya, jika Anda menambahkan paket Microsoft.AspNetCore.Authentication ke proyek Anda, paket tersebut bergantung pada paket Microsoft.AspNetCore.Http (antara lain). Hal ini menyebabkan proyek Anda memiliki dependensi langsung pada Microsoft.AspNetCore.Authentication dan dependensi transitif pada paket Microsoft.AspNetCore.Http.

Dependensi transitif dapat ditinjau di jendela Penjelajah Solusi Microsoft Visual Studio, yang juga mendukung pencarian, atau dengan meninjau file project.lock.json yang terkandung dalam direktori akar proyek Anda. File ini berisi daftar paket otoritatif untuk proyek Anda.

Bagaimana cara memperbaiki aplikasi yang terpengaruh?

Anda harus memperbaiki dependensi langsung dan meninjau dan memperbaiki dependensi transitif apa pun. Versi 1.0.1 dari masing-masing paket yang rentan berisi perbaikan yang diperlukan untuk mengamankan aplikasi Anda.

Memperbaiki Dependensi Langsung

Untuk memperbaiki dependensi langsung:

  1. Buka file project.json Anda di editor Anda. Cari bagian dependensi. Berikut ini menyediakan bagian contoh:

        "dependencies": {
          "Microsoft.NETCore.App": {
            "version": "1.0.0",
            "type": "platform"
          },
          "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
          "Microsoft.AspNetCore.Mvc": "1.0.0",
        }
    

    Dalam contoh ini, ada tiga dependensi langsung: Microsoft.NetCore.App, Microsoft.AspNetCore.Server.Kestrel dan Microsoft.AspNetCore.Mvc.

    Microsoft.NetCore.App adalah platform yang ditargetkan aplikasi, dan dapat diabaikan. Paket lain mengekspos versinya di sebelah kanan nama paket. Dalam contoh ini, paket non-platform adalah versi 1.0.0.

  2. Tinjau dependensi langsung Anda terhadap daftar paket yang rentan di bagian Perangkat Lunak yang Terpengaruh dari saran ini.

    Untuk setiap paket yang rentan di mana ada dependensi langsung, ubah nomor versi di editor Anda menjadi 1.0.1. Setelah memperbarui semua versi paket yang rentan, simpan file project.json Anda.

    Bagian dependensi dalam contoh file project.json kami sekarang akan muncul sebagai berikut:

       "dependencies": {
         "Microsoft.NETCore.App": {
           "version": "1.0.0",
           "type": "platform"
         },
         "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
         "Microsoft.AspNetCore.Mvc": "1.0.1",
       }
    

    Jika Anda menggunakan Visual Studio dan menyimpan file project.json yang diperbarui, versi baru akan dipulihkan oleh Visual Studio. Anda dapat melihat hasil pemulihan dengan membuka Jendela Output (Ctrl+Alt+O), lalu mengubah daftar drop-down Tampilkan output dari ke Manajer Paket.

    Jika Anda tidak menggunakan Visual Studio, buka baris perintah dan ubah ke direktori proyek Anda. Jalankan perintah pemulihan dotnet untuk memulihkan dependensi baru Anda.

  3. Setelah Anda mengatasi semua dependensi langsung Anda, Anda siap untuk meninjau dependensi transitif Anda.

Meninjau Dependensi Transitif

Ada dua cara untuk melihat dependensi transitif: Gunakan Visual Studio Penjelajah Solusi, atau tinjau file project.lock.json Anda.

Menggunakan Visual Studio Penjelajah Solusi

Jika Anda ingin menggunakan Penjelajah Solusi, buka proyek Anda di Visual Studio, lalu tekan Ctrl+; untuk mengaktifkan pencarian di Penjelajah Solusi. Cari setiap nama paket yang tercantum di bagian Perangkat Lunak Yang Terpengaruh di saran ini, dan catat paket rentan apa pun yang Anda temukan.

Misalnya, mencari Microsoft.AspNetCore.Mvc dalam proyek contoh yang berisi paket yang mengambil dependensi pada Microsoft.AspNetCore.Mvc menampilkan hasil berikut dalam gambar berikut.

Gambar 1: Mencari di Visual Studio

Hasil pencarian muncul sebagai pohon. Dalam hasilnya, Anda dapat melihat referensi yang diidentifikasi. Entri pertama di bawah judul Referensi mengacu pada kerangka kerja target yang digunakan aplikasi Anda. Ini akan menjadi . NETCoreApp, . NETStandard atau . NET-Framework-vX.Y.Z (di mana X.Y.Z adalah nomor versi aktual) tergantung pada cara Anda mengonfigurasi aplikasi Anda. Di bawah kerangka kerja target Anda, daftar tampilan paket yang telah Anda ambil dependensinya secara langsung. Dalam contoh ini, aplikasi mengambil dependensi pada VulnerablePackage. VulnerablePackage pada gilirannya memiliki simpul daun yang mencantumkan dependensinya dan versinya. Dalam hal ini, paket mengambil dependensi pada versi Microsoft.AspNetCore.Mvc yang rentan dan lainnya.

Meninjau project.lock.json secara manual

Buka file project.lock.json di editor Anda. Sebaiknya gunakan editor yang memahami json dan yang memungkinkan Anda untuk menciutkan dan memperluas simpul untuk meninjau file ini. Visual Studio dan Visual Studio Code menyediakan fungsionalitas ini.

Jika Anda menggunakan Visual Studio, file project.lock.json berada "di bawah" file project.json. Klik segitiga penunjuk kanan, ▷, di sebelah kiri file project.json untuk memperluas pohon solusi untuk mengekspos file project.lock.json. Gambar berikut menampilkan proyek dengan file project.json diperluas untuk memperlihatkan file project.lock.json.

Gambar 2: lokasi file project.lock.json

Cari file project.lock.json untuk paket rentan yang tercantum di bagian Perangkat Lunak Yang Terpengaruh dari saran ini. Untuk setiap paket, ambil nama paket, tambahkan / lalu tambahkan nomor versi. Misalnya, Microsoft.AspNetCore.Mvc versi 1.0.0 diwakili dalam file project.lock.json sebagai "Microsoft.AspNetCore.Mvc/1.0.0". Catat setiap nama paket yang Anda temukan yang cocok dengan entri dalam tabel di bagian Perangkat Lunak yang Terpengaruh dari saran ini.

Memperbaiki Dependensi Transitif

Anda sekarang mungkin memiliki daftar paket yang terpengaruh. Jika Anda belum menemukan paket sementara, maka tidak ada dependensi Anda yang pada gilirannya bergantung pada paket yang rentan, atau Anda telah memperbaiki masalah dengan memperbarui dependensi langsung.

Jika ulasan dependensi transitif Anda telah menghasilkan daftar paket yang rentan, maka Anda harus menambahkan dependensi langsung ke versi yang diperbarui dari setiap paket yang rentan ke file project.json Anda untuk mengambil alih dependensi transitif. Buka file project.json Anda dan temukan bagian dependensi. Contohnya:


   "dependencies": {
     "Microsoft.NETCore.App": {
       "version": "1.0.0",
       "type": "platform"
     },
     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
     "VulnerablePackage": "1.0.0-*"
   }

Hasil pencarian paket transitif menunjukkan bahwa VulnerablePackage bergantung pada Microsoft.AspNet.Mvc versi 1.0.0. Untuk memperbaiki contoh ini, Anda harus menambahkan dependensi langsung dengan menambahkannya ke file project.json. Anda dapat melakukan ini dengan menambahkan baris baru ke bagian dependensi yang mengacu pada versi tetap. Misalnya, untuk menarik versi tetap Microsoft.AspNet.Mvc, versi 1.0.1, edit file project.json sebagai berikut:


    "dependencies": {
      "Microsoft.NETCore.App": {
        "version": "1.0.0",
        "type": "platform"
      },
      "Microsoft.AspNetCore.Mvc": "1.0.1",
      "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
      "VulnerablePackage": "1.0.0-*"
    }

Setelah menambahkan dependensi langsung ke paket tetap, simpan proyek Anda. file json.

Jika Anda menggunakan Visual Studio, menyimpan file project.json yang diperbarui akan menyimpan versi baru di Visual Studio. Untuk melihat hasil pemulihan, buka Jendela Output (Ctrl+Alt+O) dan ubah daftar drop-down Tampilkan output dari ke Manajer Paket.

Jika Anda tidak menggunakan Visual Studio, buka baris perintah dan ubah ke direktori proyek Anda. Jalankan perintah pemulihan dotnet untuk memulihkan dependensi baru Anda.

Anda mungkin ingin memeriksa dependensi transitif lagi untuk memastikan bahwa Anda telah memperbaiki semuanya.

Membangun Kembali Aplikasi Anda

Terakhir, bangun kembali aplikasi Anda, uji seperti biasa, lalu sebarkan ulang menggunakan mekanisme penyebaran yang Anda sukai.

Tindakan yang Disarankan

  • Memperbarui templat ASP.NET Core
    "Microsoft .NET Core 1.0.1 - VS 2015 Tooling Preview 2" memperbarui templat ASP.NET Core untuk menggunakan paket tetap.

    Untuk mengunduh pratinjau ini, lihat bagian "Alat" dari halaman Unduhan .NET.

Informasi Lainnya

Program Perlindungan Aktif Microsoft (MAPP)

Untuk meningkatkan perlindungan keamanan bagi pelanggan, Microsoft menyediakan informasi kerentanan kepada penyedia perangkat lunak keamanan utama sebelum setiap rilis pembaruan keamanan bulanan. Penyedia perangkat lunak keamanan kemudian dapat menggunakan informasi kerentanan ini untuk memberikan perlindungan terbaru kepada pelanggan melalui perangkat lunak atau perangkat keamanan mereka, seperti antivirus, sistem deteksi intrusi berbasis jaringan, atau sistem pencegahan intrusi berbasis host. Untuk menentukan apakah perlindungan aktif tersedia dari penyedia perangkat lunak keamanan, kunjungi situs web perlindungan aktif yang disediakan oleh mitra program, yang tercantum dalam Mitra Program Perlindungan Aktif Microsoft (MAPP).

Saran dan Komentar

Dukungan

  • Anda dapat mengajukan pertanyaan tentang nasihat ini di GitHub di bagian ASP.NET repositori Core MVC.
  • Pelanggan di Amerika Serikat dan Kanada dapat menerima dukungan teknis dari Dukungan Keamanan. Untuk informasi selengkapnya, lihat Bantuan dan Dukungan Microsoft.
  • Pelanggan internasional dapat menerima dukungan dari anak perusahaan Microsoft lokal mereka. Untuk informasi selengkapnya, lihat Dukungan Internasional.
  • Microsoft TechNet Security menyediakan informasi tambahan tentang keamanan di produk Microsoft.

Pengelakan

Informasi yang diberikan dalam saran ini disediakan "apa adanya" tanpa jaminan apa pun. Microsoft menolak semua jaminan, baik tersurat maupun tersirat, termasuk jaminan kelayakan untuk diperdagangkan dan kesesuaian untuk tujuan tertentu. Dalam hal apa pun, Microsoft Corporation atau pemasoknya tidak bertanggung jawab atas kerusakan apa pun termasuk kerusakan langsung, tidak langsung, insidental, konsekuensial, kehilangan keuntungan bisnis atau kerusakan khusus, bahkan jika Microsoft Corporation atau pemasoknya telah diberi tahu tentang kemungkinan kerusakan tersebut. Beberapa negara bagian tidak mengizinkan pengecualian atau batasan tanggung jawab untuk kerusakan konsekuensial atau insidental sehingga batasan sebelumnya mungkin tidak berlaku.

Revisi

  • V1.0 (13 September 2016): Nasihat diterbitkan.

Halaman yang dihasilkan 2016-09-09 14:58-07:00.