Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Možnost vzdáleně downgradovat zařízení založená na RouterOS (Mikrotik) vystavuje riziku statisíce síťových zařízení. Tato zranitelnost je spojena s otravou mezipaměti DNS protokolu Winbox a umožňuje nahrát do zařízení zastaralý (s výchozím resetováním hesla) nebo upravený firmware.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Podrobnosti o zranitelnosti

Terminál RouterOS podporuje příkaz resolve pro vyhledávání DNS.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Tento požadavek je zpracován binárním programem zvaným resolver. Resolver je jedním z mnoha binárních souborů, které se připojují k protokolu Winbox RouterOS. Na vysoké úrovni mohou být „zprávy“ odeslané na port Winbox směrovány do různých binárních souborů v RouterOS na základě schématu číslování založeného na poli.

Ve výchozím nastavení má RouterOS funkci serveru DNS vypnutou.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

I když je funkce serveru zakázána, router si udržuje vlastní mezipaměť DNS.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Když provedeme požadavek pomocí winbox_dns_request například example.com, router uloží výsledek do mezipaměti.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Vzhledem k tomu, že můžeme zadat DNS server, přes který má požadavek projít, je zadání nesprávných adres triviální. Můžete například nakonfigurovat implementaci serveru DNS z Filip Klausvždy odpovědět záznamem A obsahujícím IP adresu 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()

Nyní, když hledáte example.com pomocí Winbox, můžete vidět, že mezipaměť DNS routeru je otrávená.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Otrava example.com samozřejmě není příliš užitečná, protože ji router ve skutečnosti nepoužívá. Router však potřebuje přístup k upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com a download.mikrotik.com. A díky další chybě je možné otrávit všechny najednou.

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()

Router požaduje jedno oprávnění a my mu udělujeme pět zpět. Směrovač neukládá všechny tyto odpovědi správně do mezipaměti.

Zranitelnost backportu v RouterOS ohrožuje stovky tisíc zařízení

Je zřejmé, že tento útok je také užitečný, pokud router funguje jako DNS server, protože umožňuje napadení klientů routeru.

Tento útok vám také umožňuje využít závažnější zranitelnost: downgrade nebo backportování verze RouterOS. Útočník znovu vytvoří logiku aktualizačního serveru, včetně protokolu změn, a přinutí RouterOS vnímat zastaralou (zranitelnou) verzi jako aktuální. Nebezpečí zde spočívá v tom, že při „aktualizaci verze“ se heslo administrátora resetuje na výchozí hodnotu – útočník se může přihlásit do systému s prázdným heslem!


Útok je docela funkční, navzdory tomu autor implementuje několik dalších vektorů, včetně těch souvisejících vložení zadních vrátek do firmwaru, ale to je již nadbytečná technika a její použití pro nelegitimní účely je nezákonné.

ochrana

Pouhé vypnutí Winboxu vám umožní chránit se před těmito útoky. I přes pohodlí administrace přes Winbox je lepší používat protokol SSH.

Zdroj: www.habr.com

Přidat komentář