PostgreSQL BeyondTrust ጥቃት ላይ ጥቅም ላይ የሚውል ተጋላጭነትን ያስተካክላል

በሁሉም የሚደገፉ የ PostgreSQL ቅርንጫፎች 17.3፣ 16.7፣ 15.11፣ 14.16 እና 13.19፣ ከ70 በላይ ስህተቶችን በማስተካከል እና በዩኤስ ዲፓርትመንት ዘግይቶ ትሬስትሩስት ውስጥ በጥቃቱ ወቅት ጥቅም ላይ የዋለውን ተጋላጭነት (CVE-2025-1094) በማስወገድ የማስተካከያ ዝማኔዎች ተፈጥረዋል። በPostgreSQL ውስጥ ያለው ችግር የርቀት ተጋላጭነትን (CVE-2024-12356) BeyondTrust PRA (Privileged Remote Access) እና BeyondTrust RS (የርቀት ድጋፍ) አገልግሎቶችን በሚተነተንበት ወቅት ተገኝቷል፣ ብዝበዛውም ከዚህ ቀደም ያልታወቀ (0-ቀን) በlibp ውስጥ ያለውን ተጋላጭነት ይጨምራል።

በጥቃቱ ምክንያት አጥቂዎቹ ለBeyondTrust SaaS ደንበኞች በርቀት የቴክኒክ ድጋፍ አገልግሎት ለመስጠት የሚያገለግለውን ኤፒአይ ለመድረስ የሚያስችል ቁልፍ ማግኘት ችለዋል። ይህ ኤፒአይ የይለፍ ቃሎችን ዳግም ለማስጀመር እና የBeyondTrust ምርቶችን የሚጠቀመውን የአሜሪካ የግምጃ ቤት መሠረተ ልማት ለማበላሸት ጥቅም ላይ ውሏል። በጥቃቱ ወቅት ጥቃት አድራሾቹ ሚስጥራዊ ሰነዶችን ማውረድ እና የሚኒስቴር መስሪያ ቤቱን ሰራተኞች የስራ ቦታዎች ማግኘት ችለዋል።

ተጋላጭነቱ በlibpq ቤተ-መጽሐፍት ውስጥ ይታያል፣ ይህም ከዲቢኤምኤስ ከሲ ፕሮግራሞች ጋር መስተጋብር ለመፍጠር ኤፒአይ ይሰጣል (የ C++፣ Perl፣ PHP እና Python ቤተመፃህፍት በላይብረሪው ላይ ይተገበራሉ)። ጉዳዩ ልዩ ቁምፊዎችን ለማምለጥ እና ጥቅሶችን ለማስወገድ PQescapeLiteral()፣ PQescapeIdentifier() PQescapeString() ወይም PQescapeStringConn() ተግባራትን የሚጠቀሙ መተግበሪያዎችን ይነካል።

በSQL መጠይቁ ውስጥ ጥቅም ላይ ከመዋሉ በፊት ከላይ የተጠቀሱትን የlibpq ተግባራት በመጠቀም አጥቂ ከውጪ የተቀበለው ጽሑፍ ካመለጠ የSQL ምትክ ማግኘት ይችላል። በBeyondTrust አፕሊኬሽኖች ውስጥ፣ በዚህ መንገድ ያመለጡ መጠይቆች በpsql የትዕዛዝ መስመር መገልገያ በኩል አልፈዋል። ተጋላጭነቱ የሚከሰተው በጽሁፉ ውስጥ ጥቅም ላይ የዋሉትን የዩኒኮድ ቁምፊዎች ትክክለኛነት ለማረጋገጥ የማምለጫ ተግባራት ላይ ፍተሻ ባለመኖሩ ነው ፣ ይህም የተሳሳቱ ባለብዙ ባይት UTF-8 ቅደም ተከተሎችን በመጥቀስ የጥቅስ ምልክቶችን መደበኛነት ማለፍ ያስችላል።

ተጋላጭነቱን ለመጠቀም፣ ባይት 8xC0 እና 0x0 ("└'") የያዘ ልክ ያልሆነ UTF-27 ቁምፊ መጠቀም ይቻላል። ባይት 0x27 በASCII ኢንኮዲንግ ማምለጥ ካለበት ነጠላ ጥቅስ ("") ጋር ይዛመዳል። በማምለጫ ኮድ ውስጥ የባይት 0xC0 እና 0x27 ጥምረት እንደ አንድ የዩኒኮድ ቁምፊ ይቆጠራል። በዚህ መሠረት ባይት 0x27 ምንም እንኳን በ psql መገልገያ ውስጥ የ SQL መጠይቅ ሲሰራ እንደ ጥቅስ ቢሰራም በእንደዚህ ዓይነት ቅደም ተከተል ውስጥ ሳይገለበጥ ይቆያል።

የSQL ጥያቄዎችን በማስኬድ ላይ የpsql መገልገያን በመጠቀም፣ በ psql ውስጥ የዘፈቀደ ፕሮግራሞችን ለማስኬድ የታሰበውን የዘፈቀደ ኮድ አፈፃፀም ለማደራጀት በትእዛዝ ሕብረቁምፊ ውስጥ ያለውን "\!" ምትክ መጠቀም ይችላሉ። ለምሳሌ፣ ለማስኬድ አገልጋይ የ"id" መገልገያ "hax\xC0′; \! id #" እሴትን ማለፍ ይቻላል። ከዚህ በታች ያለው ምሳሌ የPHP ስክሪፕት dbquoteን ለescape፣ የPHP ተግባር pg_escape_stringን በመጠቀም ይጠራዋል፣ ይህም ከlibpq የመጣው የPQescapeString ተግባር በላይ ይሰራል፡ $ echo -e "hello \xC0'world'" | ./dbquote 'hello └'world"' $ quoted=$(echo -e "hax\xC0′; \! id # " | ./dbquote) $ echo "SELECT COUNT(1) FROM gw_sessions WHERE session_key = $quoted AND session_type = 'sdcust' AND (expiration IS NULL OR expiration>NOW())" | psql -e SELECT COUNT(1) FROM gw_sessions WHERE session_key = 'hax└'; ስህተት: "UTF8"ን ለመቅዳት ልክ ያልሆነ የባይት ቅደም ተከተል: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

ምንጭ: opennet.ru

አስተያየት ያክሉ