1.2, Аноним (2), 22:38, 10/05/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +6 +/– |
Мы написали костыль, чтобы починить дырявый костыль. Но новый костыль тоже оказался с дырой…
| |
|
2.4, Sluggard (ok), 00:19, 11/05/2019 [^] [^^] [^^^] [ответить]
| +4 +/– |
> Библиотека разработана создателями CMS TYPO3
Михаил, это не та ли CMS, переходить на которую ты постоянно советовал, в комментах к новостям об уязвимостях Drupal или WordPress? :)
| |
|
3.35, Michael Shigorin (ok), 00:51, 12/05/2019 [^] [^^] [^^^] [ответить]
| +3 +/– |
>> Библиотека разработана создателями CMS TYPO3
> Михаил, это не та ли CMS, переходить на которую ты постоянно
> советовал, в комментах к новостям об уязвимостях Drupal
> или WordPress? :)
Та самая. Заметьте, советы обычно были с присказкой вроде "вскакивать приходится раз-два в год, а не каждую неделю".
| |
|
|
1.5, Аноним (5), 06:43, 11/05/2019 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
Из документации PHP:
> file_exists — Проверяет существование указанного файла или каталога
Да и имя функции намекает.
А тут ВНЕЗАПНО читаем
> функция file_exists() определяет MIME-тип по содержимому
Что-то тут не так)
| |
|
2.8, пох (?), 08:45, 11/05/2019 [^] [^^] [^^^] [ответить]
| +2 +/– |
вам в пехепе 4. Ну или максимум - 5.2 (который пожалуй и был последним true php)
С тех пор было объявлено что все есть стрим, и "файловые" операции внезапно начали делать странное, если имя файла начиналось на someshit://
Правда, для большинства этого шита доступны только самые примитивные операции, да еще и требуются явные разрешения или установка extension, а вот phar настолько прекрасен, что косплеит файловую систему целиком и включен из коробки (можно, конечно, выключить, но по неистребимой тяге разработчиков обмазываться всяким дерьмом, работать ничего кроме хеловротов и не будет).
вопрос наличия мозгов у тех кто это придумывал - закрыт еще со времен демарша автора сухосина.
| |
|
3.9, Евгений (??), 08:52, 11/05/2019 [^] [^^] [^^^] [ответить]
| +/– |
Ерунду не говорите, создание своего стримвроппера в 4.3.2 появилось.
| |
|
4.15, пох (?), 10:38, 11/05/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
только вот что-то я не слышал о подобных уязвимостях не то что в 4, а и в ранних 5.
Возможно именно потому, что из коробки ничего не работало, поэтому макаки на эти фичи не полагались, а если даже и включали - ничего кроме банальных read/write даже из приснопамятного rar было недоступно.
кстати, наличие rar при отсутствии tar как бе намекает нам на то, какая операционная система была на столе у горе-разработчиков этого чудо-язычка.
жаль что в ней их поделка не прижилась, поскольку там и с asp все было хорошо (и как-то он не торопился исполнять что ни попадя при попытке проверить существование файла)
| |
|
5.21, Онаним (?), 11:06, 11/05/2019 [^] [^^] [^^^] [ответить]
| +/– |
У меня для вас очень плохие новости: уязвимости в glob() существовали безотносительно языка. Однако их удалённая эксплуатация (без наличия у атакующего каких-либо локальных привилегий в системе) возможна опять же только при передаче невалидированного ввода.
| |
|
6.24, пох (?), 11:25, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
> уязвимости в glob()
а вот тут список непотребных символов вполне себе конечен (маловероятно появление завтра новых или вообще создания их методом подключения плагина), причем явно определен метод экранирования, и, вообще-то, аналогом этой уязвимости была бы передача не невалидированной строки в glob (во многих случаях вполне допустимая), а исполнение кода при передаче неправильной строки - через срыв стека где-нибудь в недрах regex или чем оно там их раскрывает.
что было бы багом реализации, а не by design.
| |
|
|
|
3.32, Онаним (?), 13:21, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Вот с чем соглашусь - так это с тем, что вся механика phar - редкостное удолбище. Оно по уму эксплицитно должно быть, через mount_phar($alias, $phar_file) например, который бы включал конкретный файл в конкретный путь phar://<alias>/...
| |
|
4.34, пох (?), 22:24, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
пожалуй что и да - я тут бегло полистал остальные стримы - нигде такой жопищи нет, если назвать кошку rar:// - абсолютно никакого ущерба окружающим она не нанесет, пока не попытаешься ее распаковать (да и тут это баг в конкретном модуле, а не by design)
| |
|
|
|
|
|
5.14, Онаним (?), 10:34, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Лучше бы вы не писали, и не показывали свою собственную безграмотность.
Никакого исполняемого кода в контейнере Phar нет, если конечно криворучки - горе-писатели - не пытаются сделать include из пользовательского контента :D Что в современном хипста-мирке - норма жизни, также, как и eval.
Есть возможность инстанциировать имеющиеся объекты и заполнять их проперти / вызывать десериализатор. Вкупе с автолоудерами и кривыми руками объектописателей (особенно горячих любителей eval, за который надо отлучать от кода пожизненно) это может привести и к выполнению произвольного кода.
Если в file_exists не передавать пользовательский ввод без валидации (префикс phar:// в имени файла должен существовать) - ничего само собой случится не может. Криворучкам 100500 раз говорили, что при использовании пользовательского ввода его надо 100% валидировать, но они так и остаются криворучками.
| |
|
6.16, пох (?), 10:44, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Криворучкам 100500 раз говорили, что при использовании пользовательского ввода его надо 100% валидировать
но забыли опубликовать Официальные Таблицы Валидных Символов Допустимых для file_exists.
я у вас уже сто раз спрашивал - что не так в моем прекрасном файле phar://cat.jpeg и каков ваш _формальный_ критерий отличать такой файл от допустимых к проверке существования.
Пока что я вижу дыру by design, и неудачные камлания на тему "нет, наш язычок прекрасен, валидируйте лучше"
| |
|
7.18, Онаним (?), 10:50, 11/05/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Нет у меня формального критерия отличать ваш файл. Я его просто априори переименую в то, что валидно для моей файловой системы, и сохраню так, как мне надо - в нужный шард, каталог, etc. А оригинальное имя запишу в книжечку метаданных.
---
Весь пост совершенно к другому:
Не делающие 100% валидации инпута - обречены иметь совершенно разнородные грабли, впрочем, туда и дорога.
| |
|
8.26, пох (?), 11:39, 11/05/2019 [^] [^^] [^^^] [ответить] | +/– | я вам уже демонстрировал, что для моей файловой системы этот файл совершенно вал... текст свёрнут, показать | |
|
9.31, Онаним (?), 13:14, 11/05/2019 [^] [^^] [^^^] [ответить] | –1 +/– | Можешь называть свою кошку как угодно, поскольку ты даже не увидишь, что на серв... текст свёрнут, показать | |
9.33, Онаним (?), 13:39, 11/05/2019 [^] [^^] [^^^] [ответить] | +1 +/– | Я просто из старых ассемблерщиков, и у меня строка - это не просто набор символо... текст свёрнут, показать | |
|
|
7.19, Онаним (?), 10:54, 11/05/2019 [^] [^^] [^^^] [ответить]
| +/– |
Ну и да, если уж зашли на валидацию - даже самая простейшая (и не менее криворукая) валидация в виде проверки на /\?*: и \0 в именах файлов здесь нормально зайдёт. : потому, что иначе огребёте проблем под виндой.
| |
|
|
9.30, Онаним (?), 13:07, 11/05/2019 [^] [^^] [^^^] [ответить] | –1 +/– | Считаем с запасом , что везде, где идут обращения к файлам, сокетам, etc Но де... текст свёрнут, показать | |
|
|
7.20, Онаним (?), 10:59, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Ну и дополню...
ДА! Мы не можем 100% валидировать имена пользовательских файлов. Представляете? Никак! Сегодня это ://, вчера ? с *, завтра - ещё что-нибудь.
Золотое правило: не можешь валидировать и доверять - не используй в системных вызовах. Нельзя невалидируемый ввод использовать в таковых. Совсем. Не понимающие этого - обречены иметь дыры каждый день, что и наблюдаем.
| |
|
|
|
|
|
|
1.7, Аноним (7), 08:41, 11/05/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
https://github.com/nbs-system/snuffleupagus
- Close to zero performance impact
- Powerful yet simple to write virtual-patching rules
- Killing several classes of vulnerabilities
* Unserialize-based code execution
* mail-based code execution
* Cookie-stealing XSS
* File-upload based code execution
* Weak PRNG
* XXE
- Several hardening features
* Automatic secure and samesite flag for cookies
* Bundled set of rules to detect post-compromissions behaviours
* Global strict mode and type-juggling prevention
* Whitelisting of stream wrappers
* Preventing writeable files execution
* Whitelist/blacklist for eval
* Enforcing TLS certificate validation when using curl
* Request dumping capability
- A relatively sane codebase:
* A comprehensive testsuite
* Every commit is tested on several distributions
* An clang-format-enfored code style
* A comprehensive documentation
* Usage of coverity
| |
|
2.17, пох (?), 10:49, 11/05/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
очередное "щас мы всем покажем как правильно кодить"
и пофиг что половина списка ненужного ненужно ломает работающее к чертям, а где не ломает - там была не нужна.
особенно вот это прекрасно:
Enforcing TLS certificate validation when using curl
дайте угадаю - еще и неотключаемая глупость.
| |
|
1.13, Онаним (?), 09:48, 11/05/2019 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– |
Хосспаде, долбодятлы.
Внезапно отсутствие валидации передаваемых имён и передача пользовательских данных в системные вызовы (в данном случае Stream API) без валидации. За эти два греха надо отлучать от доступа к коду навсегда.
| |
1.36, InuYasha (?), 13:06, 12/05/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Придумают же костылей... pharы какие-то... хорошо что я ПХП уже лет 10 не трогал ) За всё это время, похоже, появилось много новых сущностей, а проблемы так и остались.
| |
|