Een tijdje geleden hebben twee hackers genaamd HackerGiraffe en j3ws3r een heleboel Google Chromecasts “gehacked” om PewDiePie’s (Felix Kjellberg) YouTube kanaal te promoten.
De “hack” was eigenlijk slechts een misbruikte functionaliteit van Google ChromeCasts die met port forwarding open stonden naar het internet. Iedereen die zo’n ChromeCast te pakken krijgt kan via poort 8008 allerhande HTTP-requests versturen om de ChromeCast te besturen.
Terwijl dit alles gedocumenteerde functionaliteit is kan men zich wel afvragen waarom Google geen enkele vorm van authenticatie heeft geïmplementeerd in hun casting-protocol.
Hier zijn enkele beschikbare functies in de ChromeCasts die we kunnen misbruiken met het gebruik van een cURL commando:
Hier zijn enkele commandos die je kan gebruiken om de ChromeCast te besturen. Laten we beginnen met het scannen naar WiFi access points in de buurt van de ChromeCast. We “pipen” de output naar mjson.tool om de output wat mooier voor te stellen. Je kunt dit gerust uit het commando halen.
curl http://{CHROMECAST_IP}:8008/setup/scan_results | python -mjson.tool
Om de naam van de ChromeCast te veranderen kun je dit doen:
curl -X POST -H "Content-Type: application/json" -d '{"name": "{SOME_NAME}"}' http://{CHROMECAST_IP}:8008/setup/set_eureka_info -v
Om het probleem wat meer aandacht te geven (en ook gewoon omdat ik het leuk vond), heb ik een kleine tool geschreven om dit hele proces te vergemakkelijken. Op die manier hoeven we al die URL’s en JSON niet meer te onthouden.
De ChromeCast Exploitation Kit of in het kort CCEK, is een simpel Python script dat gebruikt kan worden om met de ChromeCasts te praten door middel van de command line. Geen authenticatie nodig. Zo kun je bijvoorbeeld zeggen:
CCEK.py -t {CHROMECAST_IP} -a play -v dQw4w9WgXcQ
Het bovenstaande commando speelt Rick Astley’s Never Gonna Give You Up af op de gekozen ChromeCast, een echte klassieker!
Een snelle zoekopdracht op Shodan.io toont ons dat vele ChromeCasts al getroffen zijn door hackers. Hier zie je een ChromeCast in Duffel, België wiens naam veranderd werd naar HACKED_BY_@HACKERGIROX.
Ten eerste zie ik geen enkele reden om een ChromeCast open te zetten naar het internet, die toegeng sluit je dus best ook af. Log in op je router en zet port forwarding af naar de ChromeCast. Als je voor de een of andere reden dan toch je ChromeCast wil openen naar het internet, stel dan een IP WhiteList in op je Firewall.
Ten tweede denk ik dat het een goed idee zou zijn moest Google een vorm van authenticatie instellen op de nieuwe versies van de ChromeCast firmware. Zo kan niemand acties uitvoeren op de ChromeCast zonder toestemming, ook al zijn deze personen verbonden met het lokale netwerk.