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 framingSAMEORIGIN
: memungkinkan penyesuaian frame jika URL tingkat atas memiliki asal 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 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 XSSreport=URL
mengirim laporan keURL
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.
Buka halaman Web Security Scanner di Konsol Google Cloud.
Pilih project. Halaman akan muncul berisi daftar pemindaian terkelola dan kustom Anda.
Di bagian Scan configs, pilih pemindaian yang berisi temuan yang ingin diverifikasi. Halaman akan terbuka dengan detail 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 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.