லினக்ஸ் கர்னலில் ஸ்பெக்டர் பாதிப்புக்கான முழுமையற்ற தீர்வை ஒரு சொறி பிழைத்திருத்தம் விளைவித்தது

Grsecurity திட்டத்தின் டெவலப்பர்கள் பகிரப்பட்டது கம்பைலர் எச்சரிக்கைகளை கவனக்குறைவாக நீக்குவது குறியீட்டில் உள்ள பாதிப்புகளுக்கு எப்படி வழிவகுக்கும் என்பதை விளக்கும் ஒரு எச்சரிக்கைக் கதை. மே மாத இறுதியில், லினக்ஸ் கர்னலுக்கு, ptrace சிஸ்டம் அழைப்பு மூலம் ஸ்பெக்டர் பாதிப்பை சுரண்டுவதற்கான ஒரு புதிய திசையன் ஒரு திருத்தம் முன்மொழியப்பட்டது.

பேட்சைச் சோதிக்கும் செயல்பாட்டில், உருவாக்கும்போது, ​​கம்பைலர் குறியீடு மற்றும் வரையறைகளை கலப்பது பற்றிய எச்சரிக்கையைக் காண்பிப்பதை டெவலப்பர்கள் கவனித்தனர் (ஏற்கனவே இருக்கும் மாறிக்கு மதிப்பை ஒதுக்குவதன் மூலம் குறியீட்டிற்குப் பிறகு கட்டமைப்பு வரையறுக்கப்பட்டது):

int index = n;
என்றால் (n < HBP_NUM) {index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

லினஸ் ஏற்றுக்கொண்டார் திருத்தம் உங்கள் முதன்மை கிளைக்கு, விட்டொழிக்க ஒரு if தொகுதியில் மாறி வரையறையை மூடுவதன் மூலம் எச்சரிக்கையிலிருந்து:

என்றால் (n < HBP_NUM) {int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

ஜூலையில், திருத்தமானது 4.4, 4.9, 4.14, 4.19 மற்றும் 5.2 நிலையான கர்னல் கிளைகளுக்கும் அனுப்பப்பட்டது. நிலையான பராமரிப்பாளர்களும் எச்சரிக்கையை எதிர்கொண்டனர், மேலும் இது ஏற்கனவே லினஸின் முதன்மை கிளையில் சரி செய்யப்பட்டுள்ளதா என்பதைச் சரிபார்ப்பதற்குப் பதிலாக, அவர்களே அதை இணைத்தனர். பிரச்சனை என்னவென்றால், அவர்கள், அதிக சிந்தனை இல்லாமல், தான் நகர்த்தப்பட்டது கட்டமைப்பு வரையறை வரை, அதனால் பாதிப்புக்கு எதிராக நேரடியாகப் பாதுகாப்பை வழங்கும் array_index_nospecக்கான அழைப்பு, கட்டமைப்பின் வரையறையில் இனி பயன்படுத்தப்படாது, மேலும் "இண்டெக்ஸ்" மாறிக்கு பதிலாக, "n" மாறி எப்போதும் பயன்படுத்தப்பட்டது:

int index = n;
என்றால் (n < HBP_NUM ){struct perf_event *bp = thread->ptrace_bps[index];
குறியீட்டு = array_index_nospec(index, HBP_NUM);

ஆதாரம்: opennet.ru

கருத்தைச் சேர்