-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Pokazał jak zdalnie przejąć całą flotę samochodów Tesli – otwieranie aut, startowanie silnika, lokalizowanie. Do tego root na każdym samochodzie. Nagroda: ~185 000 PLN

07 września 2020, 11:33 | Aktualności | komentarzy 10

Opis całej serii podatności możecie znaleźć tutaj (sam raport jest z 2017 roku, ale dopiero niedawno został opublikowany). Za znaleziska wypłacono aż $50 000 w ramach programu robaczywych nagród (ang. bug bounty – pozdrowienia dla fanów ortodoksyjnych tłumaczeń :-)

Zaczęło się od serwisu service.teslamotors.com, gdzie każdy może wykupić dostęp. Okazało się, że daje to również dostęp do wszystkich modułów Pythona – z serwisu toolbox.teslamotors.com. Normalnie dostęp powinien być tylko do kilku, ale prawdopodobnie problem ze źle zaimplementowaną autoryzacją w API załatwił sprawę.

Część danych była szyfrowana, ale klucz można było pozyskać z tego samego serwera. Dalej już tylko z górki, w źródłach dostępne były zahardkodowane dane do kilku usług – dostępnych jednak za VPN-em Tesli:

Decrypting and decompyling those python modules reveals a handful of hard coded credentials for various services, mostly inside Tesla’s internal VPN.

Jak dostać się do VPNa? Badacz wyciągnął dane logowania z jednego z samochodów (samochody łączyły się do sieci Tesli, z wykorzystaniem OpenVPN, każde auto miało wygenerowane swoje unikalne klucze).

Podsumujmy – mamy dostęp do VPNa – do sieci samochodowej, mamy trochę credentiali do wewnętrznych usług. Teraz tylko trzeba trochę poskanować porty / usługi i zobaczyć czy uda się gdzieś zalogować. Udało się:

Specifically, with regard to this report, I was able to find the above mentioned [redacted].dev.teslamotors.com server and utilize the credentials found in the decompyled Toolbox plugin to login to the web service.

This service contains the partial in-system source code for many Tesla services, including mothership.vn, firmware.vn, and more.  Additionally, as it turns out, the credentials from the Toolbox plugin were not actually required to access the majority of these items. Therefore anyone with access to a car’s VPN connection or credentials would be able to access this server.

Co ciekawe, jak widać, część serwisów była dostępna po prostu po połączeniu się VPN-em do sieci samochodowej (bez wymogu posiadania żadnych extra wykradzionych danych logowania).

Uwaga, przed nami pierwsze naprawdę duże odkrycie, na jednym z serwerów udało się znaleźć pewne testowe klucze:

nosing around on this server revealed a module called „[redacted]”.  Extracting that module revealed a set of development VPN keys under „[redacted]/good.dev-test.carkeys.tar”.  Surprisingly, these keys actually work when connecting to vpn.dev.teslamotors.com.

No właśnie, sama nazwa wskazuje, że ww. klucze są testowe (dev-test.carkeys), więc nie powinny działać na produkcji, prawda? Okazało się wręcz przeciwnie, dały one dostęp do połączenia każdego samochodu:

Examining the package for mothership revealed many service endpoints.  It also revealed that most of these endpoints would work on arbitrary vehicles if logged in with a non-production VPN key, due to mishandling of credentials from this source. This also allowed retrieval of the current 24-hour security keys for any vehicle, as well as a copy of client credentials for that particular vehicle, which could allow persistent access to a specific vehicle’s connection.

Umożliwia to przy okazji, w połączeniu z w zasadzie brakiem ofajerłolowania ;) sieci dostępnych za VPN-em, dostęp na roota na każdy samochód.

Finally, the vpn.dev.teslamotors.com network has minimal firewalling.  Adjusting some basic routing makes individual customer vehicle IPs on the production vehicle VPN accessible by adding individual routes for those IP ranges and choosing an appropriate gateway.  Combined with the security keys and vehicle IPs obtained using mothership, full remote root access to any vehicle is possible, with all the security implications of the same.

Root, rootem, ale co realnie można by zrobić? Wcześniej wspomnianymi kluczami można skomunikować się z serwisem mothership (do którego łączą się samochody i pobierają polecenia wydane np. Appką mobilną Tesli) i korzystając z API np. lokalizować, otwierać czy uruchamiać dowolny samochód Teli

From there it is just a matter of utilizing the dev VPN connection to make requests to mothership.vn.teslamotors.com for arbitrary vehicles, and these commands are accepted without further authentication.  For example, testing against one of my own vehicles, a demonstration of one of the worst possible attacks (locating, unlocking, and starting an arbitrary vehicle)

Konkretne (nieco uproszczone) żądania do API – poniżej:

curl  http://mothership.vn.teslamotors.com:4567/vehicles/p28615/command/drive_state

{„shift_state”:null,”speed”:null,”latitude”:[redacted],”longitude”:[redacted],”heading”:236,”gps_as_of”:1490406758}

curl http://mothership.vn.teslamotors.com:4567/vehicles/p28615/command/door_unlock

{„reason”:””,”result”:true}

curl http://mothership.vn.teslamotors.com:4567/vehicles/p28615/command/remote_start_drive

{„reason”:””,”result”:true}

–Michał Sajdak

 

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Max

    Tak wygląda rzeczywistość , systemy tworzą inżynierowie posiadający boskie moce ale nie zawsze wiedze na temat bezpieczeństwa ;)
    Trzeba usunąć najsłabsze ogniwo z łańcucha , czyli człowieka i wtedy będzie lepiej

    Odpowiedz
  2. Mati

    To, że Tesle są cały czas połączone z bazą za pomocą OpenVPN było wiadome od dawna i to była kwestia czasu, aż ktoś się do tego dobierze… (był kiedyś wywiad z byłym inżynierem Tesli i dość dokładnie opowiedział jak to wygląda od strony infry) Tutaj był tylko błąd w implementacji API na stronie…

    Tak BTW, ciekawe czy inne samochody, wysyłające telemetrię do central swoich producentów, też mają podobne „ficzery”

    Odpowiedz
    • Z tym OpenVPN – tak, choć teraz już używają czegoś innego :)

      Odpowiedz
  3. Filip

    „robaczywych nagród ” to by było buggy bounty.
    Tutaj mamy raczej „robacze”.

    Odpowiedz
  4. Badacz

    Mojego trabanta nikt nie odpali jak sobie już go kupię

    Odpowiedz
    • Sandalarz

      Ty pewnie też nie odpalisz. Ale jest pociecha: karton nie rdzewieje.

      Odpowiedz
      • asdsad

        I nie ma problemów elektrycznych z brakiem masy, bo cały jest z masy ;)

        Odpowiedz
  5. asd

    Chyba ta nagroda ni zbyła zbyt duża, tak mi się coś wydaje. Możliwość ukradnięcia dowolnego samochodu (a w tym tego było w nim przechowywane) to całkiem sporo tak myślę

    Odpowiedz
  6. cez

    nie fajne jest to, że ktoś ma roota na twoją furę – sam service.key to już przeginka.

    nie było */command/remote_engine_blowup

    czy lepiej nie ujawniać ?

    Odpowiedz
  7. asdsad

    „Startowanie silnika” w sensie „rozrusznik”? ;)

    Odpowiedz

Odpowiedz na asd