Pull to refresh

Comments 19

Нереальное решето O_O
is_callable($attribute['value'])? call_user_func($attribute['value'],$this->data)
блин. это жесть. это позволяет вызвать ЛЮБУЮ функцию пыха просто передав её имя.
Восхитительно!
Это точно не было диверсией?
Ну скажем так: «не нереальное решето», а только в некоторых случаях. Уязвимость действительна только если передавать значение как «array($object, $method)»
Где тут «Нереальное решето»?

Во-первых: виджет это не очень популярный. Сам лично ни разу его не пользовал.
Во-вторых: если ты вставляешь пользовательские данные без проверки — то ты сам себе злобный буратино. Во многих виджетах для рендера контента используется CComponent::evaluateExpression(), который скармливает данные в eval().
Согласен, признаю свою вину.
Уязвимость действительна только если передавать значение как «array($object, $method)»

можно просто предать имя функции и получить $data как ее параметр.
Но уязвимость есть только если определено 'value' и в него передается пользовательский ввод без изменений:
'attributes' => array(
    array(
        'value' => $model->attribute_name,
    ),
)

А такое очень редко бывает.
Обычно 'value' используется для форматирования значения, при этом название функции не дойдет в целостности и не выполнится.
Этот «не очень популярный» виджет используется в CRUD из Gii
«По нашим данным детали пока известны только основной команде разработчиков фреймворка.»
Теперь всем прочитавшим. Уже обновился.
Уязвимость присутствует в коде чуть больше года, с 6 июня 2013. Самое печальное, что всего 20 файлов во фреймворке содержат функции call_user_func*, а значит, в результате стандартного аудита безопасности шанс найти эту уязвимость стремится к 100%. Боюсь представить, сколько эта уязвимость эксплуатировалась в течение этого года.

И ведь это проблема: разработчики слишком доверяют фреймворкам и библиотекам; open source даёт ощущение мнимой безопасности («Да миллионы пользуются этой бибилиотекой! Да полюбому кто-то уже проверил её на закладки…»).
Уоу-уоу! Это я действительно поторопился. Автор кода, впрочем, тот же.
Использовали этот виджет на одном проекте. Уже накатываем обновления.

В целом, общее мнение команды, что дырка и правда сильно похожа на закладку. Впрочем, от Yii все равно не откажемся.
Да не, не закладка. По крайней мере, человек, сделавший коммит, давно с нами и никогда ничего такого не пытался. Ошибка.
Иногда бывает такое, что поделать.
До того коммита там был is_string, что не шибко лучше :)
Это касается только CDetailView, я правильно понимаю?
Да, и всех компонентов сторонних разработчиков, унаследованных от класса CDetailView.
Ну это скорее бага для очень криворуких программистов, потому что любые входные данные всегда надо валидировать. Вероятность именно такого применения на практике очень низкая, а вот бага с массивами была поинтересней.
Только сейчас у Symfony2 появился второй мержер, до этого весь код мержил только Фабьен. Мне кажется тот факт, что разработчик сам себя ревьювит — позволяет оставлять в коде вот такие закладки.
Sign up to leave a comment.

Articles