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 framingSAMEORIGIN
: mengizinkan framing jika URL tingkat teratas berasal dari origin yang samaALLOW-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 XSSreport=URL
mengirim laporan keURL
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.
Buka halaman Web Security Scanner di konsol Google Cloud.
Pilih project. Halaman akan muncul dengan daftar pemindaian dikelola dan kustom Anda.
Di bagian Scan configs, pilih pemindaian yang berisi temuan yang ingin Anda verifikasi. Halaman akan terbuka dengan detail untuk pemindaian.
Buka tab Hasil, luaskan kategori, lalu pilih temuan untuk melihat detailnya.
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.