A Facebook nemrégiben egy súlyos hibát javított a széles körben elterjedt Messenger Androidos alkalmazáson. Ez a hiba lehetővé tette volna, hogy egy távoli támadó gyanútlan célpontokat hívjon fel, és lehallgassa őket, még mielőtt felvennék ezt a hívást.

A hibát Natalie Silvanovich fedezte fel október 6-án, aki a Google Project Zero bug-vadász csapat tagja. Silvanovich nem először talál kritikus hibákat üzenetküldő alkalmazásokban. Korábban a WhatApp, az iMessage, a WeChat, a Signal és a Reliance JioChat alkalmazásokban is talált hasonló hibákat.

A biztonsági rés lehetővé tette egy az alkalmazásba bejelentkezett támadó számára, hogy egyszerre kezdeményezzen hívást és küldjön egy speciálisan kialakított üzenetet egy olyan célpontnak, aki be van jelentkezve az alkalmazásba, valamint egy másik Messenger kliensbe, például egy webböngészőbe.

Pontosan ez hogyan is történhet?

A Facebook Messenger audió- és videóhívásokat hoz létre a WebRTC-ben, ahol hívó és a hívott fél között üzenetek sorozatai cserélődnek ki. Normális esetben a hívott fél nem továbbít hangot addig, amíg a felhasználó nem fogadja a hívást a beleegyezésével.

Mi az a WebRTC?
A WebRTC (Web Real-Time Communication) egy nyílt forráskódú keretrendszer, ami lehetővé teszi a webböngészőn keresztül a valós idejű videócsetelést. 2011. június 1-jén jelent meg és több webalkalmazást működtető vállalat, mint a Google, Mozilla és az Opera is támogatja, hogy felvegyék ezt a szabvány a World Wide Web Consortium (W3C) szabványok közé. Legfőbb feladata, hogy protokolltámogatást nyújtson a felek közötti kommunikáció felépítéséhez.

Ez a gyakorlatban kétféleképpen valósulhat meg. Az első, hogy ebben a keretrendszerben egy setLocalDescription() függvény hívódik meg, ami megváltoztatja a kapcsolathoz társított leírást. Akkor hívják meg, amikor a kapcsolat már felépült. Mivel a leírások addig cserélődnek, míg a két fél meg nem állapodik egy konfigurációban, ezért a fenti függvény nem azonnal lép életbe.

A második lehetőség szerint az audio- és videómédia leírások inaktívvá állítódnak és frissülnek a helyi SDP-ben, amikor a felhasználó rákattint a gombra. Attól függ, hogy melyik stratégiát alkalmazzák, hogy a hívott fél hány végpontot keresztül van bejelentkezve a Facebookba.

Mi az az SDP?
Session Description Protokollt használják a kommunikálni kívánó felek közötti munkamenetek egyeztetésére a multimédiák kommunikációs alkalmazásokban. Ez a protokoll maga nem szállítja a médiatartalmakat, csupán a végpontok közötti hálózati mutatók, médiatípusok és egyéb kapcsolódó tulajdonságok leírására használják.

Van azonban egy olyan üzenettípus, amelyet nem használnak a hívás beállításához. Ez az SdpUpdate függvény, ami értesíti a paraméterrendszert arról, hogy egy elem frissült az azonosítóján keresztül. Ez pedig a setLocalDescription azonnali hívását okozza. Ha ezt az üzenetet csengetés közben küldik a hívott készülékre, akkor az azonnal elkezdi továbbítani a hangot, ami lehetővé teheti a támadó számára, hogy figyelemmel kísérje a hívott személy környezetét.

források:
https://bugs.chromium.org/p/project-zero/issues/detail?id=2098
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription