کشف آسیب‌پذیری در پایگاه داده Postgres

کشف آسیب‌پذیری در پایگاه داده Postgres

تاریخ ایجاد

pREST (PostgreSQL REST)  یک  API است که یک برنامه را روی پایگاه داده‌ Postgres  ارائه می‌دهد. در نسخه‌های قبل از 2.0.0-rc3، امکان بروز حمله SQL Injection  وجود دارد. اعتبارسنجی موجود در این نسخه‌ها محافظت کافی در برابر تلاش‌های تزریق را فراهم نمی‌کند.

با فرض اینکه درخواست فقط ستون­های id و task خواسته شود، کوئری تولید شده مانند کوئری زیر خواهد بود:

SELECT "id", "task" FROM

تابع SelectSQL مقادیر پایگاه داده، شِما و جدول را مستقیماً از درخواست دریافت کرده و از آن‌ها برای ساخت بخش بعدی عبارت SQL با استفاده از اتصال ساده‌ی رشته‌ها استفاده می‌کند.

query := config.PrestConf.Adapter.SelectSQL(selectStr, database, schema, table)

// ...

func (adapter *Postgres) SelectSQL(selectStr string, database string, schema string, table string) string {

            return fmt.Sprintf(`%s "%s"."%s"."%s"`, selectStr, database, schema, table)

}

اگر فرض کنیم که درخواست  GET به مسیر زیر ارسال شود:

/db001/api/todos/db001/api/todos

کوئری نهایی چیزی شبیه به این خواهد بود:

SELECT "id", "name" FROM "api"."todos"

این مرحله پردازشی روی مقادیر، به‌ویژه شِما و جدول، انجام می‌دهد که هیچ‌ گونه اعتبارسنجی ورودی روی آن‌ها صورت نمی‌گیرد و در نهایت امکان تزریق SQL  را فراهم می‌کند.

 

محصولات آسیب‌پذیر

نسخه‌های قبل از 2.0.0-rc3

 

توصیه‌های امنیتی

به کاربران توصیه می­شود در صورت استفاده از این نوع API، آن را به نسخه 2.0.0-rc3 به ­روزرسانی نمایند.

 

منبع خبر

 

https://nvd.nist.gov/vuln/detail/CVE-2025-58450

https://github.com/prest/prest/security/advisories/GHSA-p46v-f2x8-qp98