
CVE-2025-2945 用のエクスプロイトおよびテストスタンド
これは、CVE-2025-2945に関する私の調査です。このリポジトリには、postgressと脆弱性のあるpgAdminを含むテストスタンド、およびエクスプロイトが含まれています。
参考リンク:
Pythonで書かれたpgAdminバックエンドには、適切なサニタイズが欠如している2つのエンドポイントがあります。エンドポイントは以下の通りです:
/sqleditor/query_tool/download - query_commited パラメータ/cloud/deploy - high_availability パラメータsqleditorのコードを見てみましょう:
for key, value in data.items():
if key == 'query':
sql = value
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
ここでわかることは、query_commitedの値が直接eval()関数に渡されているということです。evalのドキュメントを参照してください。
また、pgacloudのコードも参照してください:
def _create_google_postgresql_instance(self, args):
credentials = self._get_credentials(self._scopes)
service = discovery.build('sqladmin', 'v1beta4',
credentials=credentials)
high_availability = \
'REGIONAL' if eval(args.high_availability) else 'ZONAL'
ここでも同じ問題があります。
このエンドポイントに到達するには、有効な資格情報とpgadminへのアクセスが引き続き必要です。しかし、それにアクセスできる攻撃者は、evalに任意の値を渡すこともできます。これは、任意のPythonワンライナーを実行することと同じです。
悪用は非常に簡単です。exploit/src/main.pyを参照してください。リバースシェルを取得するには、設定を更新することを忘れないでください。
スタンドをセットアップするには、これを実行します:
cd stand
docker compose up -d
これだけです。pgAdminはhttp://localhost:8080でアクセス可能になります。デフォルトの資格情報は次の通りです:
[email protected]
admin
.envファイルとstand/init-db/01-init.sqlは自由に編集してください。
制作:I3r1h0n.