
CVE-2025-13032, մաս 2. SAFA-ն ցույց տվեց արտոնությունների բարձրացում Windows 11-ում Avast-ի դրայվերի միջոցով
SAFA Team-ը նկարագրել է, թե ինչպես Avast-ի kernel դրայվերում հայտնաբերված CVE-2025-13032 կրկնակի ընթերցման խոցելիությունը վերածեց SYSTEM-ի արտոնությունների տեղական բարձրացման թարմացված Windows 11-ում։ Խոցելիությունն արդեն ուղղվել է։
SAFA Team-ը հրապարակել է Avast-ի kernel դրայվերում հայտնաբերած CVE-2025-13032 կրկնակի ընթերցման խոցելիության հետազոտության երկրորդ մասը։ Սեպտեմբերի 18-ի նյութը նկարագրում է շահագործման ամբողջական շղթա, որը հասնում է SYSTEM-ի լիազորությունների թարմացված Windows 11-ում։
Կրկնակի ընթերցումից մինչև pool-ի հորդացում
Դրայվերը ստանում է օգտվողի _UNICODE_STRING կառուցվածքը, սակայն Length դաշտը կարդում է երկու անգամ՝ նախ ExAllocatePoolWithTag-ով որոշում է բուֆերի չափը, ապա memmove-ի համար, որը տողը պատճենում է այդ բուֆերում։ Այս երկու ընթերցումների միջև երկրորդ հոսքը կարող է Length-ը հասցնել 0x1000-ի նման մեծ արժեքի, մինչ գլխավոր հոսքը ցիկլով կանչում է խոցելի IOCTL-ը։ Երբ ժամանակացույցը համընկնում է, kernel-ը պատճենում է ավելի շատ բայթ, քան հատկացրել էր, և հորդացումը հասնում է հարևան բլոկին։ Ըստ SAFA-ի՝ մրցավազքի պատուհանը նեղ է, բայց հաղթահարելի։
Թիրախ՝ IORing օբյեկտի RegBuffers զանգվածը
Թիրախ ընտրվեց I/O Ring օբյեկտը, որը IoRingReadFile-ի և IoRingWriteFile-ի միջոցով խմբավորում է ֆայլային գործողություններ։ Նրա RegBuffers ցուցիչների զանգվածը գտնվում է հենց այն paged pool-ում, ուր հասնում է հորդացումը, չափը վերահսկում է օգտվողը, և մեկ ցուցիչի վնասումը բավական է read/write պրիմիտիվի համար։ Հետազոտողները հատկացրին շատ նման զանգվածներ, ազատեցին մի մասը և գործարկեցին խոցելիությունը, որպեսզի վնասված բլոկը ընկնի կենդանի զանգվածի կողքին։

RegBuffers[0]-ը վերաուղղվեց հարձակվողի հիշողության կեղծ _IOP_MC_BUFFER_ENTRY կառուցվածքին, ուստի kernel-ը դիմում է հարձակվողի վերահսկած հասցեին։ Պատճառը Windows-ում SMAP-ի բացակայությունն է։ IoRingReadFile-ը դարձավ կամայական kernel գրառում, իսկ IoRingWriteFile-ը՝ կամայական ընթերցում։
Kernel-ի հասցեի արտահոսք MDL-ի միջոցով
Kernel-ի հասցեները պատահականացված են, ուստի պետք էր մեկ հայտնի հասցե՝ սեփական _EPROCESS-ը։ Գրանցված բուֆերը քարտեզագրվում է Memory Descriptor List-ով, և kernel-ը ցուցիչը պահում է բուֆերի գրառման մեջ։ Քանի որ գրառումն այժմ userland-ում է, հետազոտողները կարդացին Mdl դաշտը, Address-ը ուղղեցին MDL-ին և Process դաշտից ստացան տիրոջ _EPROCESS-ի ցուցիչը։
Վերականգնում և SYSTEM-ի լիազորություններ
Հորդացումը վնասել էր նաև pool-ի բլոկի վերնագրի ProcessBilled դաշտը՝ EPROCESS ^ ChunkAddress ^ ExpPoolQuotaCookie բանաձևով հաշվվող քողարկված ցուցիչ, որը առանց ուղղման կապույտ էկրան է առաջացնում։ SAFA-ն cookie-ն ստացավ երկրորդ՝ մաքուր օբյեկտից և վերադարձրեց ճիշտ արժեքը։ Վերջին քայլը SYSTEM-ի token-ի գողացումն է․ շահագործումը անցնում է EPROCESS-ների ցանկով, կարդում SYSTEM-ի token-ը և վերագրում սեփականը։ Խոցելիությունն ուղղվել է, իսկ Windows-ի նոր միջուկները օգտագործում են user-mode accessors՝ տեխնիկան կանխելու համար։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։