
CVE-2026-6471のための防御的・非破壊的な脆弱性チェッカー
CVE-2026-6471 は、ロジカルデコーディング(logical decoding)サブシステムに関わるPostgreSQLの認可の脆弱性です。
この脆弱性により、REPLICATION権限を持つがスーパーユーザー権限を持たないPostgreSQLロールが、PostgreSQLサーバーに、PostgreSQLオペレーティングシステムアカウントがアクセス可能な攻撃者制御のライブラリをロードさせることができる可能性があります。
悪用に成功すると、PostgreSQLサーバープロセスの権限での任意コード実行につながる可能性があります。
このリポジトリは、許可されたセキュリティ評価のために設計された安全な検出PoCを提供します。
⚠️ チェッカーは悪意のある共有ライブラリをロードせず、オペレーティングシステムコマンドも実行しません。
| プロパティ | 値 |
|---|---|
| CVE | CVE-2026-6471 |
| 製品 | PostgreSQL |
| コンポーネント | ロジカルデコーディング |
| CWE | CWE-862 — 認可の欠如 |
| CVSS v3.1 | 7.2 高 |
| 攻撃ベクトル | ネットワーク |
| 攻撃の複雑さ | 低 |
| 必要な権限 | 高 |
| ユーザー操作 | なし |
| 機密性への影響 | 高 |
| 完全性への影響 | 高 |
| 可用性への影響 | 高 |
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
脆弱な条件下では、必要なレプリケーション機能をすでに持つPostgreSQLアカウントを保有する攻撃者が、データベースからオペレーティングシステムへの権限境界を越える可能性があります。
┌──────────────────────┐
│ PostgreSQL User │
│ REPLICATION = YES │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Logical Decoding │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Missing Authorization│
│ Validation │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Library Loading │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ PostgreSQL OS User │
└──────────────────────┘
実際の影響は、PostgreSQLオペレーティングシステムアカウントの権限とファイルシステムのパーミッションに大きく依存します。
PostgreSQLプロジェクトのセキュリティ勧告では、以下の影響を受けるブランチが特定されています:
| ブランチ | 影響あり | 修正済み |
|---|---|---|
| PostgreSQL 14 | < 14.24 | 14.24 |
| PostgreSQL 15 | < 15.19 | 15.19 |
| PostgreSQL 16 | < 16.15 | 16.15 |
| PostgreSQL 17 | < 17.11 | 17.11 |
| PostgreSQL 18 | < 18.6 | 18.6 |
お使いのPostgreSQLブランチで利用可能な最新のセキュリティリリースにアップグレードしてください。
このプロジェクトは意図的に非破壊的なチェックのみを実行します。
チェッカーは以下を検証します:
REPLICATIONを持っているかどうかSELECT
version() AS postgres_version,
current_user AS current_user,
rolsuper AS is_superuser,
rolreplication AS has_replication
FROM pg_roles
WHERE rolname = current_user;
出力例:
postgres_version : PostgreSQL 17.x
current_user : security_audit
is_superuser : f
has_replication : t
脆弱なバージョンとREPLICATION権限の組み合わせは、是正措置が必要と見なされるべきです。
PoCは以下のワークフローに従います:
┌───────────────┐
│ PostgreSQL │
│ Connection │
└───────┬───────┘
│
▼
┌─────────────────┐
│ Get Server │
│ Version │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Check Current │
│ Role │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Check │
│ REPLICATION │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Compare Against │
│ Fixed Releases │
└────────┬────────┘
│
┌───────┴────────┐
▼ ▼
Potentially Not
Vulnerable Affected
❌ Load an attacker-controlled .so
❌ Execute arbitrary SQL payloads
❌ Execute operating-system commands
❌ Spawn a reverse shell
❌ Modify PostgreSQL configuration
❌ Modify filesystem contents
❌ Create persistence
❌ Exploit production systems
これにより、チェッカーは管理された脆弱性評価およびインベントリワークフローに適しています。
リポジトリをクローンします:
git clone https://github.com/<YOUR-USERNAME>/CVE-2026-6471.git
cd CVE-2026-6471
必要なPython依存関係をインストールします:
python3 -m pip install psycopg2-binary
チェッカーを実行します:
python3 CVE-2026-6471.py
例:
╔════════════════════════════════════════════════════╗
║ CVE-2026-6471 SAFE CHECK ║
║ PostgreSQL Logical Decoding Audit ║
╚════════════════════════════════════════════════════╝
[+] Connecting to PostgreSQL...
[+] Server version : PostgreSQL 17.x
[+] Current role : security_audit
[+] Superuser : False
[+] Replication : True
[!] PostgreSQL version requires security update
[!] REPLICATION privilege detected
[!] POTENTIALLY VULNERABLE
[!] Upgrade PostgreSQL to a fixed release.

管理者は、レプリケーションが有効なロールを以下のコマンドで確認できます:
SELECT
rolname,
rolsuper,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
返されたすべてのアカウントを確認してください。
アカウントがレプリケーション権限を必要としない場合は、運用要件に応じて不要な権限を削除してください。
適切な修正済みリリースをインストールします:
14.24+
15.19+
16.15+
17.11+
18.6+
最低限の修正バージョンで止めるのではなく、利用可能な最新のPostgreSQLセキュリティリリースを優先してください。
レプリケーション機能を持つアカウントを特定します:
SELECT
rolname,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
不要なレプリケーション権限を削除します:
ALTER ROLE <role_name> NOREPLICATION;
ロールが正当なレプリケーションインフラストラクチャに必要でないことを確認した後にのみ、権限の変更を実行してください。
特に以下の点に注意してください:
SUPERUSER
REPLICATION
LOGIN
CREATEDB
CREATEROLE
可能な限り最小権限の原則を使用してください。
簡略化された概念実装:
if postgres_version_is_affected:
if role_has_replication:
if not role_is_superuser:
report("POTENTIALLY VULNERABLE")
else:
report("AFFECTED VERSION - SUPERUSER CONTEXT")
else:
report("AFFECTED VERSION - REPLICATION NOT PRESENT")
else:
report("NOT AFFECTED")
チェッカーの目的は露出の特定であり、悪用ではありません。
| 結果 | 意味 |
|---|---|
| 🟢 影響なし | PostgreSQLが修正済みバージョンを実行している |
| 🟡 更新が必要 | バージョンが影響を受けるブランチ内にある |
| 🟠 レプリケーション検出 | 現在のロールがレプリケーション機能を持っている |
| 🔴 潜在的に脆弱 | 影響を受けるバージョン + 関連する権限 |
| ⚪ アクセス権限が不十分 | スキャナーが必要なロール情報を検査できない |
REPLICATIONロールを監査する。 INTERNET
│
▼
┌─────────────┐
│ Firewall │
└──────┬──────┘
│
▼
┌─────────────┐
│ PostgreSQL │
│ Server │
└──────┬──────┘
│
┌─────────┴─────────┐
▼ ▼
Least Privilege Monitoring
│ │
▼ ▼
Role Controls SIEM / Alerts
PostgreSQLのネットワーク露出を制限し、データベースサービスを信頼できないネットワークに直接公開しないようにしてください。
推奨されるテスト設定:
┌───────────────────────────────────┐
│ Isolated Lab Network │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Scanner │──▶│ PostgreSQL │ │
│ │ Machine │ │ Test Host │ │
│ └────────────┘ └────────────┘ │
│ │
│ No Production Systems │
└───────────────────────────────────┘
セキュリティツールを検証する際は、使い捨てのPostgreSQLインストールまたは専用のラボ環境を使用してください。
このプロジェクトは防御的なセキュリティ研究、脆弱性評価、および許可されたテストのみを目的としています。
含まれる手法は、脆弱性を武器化せずに、潜在的に脆弱なPostgreSQLインストールを特定するように設計されています。
所有していないシステム、または評価する明示的な許可がないシステムに対してこのプロジェクトを使用しないでください。
著者は、このプロジェクトから生じる誤用、損害、データ損失、サービス中断、または不正アクセスについて責任を負いません。
サイバーセキュリティ研究 • 脆弱性分析 • 防御的ツール開発
Research → Verify → Document → Remediate
貢献は歓迎します。
改善を提出する際は:
このプロジェクトがあなたのセキュリティ研究に役立ったなら、⭐を付けることを検討してください