ΠšΠΎΡ€Π΅ΠΊΡ†ΠΈΡ Π½Π° ΠΎΠ±Ρ€ΠΈΠ² Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ нСпълна корСкция Π·Π° уязвимост Π½Π° Spectre Π² ядрото Π½Π° Linux

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Grsecurity сподСлСни ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚Π΅Π»Π½Π° история, дСмонстрираща ΠΊΠ°ΠΊ нСобмислСното Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° прСдупрСТдСнията Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ уязвимости Π² ΠΊΠΎΠ΄Π°. Π’ края Π½Π° ΠΌΠ°ΠΉ бСшС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° корСкция Π·Π° ядрото Π½Π° Linux Π·Π° Π½ΠΎΠ² Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° Сксплоатация Π½Π° уязвимостта Π½Π° Spectre Ρ‡Ρ€Π΅Π· систСмното ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ ptrace.

Π”ΠΎΠΊΠ°Ρ‚ΠΎ тСстваха корСкцията, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ забСлязаха, Ρ‡Π΅ ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° смСсванС Π½Π° ΠΊΠΎΠ΄ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ (структурата Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° слСд ΠΊΠΎΠ΄Π°, присвоявайки стойност Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°):

int индСкс = n;
if (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = нишка->ptrace_bps[индСкс];

Линус ΠΏΡ€ΠΈΠ΅ корСкция към вашия Π³Π»Π°Π²Π΅Π½ ΠΊΠ»ΠΎΠ½, ΠΊΠ°Ρ‚ΠΎ сС ΠΎΡ‚ΡŠΡ€Π²Π°Ρ… ΠΎΡ‚ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠ°Ρ‚ΠΎ прСмСститС дСфиницията Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π² Π±Π»ΠΎΠΊ if:

if (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, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ осигурява Π·Π°Ρ‰ΠΈΡ‚Π° срСщу уязвимостта, Π²Π΅Ρ‡Π΅ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° структурата ΠΈ вмСсто ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° "index" Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° "n":

int индСкс = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
индСкс = array_index_nospec(индСкс, HBP_NUM);

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€