В тысячах PHP-библиотек и плагинов для CMS намеренно отключена проверка SSL-сертификатов
Источником проблемы является то, как многие разработчики плагинов и PHP-библиотек конфигурируют свой код, в частности, некоторые опции cURL.
Сотни тысяч плагинов для систем управления контентом (CMS) и PHP-библиотек намеренно отключают проверку SSL/TLS-сервификатов, тем самым подвергая риску миллионы пользователей. Ситуацию усугубляет тот факт, что многие из этих плагинов и библиотек используются для установки соединения с серверами платежных сервисов, через которое впоследствии передается конфиденциальная финансовая информация. Источником проблемы является то, как многие разработчики CMS плагинов и PHP-библиотек конфигурируют свой код, в частности, некоторые опции cURL — утилиты командной строки, применяемой для передачи файлов по различным протоколам. Значительное количество приложений используют cURL для загрузки, отправки и выгрузки данных на удаленные серверы через консоль вместо создания браузерных сессий для каждого соединения.
Проблема, по словам специалиста Скотта Арцижевски (Scott Arciszewski), заключается в том, что многие разработчики отключают две функции cURL, поскольку они могут вызывать на серверах клиентов оповещения об ошибках, связанных с безопасностью. Речь идет функциях «CURLOPT_SSL_VERIFYHOST» и «CURLOPT_SSL_VERIFYPEER». При отключении первой опции cURL не будет проверять URL хоста, к которому подключается для загрузки или выгрузки данных. Деактивация второй означает, что web-сайт будет принимать подключения к любым HTTPS-серверам, даже если они используют самоподписанный сертификат.
Как показал поверхностный поиск на GitHub, одна или обе функции отключены в сотнях тысяч проектов, в том числе сотнях плагинов для WordPress.
Причина появления ошибок, из-за которых разработчики предпочитают отключать указанные функции, связана с тем, что многие хостинговые сервисы не хранят список известных и действительных SSL/TLS-сертификатов, используемый cURL для сверки, или хранят его в разных областях сервера. В такой ситуации невозможно сконфигурировать настройки cURL универсальным образом, чтобы они подходили для всех серверов.
Арцижевски предложил свое решение проблемы, создав PHP-библиотеку под названием Certainty , которая с регулярными интервалами загружает файл cacert.pem с главной страницы cURL и сохраняет локально.