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 diberikan kepada Anda. Untuk mempelajari peran Security Command Center lebih lanjut, lihat Kontrol akses.

Kelas kerentanan

Web Security Scanner mendeteksi beberapa jenis kerentanan berikut:

  • Pembuatan skrip lintas situs (XSS)
  • Pemalsuan permintaan sisi server
  • Injeksi flash
  • Konten campuran
  • Library yang usang atau rentan
  • Teks sandi tersembunyi
  • Validasi origin yang tidak aman
  • Header tidak valid
  • Header salah eja
  • Repositori yang dapat diakses
  • Injeksi SQL
  • Injeksi XML
  • Polusi pembuatan prototipe

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

Dampak pada log

Jejak pemindaian Web Security Scanner muncul di file log Anda. Misalnya, Web Security Scanner menghasilkan permintaan untuk string yang tidak biasa, seperti ~sfi9876 dan /sfi9876. Proses ini memungkinkan pemindaian 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 secara 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 tetap menjadi 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 menyertakan kerentanan tersebut. Catatan kerentanan akan tetap ada di laporan kerentanan terdahulu.

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 mengetahui strategi pertahanan dari serangan umum tingkat aplikasi yang diuraikan dalam OWASP Top 10, lihat 10 opsi mitigasi teratas OWASP di Google Cloud.

XSS

Nama kategori di API: XSS

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

Jika JavaScript yang terdapat dalam string pengujian dijalankan dengan bersih, JavaScript akan memulai debugger Chrome. Jika string pengujian dapat dieksekusi, Anda dapat memasukkan dan menjalankan JavaScript pada halaman. Jika menemukan masalah ini, penyerang dapat menjalankan JavaScript pilihannya sebagai pengguna (korban) yang mengklik link berbahaya.

Dalam beberapa situasi, aplikasi yang sedang diuji mungkin mengubah string pengujian sebelum diurai oleh browser. Misalnya, aplikasi mungkin memvalidasi input atau membatasi ukuran kolom. Saat browser mencoba menjalankan string pengujian yang telah dimodifikasi ini, browser tersebut kemungkinan akan merusak dan memunculkan error eksekusi JavaScript. Error tersebut menunjukkan masalah injeksi, tetapi kemungkinan tidak mungkin untuk dieksploitasi.

Untuk mengatasi masalah ini, Anda harus mengonfirmasi apakah masalahnya merupakan kerentanan XSS dengan memverifikasi secara manual apakah perubahan string pengujian dapat dihindari. Untuk mengetahui informasi mendetail tentang cara memverifikasi kerentanan ini, lihat Pembuatan skrip lintas situs.

Ada berbagai cara untuk memperbaiki masalah ini. Perbaikan yang direkomendasikan adalah meng-escape semua output dan menggunakan sistem pembuatan 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 menginterpolasi string yang disediakan pengguna. Menginjeksi 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 Reproduction URL 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 injeksi yang tepat.

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 dimodifikasi ini, string pengujian yang telah dimodifikasi ini kemungkinan akan rusak dan memunculkan error eksekusi JavaScript. Error ini menunjukkan masalah injeksi, tetapi masalah tersebut mungkin tidak dapat dieksploitasi.

Untuk mengatasi masalah ini, Anda harus mengonfirmasi apakah masalahnya merupakan kerentanan XSS dengan memverifikasi secara manual apakah perubahan string pengujian dapat dihindari. Untuk mengetahui informasi mendetail tentang cara memverifikasi kerentanan ini, lihat Pembuatan skrip lintas situs.

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 mengeksploitasi 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 digunakan aplikasi web untuk membuat permintaan.

Rosetta flash

Nama kategori di API: ROSETTA_FLASH

Web Security Scanner mungkin menemukan bahwa nilai parameter permintaan tercermin kembali di awal respons, misalnya, dalam permintaan yang menggunakan JSONP. Kerentanan ini juga dikenal sebagai injeksi flash. Dalam keadaan tertentu, penyerang dapat menyebabkan browser mengeksekusi respons seolah-olah itu adalah 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 secara pasif mengamati traffic HTTP dan mendeteksi saat permintaan untuk file JavaScript atau CSS dilakukan melalui HTTP saat berada dalam konteks halaman HTTPS. Dalam skenario ini, penyerang man in the middle dapat merusak resource HTTP dan mendapatkan akses penuh ke situs yang memuat resource atau untuk memantau tindakan yang diambil 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 mendapati bahwa versi library yang disertakan memiliki masalah keamanan. Web Security Scanner adalah pemindai berbasis tanda tangan yang berupaya mengidentifikasi versi library yang digunakan dan memeriksa versi berdasarkan daftar library rentan yang diketahui. Positif palsu memungkinkan jika deteksi versi gagal atau jika library telah di-patch secara manual.

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

Struts insecure deserialization

Nama kategori di API: STRUTS_INSECURE_DESERIALIZATION

Web Security Scanner mungkin mendapati 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 Jenis Konten yang tidak valid milik penyerang. Kerentanan ini memungkinkan perintah berbahaya dieksekusi berdasarkan hak istimewa server web.

Berikut adalah versi Apache Struts yang rentan:

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

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

Untuk mengetahui 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 menyimpan sandi yang dimasukkan pengguna ke dalam cache browser biasa, 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 teks yang jelas. Penyerang dapat menyadap lalu lintas jaringan dan mengendus isian {i>password<i}.

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

  • Menggunakan 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 mendapati bahwa endpoint HTTP atau HTTPS lintas situs hanya memvalidasi akhiran header permintaan Origin sebelum menampilkannya 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 endpoint mungkin salah memberikan akses ke maliciousdomaingoogle.com.

Untuk memperbaiki masalah ini, validasi bahwa domain root yang diharapkan adalah bagian dari nilai header Origin sebelum menampilkannya di header respons Access-Control-Allow-Origin. Untuk karakter pengganti subdomain, tambahkan titik ke 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 mendapati bahwa endpoint HTTP atau HTTPS lintas situs hanya memvalidasi awalan header permintaan Origin sebelum menampilkannya 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, domain yang meminta mungkin salah memberikan akses ke google.com.maliciousdomain.com.

Untuk memperbaiki temuan ini, validasi bahwa domain yang diharapkan sepenuhnya cocok dengan nilai header Origin sebelum menampilkannya 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 pada 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 menggunakan atribut berikut:

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

Invalid content type

Nama kategori di API: INVALID_CONTENT_TYPE

Web Security Scanner dapat 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 ditayangkan dengan header Jenis Konten 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 mengalami error sintaksis, yang mengakibatkan format header salah atau tidak valid. Akibatnya, browser mengabaikan {i>header<i} 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: memungkinkan penyesuaian frame jika URL tingkat atas memiliki asal 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 dapat memiliki satu nilai: nosniff.

Header X-XSS-Protection

Header X-XSS-Protection yang valid harus diawali dengan 0 ("nonaktifkan") atau 1 ("aktifkan"). Kemudian, hanya jika 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 tidak ada tanda 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. Jika formatnya salah eja, header keamanan tidak akan efektif dan harus diperbaiki.

Untuk mereproduksi kerentanan ini, periksa kesalahan ejaan di tab jaringan pada 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 duplikat dan nilai yang bertentangan. Beberapa header HTTP terkait keamanan memiliki perilaku yang tidak ditentukan jika dideklarasikan dua kali dalam respons dengan nilai yang tidak cocok.

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

Repositori yang dapat diakses

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

Untuk mereproduksi kerentanan, klik URL reproduksi dalam laporan penemuan.

XXE reflected file leakage

Nama kategori di API: XXE_REFLECTED_FILE_LEAKAGE

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

Untuk memperbaiki temuan ini, konfigurasikan parser XML untuk melarang entity eksternal.

Untuk mengetahui informasi selengkapnya tentang kerentanan ini, lihat Pemrosesan Entitas 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 dasar yang berjalan di server. Input ini memungkinkan penyerang mengambil data secara tidak sah dari database dan, dalam beberapa kasus, memodifikasi data. Untuk mengatasi temuan ini, gunakan kueri yang diparameterisasi agar input pengguna tidak memengaruhi struktur kueri SQL.

Untuk mengetahui informasi selengkapnya tentang kerentanan ini, lihat Injeksi SQL.

Prototype pollution

Nama kategori di API: PROTOTYPE_POLLUTION

Web Security Scanner mungkin menemukan kerentanan polusi prototipe di 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 tidak dapat diubah. Jika mitigasi ini tidak kompatibel dengan kode Anda, ubah bagian kode yang rentan menjadi hanya menyalin nilai yang diharapkan dari input yang dapat dikontrol penyerang.

Verifikasi 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 berisi daftar pemindaian terkelola dan kustom Anda.

  3. Di bagian Scan configs, pilih pemindaian yang berisi temuan yang ingin diverifikasi. Halaman akan terbuka dengan detail 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 Reproduction URL akan menghasilkan pop-up kosong di browser, yang menunjukkan bahwa pemindaian berhasil memasukkan kode jinak ke dalam skrip.
    • Library usang: Setelah URL rentan, halaman dengan teks "Exploited" akan ditampilkan, yang menunjukkan pemindaian berhasil memasukkan kode 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 disalurkan melalui HTTP.
    • Injeksi flash: Web Security Scanner dapat menampilkan temuan dalam kategori ini, tetapi sebagian besar browser modern dilindungi dari injeksi flash. Kecil kemungkinan temuan ini dapat dieksploitasi.
    • Polusi prototipe: Ikuti URL di kolom Reproduction URL 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 tentang pelanggaran CSP yang terjadi.