Një rregullim i pamenduar çoi në zbutje jo të plotë të cenueshmërisë Spectre në kernelin Linux

Zhvilluesit e projektit Grsecurity ndanë një histori udhëzuese që tregon se si eliminimi i pamenduar i paralajmërimeve të kompilatorit mund të çojë në shfaqjen e cenueshmërive në kod. Në fund të majit, për kernelin Linux u propozua një rregullim për një vektor të ri shfrytëzimi të cenueshmërisë Spectre përmes thirrjes së sistemit ptrace.

Gjatë testimit të patch-it, zhvilluesit vunë re se gjatë kompilimit kompileri shfaqte një paralajmërim për përzierje të kodit dhe përkufizimeve (struktura ishte përcaktuar pas kodit me caktimin e vlerës për një ndryshore ekzistuese):

int index = n;
if (n ptrace_bps[index];

Linus e pranoi ndalon në degën e tij master, duke e hequr qafe paralajmërimin duke zhvendosur përkufizimin e ndryshores në bllokun if:

if (n ptrace_bps[index];

Në korrik, rregullimi u portua gjithashtu në degët stabile të kernelit 4.4, 4.9, 4.14, 4.19 dhe 5.2. Mirëmbajtësit e degëve stabile hasën po ashtu në këtë paralajmërim dhe, në vend që të kontrollonin nëse ai ishte eliminuar tashmë në degën master të Linus-it, bënë vetë një rregullim. Problemi është se, pa u menduar shumë, ata thjesht zhvendosën përkufizimin e strukturës më lart, në mënyrë që thirrja e array_index_nospec, e cila siguron drejtpërdrejt mbrojtjen nga cenueshmëria, të mos përdorej më gjatë përcaktimit të strukturës, dhe në vend të ndryshores «index» të përdorej gjithmonë ndryshorja «n»:

int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster