Turvauuringute ekspert Cisco ettevõttest üksikasjad () Glibc funktsiooni memcpy() rakenduses 32-bitisel ARMv7 platvormil. Probleem tuleneb parameetri negatiivsete väärtuste vale käitlemise tõttu, mis määrab kopeeritava ala suuruse, seoses assembleri optimeerimistega, mis manipuleerivad 32-bitiste allkirjastatud täisarvudega. memcpy() kutsumine ARMv7 süsteemides negatiivse suurusega põhjustab vale väärtuste võrdlemise ja kirjutamise väljaspool määratud puhvri piire.
Haavatavust saab ära kasutada koodi täitmiseks olukordades, kus ründaja suudab organiseerida muutujate negatiivsete väärtuste genereerimise, mille kaudu edastatakse kopeeritavate andmete suurus (näiteks lähevad negatiivseks, kui edastatakse rohkem kui 2 GB andmeid, kuid rünnaku käigus, et viia bufri piirist üle, tuleb edastada vähemalt 4 GB). Funktsiooni memcpy() kasutatakse laialdaselt rakendustes ning ARMv7 protsessorid on levinud autotööstuses, mobiilses, tööstuslikus, tarbijate, side- ja sisseehitatud seadmetes, mis võivad potentsiaalselt saada Bluetoothi, HD Radio/DAB, USB, CAN buss, Wi-Fi ja muude väliste andmeallikate (näiteks võivad rünnakuobjektideks olla võrgus ligipääsetavad teenused ja rakendused, mis võtavad sisendeid ilma suuruse piiranguteta) rünnakute sihtmärgiks.
Näidisena tuuakse välja töö эксплоита loomine rünnakuks auto info- ja meelelahutussüsteemide http-serverile, mis on ligipääsetav auto Wi-Fi võrgu kaudu. Kolmas isik saab ära kasutada serveris olevaid haavatavusi memcpy kaudu, edastades väga suure GET-päringu ning teenides endale root-juurdepääsu süsteemile.
32-bitistel x86 süsteemidel probleem ei ilmne, kuna memcpy teostus selle arhitektuuri jaoks interpreteerib mõõtmuutuja õigesti kui märketa täisarv suuruse tüübiga size_t (asm keeles kirjutatud). ARMv7 puhul töödeldakse seda signed integerina). Parandus on hetkel saadaval kujul, mis kuulub augustis ilmuvasse Glibc 2.32 uuendusse.
Parandus seisneb assembleri käskude asendamises, mis töötavad märgiga operandide (bge ja blt) asemele märketa analoogidega (blo ja bhs).
Probleem ei ole veel lahendatud (Debian 8-s ei ilmne), , , OpenEmbedded, Tizen (kasutatakse glibc). ja probleem ei mõjuta, kuna nad ei toeta 32-bitiseid ARMv7 süsteeme. Android ei ole haavatav, kuna kasutab oma libc (Bionic) rakendust. V vaikimisi enamikus kooslustes kasutatakse Musli, kuid hoidlas on ka glibc.
Allikas: opennet.ru
