Bagaimana Teknologi Pengembangan yang Cepat Dapat Menjadi Sumber Kerentanan yang Tidak Menyenangkan

Keamanan dengan contoh kehidupan nyata selalu lebih menarik.

Sebagai penguji penetrasi, saya suka ketika proyek yang didasarkan pada kerangka pengembangan cepat masuk, seperti Ruby-on-Rails, Django, AdonisJs, Express dan sebagainya. Mereka memungkinkan Anda untuk membangun sistem dengan sangat cepat karena fakta bahwa model bisnis langsung melompat ke semua tingkatan, termasuk browser klien. Model (model objek bisnis dalam database) dan ViewModel (kontrak untuk berinteraksi dengan pelanggan) kerangka kerja seperti itu sering digabungkan bersama untuk menghindari pergeseran yang tidak perlu dari Model ke ViewModel dan sebaliknya, layanan REST secara otomatis dihasilkan. Dari sudut pandang pengembangan, Anda cukup mengembangkan model bisnis di server, dan kemudian menggunakannya segera pada klien, yang tidak diragukan lagi meningkatkan kecepatan pengembangan.

Sekali lagi, saya tidak mengatakan bahwa kerangka kerja tersebut buruk, atau ada yang salah dengan mereka, mereka memiliki sarana dan alat perlindungan yang tepat, hanya saja para pengembang membuat kesalahan paling banyak dengan mereka. Ini juga terlihat dalam satu proyek ASP.NET MVC, di mana pengembang membuat kerentanan yang sama dengan mengekspos Model bukan ViewModels ...

Kerentanan: karena lemahnya validasi bidang model yang masuk dari klien, Anda bisa menyuntikkan bidang yang tidak disediakan oleh fungsionalitas, tetapi berada dalam model bisnis. Misalnya, ada metode yang memungkinkan Anda untuk mengubah hanya nama pengguna, dan mengembalikan objek profil pengguna. Bagaimana jika saya menyalin objek yang dikembalikan, mengubah semua properti di dalamnya dan mengirimkannya kembali ke input? Mungkin ternyata Anda dapat mengubah properti objek apa pun (kata sandi, peran), melewati alur kerja standar.

Dari berbagai proyek yang kami uji untuk keamanan, saya akan memberikan contoh nyata. Semua area masalah ini telah diperbaiki, dan informasi tambahan apa pun dalam tangkapan layar disembunyikan.

Sistem 1

Pada sistem ini, hanya nama pengguna yang dapat diubah di profil. Tetapi menggantikan Email lain, saya bisa mengubah login pengguna. Selain itu, undangan ke pengguna lain sekarang meninggalkan sabun ini.

gambar

Sistem 2

Dalam contoh ini, pengguna sederhana berhasil mengubah peran menjadi admin dengan menambahkan bidang peran, dan dengan url / admin cukup buka panel admin sistem dengan semua transaksi, pengguna, laporan, dan sebagainya.

gambar

Sistem 3

Dalam sistem ini, dimungkinkan untuk memperbarui langganan gratis untuk jangka waktu tidak terbatas. Jelas bahwa pendekatan standar mengharuskan adanya pembayaran.

gambar

Metode input akan mengambil, tampaknya, hanya warna yang dipilih sesuai dengan branding ruang kerja, dan mengembalikan objek seluruh ruang kerja, termasuk dump penuh objek StripeCustomer, yang mencerminkan pembayaran. Dimungkinkan untuk memasukkan tidak hanya bidang, tetapi sub-objek besar StripeCustomer, dan sebagai hasilnya, telah membayar sekali, atau dari pengguna lain untuk menangkap objek ini, dan menduplikasinya ke semua ruang kerjanya.

gambar

Sistem 4

Dan akhirnya. Ada masalah yang sama pada sistem ini: itu mungkin untuk mengubah kata sandi dan passkey melewati alur kerja yang diciptakan. Kurangnya perlindungan terhadap CSRF dan penyimpanan cookie otentikasi untuk waktu yang lama meningkatkan risiko kerentanan terhadap surga. Pengguna jahat dapat menempatkan skrip pada sumber daya populer dengan permintaan untuk mengubah kata sandi pengguna saat ini dari sistem ini, dan semua pengguna yang akan membuka sumber daya ini akan kehilangan akses ke sistem.

gambar

Bersembunyi di kode server dalam metadata untuk bidang ini, ini memungkinkan untuk tidak mengembalikan bidang ini ke klien dalam respons, tetapi dalam data input bidang ini diproses tanpa masalah.

gambar

Pesan:

  1. Jangan pernah mempercayai data yang masuk dari pengguna, mereka bisa melakukan apa saja dengan mereka
  2. Hati-hati dengan sistem yang tidak memiliki lapisan ViewModel-s yang terpisah, dan bekerja secara langsung dengan model dasar
  3. Jelajahi lebih detail perlindungan yang ditawarkan kerangka kerja Anda.

Informasi di atas disediakan hanya untuk tujuan pendidikan dan pendidikan, bagaimana melakukan sistem mereka tidak perlu.

Denis Koloshko, Penetration Tester, CISSP

Source: https://habr.com/ru/post/id462293/


All Articles