Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
postgres-basebackup-symlink — PostgreSQL 18.6 — высокий уровень — удалённо — запись файлов — pg_basebackup следует по абсолютной tar-символической ссылке, остаток от CVE-2026-6475 | Kitploit
Инструменты/GitHubGitHub/abraxas/postgres-basebackup-symlink
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеСтатьи и ИсследованияБезопасность Баз ДанныхЛаборатории и Практика
GitHub
abraxas/postgres-basebackup-symlink

postgres-basebackup-symlink

PostgreSQL 18.6 — высокий уровень — удалённо — запись файлов — pg_basebackup следует по абсолютной tar-символической ссылке, остаток от CVE-2026-6475

Репозиторий
63 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - postgres-basebackup-symlink

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  postgres-basebackup-symlink

postgres-basebackup-symlink

Класс: запись файлов Достижимость: удалённая

PostgreSQL 18.6 (724edf9) — PostgreSQL Global Development Group

CVE-2026-6475 добавил path_is_safe_for_extraction для имён членов tar. Абсолютные цели симлинков по-прежнему пропускают эту проверку, чтобы работали табличные пространства. Затем astreamer_file.c вызывает symlink() для цели, а позже fopen(..., "wb") следует по ней. Формат pg_basebackup по умолчанию — plain (-F p). pg_rewind create_target_symlink проверяет путь и никогда не создаёт ссылку.

Враждебный источник, говорящий на BASE_BACKUP, может подложить абсолютный симлинк и перезаписать любой файл, доступный на запись UID резервного копирования. Та же модель жертвы, что и в 6475. Это не повторная заявка по проверкам имён членов.

IDCVE пока нет
КлассЗапись файлов (остаток абсолютного симлинка tar от CVE-2026-6475)
ДостижимостьУдалённая (UI:R клиент против враждебного PostgreSQL)
CWECWE-59, CWE-22
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
ПродуктPostgreSQL
Затронутотег 18.6 REL_18_6 (724edf9bde9d356724ad384a2e196edc3c9f80f7), встроенные pg_basebackup / pg_rewind
Аутентификацияжертва запускает стандартный pg_basebackup -D <dir> против источника атакующего
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Тот, кто может заставить оператора запустить pg_basebackup -D против своего PostgreSQL (та же модель UI:R, что и в CVE-2026-6475), может писать за пределами -D.

ПривилегияМетод / точка сбросаДоказано в лаборатории или выведено
Целостность: запись файла за пределами -DВраждебный tar BASE_BACKUP: член с typeflag '2' с безопасным относительным именем (pg_tblspc/16384) и абсолютной целью ссылки, затем обычный член под этим именем. extract_link, затем create_file_for_extract fopen(..., "wb") без O_NOFOLLOWДоказано в лаборатории. Записан POSTGRES-BASEBACKUP-SYMLINK-WITNESS в /work/oracle/. Dest содержит симлинк. Контрольный tar (без симлинка) оставил oracle пустым и записал PG_VERSION только внутри -D
Целостность: перезапись shell rc, authorized_keys, пользовательского юнита systemd или crontabТа же точка сброса, любой путь, доступный на запись UID клиентаВыведено. Эта лаборатория не трогает эти файлы
Доступность: разрушение конфигурации или ключей клиентаТа же записьВыведено. Не продемонстрировано
Разведка диска клиентаextract — это запись, а не чтениеЗакрыто
Обход .. или абсолютные имена членовpath_is_safe_for_extractionЗакрыто. Это CVE-2026-6475
Непривилегированный SQL на стороне сервера / неаутентифицированный протоколсервер по умолчанию 18.6Закрыто. Этот остаток — на стороне клиента
Резервное копирование только в tarpg_basebackup -F t сохраняет tar без извлеченияЗакрыто
RCE внутри postgresне эта точка сбросаЗакрыто

pg_rewind имеет тот же остаток create_target_symlink / open(). Эта лаборатория задействует только pg_basebackup.

Как я это нашёл

Я зафиксировал postgres/postgres REL_18_6 после волны 18.6 (28 CVE, плюс набор 18.4/18.2, уже присутствующий в этом дереве). Двадцать два поиска. Сервер по умолчанию, непривилегированный SQL, неаутентифицированный протокол: ничего на этом уровне. CVE-2026-6475 был родственным случаем для повторного чтения.

Имена членов проверяются. Абсолютные цели симлинков — нет:

if (!is_absolute_path(linktarget) &&
    !path_is_safe_for_extraction(member->linktarget))
{
    pg_fatal("link target has unsafe path name: \"%s\"",
             member->linktarget);
}
extract_link(mystreamer->filename, linktarget);

create_file_for_extract по-прежнему fopen(filename, "wb"). Комментарий в astreamer_file.c:351-356 говорит, что маппинг применяется без проверки, что ссылка находится внутри pg_tblspc.

Уже зафиксированные неверные повороты: считать 6475 закрытым и уйти; направить -D на живой каталог данных; перезаписать shell rc ради эффекта. Честный сервер 18.6 выдаёт только симлинки pg_tblspc/<oid> и помещает содержимое табличного пространства в отдельный архив. Вредоносный источник, говорящий на BASE_BACKUP, может поместить последующий обычный член в тот же tar. Это и есть остаток.

Лаборатория

python3 postgres-basebackup-symlink-Abraxas-Labs.py

или

cd lab
./run.sh

postgres:18.6 в качестве образа источника, запускающий говорящего на BASE_BACKUP. Клиент — встроенный pg_basebackup из того же тега (pg_basebackup (PostgreSQL) 18.6). Loopback 127.0.0.1:19370. Проект Compose postgres-basebackup-symlink. Не направляйте -D на живой каталог данных.

SUCCESS postgres-basebackup-symlink control-inside=yes oracle-outside=yes dest-is-symlink=yes image=postgres:18.6 how=pg_basebackup POSTGRES-BASEBACKUP-SYMLINK-WITNESS

Исправление

Считать абсолютные цели симлинков небезопасными, если они не перезаписаны через --tablespace-mapping. Открывать извлекаемые файлы с O_NOFOLLOW / lstat, чтобы подложенная ссылка не могла быть пройдена. Применять path_is_safe_for_extraction к rewind link, а также к path. Отклонять обычный член, путь которого проходит через симлинк, вышедший за пределы -D.

Ссылки

  • github.com/postgres/postgres тег REL_18_6 (724edf9bde9d356724ad384a2e196edc3c9f80f7)
  • src/fe_utils/astreamer_file.c · src/fe_utils/astreamer_tar.c
  • src/bin/pg_rewind/file_ops.c
  • Рядом исправлено (имена членов, не эта цель): CVE-2026-6475
  • CWE-59 · CWE-22

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.

Скачать инструмент