Статья

Скрытая уязвимость в Libarea — как подмена ID раскрывает закрытые данные

🔍 В чём суть проблемы?
Всё начинается с простой вещи: на сайте есть объекты — статьи, посты, вопросы — и у каждого из них есть свой data-id. В нормальной ситуации, если объект скрыт от пользователя (например, пост удалён или доступен только автору), то при попытке доступа к нему пользователь должен получить отказ — 403 или 404.

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

Пользователь открывает DevTools.

Находит кнопку действия (например, «Поставить лайк» или «Добавить в закладки»).

Подменяет data-id на другой.

Сервер выполняет действие — даже если у пользователя нет прав.

🧪 Примеры, с которыми можно столкнуться
Подмена data-id и лайк скрытой статьи → запись в базу, как будто пользователь взаимодействовал с ней.

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

Открытие или изменение несуществующего или приватного объекта — без авторизации или прав доступа.

Если вы позволяете взаимодействовать с объектами по data-id без проверки прав на сервере, вы открываете прямой путь к утечке данных и обходу ограничений. Отображение заголовков закрытых статей во вкладке «Закладки» — уже сигнал, что доступ контролируется только на клиенте, а не там, где это действительно важно.

🔒 Совет: всегда проверяйте авторизацию и права доступа к объектам на серверной стороне. Никогда не полагайтесь на интерфейс или скрытые элементы в DOM — это не защита.

6 Ответов

  1. Минуту. Именно на LibArea есть такая уязвимость? Если да, то желательно подробно в личку. Вы уверены, что поставите лайк именно от того пользователя id который поменяете?

    Вот ваша статья, поставьте от меня лайк ей. Или, занесети её в закладки.

    Что-то сомневаюсь. Но тем не мене гляну, освежу в памяти этот момент. Спасибо.

    1. Похоже, меня немного неправильно поняли.

      Речь не о том, что можно поставить лайк от чужого пользователя. Лайк ставится от вашего аккаунта, но можно подменять ID статьи — то есть ставить лайк закрытым или даже несуществующим постам.

      Таким образом, система не проверяет, существует ли пост или есть ли у вас к нему доступ, и просто записывает действие в базу. Это и есть уязвимость.

      1. Проверю, спасибо.

  1. image.png
    photo_2025-06-04_10-29-53 (2).jpg
    image.png

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

  1. Некоторые дополнительные проверки добавил. Не было проверки для черновиков и удаленных. Спасибо. 👍

    Можно было прочитать заголовок черновиков и удаленных статей (если узнать их ID)…