የችኮላ መጠገኛ በሊኑክስ ከርነል ውስጥ ላለው የስፔክተር ተጋላጭነት ያልተሟላ ጥገና አስከትሏል።

የግሬሴኪዩሪቲ ፕሮጀክት ገንቢዎች ተጋርቷል የማጠናቀቂያ ማስጠንቀቂያዎችን እንዴት ያለ ግምት ውስጥ ማስወጣት በኮዱ ውስጥ ወደ ተጋላጭነት እንደሚመራ የሚያሳይ የማስጠንቀቂያ ተረት። በሜይ መጨረሻ ላይ፣ በፕላስ ሲስተም ጥሪ በኩል የስፔክተር ተጋላጭነትን አዲስ ቬክተር ለመጠቀም ለሊኑክስ ከርነል ማስተካከያ ቀርቦ ነበር።

ፕላስተሩን በሚሞክሩበት ጊዜ ገንቢዎቹ ሲገነቡ ኮዱ እና ፍቺዎችን ስለመቀላቀል ማስጠንቀቂያ እንደሚያሳይ አስተውለዋል (አወቃቀሩ ከኮዱ በኋላ የተገለጸ ሲሆን ለነባር ተለዋዋጭ እሴት በመመደብ)

int ኢንዴክስ = n;
ከሆነ (n <HBP_NUM) {index = array_index_nospec(index, HBP_NUM); struct perf_event * bp = ክር -> ptrace_bps [ኢንዴክስ];

ሊነስ ተቀበለ እርማት ወደ ዋና ቅርንጫፍዎ ፣ በማስወገድ ከተለዋዋጭ ፍቺው ወደ ኢ-ብሎክ በማንቀሳቀስ ከማስጠንቀቂያው፡-

ከሆነ (n <HBP_NUM) {int index = array_index_nospec(n, HBP_NUM); struct perf_event * bp = ክር -> ptrace_bps [ኢንዴክስ];

በጁላይ ወር ላይ ማስተካከያው ወደ ተረጋጋው የከርነል ቅርንጫፎች 4.4, 4.9, 4.14, 4.19 እና 5.2 ተላልፏል. የረጋ ቅርንጫፎቹ ጠባቂዎችም ማስጠንቀቂያው አጋጥሟቸው ነበር እና በሊነስ ዋና ቅርንጫፍ ውስጥ ተስተካክሎ እንደሆነ ከማጣራት ይልቅ ራሳቸው አስተካክለዋል። ችግሩ በትክክል ሳያስቡት, እነሱ ብቻ ናቸው ተንቀሳቅሷል አወቃቀሩን ወደላይ በመግለጽ፣ በቀጥታ ከተጋላጭነት የሚከላከለውን ወደ array_index_nospec መደወል፣ መዋቅሩን በሚገልጽበት ጊዜ ጥቅም ላይ እንዳይውል፣ እና ከተለዋዋጭ “ኢንዴክስ” ይልቅ “n” የሚለው ተለዋዋጭ ሁልጊዜ ጥቅም ላይ ይውላል።

int ኢንዴክስ = n;
ከሆነ (n <HBP_NUM ){struct perf_event *bp = thread->ptrace_bps[index];
ኢንዴክስ = array_index_nospec(ኢንዴክስ፣ HBP_NUM);

ምንጭ: opennet.ru

አስተያየት ያክሉ