eBPF-alijärjestelmän haavoittuvuudet, jotka mahdollistavat koodin suorittamisen Linux-ytimen tasolla

eBPF-alijärjestelmästä on tunnistettu kaksi uutta haavoittuvuutta, joiden avulla voit ajaa käsittelijöitä Linux-ytimen sisällä erityisessä virtuaalikoneessa JIT:llä. Molemmat haavoittuvuudet mahdollistavat koodin suorittamisen ytimen oikeuksilla erillisen eBPF-virtuaalikoneen ulkopuolella. Tietoa ongelmista julkaisi Zero Day Initiative -tiimi, joka pyörittää Pwn2Own-kilpailua, jonka aikana tänä vuonna demonstroitiin kolme Ubuntu Linuxiin kohdistuvaa hyökkäystä, joissa käytettiin aiemmin tuntemattomia haavoittuvuuksia (ei raportoida, liittyvätkö eBPF:n haavoittuvuudet näihin hyökkäyksiin) .

  • CVE-2021-3490 - Haavoittuvuus johtuu 32-bittisen rajojen ulkopuolisen tarkistuksen puutteesta suoritettaessa bittikohtaisia ​​JA-, TAI- ja XOR-toimintoja eBPF ALU32:ssa. Hyökkääjä voi hyödyntää tätä virhettä lukeakseen ja kirjoittaakseen tietoja varatun puskurin rajojen ulkopuolella. XOR-toimintojen ongelma ilmenee ytimen versiosta 5.7-rc1 alkaen ja AND ja OR - alkaen versiosta 5.10-rc1.
  • CVE-2021-3489 - Haavoittuvuus johtuu virheestä soittopuskurin toteutuksessa ja johtuu siitä, että bpf_ringbuf_reserve-funktio ei tarkistanut mahdollisuutta, että varatun muistialueen koko voi olla pienempi kuin todellinen koko ringbufista. Ongelma ilmenee julkaisusta 5.8-rc1 lähtien.

Jakelujen korjaushaavoittuvuuksien tilaa voi seurata seuraavilta sivuilta: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch. Korjauksia on saatavana myös korjaustiedostoina (CVE-2021-3489, CVE-2021-3490). Se, voidaanko ongelmaa hyödyntää, riippuu siitä, onko eBPF-järjestelmäkutsu käyttäjän käytettävissä. Esimerkiksi RHEL:n oletuskokoonpanossa haavoittuvuuden hyödyntäminen edellyttää, että käyttäjällä on CAP_SYS_ADMIN-oikeudet.

Erikseen voimme huomata toisen Linux-ytimen haavoittuvuuden - CVE-2021-32606, jonka avulla paikallinen käyttäjä voi nostaa oikeuksiaan juuritasolle. Ongelma on ollut ilmeinen Linux-ytimen versiosta 5.11 lähtien ja sen aiheuttaa kilpailutilanne CAN ISOTP -protokollan toteutuksessa, mikä mahdollistaa socketin sidosparametrien muuttamisen, koska isotp_setsockopt()-funktiossa ei ole asetettu oikeita lukkoja. kun käsitellään CAN_ISOTP_SF_BROADCAST-lippua.

ISOTP-socketin sulkemisen jälkeen sidos vastaanottavaan socketiin pysyy voimassa, mikä voi jatkaa kantaan liittyvien rakenteiden käyttöä sen jälkeen, kun niihin liittyvä muisti on vapautettu (use-after-free johtuen kutsusta isotp_rcv() jo vapautetun isotp_sock-rakenteen käyttäminen). Tietojen käsittelyn avulla voit ohittaa osoittimen sk_error_report()-funktioon ja suorittaa koodisi ydintasolla.

Lähde: opennet.ru

Lisää kommentti