15-годишен бъг в Python компрометира стотици хиляди проекти
В популярния език за програмиране Python е открит бъг, който се крие в него от поне 15 години. Поради факта, че не е елиминиран толкова дълго време, той е проникнал в няколкостотин хиляди проекта, написани на Python, твърди публикация на Bleeping Computer.
По предварителни данни, най-малко 350 000 хранилища с отворен код са засегнати. Колко програми със затворен код съдържат този недостатък остава да се види тепърва. Проблемът се задълбочава и това, че Python е най-популярният език за програмиране в света. Милиони програмисти пишат на него.
Повече въпроси повдига фактът, че съществуването на тази уязвимост не е тайна за никого. Установена е още в края на август 2007 г., но не само, че не е закрита, но дори не е определена степента ѝ на опасност.
Уязвимостта е номериране с индекс CVE-2007-4559. Тя се намира в пакета tarfile Python, в част от кода, който използва нетестваните функции tarfile.extract() или tarfile.extractall(). Потенциално, може да се използва за презаписване и захващане на файлове на компютъра на жертвата, когато уязвимо приложение отвори злонамерен tar-архив чрез tarfile.
В продължение на 15 години разработчиците на Python, представлявани от Python Software Foundation, не са направили абсолютно нищо, за да защитят потребителите на програми, в които е скрита уязвимостта. Те дори не са предупредили разработчиците за проблема.
В резултат на това никой просто не си спомня CVE-2007-4559 в продължение на десетилетие и половина, което, разбира се, намалява в изнестна степен риска от експлоатиране на уязвимостта от киберпрестъпници.
За този 15-годишен бъг се заговори в началото на 2022 г., по време на разследването на друг инцидент със сигурността, свързан с Python. Но дори многократното отразяване на ситуацията не накара разработчиците на езика да го коригират.
Е, най-накрая, след 15 години те все пак решиха да реагират на опасността. Сега в документацията на Python има предупреждение, че „архивите от ненадеждни източници могат да бъдат опасни“. Очевидно разработчиците считат работата си за свършена, тъй като в системата за проследяване на грешки на Python се появи съобщение, че са успели да се справят с CVE-2007-4559.
Уязвимостта CVE-2007-4559 беше идентифициран от изследователи на Trellix по-рано тази година. Те изучаваха много различен проблем в Python, но се натъкнаха на друг опасен бъг.
За да определят истинския мащаб на бедствието, експертите изследваха 257 хранилища, които според техните предположения най-вероятно съдържат уязвим код. Те провериха ръчно 175 от тях и това вече беше достатъчно – „дупката“ присъстваше в 61% от хранилищата.
На втория етап стартира ръчна проверка на останалите хранилища. В резултат на това общият брой проекти, съдържащи CVE-2007-4559, се увеличи до 65%.
По-късно GitHub, услуга за съхранение на хранилища с отворен код, собственост на Microsoft, се присъедини към проучването на инцидента със сигурността в Python. „С помощта на GitHub успяхме да получим много по-голям набор от данни, включително 588 840 уникални хранилища, които включват import tarfil в своя Python код“, казват от Trellix.
Общо, според експертите, най-малко 350 хиляди проекта в GitHub са заразени. Ситуацията може да бъде още по-лоша, тъй като много от тези проекти използват услугата GitHub CoPilot за своето обучение, която помага на начинаещите програмисти да пишат код. Това означава, че CVE-2007-4559 всъщност може да се съдържа в много по-голям брой проекти.
В допълнение към привличането на вниманието към уязвимостта и свързания с нея риск, експертите на Trellix също са подготвили корекции за малко над 11 000 проекта в GitHub. Поправките ще бъдат налични в клон на засегнатите хранилища. По-късно те ще бъдат добавени към основния проект чрез заявки за изтегляне.
Изследователите смятат, че повече от 70 хиляди проекта ще получат корекция през следващите няколко седмици. Достигането на 100% не е лесна задача.