Mencuri video YouTube yang ditutup satu per satu



Pada bulan Desember 2019, beberapa bulan setelah saya mulai meretas program Google VRP, saya mengalihkan perhatian saya ke YouTube. Saya ingin menemukan cara untuk mengakses Private



video pribadi ( ) yang bukan milik saya.



Saat mengunggah video ke YouTube, Anda dapat memilih salah satu dari tiga opsi akses. Terbuka ( Public



) memungkinkan siapa saja untuk menemukan dan melihat video, Akses Tautan ( Unlisted



) hanya mengizinkan pengguna yang mengetahui ID video (URL Private



) untuk melihat video , Akses Terbatas ( ) hanya mengizinkan Anda atau akun lain yang telah diberikan izin untuk melihat video tersebut. video. untuk izin ini.



Hal pertama yang saya lakukan adalah mengunggah video ke saluran YouTube pengujian kedua saya dan mengaktifkan opsi akses video Private



sehingga saya dapat menggunakannya untuk pengujian. (Ingat bahwa pengujian harus selalu dilakukan pada sumber daya / akun yang Anda miliki!) Jika saya dapat menemukan cara untuk mengakses video dari akun pengujian pertama, maka kami akan mengidentifikasi adanya bug.



Saya membuka YouTube dengan akun pertama saya, memeriksa setiap fitur, dan mengklik setiap tombol yang dapat saya temukan. Setiap kali saya melihat permintaan HTTP dengan ID video, saya menggantinya dengan video uji dengan akses Private



, berharap beberapa informasi tentang dia akan bocor, tetapi tidak berhasil. Sepertinya situs web YouTube utama (setidaknya semua titik akhirnya yang telah saya uji) selalu memeriksa untuk melihat apakah video dalam keadaan Private



, dan ketika mencoba untuk mengkueri video target yang ditutup, selalu mengembalikan kesalahan seperti This video is private!



.



Saya perlu mencari cara lain.



Dalam situasi seperti itu, solusi yang sangat baik mungkin untuk memeriksa produk / layanan lain yang bukan tujuan utama kami, tetapi entah bagaimana berinteraksi secara internal dengan sumber dayanya. Jika mereka memiliki akses ke sumber daya situs, maka ada kemungkinan bahwa mereka belum menerapkan semua tingkat perlindungan yang dimiliki produk utama.



Target menarik yang memenuhi persyaratan tersebut adalah Google Ads. Ini adalah produk yang digunakan pengiklan untuk membuat iklan di semua layanan Google , termasuk YouTube . Artinya, iklan yang Anda tonton di depan video YouTube sedang disesuaikan oleh pengiklan di sini di platform Google Ads.



Jadi, saya mendaftarkan akun Google Ads dan membuat iklan baru yang seharusnya memutar video ke semua pengguna YouTube sebagai iklan yang dapat dilewati. Selama proses pembuatan iklan, saya juga mencoba menggunakan ID video target gated di semua tempat, tetapi tidak berhasil sedikit pun.



Setelah membuat iklan, saya mulai menjelajahi berbagai fitur Google Ads. Ini adalah produk berskala sangat besar dan memiliki banyak pilihan dan alat yang berbeda. Saya mencoba mencari sesuatu yang berhubungan dengan YouTube.



Di platform, saya menemukan halaman berjudul Videos



, di mana saya melihat daftar video yang digunakan untuk iklan saya. Mengklik video akan membuka bagian analitik ( Analytics



) dari video ini. Di dalamnya saya menemukan pemutar bawaan, statistik, dan fungsi menarik yang disebut Moments



. Ini memungkinkan pengiklan untuk "menandai" momen tertentu dalam video sehingga mereka dapat melihat ketika hal-hal yang berbeda terjadi (misalnya, stempel waktu saat logo perusahaan muncul). Sejujurnya, saya tidak begitu mengerti mengapa pengiklan menggunakan fitur ini, tetapi sepertinya menarik:





Melihat log proxy, saya perhatikan bahwa setiap kali saya β€œmenandai momen”, sebuah POST



permintaan dikirim ke titik akhir /GetThumbnails



. Isi permintaan ini berisi ID video:



POST /aw_video/_/rpc/VideoMomentService/GetThumbnails HTTP/1.1

Host: ads.google.com

User-Agent: Internet-Explorer-6

Cookie: []



__ar={"1":"kCTeqs1F4ME","2":"12240","3":"387719230"}






Dimana pada parameter __ar



nilainya 1



adalah ID video dan nilainya 2



adalah waktu momen dalam milidetik. Sebagai tanggapan, gambar yang disandikan base64 dikembalikan, yang merupakan gambar mini yang digunakan oleh platform Iklan.



Saya mengulangi apa yang telah saya lakukan berkali-kali: Saya mengganti ID dalam permintaan dengan pengidentifikasi video yang ditutup dari akun kedua, dan, yang mengejutkan saya, saya menerima gambar base64 sebagai tanggapan !



Saya mencari di Google "base64 to image" dan menempelkan data base64 ke dekoder pertama yang saya temukan. Gambar berisi thumbnail dari video pribadi yang ditargetkan ! Itu berhasil! Saya menemukan bug IDOR yang berfungsi (Referensi Objek Langsung Tidak Aman) , berkat itu saya bisa mendapatkan bingkai dari video YouTube apa pun dengan akses terbatas!



Tapi saya pikir, "Hmm, ini hanya satu tembakan." Kita bisa melakukan yang lebih baik.



Saya ingin menulis skrip Python dengan bukti konsep yang menghasilkan "video" yang benar-benar bergerak. Mencari informasi, saya menyadari bahwa jika video direkam pada 24 FPS, maka satu frame muncul di layar selama 33



milidetik. Artinya, cukup bagi saya untuk mengunduh setiap gambar, dimulai dengan 0



dan melakukan peningkatan sebesar 33



, dan kemudian mengumpulkan semacam video dari semua bingkai yang diterima.



Saya dengan cepat menulis POC yang mengunduh bingkai untuk tiga detik pertama video, mendekodekannya, dan kemudian menghasilkan GIF. Untuk menguji kode, saya menjalankannya dengan video lama saya, yang sebelumnya saya batasi aksesnya karena saya malu karenanya:





Jadi, dengan menggunakan bug ini, penyerang dapat mengunduh video tertutup apa pun di YouTube, yang menurut saya merupakan ancaman yang cukup serius. Tetapi, tentu saja, ia memiliki beberapa keterbatasan yang tidak dapat saya atasi:



  • Dalam kehidupan nyata, Anda perlu mengetahui ID video target. Kebocoran besar-besaran akan dianggap sebagai bug itu sendiri.
  • Karena kami hanya menerima gambar, kami tidak dapat mengakses suara.
  • Resolusinya sangat rendah (tetapi cukup untuk memahami apa yang terjadi dalam video).


Dapat disimpulkan bahwa selalu ada baiknya memperhatikan situasi di mana dua produk yang berbeda memiliki interaksi internal satu sama lain, karena tim pengembangan kedua produk mengetahui sistem mereka dengan lebih baik dan mungkin kehilangan detail penting saat bekerja dengan sumber daya produk lain.



Menemukan IDOR seperti itu bisa menjadi pekerjaan yang sangat monoton dan melelahkan, dan sekarang saya mencoba menghindari penggantian ID buta sederhana dengan harapan yang terbaik. Jika Anda menguji produk untuk beberapa waktu dan memahami struktur internalnya, akan lebih efektif (dan lebih menarik) untuk mencoba memikirkan berbagai tindakan tak terduga yang mungkin tidak terpikirkan oleh pengembang, atau untuk fokus pada fitur yang baru saja diterapkan, atau hanya melakukan sesuatu yang membutuhkan tindakan bijaksana. Anda mungkin merasa lebih menyenangkan dalam jangka panjang. Menurut pendapat saya, semakin Anda memahami sistemnya, semakin banyak ide tentang peretasan yang muncul di benak Anda.



Tetapi bahkan dalam sistem yang paling andal dan teruji secara menyeluruh, ada kemungkinan bahwa hanya dengan mengganti ID dalam permintaan akan menghasilkan bug kritis.



Bagaimana situasi berkembang



[11 Des 2019] - Laporan



bug terkirim [12 Des 2019] - Triase awal



[ 20 Des 2019] - Bug diterima (P4 -> P1)



[08 Jan 2020] - Langkah-langkah yang diambil untuk memperbaiki bug dengan sementara menonaktifkan fitur Moments







[17 Jan 2020] - hadiah $ 5.000 dikeluarkan



[??? ?? 2020] - fungsi Moments



dihidupkan kembali, sekarang memeriksa akses ke video.






Periklanan



VDSina menawarkan VDS dengan pembayaran harian, kemampuan untuk membuat konfigurasi server Anda sendiri dalam beberapa klik, menginstal sistem operasi apa pun. Setiap server terhubung ke saluran Internet 500 Megabit dan dilindungi dari serangan DDoS gratis!



Berlangganan obrolan kami di Telegram .






All Articles