The OpenNET Project / Index page

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



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

Оглавление

Уязвимости в PHP и PHPMailer, opennews (ok), 08-Дек-18, (0) [смотреть все]

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


47. "Уязвимости в PHP и PHPMailer"  –1 +/
Сообщение от Онаним (?), 09-Дек-18, 11:22 
Вы передаёте поданное пользователем имя файла ("phar://...") в файловые операции над локальной ФС?
У меня для вас плохие новости.
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

52. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 13:01 
да, передаем, потому что этот файл создан пользователем и имеет придуманное этим пользователем имя - идеи хранить в базе данных то, для чего изначально предназначена fs - засуньте себе туда, откуда у вас вывалилась прекрасная идея вместо файлов использовать всякую галиматью в любой функции, работающей с файлами, "зато как в винде!" (хотя винда хотя бы код не *исполняет* - это ваше уникальное достижение).

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

А теперь расскажите, зачем вы вообще интерпретируете как phar (то же касается умничек из проекта ghostscript) то что не оканчивается на .phar, вместо возврата ошибки, и в каком реальном случае может понадобиться такая е..нина, кроме писания эксплойтов?

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

56. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 13:18 
Не надо хранить в базе то, что надо хранить в ФС. Но вот 100% валидации пользовательских данных никто не отменял.

Если не хочется валидировать - значит не надо использовать: загруженному файлу присвоили внутренний ID, а оригинальное имя файла записали в БД или файл метаданных.

Если же валидировать - валидировать полностью. Передали что-то, отличное от валидного имени файла - в баню. А то вам так и ../../../config/database_password.php для чтения передадут, и вы это благополучно сжуёте.

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

70. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 18:15 
> Передали что-то, отличное от валидного имени файла

anon[1025] ~>  mkdir phar:
anon[1026] ~> touch phar:/test.jpg
anon[1027] ~> ls -la phar://test.jpg
-rw-r--r-- 1 anon users 0 Dec  9 18:07 phar://test.jpg
что невалидного в данном имени файла?

(сейчас начнется верчение ужом и классификация файлов на правильные и неправильные)

> А то вам так и ../../../config/database_password.php для чтения передадут, и вы это
> благополучно сжуёте.

мы это можем (в отличие от вышеприведенного) проверить, причем двумя разными способами - честно распарсить путь (возможно - валидный, потому что все это происходит в ../../../../user-uploads/ !) или просто решить что parent-ссылки у нас запрещены - правильнее, безусловно, первое.

ну, разумеется, правильнее - в языке, где проверка существования файла не ведет к выполнению кода, а не в php.

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

ты можешь просто не знать о том, что именно альтернативно-одаренные разработчики сочли только вчера особым случаем, который надо обработать извращенным образом.

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

71. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 18:43 
В данном случае невалиден мозг, разрешивший передавать аж целые каталоги в юзеринпуте.
Ответить | Правка | Наверх | Cообщить модератору

74. "Уязвимости в PHP и PHPMailer"  +1 +/
Сообщение от пох (?), 09-Дек-18, 18:46 
понятно все с вашими мозгами, гражданин пхп-обезьян.

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

в общем, если до истории с phar у меня были какие-то сомнения что php не виноват, дело в разработчиках, то теперь я убежден что наоборот, разработчики и их любимая среда идеально соответствуют друг-другу.

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

57. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 13:21 
Это может понадобиться, когда ты используешь phar:// для доступа к собранным в один пакет данным приложения.  PHP, внезапно, это не только фронтендики для интернетико-магазинчиков.

То же, что кто-то вдруг в наличии символа / в переданном ЮЗЕРОМ _имени файла_ проблемы не видит - это строго его ментальные проблемы.

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

66. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 17:04 
> Это может понадобиться, когда ты используешь phar:// для доступа к собранным в один пакет
> данным приложения.

и зачем оно вдруг имеет расширение .jpg?
Отдельный вопрос - зачем вы используете апи для работы с файловой системой для работы с _исполняемым_кодом_? (ладно бы phar был просто архивом, это было бы относительно безобидной фичей языка)

> То же, что кто-то вдруг в наличии символа / в переданном ЮЗЕРОМ

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

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

72. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 18:44 
Будем проверять все конкретные расширения? Сегодня жпг, завтра гиф, послезавтра мп10?
Не проще сразу изолироваться от возможных ошибок, храня юзерские имена отдельно от контента? А то юзер может захотеть ../../../etc/passwd похранить нечаянно, тоже будем?
Ответить | Правка | Наверх | Cообщить модератору

76. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 18:49 
> Будем проверять все конкретные расширения?

да. Очевидно, что если файл имеет расширение .jpeg, а внутри postscript - это хуже чем ошибка, это преступление.

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

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

Но нет, вы будете накручивать проверки на проверки, а потом опа, магия - .jpg исполняется тремя разными способами, спешите видеть чудо!

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

84. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 19:31 
> А то юзер может захотеть ../../../etc/passwd похранить нечаянно, тоже будем?

а, кстати, почему нет, может он бэкап своего контейнера выложил? Разумеется, ниже ../../../backup/

запретим пользоваться относительными путями?

или все же может перестанем десериализовывать .jpeg при проверке его существования?

с моей точки зрения выбор между этими двумя вариантами очевиден.

с точки зрения разработчиков языка - тоже, но почему-то это разные выборы.

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

98. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 11-Дек-18, 09:27 
В имени файла, переданном пользователем типовому публичному web-приложению, вообще не может существовать никаких путей. Хочешь выкладывать бэкап контейнера - выкладывай в tar.

Если приложение не носит характер публичного web-приложения, там уже можно делать что угодно, понимая последствия.

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

73. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 18:46 
> юзер его не передает  - юзер выбирает путь, в удобной менюшечке интуитивно приятного интерфейса

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

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

78. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 18:54 
> а сравниваем на предмет присутствия в этой менюшечке

функцией file_exists, да?

(менюшечка была в форме, сейчас нам POST пришел - с параметрами заполненными с этой менюшечки...или не этой...хехе. Зашифруем всю форму и отправим вместе с постом, на предмет детальной проверки (еще pgp подписать не забудьте), так мыслит типичный *хороший* php-кодер?)

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

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

88. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от Онаним (?), 09-Дек-18, 20:15 
Менюшечка из libastral.so? Если нет, то описатель этой менюшечки есть сервер-сайд, не надо ничего лишнего отправлять.
Ответить | Правка | Наверх | Cообщить модератору

91. "Уязвимости в PHP и PHPMailer"  +/
Сообщение от пох (?), 09-Дек-18, 23:00 
> Если нет, то описатель этой менюшечки есть сервер-сайд, не надо ничего лишнего отправлять.

ну ок, храни ее вечно - пока пользователь то ли нажмет submit, то ли передумает, то ли пойдет пообедать.

в принципе, когда траффик был дорогой, мы так и делали.

но вообще-то опять же - хранить то что и так хранится в виде файловой системы только ради того чтоб ненароком не выполнить код при попытке проверить существование...

нет, ты правда считаешь ЭТО хорошим языком?
  

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

92. "Уязвимости в PHP и PHPMailer"  +1 +/
Сообщение от Онаним (?), 10-Дек-18, 09:09 
Да, правда. PHP - очень удачная обёртка в виде небольшого рантайма с динамической сборкой поверх тонны сишных библиотек. Удачнее не получилось, не получалось и не получается ни у кого уже лет 30.
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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