18-е февраля, 2022: Если вы используете PHP в своей сети, убедитесь, что вы используете последнюю версию, на данный момент 7.4.28 или 8.1.3Выпущенная вчера [2022-02-17], эта версия исправляет различные ошибки неправильного управления памятью, включая CVE-2021-21708, что является ошибкой использования после освобождения в функции, называемой php_filter_float().
Эксплойт, демонстрирующий возможность использования уязвимости PHP для запроса к базе данных, показывает, что эта ошибка может привести к сбою процесса PHP, поэтому уже известно о возможности осуществления работающей атаки типа «отказ в обслуживании» (DoS) .
Удаленное выполнение кода (RCE) также, вероятно, возможно, однако эксплойт-код, выполняющий RCE, пока не обнаружен. Если эксплойт для RCE станет доступен, то данные, отправленные извне PHP-систем компании, могут не только привести к сбою PHP-программы на вашем компьютере, но и к получению контроля над ней, что обычно приводит к вторжению в сеть , утечке данных , внедрению вредоносного ПО или их комбинации.
Функции фильтрации PHP предназначены для проверки входящих данных, например, чтобы убедиться, что если вы ожидаете, что кто-то отправит вам целое число (например, 5, 7, 11), он не отправил вам строку текста, которую невозможно надежно преобразовать в целое число, например: 3.14159 or 3/16 inch.
Уязвимость CVE -2021-21708 находится в коде, который проверяет допустимость чисел с плавающей запятой, то есть чисел с плавающей запятой — термин, который вы, вероятно, называли в школе «действительными числами» или «десятичными дробями».
Десятичные дроби обычно имеют точку (или запятую, в зависимости от вашей страны), которая разделяет целую часть и дробную часть, как в 2.5 для обозначения двух и пяти десятых или двух с половиной.
Функции числовых фильтров PHP позволяют вам проверять не только допустимость входящего числа, но и его нахождение в указанном диапазоне, например, чтобы оно не превышало 2.71828 или находилось в диапазоне от -1 до 1.
Если полученное число уже является числом с плавающей запятой (десятичным), то код будет выглядеть так, как показано ниже, где старый код PHP (8.1.2) находится слева, а новый код (8.1.3) — справа. (Здесь нет ошибки, поэтому две версии идентичны.)
Не беспокойтесь, если вы не знаете C; важно отметить, что сначала выполняется проверка на ошибки, за которой следует строка, освобождающая память, используемую в данный момент PHP для хранения числа, а затем сразу же следует строка, перераспределяющая память для использования PHP.
Если вам интересно, любопытное название zval_ptr_dtor() это сокращение для Деструктор указателя внутренней памяти PHP:

Если число целое, без десятичной части, то используется немного другой код.
Ниже, как вы можете видеть, последовательность «выполнить проверку и выйти, если она не удалась, а если все в порядке, то освободить и заново выделить память для номера» была перепутана в старой версии.
Последовательность была такой: «освободить память, используемую этим значением PHP, затем выполнить проверку и выйти, если она не удалась, оставив после себя объект PHP, ссылающийся на память, которая вскоре будет выделена для чего-то другого и, таким образом, позже вызовет конфликт использования после освобождения; но если проверка прошла успешно, то перевыделить новое хранилище для числа».
Это немного похоже на то, как если бы вы сначала вышли на дорогу, а затем проверили, безопасно ли это, и завершили переход.
Обновленный код в версии 8.1.3 восстановил код в более безопасной последовательности, хотя было бы еще безопаснее, если бы вызывалась одна функция, скажем, dtor_and_alloc_in_one_go()чтобы будущие программисты не смогли случайно повторно вставить код между вызовом деструктора и вызовом распределителя.
Новый кодекс больше похож на то, когда сначала проверяют безопасность дороги, а затем выходят на нее и сразу переходят на другую сторону.
В представлении «разница в коде» (термин, обозначающий разницу в коде ), созданном Visual Studio Code, наглядно показано, как строка, отмеченная красным в версии 8.1.2, переместилась в зеленую точку в версии 8.1.3:

DDoS-атаки такого рода часто приводят к удалённому выполнению кода (RCE). В случае разработки эксплойта типа RCE у вашей компании будет очень мало времени на устранение этой уязвимости. CyberHoot рекомендует вам уделить первоочередное внимание этому риску и по возможности установить исправление в течение следующих 48–72 часов. Мы продолжим следить за ситуацией и опубликуем обновление, как только появится RCE. Примите меры для оценки и устранения уязвимости прямо сейчас.
Источник
Узнавайте и делитесь последними тенденциями, советами и передовыми методами в области кибербезопасности, а также новыми угрозами, на которые следует обратить внимание.
Автор: Кэти Бокетти | Редактор: Крейг Тейлор | Редакторская работа Крейга Тейлора: Я помню первые дни...
Читать далее
Автор: Кэти Бокетти | Редакция: Крейг Тейлор | Редакция Крейга Тейлора: В блоге на этой неделе...
Читать далее
Время от времени появляется вредоносная программа с настолько хитрой уловкой, что заставляет исследователей в области безопасности задуматься и...
Читать далееБолее пристальное внимание к человеческим рискам с помощью позитивного подхода, который превосходит традиционное тестирование на фишинг.
