Studimet e sigurisë nga kompania Cisco detajet () në implementimin e funksionit memcpy() të ofruar nga Glibc për platformën 32-bit ARMv7. Problemi shkaktohet nga trajtimi i gabuar i vlerave negative të parametrave që përcaktojnë madhësinë e zonës së kopjimit, për shkak të përdorimit të optimizimeve në assembler që manipulojnë me numrat e plotë 32-bit me shenjë. Thirrja memcpy() në sistemet ARMv7 me madhësi negative shkakton krahasime të gabuara të vlerave dhe shkrim në zona jashtë kufijve të tamponit të caktuar.
Një dobësi mund të shfrytëzohet për ekzekutimin e kodit në një situatë kur sulmuesi mund të organizojë formimin e një vlerë negative të një variabli, përmes të cilit kalon madhësia e të dhënave që kopjohen (p.sh., një kalim në negativ do të ndodhte nëse dërgohen më shumë se 2 GB të dhëna, por në procesin e sulmit për të dalë jashtë kufijve të tamponit, duhet të dërgohet të paktën 4 GB). Funkcioni memcpy() përdoret gjerësisht në aplikacione, dhe procesorët ARMv7 janë të përhapur në sistemet automobilistike, pajisjet mobile, industriale, konsumatorëve, komunikimit dhe pajisjeve të integruara, të cilat potencialisht mund të bëhen objekt sulmesh duke përdorur Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi dhe burime të tjera të dhënash nga jashtë (p.sh., mund të sulmohen shërbimet dhe aplikacionet e qasshme përmes rrjetit që pranojnë të dhëna pa kufizime të madhësisë).
Si shembull, jepet krijimi i një eksploiti funksional për një sulm ndaj serverit http të integruar në sistemet informative të automjeteve, i qasshëm përmes rrjetit Wi-Fi të makinës. Një sulmues i jashtëm mund të shfrytëzojë një dobësi në memcpy në këtë server duke dërguar një kërkesë GET shumë të madhe dhe të fitojë akses root në sistem.
Në sistemet 32-bit x86, problemi nuk shfaqet, sepse implementimi i memcpy për këtë arkitekturë e interpretan saktësisht variablën me madhësi si një vlerë të padiskutueshme me tipin size_t (në asamble) për ARMv7, në vend të size_t, përpunohet si integer me shenjë). Zgjidhja aktualisht është në dispozicion si , e cila do të përfshihet në përditësimin e gushtit të Glibc 2.32.
Zgjidhja përfshin zëvendësimin e përdorimit të instrukcioneve të asamblesë që operojnë me operandë me shenjë (bge dhe blt) me analoge të padiskutueshme (blo dhe bhs).
Problemi ende nuk është zgjidhur në (në Debian 8 nuk shfaqet), , , OpenEmbedded, Tizen (përdor glibc). dhe problemi nuk prek, pasi ata nuk mbështesin sistemet 32-bit ARMv7. Android nuk është i ekspozuar ndaj vulnerabilitetit, pasi përdor implementimin e tij libc (Bionic). Në pengesë në shumicën e ndërtimeve përdoret Musl, por në depo ka edhe glibc.
Burimi: opennet.ru
