The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..., opennews (?), 10-Май-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


11. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от Евгений (??), 11-Май-19, 08:55 
то есть написано неправильно
Ответить | Правка | Наверх | Cообщить модератору

12. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от Заря (?), 11-Май-19, 09:36 
file_exists выполняет вначале код контейнера phar.
Ответить | Правка | Наверх | Cообщить модератору

14. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от Онаним (?), 11-Май-19, 10:34 
Лучше бы вы не писали, и не показывали свою собственную безграмотность.

Никакого исполняемого кода в контейнере Phar нет, если конечно криворучки - горе-писатели - не пытаются сделать include из пользовательского контента :D Что в современном хипста-мирке - норма жизни, также, как и eval.

Есть возможность инстанциировать имеющиеся объекты и заполнять их проперти / вызывать десериализатор. Вкупе с автолоудерами и кривыми руками объектописателей (особенно горячих любителей eval, за который надо отлучать от кода пожизненно) это может привести и к выполнению произвольного кода.

Если в file_exists не передавать пользовательский ввод без валидации (префикс phar:// в имени файла должен существовать) - ничего само собой случится не может. Криворучкам 100500 раз говорили, что при использовании пользовательского ввода его надо 100% валидировать, но они так и остаются криворучками.

Ответить | Правка | Наверх | Cообщить модератору

16. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от пох (?), 11-Май-19, 10:44 
> Криворучкам 100500 раз говорили, что при использовании пользовательского ввода его надо 100% валидировать

но забыли опубликовать Официальные Таблицы Валидных Символов Допустимых для file_exists.

я у вас уже сто раз спрашивал - что не так в моем прекрасном файле phar://cat.jpeg и каков ваш _формальный_ критерий отличать такой файл от допустимых к проверке существования.

Пока что я вижу дыру by design, и неудачные камлания на тему "нет, наш язычок прекрасен, валидируйте лучше"


Ответить | Правка | Наверх | Cообщить модератору

18. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  –1 +/
Сообщение от Онаним (?), 11-Май-19, 10:50 
Нет у меня формального критерия отличать ваш файл. Я его просто априори переименую в то, что валидно для моей файловой системы, и сохраню так, как мне надо - в нужный шард, каталог, etc. А оригинальное имя запишу в книжечку метаданных.

---

Весь пост совершенно к другому:
Не делающие 100% валидации инпута - обречены иметь совершенно разнородные грабли, впрочем, туда и дорога.

Ответить | Правка | Наверх | Cообщить модератору

26. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +/
Сообщение от пох (?), 11-Май-19, 11:39 
> Нет у меня формального критерия отличать ваш файл. Я его просто априори
> переименую в то, что валидно для моей файловой системы

я вам уже демонстрировал, что для моей файловой системы этот файл совершенно валиден.
Почему я не могу назвать свою кошку phar:// и какие еще имена запретят альтернативно-одаренные разработчики?

> так, как мне надо - в нужный шард, каталог, etc. А
> оригинальное имя запишу в книжечку метаданных.

то есть будете героически подменять то, что и так прекрасно делает файловая система - наколеночной реализацией, и потом бороться за синхронизацию и последствия ее слета, просто потому что такой вот замысловатый язычок - вместо апи работы с fs подсовывает оверинженеренное нечто.
завтра вам и в апи для метаданных что-нибудь завезут, а чо - прикольно же ж, делая селект из базы сразу же незаметно заполнить пяток объектов. И будете изучать, какие where (например) сегодня годятся, а какие - ни-ни.

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

Ответить | Правка | Наверх | Cообщить модератору

31. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  –1 +/
Сообщение от Онаним (?), 11-Май-19, 13:14 
Можешь называть свою кошку как угодно, поскольку ты даже не увидишь, что на сервисе твой файл назвался просто /shards/uploads/0/1/2/c/b/012cbdzfgp212smnrw2oxubvz.contents

И нет - это не подмена действий файловой системы. Это называется "организация хранения пользовательских данных" на базе файловой системы. Впрочем, в рамках единого и один раз разработанного класса "хранения" может использоваться S3, SQL/noSQL блобы, и много чего ещё.

Ответить | Правка | Наверх | Cообщить модератору

33. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от Онаним (?), 11-Май-19, 13:39 
Я просто из старых ассемблерщиков, и у меня строка - это не просто набор символов, а набор символов и хранимая/заранее известная длина или вместо неё терминатор в конце, плюс ещё известная заранее кодировка. И файловая система - она, во-первых, не одна, а во-вторых, это не что-то, что "прекрасно делает" всё, что нам заблагорассудится, а сложный код, имеющий свои нюансы и накладывающий свои ограничения.

Если делать, как макаки - оно же "прекрасно всё делает" - на винде не сможем в ":". Столкнёмся с лимитами на длину имени файла или уровня вложенности пути в той же винде и не только. Где-то внезапно получим вместо "~" весёлое имя пользователя, под которым наш код запущен. Где-то на экзотике не сможем использовать пробелы или запятые. И т.д., и т.п.

Ответить | Правка | К родителю #26 | Наверх | Cообщить модератору

19. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +/
Сообщение от Онаним (?), 11-Май-19, 10:54 
Ну и да, если уж зашли на валидацию - даже самая простейшая (и не менее криворукая) валидация в виде проверки на /\?*: и \0 в именах файлов здесь нормально зайдёт. : потому, что иначе огребёте проблем под виндой.
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

29. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +/
Сообщение от Аноним (29), 11-Май-19, 12:58 
А ты знаешь список всех функций где доступен этот API?
Ответить | Правка | Наверх | Cообщить модератору

30. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  –1 +/
Сообщение от Онаним (?), 11-Май-19, 13:07 
Считаем "с запасом", что везде, где идут обращения к файлам, сокетам, etc. Но дело не в этом.

Понимаешь, я уже 100500 раз писал - мне не нужно знать этот список, у меня однозначно невалидированный пользовательский ввод в вызовы Stream API не может попасть никак, от слова "совсем".

Ответить | Правка | Наверх | Cообщить модератору

20. "Уязвимость в библиотеке PharStreamWrapper, затрагивающая Dru..."  +1 +/
Сообщение от Онаним (?), 11-Май-19, 10:59 
Ну и дополню...

ДА! Мы не можем 100% валидировать имена пользовательских файлов. Представляете? Никак! Сегодня это ://, вчера ? с *, завтра - ещё что-нибудь.

Золотое правило: не можешь валидировать и доверять - не используй в системных вызовах. Нельзя невалидируемый ввод использовать в таковых. Совсем. Не понимающие этого - обречены иметь дыры каждый день, что и наблюдаем.

Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру