The OpenNET Project / Index page

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

Уязвимость в PostgreSQL, позволяющая выполнить SQL-код с правами пользователя, запускающего pg_dump

09.08.2024 12:34

Сформированы корректирующие обновления для всех поддерживаемых веток PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20, в которых исправлено 56 ошибок, выявленных за последние три месяца. Среди прочего в новых версиях устранена уязвимость (CVE-2024-7348), помеченная как опасная (уровень опасности 8.8 из 10). Уязвимость вызвана состоянием гонки в утилите pg_dump, позволяющем атакующему, имеющему возможность создания и удаления постоянных объектов в СУБД, добиться выполнения произвольного SQL-кода с правами пользователя, под которым запускается утилита pg_dump (обычно pg_dump запускается с правами суперпользователя для резервного копирования СУБД).

Для успешной атаки требуется отследить момент запуска утилиты pg_dump, что легко реализуется через манипуляции с открытой транзакцией. Атака сводится к замене последовательности (sequence) на представление или внешнюю таблицу, определяющих запускаемый SQL-код, в момент запуска pg_dump, когда информация о наличии последовательности уже получена, но данные ещё не выведены. Для блокирования уязвимости добавлена настройка "restrict_nonsystem_relation_kind", запрещающая раскрытие не системных представлений и доступ к внешним таблицам в pg_dump.

  1. Главная ссылка к новости (https://www.postgresql.org/abo...)
  2. OpenNews: Оценка изменения производительности СУБД PostgreSQL за последние 15 лет
  3. OpenNews: Релиз СУБД PostgreSQL 16
  4. OpenNews: Выпуск pg_ivm 1.6, реализации инкрементального обновления представлений для PostgreSQL
  5. OpenNews: В CVE опубликованы отчёты о ложных уязвимостях в curl, PostgreSQL и других проектах
  6. OpenNews: Для PostgreSQL представлен движок хранения OrioleDB, обходящийся без операции VACUUM
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/61677-postgresql
Ключевые слова: postgresql
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (47) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:44, 09/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Интересно, сколько хомячков запускало постгрешный дамп на продакшене из под суперпользователя, не пользуясь специально создаваемым бекап пользователем?
     
     
  • 2.2, Аноним (2), 12:53, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +13 +/
    Хах, вот же хомячки! Не ожидали наверное, что pg_dump внезапно начнет выполнять код, присланный из БД? Хах, выкусите, хомячки! <сарказм>
     
     
  • 3.5, Аноним (5), 13:02, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хорошие годные параноики ждут такого поведения всегда и везде.
     
  • 2.3, 1 (??), 12:55, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А разве не через pg_basebackup идёт бекапирование ?
     
     
  • 3.26, Аноним (1), 16:01, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Можно и так и так, "в зависимости от", но где гарантии что и в нём нет какой нбиудь недосмотренной бяки?
    😉
     
  • 3.27, Аноним (1), 16:08, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    ну и для особо ушлых - проверь у себя, pg_basebackup не идет ли у тебя так же от суперпользователя, и если нет, настраивай через выдачу прав на репликации.
     
  • 2.8, Аноним (8), 13:27, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    pg_dump на проде? Ох лол, кто ещё тут хомячок.
     
     
  • 3.11, Аноним (5), 13:37, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут свидетель не лазать руками на прод.
     
     
  • 4.13, vvm13 (ok), 13:50, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    pg_dump же не годится и не предназначен для создания бекапа базы на проде. Только для чего-то такого, что совсем не важное и не жалко. Можно ещё вспомнить про миграцию между версиями или архитектурами, но даже так дело очень редкое.
     
     
  • 5.21, Аноним (21), 15:20, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты объясняешь это подкроватным админам, вершина карьеры которых - поднять nextcloud для бухов. Они даже не понимают о чем речь)
     
  • 5.22, Аноним (5), 15:20, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кроме миграций и бекапов на проде бывает много других интересных занятий.
     
     
  • 6.24, Аноним (21), 15:29, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я ж говорю не понимают))
     
  • 5.37, Аноним (37), 18:20, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > pg_dump же не годится и не предназначен для создания бекапа базы на проде

    Сам придумал? Годится и предназначен.

     
     
  • 6.39, Аноним (21), 18:54, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Если нет задачи его потом восстановить, то конечно. Ты на собесе только такое не скажи, а то на этом он будет окончен моментально.
     
     
  • 7.42, Аноним (37), 19:02, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    В чём проблема с восстановлением? У нас он регулярно восстанавливается на staging. Я вижу что ты очень сильно что-то нам хочешь сообщить про своё непонимание pg_dump, но у тебя плохо получается.
     
     
  • 8.46, Аноним (1), 19:49, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Возможно он начитался статей каких нибудь гениев на гипотетическом хабре, о кри... текст свёрнут, показать
     
  • 3.32, User (??), 17:40, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это не хомячок, это суслик. Ты его не видишь - а он есть! Неподалеку от сурикатов, которые папку с базой тарят и кротов, которые в снапшот vm веруют...
     
  • 3.36, Аноним (37), 18:19, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Почему нет-то? Только его и используем.
     
     
  • 4.40, Аноним (21), 18:55, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Используем? Название конторы срочно.
     
     
  • 5.41, Аноним (37), 19:00, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не поверишь, postgrespro)
     
     
  • 6.54, Я (??), 16:57, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А как же пгпробэкап??
     
  • 3.60, Ныряние со штангой (?), 10:37, 13/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    https://docs.gitlab.com/ee/administration/backup_restore/#database-backups
     

  • 1.12, Аноним (12), 13:49, 09/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Я, конечно, все понимаю, но...
    Когда я там в последний раз запускал pg_dump? Ах да - никогда.
    Запускать pg_dump при работающей базе? Чтобы что?
     
     
  • 2.16, vvm13 (ok), 13:59, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    pg_dump internally executes SELECT statements.
    pg_dump is used to transfer data to newer versions of PostgreSQL.
     
     
  • 3.17, Аноним (12), 14:36, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >pg_dump is used to transfer data to newer versions of PostgreSQL.

    pg_upgrade же есть для этого:

    $ /usr/pgsql-16/bin/pg_upgrade -b /usr/pgsql-13/bin/ -B /usr/pgsql-16/bin/ -d /var/lib/pgsql/13/data/ -D /var/lib/pgsql/16/data/ -o ' -c config_file=/var/lib/pgsql/13/data/postgresql.conf'  -O ' -c config_file=/var/lib/pgsql/16/data/postgresql.conf'

     
     
  • 4.38, Аноним (37), 18:21, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это дичь требующая ставить две версии постгреса и 2x места. Не нужно нам нахрен такого.
     
     
  • 5.53, 312 (?), 14:51, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Оно же хардлинками умеет, и не займет x2 места
     
     
  • 6.57, Аноним (57), 15:22, 11/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Но от двух версий сразу все равно не уйти, если применяется хоть одно расширение.
     
  • 5.59, Аноним (12), 10:18, 12/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Это дичь требующая ставить две версии постгреса и 2x места.

    Ну а в чем проблема? В вашем любимом Slackware так нельзя без танцев с бубном? В RHEL колнах с этим никаких заморочек нет, и одинаковые экстеншены к разным версиям Postgres поставить через dnf тоже можно.
    Поставил новую версию, запустил pg_upgrade, проверил что все хорошо, удалил старый Postgres и его данные (если копировал, а не хардлинками).

     
  • 2.34, Аноним (37), 18:18, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Запускать pg_dump при работающей базе? Чтобы что?

    Чтобы получить слепок базы для бэкапа или клонирования. В чём проблема?

     

  • 1.28, Аноним (1), 16:14, 09/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Раз уж пошла такая пьянка, господа, кто что использует для резервного копирования с Pg:
    1. pg_dump
    2. pg_basebackup
    3. различные виды репликации на бекап-негра.
    4. что то упустил, типа ZFS\HAMMER снапшотов...
     
     
  • 2.29, Аноним (5), 16:29, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    5. Какие ещё бекапы?
     
     
  • 3.31, Аноним (31), 17:30, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    6 pg barman
     
  • 2.33, User (??), 17:44, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Тут интересней не "что используется для бэкапа", а "что используется для restore'a" не всего кластера целиком, а ну вот - отдельной базы в нем)
     
     
  • 3.44, Аноним (1), 19:24, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну если ты делаешь целиком basebackup, то как ты собираешься restore одной базы?
    Сам себе злобный буратина?
     
     
  • 4.47, User (??), 19:59, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну если ты делаешь целиком basebackup, то как ты собираешься restore одной
    > базы?
    > Сам себе злобный буратина?

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

     
     
  • 5.48, Аноним (21), 22:07, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Какой документации? Максимум, что читает киса это "как зделоть бэкап nextcloud на руспбери" на яндекс.дзене.
     
  • 5.49, Аноним (1), 22:44, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ты прав, сам я такого не нашел.
    Итак, у нас есть бекап-архив (ну или директория) сделанная через pg_basebackup с дефолтового таблспейса.
    Как же восстановить только одну отдельную базу 1с из десятка\сотни забекапированных, не разворачивая их все в соседний инстанс?
    Ты же знаешь, не правда ли, иначе бы не язвил.
     
     
  • 6.50, User (??), 12:48, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ты прав, сам я такого не нашел.
    > Итак, у нас есть бекап-архив (ну или директория) сделанная через pg_basebackup с
    > дефолтового таблспейса.
    > Как же восстановить только одну отдельную базу 1с из десятка\сотни забекапированных, не
    > разворачивая их все в соседний инстанс?
    > Ты же знаешь, не правда ли, иначе бы не язвил.

    Use pg_probackup или pgbackrest, Luke!

     
     
  • 7.51, Аноним (1), 13:02, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, как бы на русском было написано:
    "сделанная через pg_basebackup"...
    перечитай https://www.opennet.dev/openforum/vsluhforumID3/134512.html#44 и https://www.opennet.dev/openforum/vsluhforumID3/134512.html#47
    Если хочешь, замнем для ясности. (А так то я могу и Barman пользовать, и любую другую внешнюю тулзу.)

    Вопрос, в том, что если ты делаешь бекап базы (например 1с) через pg_probackup, ты уверен, что в сохраненном тобой бекапе окажутся все данные баз?
    Самое простое - как мы помним, права доступа к указанной базе и хранение Tablespace вынесены на уровень кластера, что, как мы понимаем, несколько выше, чем таблички сданными и индексы.
    Вопрос - pg_probackup корректно их архивирует (и, естественно, восстанавливает)?

     
     
  • 8.55, User (??), 22:18, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну как бы на русском было написано - кто что использует для restore а одиночной... текст свёрнут, показать
     
     
  • 9.56, Аноним (1), 23:33, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, я притащил как гипотетическую задачу , а вы подхватили Но спасибо за не... текст свёрнут, показать
     
  • 2.35, Аноним (37), 18:19, 09/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    pg_dump, конечно.
     
  • 2.52, Аноним (52), 14:10, 10/08/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Для физического бэкапа (который нужен исключительно как бэкап) - pg_basebackup с hot standby.

    Для логического бэкапа (когда может понадобиться поднять на другой версии, дампить только часть, погрепать, в конце концов, чтобы найти, в каком дампе удаленные данные) - pg_dump со слейва.

     

  • 1.43, Аноним (43), 19:06, 09/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Постгрес.
    Отследить, маняпуляйции, Луна в Сатурне.
    Понятно. Теоретическая возможность на верирарной СУБД.
    Ок, да.
     
  • 1.45, QULISA (?), 19:34, 09/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Лучший способ сделать бекап
     
  • 1.58, Rollo99 (ok), 23:42, 11/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Анонимы, которые НИКОГДА не используют pg_dump, расскажите секрет, как вы восстанавливаете только одну БД на дату или момент времени на том же или другом кластере с несколькими БД без его остановки?

    imho, если и есть такие "волшебные" инструменты решающие эту задачу, то они используют pg_dump под капотом.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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