id: Гость   вход   регистрация
текущее время 03:58 19/04/2024
Владелец: SATtva (создано 02/05/2007 18:13), редакция от 31/08/2007 22:17 (автор: SATtva) Печать
Категории: софт, сайт проекта, ошибки и баги, уязвимости
https://www.pgpru.com/Новости/2007/05-02-РазъяснениеНочНогоИнцидента
создать
просмотр
редакции
ссылки

02.05 // Проект // Разъяснение ночного инцидента


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


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


Движок сайта основан на системе WackoWiki, но за почти год, минувший с перехода на эту платформу, оригинальный код подвергся огромному числу модификаций, не все из которых, в силу нехватки времени, были должным образом протестированы. Примерно в середине октября в движок была внесена процедура, ограничивающая количество рассылаемых с сайта уведомлений о новых комментариях на страницах: каждый наблюдающий за страницей пользователь стал получать только одно уведомление, после чего должен был просмотреть страницу, чтобы получать сообщения уже о новых комментариях. К сожалению, данная процедура была реализована не совсем корректно в условиях наследованного кода WackoWiki. В частности, при рассылке уведомлений (в функции SavePage()) оригинальная WackoWiki устанавливала временный контекст того пользователя, которому предстояло отправить письмо на данном цикле, а по завершении рассылки контекст восстанавливался обратно на пользователя, добавившего комментарий. Внесение модификации привело к тому, что в некоторых редких ситуациях выход из процедуры рассылки происходил до того, как контекст возвращался к текущему пользователю. В итоге, сеансовые данные пользователя оказывались "отравлены" данными другого пользователя (для которого устанавливался временный контекст), и до истечения сессии или принудительного завершения работы на сайте пользователь получал чужое имя (по которому и определяются все привилегии, права и пр.). Это серьезная уязвимость подверженная сравнительно простой эксплуатации.


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


Вторая ошибка, о которой сообщили spinore и Serghan, связана с их проблемами при размещении комментариев. Она была вызвана некорректной реализацией новой подсистемы кэширования SQL-запросов, из-за чего комментарии в определенных ситуациях не добавлялись, а заменялись один другим (даже если публиковали их разные пользователи). Как правило, такого не должно было происходить, но, вероятно, повышение нагрузки на СУБД, вызванное ночным резервным копированием базы данных, заставило движок закэшировать запрос, который кэшировать не следовало.


Эта ошибка тоже исправлена: теперь кэшироваться будут только явно разрешенные запросы, а не все те, которые система посчитает достаточно ресурсоемкими. Кроме того, был исправлен еще ряд ошибок в системе кэширования, доставшихся по наследству от WackoWiki, и некоторые другие недоработки.


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


2spinore, Serghan & все, кто столкнется с чем-то подобным в будущем: присылайте мне не только отчеты и скриншоты, но и содержимое cookies нашего сайта, это очень поможет в ловле жуков.


Источник: http://www.pgpru.com


 
Один комментарий [показать комментарии/форму]
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3