В популярном свободном движке для создания форумов phpBB (https://www.phpbb.com/) выявлена уязвимость (https://blog.ripstech.com/2018/phpbb3-phar-deserialization-t.../) (CVE-2018-19274 (https://security-tracker.debian.org/tracker/CVE-2018-19274)), позволяющая выполнить PHP-код на сервере и получить контроль за всей инфраструктурой форумов, имея полномочия администратора одного из форумов. Проблема устранена в выпуске phpBB 3.2.4 (https://www.phpbb.com/community/viewtopic.php?f=14&t=2492206).
Уязвимость вызвана отсутствием проверки поступающих от пользователя данных, перед их использованием в функции file_exists(). Данная особенность позволяет применить для эксплуатации технику "Phar deserialization (https://blog.ripstech.com/2018/new-php-exploitation-technique/)", манипулирующую автоматической десериализацией метаданных при обработке файлов Phar (PHP Archive). Атакующий может задать в панели управления абсолютный путь к исполняемому файлу с редактором изображений (ImageMagic). Перед применением новой настройки данный путь без проверки будет обработан функцией file_exists(), которая в случае указания URI "phar://" обработает метаданные в указанном файле.
Указав вместо редактора изображений ссылку на загруженный атакующим phar-файл можно осуществить подстановку нового объекта, выполняемого в контексте всего приложения. Например можно указать "phar:///var/www/phpBB3/files/evil.jpg", где evil.jpg - загруженный под видом картинки файл в формате phar, который будет разобран невзирая на расширение jpg. Похожая проблема может присутствовать и в других PHP-приложениях, допускающих загрузку на сервер картинок и обработку передаваемых пользователем файловых путей в таких функциях, как file_exists(), fopen(), file_get_contents() и file().URL: https://blog.ripstech.com/2018/phpbb3-phar-deserialization-t.../
Новость: https://www.opennet.me/opennews/art.shtml?num=49641
Помню, лет 10 назад создавал на нём форум, будучи ещё зелёным в вебе. Хороший движок. Был.
ну, не считая того что у авторов был и остался очень странный подход к пониманию, что есть bulletin board (для нормального общения эти форумы непригодны абсолютно, вот для торрент-трекера, где каждая тема - отдельный торрент, а комментарии незачем и читать вообще - самое то, и примерно для этой цели всю жизнь подобные вещи и использовались) - не вижу почему "был". Движок как движок, авторы не виноваты в дырах php by design.Пихание во все места, принимающие _файл_, вместо файлов дурацких псевдоурлов без отдельного апи для этого - именно дыра by design. Как бы ни старались аффтары всего на свете софта подстелить там соломки - изобретательные разработчики всегда их переплевывают - что, собственно, и случилось с phar://
Ты пытаешься выяснить, существует ли файлик вообще (какое там открыть, не говоря уже о исполнить) - ан, нет, внезапно, он становится твоим кодом. Прекрасный язык, чо.
> file_exists(), которая в случае указания URI "phar://" обработает метаданные в указанном файлеТогда функция должна называться file_exists_and_maybe_handle_metadata_of_phar().
> Тогда функция должна называться file_exists_and_maybe_handle_metadata_of_phar().file_exists_or_may_be_we_just_exec_it_as_code()
php_real_escape_file жеhttps://dev.mysql.com/doc/refman/8.0/en/mysql-real-escape-st...
Напоминает Glib с очень длинными функциями. Но там это более-менее оправдано: принести ООП в С довольно сложно.
Но это де похапэ "для всех"!
Метаданные просто надо json хранить блин... догадались, serialize
> вызвана отсутствием проверки поступающих от пользователя данныхдиагноз php головного мозга
Авторы пыха добавили свой новый нескучный протокол phar://, а виноваты конечные разрабы, которые не предусмотрели в своих проектах, существовавших до нескучного phar://, что пользователь может указать phar://. Логично, чо.
> которые не предусмотрели в своих проектах, существовавших до нескучного phar://, что
> пользователь может указать phar://. Логично, чо.там круче - они может и предусмотрели (грамотные авторы проверяют попадание в _допустимый_ шаблон, а не все недопустимые комбинации по одной перебирают, и "файл" с :// в имени должен быть отброшен сразу же, не разбираясь в деталях) но кунфу авторов пехепе оказалось круче, и они научились исполнять как код данные даже в таком случае, который просто нереально, казалось бы, интерпретировать таким образом - файл даже не должен был открываться на чтение.
в общем, если пхп-ненавистникам хотелось аргументов именно против языка как такового - то вот один.
если быть точным, то неверно составлена фраза комментатором.
Ошибка именно в проверке поступающих до пользователя данных - они пытались выяснить а есть ли такой файл. И на тебе ...
> будет обработан функцией file_exists(), которая в случае указания URI "phar://" обработает метаданные в указанном файлеЭто настолько элегантный способ опустить всех пыхеров, что я просто ощущаю небывалое эстетическое наслаждение.
Не забудьте обсудить это с психологом.
Блин, вот serialize в phar это реально идиотизм...
phpBB - наверное, один из самых дырявых php-поделий в мире. Ещё больше 10 лет назад, помню - столько дырок было. И вот спустя столько времени, ничего не меняется.
Порекомендуйте что-то хорошее, пожалуйста
> Порекомендуйте что-то хорошее, пожалуйстаЕсли на php - то самый безопасный, всегда был и остаётся SMF.
Чтоб обойти стороной PHP, я бы попробовал YaBB [ https://ru.wikipedia.org/wiki/YaBB ].
http://www.yabbforum.com/cgi-bin/community/YaBB.pl?board=rus...
- все что нужно знать об этом ненужно.то есть оно a) тупило с минуту, прежде чем открыться b) потребовало вручную переключить кодировку в 1251. (это, если что, нормальный выбор кодировки - ненормально неумение авторов настроить собственный сервер так, чтобы русскоязычный кусок форума показывался правильно)
если хочется совсем без php - ищите в архивах пиратских сайтов 200х годов wwwthreads до-phpшной версии. Баг с sql code exec только не забудьте вручную исправить, а то его, по-моему, только в php поправили.
но там не будет модных пищалок,перделок, логина всосапом и прочих полезных и нужных функций, только форум, предназначенный именно для общения,а не для размещения ссылок на торренты или еще чего в этом роде.
Это говорит лишь о том, что рукожопы, пишущие туда по-русски, не умеют выбирать браузеры, которые правильно определяют кодировки. (Привычка, знаете ли, ляп-ляп-ляп — и в продакшын.) Эта страничка сделана в ISO-8859-1. Да, внезапно, кто ж такого мог ждать от американцев. :)Но внутри движка (я посмотрел) шаблоны сделаны для белых прогрессивных людей, везде обещают нам UTF-8. И даже HTML5.
Там ньюфагов подстерегает другая печаль: внутри лапша из перлового кода и разметки. Всё как в старые добрые времена. В таком вот стиле:
$yymain .= qq~# А между тильдами разметка HTML с вкраплениями перловых же переменных.
~
Не, ну можно разобраться и даже поправить, если вдруг что.
Память вас подводит. В phpBB 3.0, который с 2007 года был актуален более 5 лет, действительно критичных уязвимостей найдено не было. А с правами администратора всегда можно было дел наделать.Возмоно, вы вспоминаете времена phpBB 2.x, в котором действительно была найдена парочка опасных уязвимостей. Но при работе над 3.0 над этим неплохо поработали.
Слабенькая уязвимость. Как правило, если пользователь имеет доступ к форуму как администратор («founder» в терминах phpBB), то он будет и администратором сайта вообще, с доступом к серверу.
Лучший двиг интернета из всех.
Не совсем понял, в чём тут уязвимость. Для эксплуатации нужен доступ с правами администратора форума, а с таковыми можно и загрузку вообще чего попало разрешить.
Я надеюсь, что в свежем ПХП функция preg-match, проверяющая строку, содержащую "system('/bin/sh rm -Rf /*')" на наличие в ней двоеточия или двух слешей подряд, поймет, что ему надо эту строку выполнить как php код сразу, не дожидаясь чтобы дальше разработчики её пихнули в file_exists ? а то вждруг они не для того проверяли, и не пихнут её чами в, казалось бы безобидную функцию. Ну чтобы точно...Это насколько надо быть больным на голову, чтобы функция file_exist выполнила тот файл? Это уже не просто глупость. Это уже к врачам надо.
кто в теме, покажите как создать этот самый phar файл. и что ему надо дописать чтобы содержимое выполнилось именно в аргументе file_exists.