- Skrip yang secara otomatis meloloskan prosedur verifikasi usia di berbagai platform sebagai orang dewasa
- Jika menempelkan dan menjalankan kode di konsol Discord, skrip akan otomatis mengirim permintaan API
/age-verification/verify dan berpindah ke halaman penyelesaian verifikasi
- Di platform lain seperti Twitch, Kick, dan Snapchat juga verifikasi dapat dilakukan dengan cara yang sama dengan memasukkan URL kode QR
- Alat ini menyalahgunakan struktur pemrosesan data wajah dari sistem k-id untuk membuat metadata yang tampak sah tanpa wajah asli
- Dibuat untuk menyesuaikan dengan perluasan verifikasi usia global, dengan cara menyalin enkripsi AES-GCM dan struktur data prediksi untuk melewati prosedur verifikasi
Prosedur verifikasi di Discord
- Dilakukan dengan menempelkan dan menjalankan skrip tertentu di konsol pengembang (F12) pada web app Discord
- Skrip mengekstrak cache modul webpack Discord, mencari klien API internal, lalu mengirim permintaan ke endpoint
/age-verification/verify
verification_webview_url yang diterima sebagai hasil permintaan akan dialihkan ke age-verifier.kibty.town
- Pengguna hanya perlu menyelesaikan CAPTCHA lalu menunggu hingga halaman menampilkan “success” untuk menyelesaikan verifikasi
- Melalui proses ini, akun Discord akan ditandai sebagai sudah terverifikasi dewasa
Metode verifikasi di platform lain (Twitch, Kick, Snapchat, dll.)
- Di halaman verifikasi usia tiap platform, pilih opsi ‘selfie’ lalu salin URL kode QR yang ditampilkan
- Tempel URL tersebut ke kolom input di
age-verifier.kibty.town lalu klik tombol ‘verify’
- Setelah itu proses verifikasi berjalan otomatis dan pesan sukses akan ditampilkan
Cara kerjanya
- Sistem verifikasi usia k-id yang digunakan Discord tidak mengirim video wajah ke server, melainkan hanya metadata terkait wajah dan detail proses
- Berkat struktur ini, jika metadata yang tampak sah dimanipulasi lalu dikirim, verifikasi dapat lolos tanpa wajah asli
- Setelah k-id verifier milik amplitudes pernah dipublikasikan, mitra faceassure memperkuat validasi, tetapi alat ini kembali melewatinya dengan metode baru
Tahapan teknis terperinci
- Tahap 1: Menyalin parameter enkripsi
- Dengan membandingkan permintaan yang sah, ditemukan bahwa
encrypted_payload, auth_tag, timestamp, dan iv yang hilang perlu diisi
- Pada enkripsi AES-GCM, kunci dibuat dengan menurunkan
nonce + timestamp + transaction_id melalui HKDF(SHA-256)
- Struktur yang sama direproduksi untuk membuat parameter yang hilang
- Tahap 2: Manipulasi data prediksi
- Saat penyalinan enkripsi sempurna pun masih gagal, ditemukan bahwa validasi bergantung pada ‘prediction arrays’ (
outputs, primaryOutputs, raws)
- Berdasarkan data
raws, outlier dihapus menggunakan z-score lalu outputs dan primaryOutputs dibentuk
- Selain itu, kondisi berikut juga divalidasi
- Nilai
xScaledShiftAmt dan yScaledShiftAmt hanya boleh salah satu dari dua kemungkinan
- Nama media (kamera) harus cocok dengan daftar perangkat nyata
- Waktu penyelesaian status harus cocok dengan timeline
- Kode open-source yang mengimplementasikan seluruh proses ini telah dipublikasikan, sehingga siapa pun dapat memeriksanya
Publikasi dan latar belakang pembuatan
- Pembuatnya menyampaikan terima kasih kepada xyzeva, Dziurwa, dan amplitudes yang pernah mengerjakan hal terkait sebelumnya
- Dijelaskan bahwa karena Discord akan memberlakukan verifikasi usia global secara penuh pada bulan Maret, mereka pun mengeksplorasi metode baru untuk melewati validasi tersebut
1 komentar
Pendapat Hacker News
Metode yang benar-benar kuat adalah menghasilkan input video buatan alih-alih memakai webcam sungguhan
Sepertinya tidak ada platform yang bisa mencegah ini
Bahkan jika platform mewajibkan input kamera yang sulit dipalsukan seperti di ponsel, cukup arahkan kamera ke layar beresolusi tinggi dan selesai
Permainan kucing dan tikus seperti ini sepertinya tidak akan bertahan lama
Verifikasi usia berbasis selfie video yang tidak sempurna justru menguntungkan semua pihak
Orang yang masuk akal tidak perlu mengunggah SIM atau paspor, dan platform lebih mudah mempertahankan pengguna
Situs porno bisa membuat akun pengguna untuk meningkatkan pelacakan dan pendapatan iklan
Politikus bisa mengumumkan bahwa mereka “telah menerapkan kebijakan pembatasan usia”, dan orang tua merasa tenang karena anak mereka tidak menonton porno
Pada akhirnya, semua pihak menang
Metode verifikasi seperti ini tampaknya pada akhirnya akan bergerak ke arah itu
Mungkin salah satu alasan Google mendorong aplikasi khusus Play Store juga untuk membangun rantai perangkat lunak yang dapat diverifikasi seperti ini
Pada akhirnya ini masalah yang tinggal membalik satu sakelar
Jika digabung dengan pemetaan 3D, trik sekadar menyorotkan layar tidak akan berhasil
Masalahnya adalah layanan verifikasi usia seperti milik Discord tidak mencoba dengan serius
Saya просто tidak akan memainkan permainan itu dan berhenti memakai platformnya
Ada tiga masalah dengan pendekatan ini
Ini adalah contoh reverse engineering yang sangat bagus, yang menunjukkan betapa sulitnya melakukan verifikasi tanpa melanggar privasi
Karena kodenya terbuka, masalah eksekusi kode arbitrer (#3) tidak berlaku di sini
Jika perusahaan merespons dengan metode yang lebih invasif (#2), pengguna selalu bisa pindah ke platform lain
Menurut saya ini ide yang cukup cerdik
Discord tampaknya melonggarkan verifikasi usia hanya sebatas bisa mengatakan kepada regulator bahwa mereka “sedang mengambil langkah perlindungan anak”
Tetapi jika pemerintah mulai mengawasi dengan serius, pendekatan seperti ini tidak akan bertahan lama
Beberapa negara sudah menuntut autentikasi biometrik yang lebih kuat, dan beberapa layanan sedang beralih ke verifikasi berbasis aplikasi mobile
Trik sederhana berbasis JavaScript akan makin tidak efektif
Disarankan membungkus kode eksekusi dalam immediate invoked function expression (IIFE)
Di macOS Safari, ini tidak berjalan karena top-level await tidak didukung
Lihat caniuse.com/wf-top-level-await untuk info terkait
Sudah tertinggal sekitar 5 tahun
Saat dicoba, saya diarahkan ke https://age-verifier.kibty.town/webview?url=null
dan muncul pesan
{"error":"error parsing webview url"}Sepertinya akun Discord saya sedang dalam A/B test dan memakai penyedia verifikasi lain, Persona
Jika dicari, ada lebih banyak informasi tentang itu
Ini benar-benar berfungsi
Saya menerima pesan dari Discord bahwa saya “telah diklasifikasikan sebagai grup dewasa”
(narasi) Dan pada saat itu, saya sadar akun saya telah diretas ;)
Semoga akun saya yang berusia 11 tahun tidak bermasalah, tetapi kalau mereka meminta wajah atau ID, saya akan keluar saja
Saya tidak mengerti kenapa generasi muda begitu terikat pada layanan yang memusuhi mereka
Apakah kenyamanan tetap tinggal di platform yang dibenci lebih besar daripada usaha mencari alternatif?
Banyak anak muda sekarang bahkan asing dengan terminal atau konsep path file
Mereka bisa mencari sesuatu, tetapi menyiapkan alternatif sendiri adalah hal lain
Yang paling penting, mereka bahkan kurang punya kesadaran bahwa alternatif itu mungkin ada
Platform terbuka seperti Matrix masih kurang fitur, dan Discord berada pada posisi pilihan yang paling tidak buruk
Teman-teman mereka ada di sana, jadi mereka juga ada di sana
Setiap kali pindah platform, anggota berkurang dan komunitas runtuh
“Usaha ringan” itu dalam praktiknya berarti membunuh komunitas
Bahkan jika memakai platform lain, mereka akan sendirian di sana
Hampir mustahil membuat semua orang pindah pada saat yang sama
Saya lolos captcha di Discord,
tetapi muncul error
{"error":"failed to execute k-id privately action (status=404)"}Saya jelas orang dewasa, dan prosedur seperti ini benar-benar tidak masuk akal
Saya tidak peduli kalau sampai diblokir
Ringkasan berita terkait
Permainan kucing dan tikus dalam verifikasi usia digital adalah beban regulasi yang sangat besar
Jika semudah ini dilewati, platform pada dasarnya hanya mencentang kotak kepatuhan regulasi,
sementara dasar kepercayaan yang sebenarnya sangat rapuh
Tetapi perusahaan tidak menyukainya karena mereka tidak bisa memperoleh data pengguna dewasa yang telah terverifikasi
Lihat blog Google Age Assurance Europe untuk pembahasan terkait
Tujuan sistem seperti ini bukan pemblokiran sempurna, melainkan menambahkan friksi agar publik tidak bisa dengan mudah melewatinya