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.
Class kerentanan
Web Security Scanner mendeteksi class kerentanan berikut:
- Pembuatan skrip lintas situs (XSS)
- Pemalsuan permintaan sisi server
- Injeksi Flash
- Konten campuran
- Library yang tidak berlaku atau rentan
- Sandi teks jelas
- Validasi origin tidak aman
- Header tidak valid
- Header salah eja
- Repositori yang dapat diakses
- Injeksi SQL
- Injeksi XML
- Polusi prototipe
Class kesalahan konfigurasi
Web Security Scanner mendeteksi class kesalahan konfigurasi berikut:
- Header HTTP Strict Transport Security Salah Dikonfigurasi
- Header Kebijakan Keamanan Konten Tidak Ada
- Header Kebijakan Keamanan Konten Salah Dikonfigurasi
- Header Cross-Origin-Opener-Policy Tidak Ada
- Perlindungan Clickjacking Tidak Ada
Jika salah satu kerentanan atau kesalahan konfigurasi ini ditemukan, hasilnya akan ditandai agar Anda dapat menjelajahinya secara mendetail.
Dampak pada log
Jejak pemindaian Web Security Scanner muncul di file log Anda. Misalnya, Web Security Scanner membuat 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 atau kesalahan konfigurasi, Web Security Scanner tidak otomatis menetapkan status temuan Security Command Center yang sesuai ke INACTIVE.
Kecuali jika Anda mengubah statusnya secara manual, status temuan yang dibuat oleh Web Security Scanner di Security Command Center akan tetap ACTIVE.
Jika Anda menggunakan Web Security Scanner versi mandiri, setelah Anda memperbaiki kerentanan atau kesalahan konfigurasi dan Web Security Scanner tidak dapat lagi mendeteksinya, laporan berikutnya tidak akan menyertakan kerentanan atau kesalahan konfigurasi tersebut. Catatan temuan akan tetap ada di laporan temuan 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 mengetahui strategi mempertahankan diri dari serangan umum tingkat aplikasi yang diuraikan dalam OWASP Top 10, lihat Opsi mitigasi OWASP Top 10 di Google Cloud.
XSS
Nama kategori di API: XSS
Pengujian injeksi skrip lintas situs (XSS) Web Security Scanner mensimulasikan serangan injeksi dengan memasukkan string pengujian yang tidak berbahaya ke dalam 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 dieksekusi, JavaScript dapat diinjeksi dan dijalankan di halaman. Jika penyerang menemukan masalah ini, mereka dapat menjalankan JavaScript pilihan mereka sebagai pengguna (korban) yang mengklik link berbahaya.
Dalam beberapa situasi, aplikasi yang diuji mungkin 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, kemungkinan besar string tersebut akan rusak dan menampilkan error eksekusi JavaScript. Error ini menunjukkan masalah injeksi, tetapi mungkin tidak dapat dieksploitasi.
Untuk mengatasi temuan ini, Anda harus 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 Skrip lintas situs.
Ada berbagai cara untuk memperbaiki temuan ini. Perbaikan yang direkomendasikan adalah dengan meng-escape semua output dan menggunakan sistem pembuatan template yang mendukung auto-escape kontekstual.
XSS angular callback
Nama kategori di API: XSS_ANGULAR_CALLBACK
Kerentanan skrip lintas situs (XSS) dalam modul AngularJS dapat terjadi ketika Angular menginterpolasi string yang disediakan pengguna. Menginjeksi nilai yang disediakan pengguna ke dalam interpolasi AngularJS dapat memungkinkan serangan berikut:
- Penyerang dapat menginjeksi kode arbitrer ke dalam halaman yang dirender oleh browser.
- Penyerang dapat melakukan tindakan atas nama browser korban di origin halaman.
Untuk mereproduksi kerentanan potensial ini, ikuti link URL Reproduksi di
konsol Google Cloud setelah Anda menjalankan pemindaian. Link ini langsung membuka dialog pemberitahuan atau menginjeksi string XSSDETECTED untuk membuktikan bahwa serangan dapat mengeksekusi kode. Jika string diinjeksi, 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 diuji mungkin mengubah string pengujian sebelum browser menguraikannya. Saat browser mencoba menjalankan string pengujian yang diubah ini, kemungkinan besar string tersebut akan rusak dan menampilkan error eksekusi JavaScript. Error ini menunjukkan masalah injeksi, tetapi mungkin tidak dapat dieksploitasi.
Untuk memperbaiki temuan ini, Anda harus mengonfirmasi apakah ada kerentanan XSS dengan memverifikasi secara manual apakah modifikasi string pengujian dapat dihindari. Untuk mengetahui informasi mendetail tentang cara memverifikasi kerentanan ini, lihat 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 Google Cloud layanan
metadata.
Untuk memperbaiki temuan ini, gunakan daftar yang diizinkan untuk membatasi domain dan alamat IP yang dapat diminta oleh aplikasi web.
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 temuan 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 file JavaScript atau CSS dilakukan melalui HTTP dalam konteks halaman HTTPS. Dalam skenario ini, penyerang man-in-the-middle dapat mengubah resource HTTP dan mendapatkan akses penuh ke situs yang memuat resource atau untuk memantau tindakan yang dilakukan pengguna.
Untuk memperbaiki temuan 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 rentan yang diketahui. Positif palsu dapat terjadi jika deteksi versi gagal atau jika library telah di-patch secara manual.
Untuk memperbaiki temuan ini, update ke versi library yang disertakan yang diketahui 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 menguraikan header HTTP Content-Type penyerang yang tidak valid. Kerentanan ini memungkinkan perintah berbahaya dieksekusi di bawah 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 temuan ini, upgrade Apache Struts 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 meng-cache sandi yang dimasukkan pengguna di cache browser reguler, bukan di penyimpanan sandi yang aman.
Untuk memperbaiki temuan ini, di elemen <input>, tambahkan atribut type dan
tetapkan ke password—misalnya, <input type="password">.
Atribut ini menyamarkan 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 mentransmisikan kolom sandi dalam bentuk teks jelas. Penyerang dapat menyadap traffic jaringan dan mengendus kolom sandi.
Untuk melindungi informasi sensitif yang dikirimkan 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 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 tersebut mungkin secara keliru memberikan akses ke maliciousdomaingoogle.com.
Untuk memperbaiki temuan ini, validasi bahwa domain root yang diharapkan adalah bagian dari nilai header
Originsebelum menampilkannya di header respons Access-Control-Allow-Origin. Untuk karakter pengganti subdomain, tambahkan titik ke domain root
domain—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 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, 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 menampilkannya di respons Access-Control-Allow-Origin
header—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 pengguna (dengan menggunakan token mereka) atau mengidentifikasi pengguna secara unik.
Untuk memperbaiki temuan ini, simpan ID sesi di cookie, bukan di URL. Selain itu, amankan cookie Anda menggunakan atribut berikut:
- HTTPOnly: atribut yang membuat cookie tidak dapat diakses oleh skrip sisi klien
- Aman: atribut yang membuat cookie dapat dikirimkan 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 temuan ini, pastikan hal berikut:
- Respons JSON ditampilkan dengan header Content-Type
application/json - Respons sensitif lainnya ditampilkan dengan jenis MIME yang sesuai
- Tampilkan 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, yang menghasilkan header dengan nilai yang tidak valid atau salah format. Akibatnya, browser 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-referrerno-referrer-when-downgradesame-originoriginstrict-originorigin-when-cross-originstrict-origin-when-cross-originunsafe-url
Header X-Frame-Options
Header X-Frame-Options yang valid hanya dapat memiliki nilai berikut:
DENY: tidak mengizinkan semua framingSAMEORIGIN: mengizinkan framing jika URL tingkat atas memiliki 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 dapat memiliki satu nilai: nosniff.
Header X-XSS-Protection
Header X-XSS-Protection yang valid harus dimulai dengan 0 ("nonaktifkan") atau 1 ("aktifkan"). Kemudian, hanya jika Anda mengaktifkan perlindungan, Anda dapat menambahkan hingga dua opsi:
mode=blockmenampilkan halaman kosong, bukan memfilter XSSreport=URLmengirim 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 dieja. Header keamanan tidak akan berfungsi jika ejaannya salah dan itu harus diperbaiki.
Untuk mereproduksi kerentanan ini, periksa kesalahan eja 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 temuan ini, simpan salah satu saja dari 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 di 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 menguraikan XML dari input pengguna. Penyerang dapat menyediakan XML yang berisi entity eksternal. Entity eksternal ini dapat merujuk ke konten yang dapat diakses oleh aplikasi—misalnya, file di mesin host aplikasi. Saat parser XML aplikasi memproses XML berbahaya, parser tersebut dapat membocorkan konten file di host-nya.
Untuk memperbaiki temuan ini, konfigurasikan parser XML Anda agar tidak mengizinkan entity eksternal.
Untuk mengetahui informasi selengkapnya tentang kerentanan ini, lihat Pemrosesan XML External Entity (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 SQL yang mendasarinya yang 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 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 ditetapkan ke nilai yang dapat dikontrol penyerang. Penyerang dapat membuat input yang membuat aplikasi rentan terhadap 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 untuk hanya menyalin nilai yang diharapkan dari input yang dapat dikontrol penyerang.
Memperbaiki temuan kesalahan konfigurasi Web Security Scanner
Bagian ini menjelaskan cara memperbaiki berbagai jenis temuan kesalahan konfigurasi Web Security Scanner.
Kesalahan konfigurasi HTTP Strict Transport Security
Nama kategori di API: HSTS_MISCONFIGURATION
Web Security Scanner memastikan bahwa header HTTP Strict Transport Security dikirim dengan setiap respons HTTP dan dikonfigurasi dengan benar. Untuk membatasi dampak pada stabilitas situs Anda, lakukan hal berikut:
- Mulai dengan
max-agekecil dan hanyaincludeSubDomainspenyertaan (tanpapreload). Contoh:max-age=3600;includeSubDomains. - Setelah periode tunggu singkat sekitar satu minggu tanpa masalah yang dilaporkan, tingkatkan max-age.
Contoh:
max-age=604800;includeSubDomainsataumax-age=2592000;includeSubDomains. - Setelah sekitar tiga bulan tanpa masalah yang dilaporkan, tambahkan situs Anda dan
subdomain-nya ke hstspreload.org
dan tentukan perintah pramuat. Dengan menentukan perintah pramuat, persyaratan HSTS akan dibuat ke dalam browser dan pelaku kejahatan tidak dapat menurunkan kualitas koneksi.
Perintah pramuat:
max-age=63072000; includeSubDomains; preload.
Header Content-Security-Policy tidak ada
Nama kategori di API: CSP_MISSING
Web Security Scanner memastikan bahwa header Content-Security-Policy yang ketat dan hanya nonce dikirim dengan setiap respons HTTP.
Content-Security-Policy:
script-src 'nonce-{random}' 'report-sample';
object-src 'none';
base-uri 'none';
report-uri https://link-to-report-endpointHeader Content-Security-Policy salah dikonfigurasi
Nama kategori di API: CSP_MISCONFIGURATION
Web Security Scanner memastikan bahwa header Content-Security-Policy yang ketat dan hanya nonce dikirim dengan setiap respons HTTP.
Content-Security-Policy:
script-src 'nonce-{random}' 'report-sample';
object-src 'none';
base-uri 'none';
report-uri https://link-to-report-endpointHeader Cross-Origin-Opener-Policy tidak ada
Nama kategori di API: COOP_MISSING
Web Security Scanner memastikan bahwa header Cross-Origin-Opener-Policy dikirim dengan setiap respons HTTP, termasuk salah satu perintah yang valid:
unsafe-nonesame-origin-allow-popupssame-origin
Perlindungan Clickjacking tidak ada
Nama kategori di API: CLICKJACKING_PROTECTION_MISSING
Web Security Scanner memastikan bahwa header X-Frame-Options atau Content-Security-Policy dikirim dengan setiap respons HTTP untuk mencegah clickjacking:
- Jika Anda menggunakan header X-Frame-Options, gunakan perintah
DENYatauSAMEORIGIN. - Jika Anda menggunakan header Content-Security-Policy, konfigurasikan perintah
frame-ancestors.
Memverifikasi masalah
Saat Web Security Scanner melaporkan masalah, Anda harus memverifikasi lokasi masalah tersebut. Bagian ini menjelaskan cara menggunakan laporan temuan untuk mereproduksi dan memverifikasi kerentanan.
Buka halaman Web Security Scanner di Google Cloud konsol.
Pilih project. Halaman akan muncul dengan daftar pemindaian terkelola 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 Results, luaskan kategori, lalu pilih temuan untuk melihat detailnya.
Metode verifikasi berbeda-beda berdasarkan kategori temuan. Gunakan browser pengujian dan ikuti petunjuk di bawah.
- Skrip lintas situs: Mengikuti URL Reproduksi akan menghasilkan pop-up kosong di browser, yang menunjukkan bahwa pemindaian berhasil menyuntikkan kode yang tidak berbahaya ke dalam skrip.
- Library yang tidak berlaku: Mengikuti URL Rentan akan menampilkan halaman dengan teks "Exploited", yang menunjukkan bahwa pemindaian berhasil menyuntikkan 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 ditampilkan melalui HTTP.
- Injeksi Flash: Web Security Scanner mungkin menampilkan temuan dalam kategori ini, tetapi sebagian besar browser modern dilindungi dari injeksi Flash. Kemungkinan temuan ini dapat dieksploitasi sangat kecil.
- Polusi prototipe: Ikuti URL di kolom URL Reproduksi
dan cari perubahan pada objek
Object.prototypeyang 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.