Kerentanan OAuth | Cara menerapkan otorisasi aman di aplikasi web Anda

Anonim
Kerentanan OAuth | Cara menerapkan otorisasi aman di aplikasi web Anda 2740_1

Artikel ini akan menangani kerentanan OAuth yang terkenal. Pembaca juga akan belajar bagaimana menerapkan otorisasi aman dan aman di aplikasi web.

OAuth adalah protokol yang dapat diandalkan, tetapi tingkat keamanannya sebagian besar tergantung pada kesadaran pengembang web saat mengimplementasikan otorisasi. Ini membuat topik ini sangat penting untuk profesional keamanan informasi. Mereka perlu memberikan perlindungan tinggi dari akun pengguna mereka. Sudah waktunya untuk berkenalan dengan praktisi yang efektif yang akan membantu mengurangi bahaya yang buruk menjual OAuth.

pengantar

OAuth 2.0 Protokol saat ini banyak digunakan dalam berbagai aplikasi. Menggunakannya, antarmuka pengguna yang nyaman tersedia, otentikasi dan otorisasi yang lebih mudah dibandingkan dengan metode tradisional untuk memasukkan nama pengguna dan kata sandi. Dengan implementasi yang tepat dan bijaksana, protokol OAuth akan lebih aman daripada otorisasi tradisional, karena pengguna tidak perlu berbagi data akuntansi mereka dengan aplikasi pihak ketiga untuk mengakses sumber daya tertentu. Pengguna sering lebih suka masuk menggunakan akun Google, Facebook atau LinkedIn, alih-alih membuat akun baru setiap kali Anda perlu mendaftar di beberapa situs web. Dengan demikian, protokol OAuth sangat menyederhanakan hidup kita.

Secara umum, penyedia layanan OAuth populer sangat andal. Masuk dengan akun Google atau Facebook menginspirasi rasa aman tertentu, dan itu benar. Protokol diuji dengan hati-hati oleh para ahli. Semua kerentanan yang tersedia selalu dikoreksi dengan cepat oleh tim pengembang. Namun, perlu dicatat bahwa perasaan keselamatan lengkap bisa salah.

Penyedia layanan OAuth meninggalkan pengembang aplikasi banyak alasan untuk menghadapi keamanan program mereka. Bahkan, layanan OAuth yang awalnya dilindungi, secara tidak benar diimplementasikan dalam proses instalasinya, dapat menjadi target yang mudah bagi penyusup. Keasyikan semacam itu akan mengarah pada pencurian data pribadi pengguna.

Selanjutnya, Anda harus mempertimbangkan kerentanan paling umum yang ditemui dalam aplikasi pihak ketiga yang menerapkan protokol OAuth untuk mengotorisasi pengguna mereka. Harus diingat bahwa protokol itu sendiri aman dan dapat diandalkan. Hanya setelah implementasi yang salah, itu menjadi rentan terhadap serangan hacker.

OAuth Tokek Pencurian Menggunakan Header Referer

Ketika aplikasi meminta otorisasi atas nama pengguna di server OAuth, seseorang menerima kode untuk masuk dan mengirim kembali ke server untuk pemeriksaan selanjutnya. Jika selama pekerjaan, pengguna akan diarahkan ke halaman lain, kode akan dilihat pada header "pengarahan" dari permintaan HTTP. Dengan demikian, kode akan jatuh pada situs web eksternal, yang akan mengancam data pengguna yang terdaftar di server OAuth.

Catatan: Header referer adalah header kueri HTTP, ia mentransmisikan host URL dari mana permintaan dikirim.

Untuk melembutkan konsekuensi dari kerentanan ini, pengembang harus memastikan bahwa aplikasi webnya tidak mengandung injeksi HTML. Jika suntikan terdeteksi, penyerang dapat dengan mudah mengatur tag gambar ke server webnya dan menemukan cara untuk mengarahkan pengguna di atasnya. Dengan demikian, ia akan mendapatkan kesempatan untuk mencuri kode dari header "referer" dari permintaan HTTP.

OAuth Tockey Theft Menggunakan Parameter Redirect_uri

Aplikasi ini memulai proses otorisasi dengan mengirimkan permintaan ke server OAuth:

https://www.example.com/signin/authorize?[...[&redirect_uri=httpps://demo.example.com/loginsuccess.

Kueri selalu berisi parameter "redirect_uri" yang digunakan oleh server OAuth untuk mengirim token kembali ke aplikasi setelah pengguna memberikan persetujuannya. Jika nilai parameter ini tidak dikontrol atau tidak diperiksa, penyerang dapat dengan mudah mengubahnya dan mengarahkan permintaan ke situs webnya, di mana ia menggunakan program khusus untuk memproses token dan mendapatkan akses ke sumber daya terbatas.

https://www.example.com/signin/authorize?[...[&redirect_uri=httpps://localhost.evil.com.

Terkadang URL serupa diblokir. Penyerang dapat mengarahkan ulang data yang diterima pada URL terbuka, seperti ini:

https://www.example.com/oauth20_authorize.srf?cubation...[&redirect_uri=httpps://accounts.google.com/backtoouthsubtarget?next=htpet://evil.com.

Atau ini:

https://www.example.com/oauth2/authorize? [...]% irect_uri = https% 3A% 2F% 2fapps.facebook.com% 2ftacker% 2F.

Saat menerapkan OAuth, Anda tidak pernah bisa memasukkan seluruh domain dalam daftar putih. Hanya beberapa URL yang harus ditambahkan ke "redirect_uri" tidak diarahkan permintaan untuk membuka redirect.

Pemalsuan permintaan lintas garis

Pemalsuan permintaan intersight dapat terjadi ketika seorang penyerang berhasil membuat korban mengklik tautannya dan, dengan demikian, untuk menghasilkan permintaan bahwa ia tidak akan menghasilkan. Pemalsuan permintaan lintas garis biasanya dilunakkan dengan token CSRF, yang dikaitkan dengan sesi pengguna. Ini membantu aplikasi untuk memeriksa orang yang mengirim permintaan. Parameter "negara" dalam protokol OAuth berfungsi sebagai token CSRF.

Perlu melihat bagaimana serangan CSRF dilakukan pada OAuth dan sebagai parameter "negara" dapat digunakan untuk mengurangi efek kerentanan.

Hacker membuka aplikasi web dan meluncurkan proses otorisasi untuk mengakses penyedia layanan menggunakan OAuth. Aplikasi ini meminta penyedia layanan untuk mengakses yang perlu disediakan. Hacker akan diarahkan ke situs web penyedia layanan, di mana Anda biasanya perlu memasukkan nama pengguna dan kata sandi Anda untuk mengesahkan akses. Sebaliknya, peretas menangkap dan mencegah permintaan ini dan menghemat URL-nya. Hacker entah bagaimana menyebabkan korban membuka URL ini. Jika korban memasuki sistem penyedia layanan menggunakan akunnya, maka kredensial akan digunakan untuk mengeluarkan kode otorisasi. Pertukaran kode otorisasi akses ke token akses. Sekarang akun hacker dalam aplikasi ini diotorisasi. Itu dapat mengakses akun korban.

Jadi, bagaimana saya bisa mencegah situasi ini menggunakan parameter "state"?

Aplikasi harus membuat nilai yang entah bagaimana berdasarkan pada akun sumber (misalnya, menggunakan kunci hash session pengguna). Tidak begitu penting apa itu, yang utama adalah bahwa nilainya unik dan dihasilkan menggunakan informasi pribadi tentang pengguna asli. Ini ditugaskan ke parameter "negara".

Nilai ini ditransmisikan ke penyedia layanan saat dialihkan. Sekarang peretas mengundang korban untuk membuka URL, yang ditahannya.

Kode otorisasi dikeluarkan dan dikirim kembali ke klien di sesi bersama dengan parameter "status".

Klien menghasilkan nilai parameter berdasarkan informasi sesi dan membandingkannya dengan nilai "negara", yang dikirim kembali dari permintaan otorisasi ke penyedia layanan. Nilai ini tidak cocok dengan parameter "status" dalam kueri, karena telah dihasilkan hanya berdasarkan informasi tentang sesi saat ini. Akibatnya, nilai yang diperoleh tidak diterima oleh sistem.

Kerentanan lain yang terdeteksi Kode otorisasi dapat digunakan lebih dari sekali untuk mengeluarkan beberapa token akses). Kerentanan ini kurang umum daripada yang dijelaskan di atas, tetapi itu tidak membuat mereka kurang berbahaya. Pengembang harus mengetahui semua praktik yang diperlukan untuk memastikan operasi aplikasi web yang andal.

Penulis artikel yang diterjemahkan: Simon Saliba.

Penting! Informasi semata-mata untuk tujuan akademik. Harap patuhi undang-undang dan jangan menerapkan informasi ini untuk tujuan ilegal.

Bahan yang lebih menarik di cisoclub.ru. Berlangganan AS: Facebook | VK | Twitter | Instagram | Telegram | Zen | Messenger | ICQ Baru | YouTube | Nadi.

Baca lebih banyak