De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

De mogelijkheid om apparaten op afstand te downgraden op basis van RouterOS (Mikrotik) brengt honderdduizenden netwerkapparaten in gevaar. De kwetsbaarheid houdt verband met vergiftiging van de DNS-cache van het Winbox-protocol en stelt u in staat verouderde (met een standaard wachtwoordreset) of gewijzigde firmware op het apparaat te laden.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Details van de kwetsbaarheid

De RouterOS-terminal ondersteunt de oplossingsopdracht voor DNS-zoekopdrachten.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Dit verzoek wordt afgehandeld door een binair bestand genaamd solver. Resolver is een van de vele binaire bestanden die verbinding maken met het Winbox-protocol van RouterOS. Op een hoog niveau kunnen "berichten" die naar de Winbox-poort worden verzonden, worden gerouteerd naar verschillende binaire bestanden in RouterOS op basis van een array-gebaseerd nummeringsschema.

Standaard heeft RouterOS de DNS-serverfunctie uitgeschakeld.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Maar zelfs als de serverfunctie is uitgeschakeld, behoudt de router zijn eigen DNS-cache.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Wanneer we een verzoek indienen met behulp van winbox_dns_request, bijvoorbeeld example.com, zal de router het resultaat in de cache opslaan.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Omdat we kunnen specificeren via welke DNS-server het verzoek moet gaan, is het invoeren van onjuiste adressen triviaal. U kunt bijvoorbeeld een DNS-serverimplementatie configureren van Filip Klausom altijd te reageren met een A-record met daarin het IP-adres 192.168.88.250.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

Als u nu naar example.com zoekt met Winbox, kunt u zien dat de DNS-cache van de router vergiftigd is.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Natuurlijk is het vergiftigen van example.com niet erg nuttig, omdat de router het niet daadwerkelijk zal gebruiken. De router heeft echter toegang nodig tot upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com en download.mikrotik.com. En dankzij nog een fout is het mogelijk om ze allemaal tegelijk te vergiftigen.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("download.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

De router vraagt ​​één toestemming en wij geven er vijf terug. De router slaat niet al deze antwoorden correct op in de cache.

De Backport-kwetsbaarheid in RouterOS brengt honderdduizenden apparaten in gevaar

Uiteraard is deze aanval ook nuttig als de router als DNS-server fungeert, omdat hiermee clients van de router kunnen worden aangevallen.

Met deze aanval kunt u ook misbruik maken van een ernstiger beveiligingslek: de versie van RouterOS downgraden of backporten. De aanvaller herschept de logica van de updateserver, inclusief de changelog, en dwingt RouterOS om de verouderde (kwetsbare) versie als actueel te beschouwen. Het gevaar schuilt hier in het feit dat wanneer de versie wordt "geüpdatet", het beheerderswachtwoord wordt teruggezet naar de standaardwaarde - een aanvaller kan met een leeg wachtwoord op het systeem inloggen!


De aanval werkt behoorlijk, ondanks dat de auteur implementeert nog een aantal vectoren, inclusief die gerelateerd aan het inbedden van een achterdeur in de firmware, maar dit is al een overbodige techniek en het gebruik ervan voor onwettige doeleinden is illegaal.

bescherming

Door Winbox eenvoudigweg uit te schakelen, kunt u uzelf tegen deze aanvallen beschermen. Ondanks het gemak van beheer via Winbox kun je beter het SSH-protocol gebruiken.

Bron: www.habr.com

Voeg een reactie