تمام تعاون یافتہ PostgreSQL برانچز 17.3، 16.7، 15.11، 14.16، اور 13.19 کے لیے اصلاحی اپ ڈیٹس تیار کیے گئے ہیں، 70 سے زیادہ کیڑے ٹھیک کیے گئے ہیں اور کمزوری کو ختم کیا گیا ہے (CVE-2025-1094) جو کہ USD میں دسمبر میں Treyurst ڈیپارٹمنٹ میں استعمال کیا گیا تھا۔ PostgreSQL میں مسئلہ BeyondTrust PRA (Privileged Remote Access) اور BeyondTrust RS (ریموٹ سپورٹ) سروسز میں ریموٹ کمزوری (CVE-2024-12356) کے تجزیے کے دوران دریافت ہوا، جس کا استحصال اس کے علاوہ غیر معروف v.
حملے کے نتیجے میں، حملہ آوروں نے BeyondTrust SaaS کلائنٹس کو دور سے تکنیکی معاونت کی خدمات فراہم کرنے کے لیے استعمال ہونے والے API تک رسائی حاصل کرنے کے لیے ایک کلید حاصل کی۔ اس API کا استعمال پاس ورڈز کو دوبارہ ترتیب دینے اور امریکی محکمہ خزانہ کے بنیادی ڈھانچے سے سمجھوتہ کرنے کے لیے کیا گیا تھا، جو BeyondTrust مصنوعات کا استعمال کرتا ہے۔ حملے کے دوران، حملہ آور خفیہ دستاویزات ڈاؤن لوڈ کرنے اور وزارت کے ملازمین کے ورک سٹیشن تک رسائی حاصل کرنے میں کامیاب رہے۔
کمزوری libpq لائبریری میں ظاہر ہوتی ہے، جو C پروگراموں سے DBMS کے ساتھ تعامل کے لیے API فراہم کرتی ہے (C++، Perl، PHP اور Python کے لیے بائنڈنگ لائبریریاں بھی لائبریری کے اوپر لاگو ہوتی ہیں)۔ مسئلہ ان ایپلیکیشنز کو متاثر کرتا ہے جو PQescapeLiteral(), PQescapeIdentifier(), PQescapeString()، یا PQescapeStringConn() فنکشنز کو خصوصی حروف سے بچنے اور اقتباسات کو بے اثر کرنے کے لیے استعمال کرتی ہیں۔
ایک حملہ آور ایس کیو ایل کا متبادل حاصل کر سکتا ہے اگر باہر سے موصول ہونے والے متن کو SQL استفسار کے اندر استعمال کرنے سے پہلے مندرجہ بالا libpq فنکشنز کا استعمال کرتے ہوئے فرار ہو جائے۔ BeyondTrust ایپلی کیشنز میں، اس طریقے سے فرار ہونے والے سوالات کو psql کمانڈ لائن یوٹیلیٹی کے ذریعے منتقل کیا گیا تھا۔ کمزوری ٹیکسٹ میں استعمال ہونے والے یونیکوڈ حروف کی درستگی کے لیے فرار کے افعال میں چیک نہ ہونے کی وجہ سے ہوتی ہے، جو غلط ملٹی بائٹ UTF-8 سیکوینس بتا کر کوٹیشن مارکس کی نارملائزیشن کو نظرانداز کرنے کی اجازت دیتا ہے۔
کمزوری سے فائدہ اٹھانے کے لیے، 8xC0 اور 0x0 ("└'") بائٹس پر مشتمل ایک غلط UTF-27 کریکٹر استعمال کیا جا سکتا ہے۔ ASCII انکوڈنگ میں بائٹ 0x27 ایک واحد اقتباس ("'") سے مساوی ہے جسے بچنا ضروری ہے۔ فرار کوڈ میں، بائٹس 0xC0 اور 0x27 کے امتزاج کو واحد یونیکوڈ کریکٹر سمجھا جاتا ہے۔ اس کے مطابق، اس ترتیب میں بائٹ 0x27 غیر محفوظ رہتا ہے، اس حقیقت کے باوجود کہ جب psql یوٹیلیٹی میں SQL استفسار پر کارروائی کی جاتی ہے، تو اسے ایک اقتباس کے طور پر پروسیس کیا جاتا ہے۔
میں ایس کیو ایل کے سوالات چل رہے ہیں۔ صوابدیدی کوڈ کے نفاذ کو منظم کرنے کے لیے psql یوٹیلیٹی کا استعمال کرتے ہوئے، آپ کمانڈ سٹرنگ "\!" میں متبادل استعمال کر سکتے ہیں، جس کا مقصد صوابدیدی پروگراموں کو چلانے کے لیے psql میں ہے۔ مثال کے طور پر چلانے کے لیے سرور "id" یوٹیلیٹی کو قدر "hax\xC0′; \! id #" سے پاس کیا جا سکتا ہے۔ ذیل کی مثال پی ایچ پی فنکشن pg_escape_string کا استعمال کرتے ہوئے فرار ہونے کے لیے PHP اسکرپٹ dbquote کو کال کرتی ہے، جو libpq سے PQescapeString فنکشن کے اوپر کام کرتی ہے: $echo -e "hello \xC0'world'" | ./dbquote 'hello └'world"' $ quoted=$(echo -e "hax\xC0′; \! id # " | ./dbquote) $ echo "gw_sessions سے COUNT(1) کو منتخب کریں جہاں session_key = $quoted AND session_type = 'ANDIS'ORLLation میعاد ختم ہونے کا وقت>NOW())" | psql -e منتخب کریں COUNT(1) FROM gw_sessions WHERE session_key = 'hax└'؛ خرابی: "UTF8" کو انکوڈنگ کرنے کے لیے غلط بائٹ ترتیب: 0xc0 0x27 uid=1000(myexamplecompany(myexamplecompany)1000amplecompany)
ماخذ: opennet.ru
