Անվտանգության հետազոտողներ Qualys-ից
Խնդիրն առաջանում է stralloc_readyplus() ֆունկցիայի ամբողջ թվի արտահոսքի պատճառով, որը կարող է առաջանալ շատ մեծ հաղորդագրություն մշակելիս։ Գործողությունը պահանջում էր 64-բիթանոց համակարգ՝ ավելի քան 4 ԳԲ վիրտուալ հիշողությամբ: Երբ խոցելիությունը ի սկզբանե վերլուծվեց 2005 թվականին, Դանիել Ջ. Բերնշտեյնը պնդում էր, որ կոդում առկա ենթադրությունը, որ հատկացված զանգվածի չափը միշտ 32-բիթանոց արժեքի սահմաններում է, հիմնված է այն փաստի վրա, որ ոչ ոք չի տրամադրում գիգաբայթ հիշողություն յուրաքանչյուր գործընթացին: Վերջին 15 տարիների ընթացքում սերվերների վրա 64-բիթանոց համակարգերը փոխարինել են 32-բիթանոց համակարգերին, և մատակարարվող հիշողության քանակն ու ցանցի թողունակությունը կտրուկ աճել են:
qmail փաթեթի սպասարկողները հաշվի են առել Bernstein-ի նշումը և qmail-smtpd գործընթացը սկսելիս սահմանափակել են հասանելի հիշողությունը (օրինակ, Debian 10-ում սահմանաչափը սահմանված է 7 ՄԲ)։ Բայց Qualys-ի ինժեներները պարզեցին, որ դա բավարար չէ, և, բացի qmail-smtpd-ից, կարող է իրականացվել հեռահար հարձակում qmail-local գործընթացի վրա, որն անսահմանափակ մնաց բոլոր փորձարկված փաթեթներում: Որպես ապացույց, պատրաստվեց exploit-ի նախատիպը, որը հարմար էր կանխադրված կոնֆիգուրացիայի մեջ qmail-ով Debian փաթեթի վրա հարձակվելու համար։
Հարձակման ժամանակ կոդի հեռակա կատարումը կազմակերպելու համար սերվերը պահանջում է 4 ԳԲ ազատ սկավառակի տարածություն և 8 ԳԲ RAM:
Exploit-ը թույլ է տալիս գործարկել ցանկացած կեղևի հրամաններ՝ համակարգի ցանկացած օգտատիրոջ իրավունքով, բացառությամբ արմատային և համակարգի օգտագործողների, ովքեր չունեն իրենց սեփական ենթացուցակը «/home» գրացուցակում (qmail-local գործընթացը գործարկվում է իրավունքներով։ տեղական օգտագործողի, ում առաքումն իրականացվում է):
Հարձակումն իրականացվում է
փոստի շատ մեծ հաղորդագրություն ուղարկելու միջոցով, ներառյալ մի քանի վերնագրի տողեր, որոնք չափում են մոտավորապես 4 ԳԲ և 576 ՄԲ: Նման տողի մշակումը qmail-local-ում հանգեցնում է ամբողջ թվի հորդացման, երբ փորձում են հաղորդագրություն հասցնել տեղական օգտագործողին: Այնուհետև ամբողջ թվի արտահոսքը հանգեցնում է բուֆերային արտահոսքի տվյալների պատճենման ժամանակ և հիշողության էջերը libc կոդով վերագրելու հնարավորության: Հաղորդվող տվյալների դասավորությունը շահարկելով՝ հնարավոր է նաև վերաշարադրել «open()» ֆունկցիայի հասցեն՝ այն փոխարինելով «system()» ֆունկցիայի հասցեով։
Հաջորդը, qmesearch()-ը qmail-local-ում կանչելու գործընթացում բացվում է «.qmail-extension» ֆայլը open() ֆունկցիայի միջոցով, որը հանգեցնում է ֆունկցիայի իրական կատարմանը:
system ("qmail-extension"): Բայց քանի որ ֆայլի «ընդլայնման» մասը ստեղծվում է ստացողի հասցեի հիման վրա (օրինակ՝ «localuser-extension@localdomain»), հարձակվողները կարող են կազմակերպել հրամանի ուղարկումը, որպեսզի գործարկվի՝ նշելով օգտագործողի «localuser-;հրամանը»: ;@localdomain» որպես հաղորդագրության ստացող:
Կոդի վերլուծության ընթացքում երկու խոցելիություն է հայտնաբերվել նաև qmail-verify լրացուցիչ պատչում, որը Debian-ի փաթեթի մի մասն է։ Առաջին խոցելիությունը (
Խնդիրը լուծելու համար Բերնշտեյնը խորհուրդ է տվել գործարկել qmail պրոցեսները՝ հասանելի հիշողության ընդհանուր սահմանափակումով («softlimit -m12345678»), որի դեպքում խնդիրն արգելափակված է։ Որպես պաշտպանության այլընտրանքային մեթոդ նշվում է նաև մշակված հաղորդագրության առավելագույն չափի սահմանափակումը «control/databytes» ֆայլի միջոցով (լռելյայն այն չի ստեղծվում լռելյայն կարգավորումներով, qmail-ը մնում է խոցելի): Բացի այդ, «control/databytes»-ը չի պաշտպանում համակարգի օգտատերերի տեղական հարձակումներից, քանի որ սահմանաչափը հաշվի է առնվում միայն qmail-smtpd-ում:
Խնդիրն ազդում է փաթեթի վրա
Source: opennet.ru