После сканирования 2.6 миллионов доменов на наличие открытых .git каталогов (ссылка на статью), .env (ссылка на статью) и .DS_Store (ссылка на статью) файлов я проделал такое же сканирование для phpinfo-файлов, таких как info.php или phpinfo.php.

В первой части этой статьи я объясню, что такое phpinfo и что из него можно извлечь. Во второй части я расскажу о конфиденциальной информации, которую я нашел.

статистика сканирования
статистика сканирования

Что такое phpinfo()?

phpinfo() — это функция, которая отображает информацию о конфигурации PHP и сервера. Она помогает PHP-разработчикам видеть, какие модули активны и какие версии этих модулей работают на сервере.

Пример phpinfo()
Пример phpinfo()

Несут ли какую-либо опасность данные, полученные с помощью phpinfo()?

На первый взгляд эта информация не является конфиденциальной. И многие разработчики не заморачиваются с удалением phpinfo-файлов в производственной среде. Но поверьте мне, это не так. Проанализировав результаты моего сканирования всех 2.6 миллионов доменов, я пришел к совершенно другому выводу о phpinfo().

Я нашел более 45 000 доступных для phpinfo() страниц.

Уязвимые версии PHP

Много-много лет назад я начал изучать PHP 4, и да, он до сих пор работает на некоторых серверах… но какого черта? Я провел сканирование в октябре 2022 года. С 28 ноября 2022 года PHP 7.4 и все, что было раньше, стало считаться устаревшим, поэтому PHP 7.x больше не поддерживается, только PHP 8.x. Но смотрите сами.

Версии PHP
Версии PHP

Проверьте свою версию PHP: если < 8: ???? иначе: ????

Уязвимые версии ImageMagick

ImageMagick — это библиотека для управления изображениями на основе PHP. В некоторых старых версиях были серьезные проблемы с безопасностью. Мы смогли извлечь версию ImageMagick примерно одной трети доступных страниц. 90% этих библиотек устарели.

Версии ImageMagick
Версии ImageMagick

Уязвимые версии серверного программного обеспечения (например, nginx, Apache или Microsoft IIS)

Серид данных phpinfo очень часто можно найти версию сервера. Довольно много серверов используют устаревшие версии.

Версии сервера (Apache, nginx, IIS и другие)
Версии сервера (Apache, nginx, IIS и другие)

Рекомендуется отключить отображение заголовка сервера или хотя бы его версии.

Уязвимые версии openssl

Еще один интересный модуль, в котором вы можете найти информацию о версии в данных phpinfo — openssl. Openssl — это набор инструментов для криптографии и безопасной связи. Он очень распространен и широко используется практически везде. Но в прошлом с этой библиотекой возникали серьезные проблемы с безопасностью (вы еще помните heartbleed?)

Из версий, извлеченных из нашего набора данных, 1/3 используемых openssl-библиотек устарели.

Версии OpenSSL
Версии OpenSSL

Небезопасные конфигурации PHP

Если вы запускаете веб-приложение на PHP, вам в первую очередь следует подумать о том, чтобы включить или отключить некоторые настройки, чтобы предотвратить утечку информации и проблемы с безопасностью.

Отчеты об ошибках

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

Отображение ошибок
Отображение ошибок

Отключенные функции

В PHP вы можете отключить некоторые функции. Некоторые опасные функции имеет смысл отключить. Например, exec или passthru, потому что эти функции позволяют злоумышленнику выполнять системные команды. Чуть менее одной на тысячу конфигураций PHP используют эту опцию и отключают все опасные функции PHP.

Отключение функций
Отключение функций

Разрешение url fopen / Разрешение url include / Open-basedir

В PHP есть и другие настройки, которые вы должны использовать очень осознанно. Например, можно ли открывать файлы из внешних источников или загружать включения из внешних источников. Очень немногие настройки PHP имеют ограничения.

Ниже приведена статистика для следующих настроек:

Разрешить url fopen

allow-url-fopen
allow-url-fopen

Разрешить url include

allow-url-include
allow-url-include

Open basedir

open-basedir
open-basedir

Утечка конфиденциальных данных

Информация о сервере и конфигурации PHP может помочь злоумышленнику получить информацию о возможных эксплойтах и запущенных модулях на сервере. Но самое интересное — это конфиденциальные данные, которые можно открыть через phpinfo(), такие как переменные среды или переменные $_SERVER. Там я нашел пароли к базам данных, учетные данные электронной почты, приватные ключи, секреты API, живые ключи Stripe, учетные данные для доступа к облачным базам данных, очереди сообщений и ключи шифрования.

Я думаю, что у одного хостера есть проблема с настройкой для всех его клиентов. Учетные данные базы данных доступны через переменные среды всех его клиентов (которых достаточно много).

Переменные среды ????
Переменные среды ????
И $_SERVER["XXX"], что также ???? 
И $_SERVER["XXX"], что также ???? 

Обход WAF

В переменной PHP $_SERVER я нашел около 500 прямых IP-адресов серверов веб-приложений, которые должны быть защищены WAF (Web Application Firewall, например Cloudflare). Когда вы знаете прямой IP-адрес сервера, вы можете обойти все механизмы защиты WAF, напрямую обратившись к веб-приложению.

Обход Cloudflare по прямому IP сервера
Обход Cloudflare по прямому IP сервера

Заключение

Что сказать: ????. Я был очень удивлен тем, что можно было найти в файле phpinfo(). Каждый PHP-разработчик должен думать о том, что может быть обнажено через общедоступные данные phpinfo(). Вы не должны развертывать phpinfo() на рабочем сервере. Или, если вам это так нужно, поместите файл в защищенную паролем папку.

Также обновите серверное программное обеспечение, чтобы иметь все последние исправления безопасности.

Проверьте свой сервер вручную, с помощью nuclei-шаблона или с помощью такого сервиса, как scan.nan.io.


В январе пройдет открытый урок, посвященный PHP 8.2. На занятии посмотрим на нововведения в языке и применим все это на практике. Регистрация открыта по ссылке.

Комментарии (1)


  1. FanatPHP
    29.12.2022 10:15
    +3

    Статья написана кликушей, который за неимением фактов занимается подтасовками.
    Устаревшую версию смело называем "уязвимой", даже если никаких эксплойтов для неё нет — и уже готов материал для обширной аналитической статьи!


    Конфиденциальных данных получилось так мало, что пришлось на двух картинках их дублировать.


    Само количество нарытых проблем стремится к нулю — искомый файлик найден на 0.01% процента просканированных доменов, что уже говорит о фактическом отсутствии проблемы. Количество же обнаруженных "уязвимостей" и вовсе стремится к нулю — как с тем же РНР4, у которого на диаграмме полосочки толщиной с волос. Сколько таких сайтов нашел автор в абсолютном исчислении? Один, два? Из двух с полови ной миллионов. А какое пафосное вступление!


    Ну и главное-то в том, что само по себе наличие файлика пхпинфо не влияет на наличие уязвимой библиотеки. И миллионы скрипт-киддей по всему миру запускают автоматические сканилки на все два с половиной офигиллиарда доменов, не заморачиваясь поисками файлика пхпинфо.


    В общем, автор статьи старательно пучит глаза и надувает щеки, но фактуры у него — с гулькин нос.
    При этом перевод даже не вычитан на опечатки.
    В общем, все как обычно, Отус твердо держит свои стандарты качества.