
Splunk Enterprise 10.2.3 · PostgreSQL recovery sidecar · CWE-306 (Отсутствие аутентификации для критической функции) Авторизованная автономная репродукция, которая моделирует реальный бюллетень безопасности для обучения защите. Она не содержит проприетарного кода Splunk.
Этот репозиторий — учебная лаборатория по безопасности в стиле Vulhub/DVWA. Она разворачивает точную модель Splunk Enterprise 10.2.3 и воспроизводит задокументированное поведение, лежащее в основе CVE-2026-20253: встроенный PostgreSQL recovery sidecar предоставляет привилегированные функции записи файлов и выполнения SQL без реальной аутентификации (принимается пустой или любой заголовок Basic), а веб-уровень Splunk ретранслирует __raw/v1/postgres/* в этот sidecar до шлюза входа. В совокупности это даёт неаутентифицированное удалённое выполнение кода от имени не-root сервисной учётной записи splunk.
Лаборатория полностью проходима от начала до конца: снимите отпечаток периметра, следуйте за пред-аутентификационным бейджем состояния к внутреннему recovery API, докажите возможность произвольной записи файлов, похитьте внутренние учётные данные Postgres и превратите примитив записи файлов через SQL-restore в выполнение кода в планируемом скрипте modular-input.
edge network core network
┌───────────────────┐ ┌───────────────────────────────┐
browser ─▶ proxy :8080 ──▶ web :8001 (SPA)
(nginx edge) └▶ splunkd :8089 ─┬─▶ db :5432 (postgres)
login API + ├─▶ redis :6379 (jobs/cache)
__raw relay ───┼─▶ pg-sidecar :5435 ◀── THE VULN
│ (recovery API, blank Basic)
forwarders ─▶ ingest :8088 (HEC) ─────────┘
scheduler ──▶ runs modular-input script
as `splunk` (uid 1000) — RCE sink
shared volume app_data mounted into
pg-sidecar (write) + scheduler (exec)
В стеке два Docker-моста: edge (proxy) и core (всё остальное). В уязвимой сборке pg-sidecar находится в сети core и доступен через ретрансляцию веб-уровня — именно эта доступность и есть суть. Патченый overlay изолирует его.
cp .env.example .env
docker compose up --build -d
Затем откройте в браузере http://localhost:8080.
Критический эксплойт (recovery sidecar) полностью не требует аутентификации — для доступа к нему не нужно входить в систему. Указанные ниже предустановленные учётные записи платформы существуют только как точки обзора grey-box для исследования (чтение собственных журналов аудита Splunk в Search & Reporting). Выдайте участникам учётную запись analyst и позвольте им обнаружить остальное.
Эти учётные данные намеренно задокументированы — это автономная учебная лаборатория, а не производственная система. Упражнение не требует их взлома или повышения привилегий; критический recovery API
pg-sidecarне требует аутентификации. Полные заметки оператора — вdocs/DEPLOYMENT.md.
Нужно захватить два флага. Оба — строки вида SPLUNK{...}; их значения находятся в лаборатории и раскрываются в документации — они намеренно не приведены здесь, чтобы вы могли заработать их сами.
__raw, обойдите фиктивную аутентификацию Basic и извлеките внутренние учётные данные Postgres из .pgpass sidecar.splunk. Превратите примитивы записи файлов и SQL-restore в sidecar в выполнение кода в планируемом скрипте modular-input, а затем прочитайте защищённый секрет.Не заглядывайте вперёд: docs/DISCOVERY_WALKTHROUGH.md написана для самостоятельного исследования, а не для спойлеров. Для учебного персонала существуют постепенная лестница подсказок и полное решение инструктора, но они не включены в этот пакет, чтобы упражнение решалось вслепую.
Дерево patched/ отражает реальное исправление Splunk (10.2.4) плюс обходное решение из бюллетеня, выстроенные как эшелонированная защита: реальная проверка учётных данных на маршрутах восстановления, санитизация обхода каталогов в backupFile, устранение инъекции в строку подключения libpq, роль восстановления без прав суперпользователя, удаление пред-аутентификационной ретрансляции __raw и сетевая изоляция sidecar. См. patched/PATCH_NOTES.md.
Поднимите усиленную сборку с помощью overlay:
docker compose -f docker-compose.yml -f patched/deploy/compose.override.hardened.yml up --build -d
По аналогии с мерой смягчения из бюллетеня, вы можете полностью отключить recovery sidecar без патча — это аналог установки [postgres] disabled = true в server.conf. Установите следующее в вашем .env и пересоздайте стек:
PG_SIDECAR_DISABLED=true
При отключённом sidecar функции recovery/* исчезают, и цепочка разрывается в источнике.
Учебный материал. Эта лаборатория — авторизованная автономная репродукция, которая моделирует Splunk Enterprise CVE-2026-20253 для обучения защите. Она не содержит проприетарных исходников или бинарников Splunk; сервисы здесь — независимая повторная реализация задокументированного уязвимого поведения. Используйте только против этой лаборатории. Применение этих техник к системам, которыми вы не владеете, незаконно.
| Бюллетень вендора | SVD-2026-0603 |
| CVE | CVE-2026-20253 |
| Слабость | CWE-306 — Отсутствие аутентификации для критической функции |
| Затронуто | Splunk Enterprise 10.2.3 |
| Исправлено в | Splunk Enterprise 10.2.4 |
| CVSS 3.1 | 9.8 (критический) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Сервис | Образ | Прослушивает | Опубликован | Роль |
|---|
proxy | splunk/proxy:10.2.3 | 8080 | 8080:8080 | nginx edge; точка входа для Splunk Web и ретрансляции __raw |
web | splunk/web:10.2.3 | 8001 | — | Одностраничное приложение Splunk Web (статическое) |
splunkd | splunk/splunkd:10.2.3 | 8089 | — | Демон Splunk / веб-уровень: API входа + предсеансовая ретрансляция /{locale}/splunkd/__raw/v1/postgres/* |
ingest | splunk/ingest:10.2.3 | 8088 | 8088:8088 | HTTP Event Collector (аутентификация по токену) |
pg-sidecar | splunk/pg-sidecar:10.2.3 | 5435 | — | УЯЗВИМОСТЬ — PostgreSQL recovery sidecar (/v1/postgres/*) |
scheduler | splunk/scheduler:10.2.3 | — | — | запускает планируемый скрипт modular-input от имени splunk → цель RCE |
db | postgres:16-alpine | 5432 | — | внутренний Postgres, который sidecar резервирует и восстанавливает |
redis | redis:7-alpine | 6379 | — | очередь заданий / кэш |
| Имя пользователя | Пароль | Роль | Примечания |
|---|
admin | Str@ta-Admin-2026! | admin | Полный администратор платформы (Settings, Users, Data Inputs) |
j.okafor | Analyst!Winter24 | analyst | Начните здесь — консоль Search & Reporting только для чтения |
m.reyes | Operator#2311 | operator | Управляет источниками / представлениями кластера |
svc_forwarder | fwd-3f9a1c77b204 | operator | Сервисная учётная запись (HEC forwarder) |
| Документ | Аудитория / назначение |
|---|
docs/DISCOVERY_WALKTHROUGH.md | Путь на основе исследования: от снятия отпечатка до RCE |
docs/ROOT_CAUSE.md | Почему это уязвимо (CWE-306) и как патч это исправляет |
docs/ARCHITECTURE.md | Сервисы, сети, ретрансляция __raw и потоки данных |
docs/DETECTION.md | Возможности обнаружения и сигнатуры для синей команды |
docs/PLAYER_GUIDE.md | Инструктаж участника и границы (scope) |
docs/HINTS.md | Постепенная лестница подсказок — хранится внутри, не включена в этот пакет |
docs/INSTRUCTOR_GUIDE.md | Только для учебного персонала — полное решение + флаги, хранится внутри, не включено |
docs/DEPLOYMENT.md | Развернуть, эксплуатировать и удалить окружение |