Een team van de Universiteit van Minnesota heeft details onthuld over de kwaadaardige wijzigingen die zijn verzonden.

Na een open brief met excuses heeft een groep onderzoekers van de Universiteit van Minnesota de wijzigingen in de kernel geaccepteerd. Linux De informatie die Greg Kroah-Hartman had geblokkeerd, onthulde gedetailleerde gegevens over de patches die naar de kernelontwikkelaars waren gestuurd en de correspondentie met de beheerders met betrekking tot deze patches.

Het is opmerkelijk dat alle problematische patches op initiatief van de beheerders werden afgewezen; geen enkele patch werd goedgekeurd. Dit feit maakt duidelijk waarom Greg Croah-Hartman zo hardhandig handelde, aangezien het onduidelijk is wat de onderzoekers zouden hebben gedaan als de patches waren goedgekeurd door de beheerders. Achteraf gezien beweerden ze dat ze van plan waren een bug te melden en dat ze de patches niet naar Git hadden laten gaan, maar het is onduidelijk wat ze feitelijk zouden hebben gedaan en hoe ver ze misschien waren gegaan.

In totaal, in augustus 2020, van anonieme acostag-adressen.ubuntuEr werden vijf patches naar @gmail.com en jameslouisebond@gmail.com gestuurd (het e-mailadres was van James Bond): twee correcte patches (1, 2) en drie patches met verborgen fouten (1, 2, 3) die de weg vrijmaakten voor kwetsbaarheden. Elke patch bevatte slechts 1-4 regels code. Het basisidee achter de foutieve patches was dat het repareren van een geheugenlek een kwetsbaarheid kon creëren als gevolg van een dubbele vrijgave. Een week later werd contact opgenomen met de kernelontwikkelaars om de mogelijkheid te bespreken om de kwetsbaarheden te promoten onder het mom van triviale geheugenlekreparaties, maar er werd niets gezegd over eerdere pogingen om kwaadaardige patches in te dienen.

De eerste problematische patch repareerde het geheugenlek door een aanroep toe te voegen aan kfree() voordat de controle werd teruggegeven in geval van een fout, maar creëerde voorwaarden voor toegang tot het geheugengebied nadat het was vrijgegeven (use-after-free). Deze patch werd afgewezen door de beheerder (Jiri Slaby), die het probleem identificeerde en erop wees dat iemand een jaar geleden al had geprobeerd een soortgelijke wijziging voor te stellen en dat deze aanvankelijk werd geaccepteerd, maar vervolgens werd weggegooid nadat de voorwaarden voor de kwetsbaarheid waren geïdentificeerd. > p2 = p1[n] = kmalloc_array(64, groottevan(u16), GFP_KERNEL); > - als (!p2) -ENOMEM retourneert; > + als (!p2) { > + kvrij(p1); > + return -ENOMEM; > + }

De tweede patch bevatte ook voorwaarden voor het use-after-free-probleem. De opgegeven patch werd niet geaccepteerd door de beheerder (Dan Carpenter), die de patch afwees vanwege een ander probleem met list_add_tail, maar niet merkte dat de "chdev"-aanwijzer kon worden vrijgegeven in de put_device-functie, die hieronder in de oproep wordt gebruikt dev_err(&chdev ->dev..). De patch werd echter niet geaccepteerd, hoewel om redenen die geen verband hielden met de kwetsbaarheid. if (ret < 0) { + put_device(&chdev->dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc mislukt\n"); ret = -ENOMEM; ga naar err_fifo;

De derde patch werd ook niet geaccepteerd door de beheerder (Miquel Raynal) vanwege een andere bug die geen verband hield met de kwetsbaarheid (dubbele oproep voor pdev). if (!window->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) mislukt\n", window->phys, window->size); + pci_dev_put(pdev); naar buiten gaan; } ... if (!map) { printk(KERN_ERR MOD_NAME ": kmalloc mislukt"); + pci_dev_put(pdev); naar buiten gaan; } memset(kaart, 0, groottevan(*kaart)); ... if (mtd_device_register(kaart->mtd, NULL, 0)) { map_destroy(kaart->mtd); kaart->mtd = NULL; + pci_dev_put(pdev); naar buiten gaan; }

Interessant genoeg werd aanvankelijk aangenomen dat 4 van de 5 patches problemen hadden, maar de onderzoekers maakten zelf een fout en in één patch waarvan zij dachten dat deze problematisch was, werd een correcte oplossing voorgesteld, zonder de verwachte voorwaarden voor geheugengebruik na vrij optreden. err = pci_request_mem_regions(pdev, nitrox_driver_name); if (fout) { pci_disable_device(pdev); + dev_err(&pdev->dev, “Kan geen geheugenregio's opvragen!\n”); fout terug; }

Bron: opennet.ru

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster