Google-beveiligingsonderzoeker Matthew Garrett ontdekte een zero-day-kwetsbaarheid in TP-Link SR20 Smart Home-routers. Nadat het bedrijf niet in geslaagd om te reageren op de private openbaring, de onderzoeker besloten om de fout openbaar te maken.
TP-Link SR20 Vulnerability Technisch overzicht
De kwetsbaarheid is een zero-day uitvoeren van willekeurige code bug. De TP-Link SR20 routers zijn dual-band 2.4 GHz / 5 GHz producten die geschikt zijn voor het regelen van smart home en ivd apparaten. Ze ondersteunen ook apparaten die de ZigBee en Z-Wave protocollen run.
Blijkbaar, de onderzoeker meldde het lek aan TP-Link particulier meer dan 90 dagen geleden, maar hij kreeg geen antwoord. Pogingen om contact met het bedrijf op andere manieren waren ook niet succesvol geacht:
Ik meldde dit bij TP-Link in december via hun veiligheid onthullingsvorm, een proces dat lastig is door de “Gedetailleerde beschrijving” veld beperkt tot 500 tekens. De pagina die vertelde me dat ik terug zou horen binnen drie werkdagen – een paar weken later, geen reactie, Ik tweeted naar hen te vragen voor een contact en hoorde niets terug. Iemand anders's poging om TDDP kwetsbaarheden melding van een vergelijkbaar resultaat gehad, dus hier zijn we.
Wat betreft de kwetsbaarheid zelf, het probleem komt voort uit een proces dat deze routers rijden frequent. De werkwijze staat bekend als “TDDP”, of de TP-Link Device Debug Protocol. Het proces verloopt op basisniveau en kan twee soorten opdrachten initiëren. De eerste is geen verificatie vereist, en de tweede vereist is.
Verwant: CVE-2018-15.702: TP-LINK TL-WR841N Router ontdekte kwetsbaarheid
De kwetsbaarheid bloot een soort één commando's. Een van hen, commando 0x1F, verzoek 0x01, dient voor configuratie validatie, zoals door Gareth.
Dumping TDDP in Ghidra maakt het vrij eenvoudig om een functie die recvfrom oproepen vinden(), het gesprek dat kopieën gegevens van een netwerk socket. Er wordt gekeken naar de eerste byte van het pakket en gebruikt deze om te bepalen welk protocol wordt gebruikt, en geeft het pakket naar een ander verzender afhankelijk van de protocolversie. voor versie 1, de dispatcher ziet er gewoon bij de tweede byte van het pakket en roept een andere functie afhankelijk van de waarde. 0x31 is CMD_FTEST_CONFIG, en dit is waar de dingen super leuk, de onderzoeker schreef.
Wat er vervolgens gebeurt, is dat deze functie ontleedt het pakket voor een payload die twee strings, gescheiden door een puntkomma. De eerste string is een bestandsnaam, en de tweede is een configfile. Het roept dan tddp_execCmd(“cd / tmp; tftp -gr% s% s &”,luaFile,REMOTE_ADDRESS) die de TFTP-commando in de achtergrond uitvoert.
Deze verbindt terug naar de machine die het commando en probeert naar een bestand te downloaden via TFTP die overeenkomt met de bestandsnaam toegezonden. De belangrijkste TDDP proces wacht tot 4 seconden voor het bestand te verschijnen – als het eenmaal doet, laadt het bestand in een Lua interpreter het eerder geïnitialiseerd, en roept de functie config_test() met de naam van het configuratiebestand en het adres op afstand als argumenten.
sinds config_test() wordt beheerd door het bestand gedownload van het externe apparaat, het uitvoeren van willekeurige code aan de interpreter toegestaan, waarbij de werkwijze os.execute lopende opdrachten op de host bevat. Aangezien TDDP loopt als root, je krijgt willekeurige commando's als root, Gareth gesloten.
Een proof-of-concept code is ook beschikbaar voor de kwetsbaarheid in TP-Link SR20 smart home routers.