Memperbaiki temuan Web Security Scanner

Halaman ini menjelaskan cara menafsirkan, mereproduksi, dan memperbaiki temuan Web Security Scanner.

Peran IAM untuk Security Command Center dapat diberikan di tingkat organisasi, folder, atau project. Kemampuan Anda untuk melihat, mengedit, membuat, atau memperbarui temuan, aset, dan sumber keamanan bergantung pada tingkat akses yang Anda terima. Untuk mempelajari peran Security Command Center lebih lanjut, lihat Kontrol akses.

Class kerentanan

Web Security Scanner mendeteksi class kerentanan berikut:

  • Pembuatan skrip lintas situs (XSS)
  • Pemalsuan permintaan sisi server
  • Injeksi flash
  • Konten campuran
  • Library yang sudah tidak berlaku atau rentan
  • Teks sandi tersembunyi
  • Validasi origin tidak aman
  • Header tidak valid
  • Kesalahan ejaan pada header
  • Repositori yang dapat diakses
  • Injeksi SQL
  • Injeksi XML
  • Polusi prototipe

Jika salah satu kerentanan ini ditemukan, hasilnya akan ditandai agar Anda dapat mempelajarinya secara mendetail.

Dampak pada log

Jejak pemindaian Web Security Scanner akan muncul di file log Anda. Misalnya, Web Security Scanner menghasilkan permintaan untuk string yang tidak biasa seperti ~sfi9876 dan /sfi9876. Proses ini memungkinkan pemindaian untuk memeriksa halaman error aplikasi Anda. Permintaan halaman yang sengaja tidak valid ini muncul di log Anda.

Penonaktifan temuan setelah perbaikan

Setelah Anda memperbaiki kerentanan, Web Security Scanner tidak otomatis menetapkan status temuan Security Command Center yang sesuai ke INACTIVE. Kecuali jika Anda mengubah status secara manual, status temuan yang dihasilkan oleh Web Security Scanner di Security Command Center akan tetap ACTIVE.

Jika Anda menggunakan Web Security Scanner versi mandiri, setelah Anda memperbaiki kerentanan dan Web Security Scanner tidak dapat lagi mendeteksinya, laporan kerentanan berikutnya tidak akan menyertakan kerentanan tersebut. Data kerentanan tetap ada dalam laporan kerentanan sebelumnya.

Web Security Scanner menjalankan pemindaian terkelola setiap minggu.

Untuk mengetahui informasi selengkapnya tentang pemindaian Web Security Scanner, lihat Jenis pemindaian.

Memperbaiki temuan Web Security Scanner

Bagian ini menjelaskan cara memperbaiki berbagai jenis temuan Web Security Scanner. Untuk strategi guna bertahan dari serangan tingkat aplikasi umum yang dijelaskan dalam 10 Teratas OWASP, lihat 10 opsi mitigasi teratas OWASP di Google Cloud.

XSS

Nama kategori di API: XSS

Pengujian injeksi pembuatan skrip lintas situs (XSS) Web Security Scanner menyimulasikan serangan injeksi dengan menyisipkan string pengujian yang tidak berbahaya ke kolom yang dapat diedit pengguna, lalu melakukan berbagai tindakan pengguna. Detektor kustom mengamati browser dan DOM selama pengujian ini untuk menentukan apakah injeksi berhasil dan menilai potensi eksploitasinya.

Jika JavaScript yang terdapat dalam string pengujian dieksekusi dengan bersih, JavaScript tersebut akan memulai debugger Chrome. Jika string pengujian dapat dijalankan, Anda dapat menyuntikkan dan menjalankan JavaScript di halaman. Jika menemukan masalah ini, penyerang dapat mengeksekusi JavaScript pilihan mereka sebagai pengguna (korban) yang mengklik link berbahaya.

Dalam beberapa situasi, aplikasi yang sedang diuji dapat mengubah string pengujian sebelum diuraikan oleh browser. Misalnya, aplikasi mungkin memvalidasi input atau membatasi ukuran kolom. Saat browser mencoba menjalankan string pengujian yang diubah ini, browser tersebut kemungkinan akan rusak dan menampilkan error eksekusi JavaScript. Error ini menunjukkan masalah injeksi, tetapi mungkin tidak dapat dieksploitasi.

Untuk mengatasi masalah ini, Anda perlu mengonfirmasi apakah masalah tersebut adalah kerentanan XSS dengan memverifikasi secara manual apakah modifikasi string pengujian dapat dihindari. Untuk mengetahui informasi mendetail tentang cara memverifikasi kerentanan ini, lihat Cross-site scripting.

Ada berbagai cara untuk memperbaiki masalah ini. Perbaikan yang direkomendasikan adalah meng-escape semua output dan menggunakan sistem template yang mendukung escape otomatis kontekstual.

XSS angular callback

Nama kategori di API: XSS_ANGULAR_CALLBACK

Kerentanan pembuatan skrip lintas situs (XSS) dalam modul AngularJS dapat terjadi saat Angular melakukan interpolasi string yang disediakan pengguna. Memasukkan nilai yang disediakan pengguna ke dalam interpolasi AngularJS dapat memungkinkan serangan berikut:

  • Penyerang dapat memasukkan kode arbitrer ke dalam halaman yang dirender oleh browser.
  • Penyerang dapat melakukan tindakan atas nama browser korban di asal halaman.

Untuk mereproduksi potensi kerentanan ini, ikuti link URL Reproduksi di Konsol Google Cloud setelah Anda menjalankan pemindaian. Link ini langsung membuka dialog pemberitahuan atau memasukkan string XSSDETECTED untuk membuktikan bahwa serangan dapat mengeksekusi kode. Jika string dimasukkan, Anda dapat membuka alat developer browser dan menelusuri XSSDETECTED untuk menemukan posisi persis injeksi.

XSS error

Nama kategori di API: XSS_ERROR

Temuan XSS_ERROR adalah potensi bug XSS karena kerusakan JavaScript. Dalam beberapa situasi, aplikasi yang sedang diuji dapat mengubah string pengujian sebelum browser mengurainya. Saat browser mencoba menjalankan string pengujian yang diubah ini, browser kemungkinan akan rusak dan menampilkan error eksekusi JavaScript. Error ini menunjukkan masalah injeksi, tetapi mungkin tidak dapat dieksploitasi.

Untuk mengatasi masalah ini, Anda perlu mengonfirmasi apakah masalah tersebut adalah kerentanan XSS dengan memverifikasi secara manual apakah modifikasi string pengujian dapat dihindari. Untuk mengetahui informasi mendetail tentang cara memverifikasi kerentanan ini, lihat Cross-site scripting.

Server side request forgery

Nama kategori di API: SERVER_SIDE_REQUEST_FORGERY

Kerentanan SERVER_SIDE_REQUEST_FORGERY memungkinkan pengguna aplikasi web mendapatkan akses ke data internal dengan memaksa server membuat permintaan (seperti permintaan HTTP) ke endpoint layanan yang dibatasi. Misalnya, penyerang dapat memanfaatkan kerentanan ini untuk mengambil data dari layanan metadata Google Cloud.

Untuk memperbaiki masalah ini, gunakan daftar yang diizinkan untuk membatasi domain dan alamat IP yang dapat menerima permintaan dari aplikasi web.

Rosetta flash

Nama kategori di API: ROSETTA_FLASH

Web Security Scanner mungkin menemukan bahwa nilai parameter permintaan ditampilkan kembali di awal respons, misalnya, dalam permintaan yang menggunakan JSONP. Kerentanan ini juga dikenal sebagai injeksi flash. Dalam keadaan tertentu, penyerang dapat menyebabkan browser menjalankan respons seolah-olah file Flash yang disediakan oleh aplikasi web yang rentan.

Untuk memperbaiki masalah ini, jangan sertakan data yang dapat dikontrol pengguna di awal respons HTTP.

Mixed content

Nama kategori di API: MIXED_CONTENT

Web Security Scanner mengamati traffic HTTP secara pasif dan mendeteksi saat permintaan untuk file JavaScript atau CSS dilakukan melalui HTTP saat dalam konteks halaman HTTPS. Dalam skenario ini, penyerang man-in-the-middle dapat memodifikasi resource HTTP dan mendapatkan akses penuh ke situs yang memuat resource atau memantau tindakan yang dilakukan oleh pengguna.

Untuk memperbaiki masalah ini, gunakan link HTTP relatif, misalnya, ganti http:// dengan //.

Outdated library

Nama kategori di API: OUTDATED_LIBRARY

Web Security Scanner mungkin menemukan bahwa versi library yang disertakan diketahui berisi masalah keamanan. Web Security Scanner adalah pemindai berbasis tanda tangan yang mencoba mengidentifikasi versi library yang digunakan dan memeriksa versi tersebut dengan daftar library yang rentan yang diketahui. Hasil positif palsu mungkin terjadi jika deteksi versi gagal atau jika library telah di-patch secara manual.

Untuk memperbaiki masalah ini, update ke versi library yang disertakan yang aman.

Struts insecure deserialization

Nama kategori di API: STRUTS_INSECURE_DESERIALIZATION

Web Security Scanner mungkin menemukan bahwa aplikasi web Anda menggunakan versi Apache Struts yang rentan terhadap serangan injeksi perintah jarak jauh. Versi Struts yang terpengaruh dapat salah mengurai header HTTP Content-Type penyerang yang tidak valid. Kerentanan ini memungkinkan perintah berbahaya dieksekusi berdasarkan hak istimewa server web.

Berikut adalah versi Apache Struts yang rentan:

  • Versi 2.3.x yang lebih lama dari 2.3.32
  • Versi 2.5.x yang lebih lama dari 2.5.10.1

Untuk memperbaiki masalah ini, upgrade Apache Struts ke versi terbaru.

Untuk informasi selengkapnya tentang kerentanan Apache Struts, lihat CVE-2017-5638.

Cacheable password input

Nama kategori di API: CACHEABLE_PASSWORD_INPUT

Web Security Scanner mungkin menemukan bahwa untuk input sandi, aplikasi web menggunakan elemen <input> yang tidak memiliki atribut type yang ditetapkan ke password. Hal ini dapat menyebabkan browser meng-cache sandi yang dimasukkan pengguna di cache browser reguler, bukan penyimpanan sandi yang aman.

Untuk memperbaiki masalah ini, di elemen <input>, tambahkan atribut type dan tetapkan ke password—misalnya, <input type="password">. Atribut ini mengaburkan karakter yang dimasukkan pengguna di kolom sandi.

Clear text password

Nama kategori di API: CLEAR_TEXT_PASSWORD

Web Security Scanner mungkin menemukan bahwa aplikasi tampaknya mengirimkan kolom sandi dalam bentuk teks jelas. Penyerang dapat menyadap traffic jaringan dan mencuri sandi dari kolom sandi.

Untuk melindungi informasi sensitif yang diteruskan antara klien dan server, selalu lakukan tindakan pencegahan berikut:

  • Gunakan sertifikat TLS/SSL.
  • Selalu gunakan HTTPS di halaman yang menyertakan kolom sandi.
  • Pastikan atribut tindakan formulir selalu mengarah ke URL HTTPS.

Insecure allow origin ends with validation

Nama kategori di API: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

Web Security Scanner mungkin menemukan bahwa endpoint HTTP atau HTTPS lintas situs hanya memvalidasi akhiran header permintaan Origin sebelum mencerminkannya di dalam header respons Access-Control-Allow-Origin. Jika validasi salah dikonfigurasi, endpoint mungkin memberikan akses ke domain berbahaya yang memiliki akhiran yang sama dengan domain yang diizinkan. Misalnya, jika validator endpoint cocok dengan domain seperti *google.com, validator tersebut mungkin keliru memberikan akses ke maliciousdomaingoogle.com.

Untuk memperbaiki masalah ini, validasi bahwa domain root yang diharapkan adalah bagian dari nilai header Origin sebelum mencerminkannya di header respons Access-Control-Allow-Origin. Untuk karakter pengganti subdomain, tambahkan titik di awal domain root—misalnya, .endsWith(".google.com").

Insecure allow origin starts with validation

Nama kategori di API: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

Web Security Scanner mungkin menemukan bahwa endpoint HTTP atau HTTPS lintas situs hanya memvalidasi awalan header permintaan Origin sebelum mencerminkannya di dalam header respons Access-Control-Allow-Origin. Jika validasi salah dikonfigurasi, endpoint mungkin memberikan akses ke domain berbahaya yang memiliki awalan yang sama dengan domain yang diizinkan. Misalnya, jika validator endpoint hanya memeriksa apakah domain yang meminta berisi google.com, validator tersebut mungkin secara keliru memberikan akses ke google.com.maliciousdomain.com.

Untuk memperbaiki temuan ini, validasi bahwa domain yang diharapkan sepenuhnya cocok dengan nilai header Origin sebelum mencerminkannya di header respons Access-Control-Allow-Origin—misalnya, .equals(".google.com").

Session ID leak

Nama kategori di API: SESSION_ID_LEAK

Web Security Scanner mungkin menemukan ID sesi di header permintaan Referer dari permintaan lintas-domain aplikasi web Anda. Domain yang menerima Referer dapat menggunakan ID sesi untuk meniru identitas pengguna (dengan menggunakan tokennya) atau mengidentifikasi pengguna secara unik.

Untuk memperbaiki temuan ini, simpan ID sesi di cookie, bukan URL. Selain itu, amankan cookie Anda menggunakan atribut berikut:

  • HTTPOnly: atribut yang membuat cookie tidak dapat diakses oleh skrip sisi klien
  • Secure: atribut yang membuat cookie dapat dikirim hanya melalui HTTPS

Invalid content type

Nama kategori di API: INVALID_CONTENT_TYPE

Web Security Scanner mungkin menemukan bahwa resource yang dimuat tidak cocok dengan header HTTP Content-Type respons. Dalam skenario ini, aplikasi menampilkan konten sensitif dengan jenis konten yang tidak valid, atau tanpa header X-Content-Type-Options: nosniff.

Untuk memperbaiki masalah ini, pastikan hal berikut:

  • Respons JSON ditampilkan dengan header Content-Type application/json
  • Respons sensitif lainnya ditampilkan dengan jenis MIME yang sesuai
  • Menayangkan konten dengan header HTTP X-Content-Type-Options: nosniff

Invalid header

Nama kategori di API: INVALID_HEADER

Web Security Scanner mungkin menemukan bahwa header keamanan memiliki error sintaksis, sehingga menghasilkan header dengan nilai yang salah format atau tidak valid. Akibatnya, browser akan mengabaikan header ini.

Header yang valid dijelaskan di bagian berikut.

Header Referrer-Policy

Kebijakan perujuk yang valid berisi salah satu nilai berikut:

  • String kosong
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

Header X-Frame-Options

Header X-Frame-Options yang valid hanya dapat memiliki nilai berikut:

  • DENY: melarang semua framing
  • SAMEORIGIN: mengizinkan framing jika URL tingkat teratas berasal dari origin yang sama
  • ALLOW-FROM URL

Chrome tidak mendukung ALLOW-FROM URL. Beberapa X-Frame-Options tidak diizinkan.

Header X-Content-Type-Options

Header X-Content-Type-Options yang valid hanya boleh memiliki satu nilai: nosniff.

Header X-XSS-Protection

Header X-XSS-Protection yang valid harus diawali dengan 0 ("disable") atau 1 ("enable"). Kemudian, hanya jika Anda mengaktifkan perlindungan, Anda dapat menambahkan hingga dua opsi:

  • mode=block menampilkan halaman kosong, bukan memfilter XSS
  • report=URL mengirim laporan ke URL

Pisahkan opsi dengan titik koma, misalnya 1; mode=block; report=URI. Pastikan Anda tidak memiliki titik koma di akhir.

Misspelled security header name

Nama kategori di API: MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner mungkin menemukan nama header keamanan yang salah eja. Dalam bentuk yang salah dieja, header keamanan tidak akan berfungsi dan harus diperbaiki.

Untuk mereproduksi kerentanan ini, periksa kesalahan ejaan di tab jaringan alat developer browser Anda.

Mismatching security header values

Nama kategori di API: MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner mungkin menemukan bahwa respons memiliki header respons terkait keamanan yang telah diduplikasi dengan nilai yang bertentangan. Beberapa header HTTP terkait keamanan memiliki perilaku yang tidak terdefinisi jika dinyatakan dua kali dalam respons dengan nilai yang tidak cocok.

Untuk memperbaiki masalah ini, hanya pertahankan salah satu header yang tidak cocok ini.

Repositori yang dapat diakses

Web Security Scanner mungkin menemukan repositori GIT atau SVN yang dapat diakses di aplikasi. Kondisi ini dapat menyebabkan kebocoran konfigurasi dan kode sumber.

Untuk mereproduksi kerentanan, klik URL reproduksi dalam laporan temuan.

XXE reflected file leakage

Nama kategori di API: XXE_REFLECTED_FILE_LEAKAGE

Web Security Scanner mungkin menemukan kerentanan XML External Entity (XXE) di aplikasi web yang mengurai XML dari input pengguna. Penyerang dapat memberikan XML yang berisi entitas eksternal. Entitas eksternal ini dapat mereferensikan konten yang dapat diakses aplikasi—misalnya, file di komputer host aplikasi. Saat parser XML aplikasi memproses XML berbahaya, aplikasi tersebut dapat membocorkan konten file di host-nya.

Untuk memperbaiki temuan ini, konfigurasikan parser XML Anda agar tidak mengizinkan entity eksternal.

Untuk informasi selengkapnya tentang kerentanan ini, lihat Pemrosesan Entity Eksternal XML (XXE).

SQL injection

Nama kategori di API: SQL_INJECTION

Web Security Scanner mungkin menemukan kerentanan injeksi SQL. Penyerang dapat membuat input yang memanipulasi struktur kueri dari kueri SQL yang mendasarinya dan berjalan di server. Input ini memungkinkan mereka mengeksfiltrasi data dari database dan, dalam beberapa kasus, mengubah data. Untuk mengatasi temuan ini, gunakan kueri berparameter untuk mencegah input pengguna memengaruhi struktur kueri SQL.

Untuk informasi selengkapnya tentang kerentanan ini, lihat Injeksi SQL.

Prototype pollution

Nama kategori di API: PROTOTYPE_POLLUTION

Web Security Scanner mungkin menemukan kerentanan polusi prototipe pada aplikasi web yang properti objeknya diberi nilai yang dapat dikontrol penyerang. Penyerang dapat membuat input yang membuat aplikasi rentan terhadap pembuatan skrip lintas situs atau kerentanan sisi klien lainnya.

Untuk memperbaiki temuan ini, hapus properti proto yang tidak digunakan lagi dan buat objek Object.prototype menjadi tidak dapat diubah. Jika mitigasi ini tidak kompatibel dengan kode Anda, ubah bagian kode yang rentan untuk hanya menyalin nilai yang diharapkan dari input yang dapat dikontrol penyerang.

Memverifikasi masalah

Saat Web Security Scanner melaporkan masalah, Anda perlu memverifikasi lokasi masalah. Bagian ini menjelaskan cara menggunakan laporan temuan untuk mereproduksi dan memverifikasi kerentanan.

  1. Buka halaman Web Security Scanner di konsol Google Cloud.

    Buka Web Security Scanner

  2. Pilih project. Halaman akan muncul dengan daftar pemindaian dikelola dan kustom Anda.

  3. Di bagian Scan configs, pilih pemindaian yang berisi temuan yang ingin Anda verifikasi. Halaman akan terbuka dengan detail untuk pemindaian.

  4. Buka tab Hasil, luaskan kategori, lalu pilih temuan untuk melihat detailnya.

  5. Metode verifikasi berbeda-beda berdasarkan kategori temuan. Gunakan browser pengujian dan ikuti petunjuk di bawah.

    • Pembuatan skrip lintas situs: Mengikuti URL Reproduksi akan menghasilkan pop-up kosong di browser, yang menunjukkan bahwa pemindaian berhasil memasukkan kode yang tidak berbahaya ke dalam skrip.
    • Library usang: Mengikuti URL yang Rentan akan menampilkan halaman dengan teks "Dieksploitasi", yang menunjukkan bahwa pemindaian berhasil memasukkan kode yang tidak berbahaya ke dalam skrip.
    • Konten campuran Mengikuti URL halaman HTTPS akan menampilkan peringatan tentang kerentanan konten campuran. Laporan temuan mengidentifikasi resource yang rentan di bagian URL resource yang ditayangkan melalui HTTP.
    • Injection flash: Web Security Scanner dapat menampilkan temuan dalam kategori ini, tetapi sebagian besar browser modern dilindungi dari injection flash. Temuan ini kemungkinan tidak dapat dieksploitasi.
    • Polusi prototipe: Ikuti URL di kolom URL Reproduksi dan telusuri perubahan pada objek Object.prototype yang diperkenalkan oleh payload, dengan cuplikan JavaScript berikut.
      • ({}).__secret_injected_property
      • ({}).__defineGetter__.__secret_injected_property
      • ({}).hasOwnProperty.__secret_injected_property

Penerapan Kebijakan Keamanan Konten (CSP) mungkin masih mencegah kode JavaScript berjalan. Kondisi ini dapat mempersulit reproduksi XSS. Jika Anda mengalami masalah ini, periksa konsol log browser untuk mengetahui detail pelanggaran CSP yang terjadi.