Разработчики PHP недавно выпустили серию патчей, исправляющих ряд уязвимостей, включая особо опасную, которая может привести к переполнению буфера динамической области, что позволяет удаленно запустить код на исполнение.

Исследователи из швейцарской фирмы High-Tech Bridge раскопали уязвимости в версиях фреймворка 5.6.1, 5.5.17 и 5.4.33.

Самый серьезный баг, CVE-2014-3669, кроется в функции unserialize() в 32-битных системах. В то время как в конце сентября PHP быстро исправила серьезную проблему, эта ошибка не была пропатчена до тех пор, пока High-Tech Bridge не разобралась в уязвимости и не опубликовала пошаговое описание своего доказательства концепции.

Анализируя фрагменты кода PHP с помощью отладчика, исследователи заставили PHP рухнуть при выполнении «строки 356, за которой следует точка ее вызова в строке 387».

Поигравшись со значениями, им удалось переполнить целочисленную переменную, что позволило перенести точку исполнения на невалидный адрес памяти.

В своем описании бага исследователь Симеон Паращудис обозначил его как нарушение доступа на чтение, но признал, что он, вероятно, не поддается эксплуатации. Тем не менее в определенных условиях (например, при использовании совместно с другим багом переполнения) он может, как заявил Паращудис, «привести к переполнению буфера динамический области и, возможно, позволит потенциальным злоумышленникам удаленно запустить код».

Возможность удаленного исполнения кода вызвала беспокойство разработчиков PHP. Паращудис описал баг 25 сентября, и PHP выпустила патч три дня спустя.

Станислав Малышев, разработчик PHP, назвал это «настоящим багом» и заявил, что он может быть использован как минимум для обрушения фреймворка и теоретически для извлечения информации».

Патч, который также включает исправление для двух других проблем (CVE-2014-3668 и CVE-2014-3670) во фреймворке версий 5.6.2, 5.5.18 и 5.4.34, исправляет баг и защищает PHP от обрушения и аварийного завершения ввиду нарушения доступа к памяти.

Категории: Уязвимости