Galaxus melaporkan rekaman kamera bayi yang dapat diakses bebas; The Verge melaporkan sekitar 1,1 juta perangkat Meari terdampak. Bagi saya, pelajarannya jelas: login tidak melindungi kamar bayi jika platform di baliknya gagal memisahkan pesan, gambar, atau kunci dengan benar untuk setiap perangkat. Timmy tidak menyelesaikan semua masalah keamanan di dunia. Namun, rahasia media dan pairing yang penting di Timmy tidak berada di dalam platform kamera cloud.
Apa yang tampaknya gagal dalam kasus Meari
Laporan publik menggambarkan sebuah platform white-label. Banyak merek yang terlihat oleh konsumen menjual kamera yang bergantung pada infrastruktur Meari/CloudEdge yang sama. Itulah sebabnya insiden ini penting: ketika platform bersama menetapkan batas otorisasi secara keliru, akibatnya bukan hanya satu kamera yang lemah, melainkan paparan pada seluruh armada perangkat.
Pola yang dilaporkan lebih dari sekadar kata sandi bawaan yang lemah. Sumber menyebut pesan MQTT tanpa kontrol langganan yang memadai per perangkat, URL gambar yang dapat dijangkau publik, penyamaran gambar yang lemah, serta kunci statis atau kunci yang dapat diekstrak dari aplikasi. Ini adalah kegagalan platform: infrastruktur dapat mengungkap data yang seharusnya tidak pernah tersedia bagi akun lain.
| Risiko kamera cloud | Rancangan tandingan Timmy |
|---|---|
| Backend menyimpan atau mendistribusikan peristiwa gambar. | Timmy tidak memiliki arsip cloud untuk gambar kamar bayi; medianya adalah WebRTC langsung. |
| Broker atau bucket harus mengotorisasi setiap perangkat dengan sempurna. | Firestore hanya membawa data pairing dan signaling; SDP/ICE dienkripsi sebelum ditulis. |
| Kunci statis dapat memengaruhi seluruh armada perangkat. | Setiap pairing membuat kunci tersendiri yang diturunkan dari P-256 ECDH pada perangkat. |
| Jalur relay bisa disalahartikan sebagai akses ke media. | TURN meneruskan paket SRTP terenkripsi, tetapi tidak menerima kunci media. |
Cara Timmy membuat rahasia
Kode Timmy yang terdiri dari empat karakter memang bukan rahasianya. Dalam kode, itu hanya titik temu: aplikasi menurunkan sebuah meetingKey kunci pertemuan darinya agar kedua perangkat dapat menemukan pertukaran kunci publik Firestore yang sama. Kunci ECDH privat tidak pernah meninggalkan perangkat.
Kedua perangkat kemudian menghitung rahasia bersama P-256 ECDH yang sama. Kunci pairing diturunkan secara lokal. SAS dua digit diturunkan dari rahasia bersama ditambah kedua kunci publik yang diurutkan. Jika pertukaran kunci itu dimanipulasi, perangkat akan menampilkan angka yang berbeda, sehingga pengguna tahu untuk tidak mengonfirmasi pairing.
sequenceDiagram
participant Baby as Baby device
participant Firestore as Firestore meeting point
participant Parent as Parent device
participant Turn as TURN relay
Baby->>Baby: Generate P-256 ECDH keypair
Parent->>Parent: Generate P-256 ECDH keypair
Baby->>Firestore: Write public key only under meetingKey
Parent->>Firestore: Write public key only under meetingKey
Firestore-->>Baby: Parent public key
Firestore-->>Parent: Baby public key
Baby->>Baby: Compute sharedSecret + SAS
Parent->>Parent: Compute sharedSecret + SAS
Baby-->>Parent: Humans compare SAS on both screens
Baby->>Firestore: Write SDP/ICE encrypted with AES-256-GCM
Parent->>Firestore: Write SDP/ICE encrypted with AES-256-GCM
Baby-)Turn: WebRTC media as DTLS/SRTP packets
Turn-)Parent: Relay forwards encrypted packets
Note over Turn: TURN sees network metadata, not media keys
Rantai keamanan Timmy yang disederhanakan: Firestore menjadi titik temu dan transport signaling; TURN hanya relay; media tetap terenkripsi dengan WebRTC.
Mengapa media WebRTC tidak bisa diam-diam ditonton
WebRTC bukan sekadar “mengirim video”. Sebelum media mengalir, perangkat menjalankan handshake DTLS. Kunci SRTP untuk audio dan video diturunkan dari transport aman tersebut. Paket media kemudian dienkripsi sebagai SRTP. Server TURN dapat meneruskan paket itu, tetapi tidak menerima kunci yang diperlukan untuk membuka audio atau video.
Timmy menambahkan satu lapisan sebelumnya: data signaling seperti penawaran SDP, jawaban SDP, dan kandidat ICE dienkripsi dengan AES-256-GCM sebelum mencapai Firestore. Firestore membantu perangkat bernegosiasi; Firestore bukan tempat video, audio, atau signaling teks biasa disimpan.
Hal yang tetap tidak diklaim Timmy
Tidak ada baby monitor yang serius seharusnya mengklaim mustahil diretas. Jika ponsel disusupi, aplikasi apa pun dapat diserang. Build aplikasi yang berbahaya mengubah model risiko. Konfigurasi server harus tetap benar. Klaim Timmy yang lebih terbatas adalah soal arsitektur: Timmy menghindari artefak media kamar bayi yang dapat dibaca backend dan membuat logika pairing yang penting bagi keamanan dapat diperiksa di proyek inti publik.
Pertanyaan untuk diajukan tentang kamera bayi apa pun
- Apakah penyedia menyimpan gambar atau klip?
- Apakah URL media bersifat privat, berumur singkat, dan diotorisasi untuk tiap perangkat?
- Apakah kunci dibuat per perangkat atau pairing, bukan statis di dalam aplikasi?
- Apakah broker hanya dapat mengirimkan pesan untuk perangkat yang benar-benar Anda miliki?
- Apakah pairing memungkinkan seseorang menyadari upaya man-in-the-middle?
Baca kodenya
- ECDH dan SAS di Timmy Core
- Kunci pertemuan, kunci dokumen, dan AES-GCM
- Aturan Firestore untuk sesi dan pairing
- Dokumentasi keamanan di proyek inti
Sumber
- Rekaman dari kamera bayi dapat diakses bebas · Galaxus
- Satu juta baby monitor dan kamera keamanan mudah dilihat oleh peretas · The Verge
- tak seorang pun menaruh bayi di sudut · Sammy Azdoufal
- Panduan orang tua untuk insiden yang sama · Baby Monitor Timmy