Saat memasukkan akun pribadi berbagai layanan, untuk tujuan keamanan, 2FA sering digunakan - selain login dan kata sandi, Anda perlu memasukkan kode satu kali.
Tapi, ternyata, tidak semuanya begitu aman bahkan dengan otentikasi dua faktor - pada tahun lalu saya menemukan tiga (!) Layanan ketika kode masuk satu kali, yang dikirim ke klien melalui SMS, dapat dilihat dalam permintaan itu sendiri.
Selanjutnya secara singkat tentang apa yang mengancam dengan contoh-contoh spesifik.
1. Jaringan pompa bensin yang populer, lebih dari 500.000 pelanggan terdaftar.Permintaan saat memasukkan versi web akun pribadi Anda:POST https://someazs.ua/ua/profile/auth/ Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: ru,en-US;q=0.9,en;q=0.8,uk;q=0.7 Connection: keep-alive Content-Length: 408 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=6n3l2o90hfb020u9ag020u8ha1; usersomeazs_popupcoupons=1;... Host: someazs.ua Origin: https://someazs.ua Referer: https://someazs.ua/ua/login/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 X-Compress: null X-Requested-With: XMLHttpRequest data[phone_mask]: 951234567 data[phone]: 0951234567

Jawaban:
{"Status":0,"Code":"7038","status":true,"step2":true}
Kode dari SMS - 7038 - hanya terlihat di respons server.
Yaitu, di situs, ketika memasukkan akun pribadi, respons berisi kode masuk satu kali, yang dikirim ke klien melalui SMS - Anda dapat masuk ke akun orang lain dengan hanya menentukan nomor telepon klien dan melihat OTP dalam permintaan itu sendiri.
Di akun pribadi Anda tersedia: nomor kartu loyalitas, nama, saldo (bonus dalam UAH, liter, kopi), riwayat transaksi, dalam pengaturan - tanggal lahir, email pelanggan, dll.

Dengan bantuan tindakan lebih lanjut yang bersifat non-teknis (misalnya, dering pelanggan), dengan keberuntungan yang tepat, orang dapat menggunakan uang klien / liter / kopi. Mengapa saya menulis "dengan keberuntungan"? Ketika saya berbicara tentang masalah tersebut, saya diberi tahu bahwa penyelesaian dengan bonus orang lain tidak begitu mudah dilakukan, bahkan jika Anda memiliki akses ke akun tersebut, karena ada cek tambahan. Namun ...
Kesalahan diperbaiki dengan cepat, terima kasih.
2. Jaringan toko sosial (mirip dengan Harga Tetap ), aplikasi seluler (lebih dari 100 ribu unduhan)
Saat melacak permintaan melalui Fiddler, saya perhatikan hal berikut. Saat memasuki aplikasi seluler, setelah memasukkan nomor telepon dan kartu loyalitas, kode satu kali dikirimkan ke klien.
Masalahnya adalah bahwa ia menjalankan permintaan GET dari formulir:
https://bulk.somesmssender.com/?sending_method=sms&from=someretailes&user=onviber4821&txt=%D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&phone=380987654321&sign=42f66957a03090eb90556b0ef7fed2e1
Kode satu kali itu sendiri terlihat langsung dalam permintaan ini: teks dari SMS yang dikirim adalah
%D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&
Laporan konversi sederhana: Kode + konfirmasi: +1234

Yaitu dalam aplikasi itu sendiri, Anda dapat melihat kode mana yang akan dikirim. Di sini Anda juga dapat masuk ke akun orang lain, sudah tanpa faktor kedua.
Untuk beberapa alasan, klien dari jaringan ini adalah yang paling tidak terlindungi dari penipuan, jadi saya mencoba berkali-kali untuk menyampaikan informasi kepada perusahaan. Saya menulis tiga kali pada bulan Agustus ke alamat yang ditunjukkan pada halaman aplikasi di Play Market - Saya tidak menerima jawaban tunggal, bahkan jawaban otomatis.
Kemudian saya menulis ke perusahaan yang layanan distribusi SMS-nya mereka gunakan. Mereka menjawab kepada saya bahwa perlu untuk menghubungi pemilik aplikasi seluler, karena mereka sendiri tidak dapat mempengaruhi pengembangan dan transfer informasi dari perusahaan ini.
Ini benar, tetapi, saya berasumsi bahwa layanan olahpesan dapat memengaruhi mereka sebagai mitra / klien. Selain itu, alasan saya menulis ke layanan pengiriman adalah bahwa permintaan GET yang saya sebutkan adalah pengembangan mereka, dan ini juga kemungkinan besar terjadi pada klien lain. Saya menyarankan bahwa layanan diinginkan untuk memperbaiki logika distribusi - bukan untuk mentransmisikan nomor telepon pelanggan dan kode satu kali dalam permintaan - mereka tidak menjawab saya.
Sedikit tentang bagaimana lagi saya mencoba menyampaikan masalahnyaKemudian di situs web toko saya menulis ke email kontak, saya menunggu - dan lagi tidak ada. Tapi karena saya keras kepala, saya menemukan di situs yang sama semua kemungkinan kontak (baik kotak surat umum dan alamat pribadi) dan menulis kepada mereka - seperti yang Anda tahu, tidak ada yang menjawab juga.
Karena itu, kemudian saya beralih ke obrolan dan langsung di obrolan menanyakan pertanyaan apakah mereka menerima surat saya. Awalnya mereka menjawab bahwa mereka tidak melihat, kemudian mereka menemukan dan berjanji bahwa mereka akan memberikannya.
Menariknya, selain kurangnya reaksi terhadap email di alamat utama aplikasi, setelah mengobrol saya menerima surat. Di salah satu dari mereka saya melihat bagaimana mereka membawa saya ke dalam sistem: "Orang pintar"

Sikap begitu-begitu terhadap klien.
Ketika saya terakhir memeriksa, tidak ada perbaikan dari
Avrora .
Juga tidak ada koreksi pada bagian dari layanan distribusi, tetapi di sini situasinya lebih serius, jadi saya tidak secara langsung menyebutkan nama layanan tersebut.
3. Aplikasi seluler untuk menyimpan kartu diskon dan melakukan pembayaran seluler (lebih dari 130 ribu pelanggan)Di pintu masuk, Anda hanya perlu memasukkan email dan kode. Dalam hal ini, kueri dijalankan:
POST http://api.somewallet.com/mobileclient.svc/getRegistrationCode HTTP/1.1 Content-Type: application/json; charset=UTF-8 Content-Length: 100 Host: api.somewallet.com Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.12.3 {"request":{"Culture":"ru_RU","DeviceIdentifier":"4514825570005447","Identifier":"some@email"}}
Inilah jawabannya:
{"GetRegistrationCodeResult":{"ErrorMessage":{"Code":0,"LogReferenceId":0,"Message":"SUCCESS"},"Data":{"Code":"044912"}}}
Di sini, jawabannya juga menunjukkan kode yang perlu dimasukkan (044912).
Setelah masuk, saya mendapat akses ke fungsi-fungsi berikut:
- melihat kartu loyalitas dan bonusnya,
- kupon untuk toko tertentu,
- informasi kontak tentang klien (nomor telepon dan email, tanggal lahir dan nama)
- pengaturan, mengubah dan menghapus kode akses 4 digit,
- lihat kartu pembayaran
- menerima token pembayaran (mirip dengan token dari artikel saya sebelumnya Cara naik taksi dengan biaya orang lain ).
Dengan demikian, semua fungsi aplikasi dapat diakses oleh siapa saja yang hanya menunjukkan alamat email pengguna aplikasi ini - Anda tidak perlu mengetahui kode satu kali dari pengguna, karena dapat dilihat segera setelah masuk. Masalahnya identik dengan dua lainnya.
Mereka menanggapi pesan saya, memperbaiki kerentanan dan berterima kasih secara finansial.
Kami dapat mengatakan bahwa kadang-kadang dalam layanan Anda dapat melewati otentikasi dua faktor hanya dengan melihat permintaan otorisasi. Dan ini memengaruhi situs web dan aplikasi seluler. Jadi pada saat Anda mengembangkan atau menguji layanan dengan akun pribadi, perhatikan hal ini.