Зад повечето заглавия "открита критична уязвимост" стои един и същ трик - стар колкото самия софтуер.
Представи си хотелска стая, от която току-що си се изнесъл. Рецепцията вече я е дала на друг, но твоят ключ по някаква причина още работи. Влизаш вътре, оставяш нещо свое в чекмеджето, и следващият гост, без да подозира нищо, го използва като част от собствения си багаж. Точно това прави "use-after-free". Програмата казва на компютъра "приключих с тази памет", но забравя да изхвърли ключа. Нападателят влиза в същата "стая" и оставя там код, който програмата после изпълнява с пълно доверие.
Препълването на буфера е малко по-грубо. Програмата отделя място точно за, да речем, едно кратко име. Напише ли някой в полето нещо два пъти по-дълго, остатъкът се изсипва направо в паметта до него - там, където често седят самите инструкции на програмата. Пренапишеш ли внимателно тази съседна памет, буквално преписваш какво прави компютърът нататък.
Двата бъга не са екзотика. Съществуват откакто пишем софтуер на езици, които не проверяват сами границите на паметта - оставят това на програмиста. Той сгрешава. Постоянно. Защото проверката отнема ресурс, а старите езици бяха писани в епоха, в която ресурсът беше по-скъп от риска.
Затова се появи Rust. Езикът е построен така, че компилаторът те спира физически, преди да компилираш код, който би оставил ключ в чужда ръка. Правилото е вградено в самия език, не оставено на добрата воля на програмиста. Голяма част от индустрията се пренасочва натам, защото хиляди ръчни проверки не могат да надвият един компилатор, въоръжен с логика.
Естетски погледнато
Скептичен съм към всяко "открихме нова уязвимост" от последните месеци - зад голяма част от заглавията стои точно тази стара история, преоблечена в нов продукт. Не е нова категория риск. А стар дълг, който индустрията отказва да плати наведнъж.
Истината, която не звучи добре пред инвеститори, е че пренаписването на софтуер на по-сигурен език струва пари и време, а компаниите предпочитат да закърпят следващия конкретен пробив, вместо да сменят основата. Докато тази сметка не се промени, ще четем едно и също заглавие, само с друго лого отгоре.