خانه » CVE-2025-14180

CVE-2025-14180

NULL Pointer Dereference in PDO quoting

توسط Vulnerbyte Alerts
249 بازدید
هشدار سایبری CVE-2025-14180

چکیده

آسیب‌پذیری ارجاع به اشاره‌گرتهی (NULL Pointer Dereference) در درایور PDO PostgreSQL زبان PHP شناسایی شده است. در شرایطی که گزینه PDO::ATTR_EMULATE_PREPARES فعال باشد، ارسال توالی کاراکتر نامعتبر به عنوان پارامتر یک دستورات آماده‌ باعث می‌شود تابع PQescapeStringConn از کتابخانه libpq مقدار NULL برگرداند. این امر منجر به ارجاع به اشاره‌گر تهی در تابع pdo_parse_params() شده و فرآیند PHP کرش می‌کند. نتیجه این کرش، ایجاد انکار سرویس (DoS) و اختلال در دسترس‌پذیری سرور است.

توضیحات

آسیب‌پذیری CVE-2025-14180 ناشی از ارجاع به اشاره‌گر تهی (NULL Pointer Dereference) مطابق با CWE-476 در درایور PDO PostgreSQL زبان PHP است که به دلیل عدم بررسی مقدار بازگشتی NULL در فرآیند نقل‌قول‌گذاری رشته‌ها (String Quoting) رخ می‌دهد و می‌تواند منجر به کرش کامل فرآیند PHP شود.

در شرایطی که گزینه شبیه سازی دستورات آماده (PDO::ATTR_EMULATE_PREPARES) فعال باشد، PHP به‌جای استفاده از دستورات آماده واقعی سمت سرور (Server-side Prepared Statements) در PostgreSQL، پارامترهای ورودی را در سمت کلاینت و به‌صورت دستی پردازش می‌کند. در این حالت، مقادیر پارامترها پیش از ارسال به پایگاه‌داده، توسط تابع نقل‌قول‌گذاری (Quoting Function) پردازش می‌شوند.

اگر یکی از پارامترهای ورودی شامل توالی بایت نامعتبر برای رمزگذاری PostgreSQL باشد (برای مثال بایت \x99 که در رمزگذاری UTF-8 معتبر نیست) تابع PQescapeStringConn از کتابخانه libpq هنگام پردازش این مقدار با خطا مواجه می‌شود و به‌جای بازگرداندن رشته نقل‌قول‌شده، مقدار NULL را برمی‌گرداند.

در نسخه‌های آسیب‌پذیر PHP، این مقدار NULL بدون هیچ‌گونه بررسی یا اعتبارسنجی اضافی، مستقیماً به فیلد plc->quoted اختصاص داده می‌شود. در ادامه، تابع pdo_parse_params() هنگام تلاش برای محاسبه طول رشته با استفاده از ماکرو ZSTR_LEN(plc->quoted)، اقدام به ارجاع به اشاره‌گر تهی می‌کند. این وضعیت منجر به بروز خطای Segmentation Fault و در نهایت کرش کامل فرآیند PHP می‌شود.

بهره‌برداری از این آسیب‌پذیری از راه دور امکان‌پذیر است، مهاجم بدون نیاز به احراز هویت و در صورت فراهم بودن شرایط لازم می‌تواند با ارسال یک درخواست HTTP حاوی پارامتر مخرب برای مثال مقدار username=alice\x99، به برنامه‌ای که از PDO PostgreSQL با شبیه‌سازی دستورات آماده استفاده می‌کند، باعث توقف فرآیند PHP شود. این حمله مستلزم آن است که برنامه از گزینه Emulate Prepares استفاده کند و داده مخرب بتواند از فیلترهای ورودی یا تجهیزات امنیتی مانند فایروال اپلیکیشن وب (WAF) عبور کند.

پیامد اصلی این آسیب‌پذیری، تأثیر شدید بر دسترس‌پذیری سامانه است و منجر به انکار سرویس (DoS) می‌شود. در محیط‌هایی که PHP در حالت (ZTS) Zend Thread Safety اجرا می‌شود، کرش یک فرآیند می‌تواند باعث توقف هم‌زمان تمام درخواست‌هایی شود که در همان فرآیند در حال پردازش هستند و در نتیجه اختلال گسترده‌تری در سرویس ایجاد می‌کند.

برای این آسیب‌پذیری، کد اثبات مفهوم (PoC) به‌صورت عمومی منتشر شده است که نشان می‌دهد با فعال بودن شبیه‌سازی دستورات آماده و ارسال پارامتر حاوی توالی بایت نامعتبر به درایور PDO PostgreSQL، مقدار NULL در فرآیند نقل‌قول‌گذاری تولید شده و در نهایت با ارجاع به اشاره‌گر تهی، خطای Segmentation Fault رخ داده و انکار سرویس ایجاد می‌شود.

این آسیب‌پذیری در نسخه‌های متعددی از PHP وجود داشته و با انتشار نسخه‌های جدید به‌طور کامل پچ شده است. به‌روزرسانی PHP به نسخه‌های امن توصیه‌شده، تنها راهکار قطعی برای جلوگیری از بهره‌برداری از این ضعف امنیتی محسوب می‌شود.

CVSS

Score Severity Version Vector String
8.2 HIGH 4.0 CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

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

Versions Product
affected from 8.1.* before 8.1.34

affected from 8.2.* before 8.2.30

affected from 8.3.* before 8.3.29

affected from 8.4.* before 8.4.16

affected from 8.5.* before 8.5.1

PHP

لیست محصولات بروز شده

Versions Product
8.1.34

8.2.30

8.3.29

8.4.16

8.5.1

PHP

استفاده محصول در ایران

در این جدول، تعداد صفحات ایندکس‌شده در گوگل با دامنه .ir که PHP را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.

Approx. Usage in .ir Domain via Google

(Total Pages)

Search Query (Dork) Product
14,200,000 site:.ir “PHP” PHP

نتیجه گیری

این آسیب‌پذیری با شدت بالا، سرورهای PHP که از درایور PDO PostgreSQL با گزینه شبیه‌سازی دستورات آماده (Emulated Prepares) استفاده می‌کنند را در معرض انکار سرویس از راه دور قرار می‌دهد و می‌تواند دسترس‌پذیری سرور را مختل کند. با توجه به انتشار پچ رسمی، اجرای اقدامات زیر برای جلوگیری از آسیب پذیری و کاهش ریسک، ضروری است:

  • به‌روزرسانی فوری: تمام نصب‌های PHP را در اسرع وقت به نسخه‌های امن 1.34، 8.2.30، 8.3.29، 8.4.16، 8.5.1 یا بالاتر به‌روزرسانی کنید. . این اقدام مؤثرترین و قطعی‌ترین راهکار برای رفع آسیب‌پذیری است و باید در اولویت قرار گیرد. سایر اقدامات نقش مکمل را دارند و می‌توانند به کاهش ریسک این آسیب پذیری و مقابله با حملات مشابه کمک کنند.
  • غیرفعال کردن Emulate Prepares: در صورت امکان، گزینه PDO::ATTR_EMULATE_PREPARES را غیرفعال کرده و از دستورات آماده سمت سرور استفاده کنید تا پردازش پارامترها امن‌تر و بدون خطا انجام شود.
  • اعتبارسنجی سختگیرانه ورودی: تمام داده‌های ورودی کاربر باید پیش از ارسال به PDO اعتبارسنجی شوند. استفاده از توابع چندبایتی (Multibyte Functions) مانند mb_check_encoding یا iconv برای اطمینان از معتبر بودن رمزگذاری نظیر UTF-8 توصیه می‌شود. بایت‌ها یا توالی‌های نامعتبر باید رد یا جایگزین شوند.
  • نظارت بر کرش‌ها: لاگ‌های PHP، وب‌سرور و سیستم‌عامل (error_log syslog,) را به‌صورت مستمر برای شناسایی خطاهای Segmentation Fault مانیتور کنید. همچنین استفاده از ابزارهایی مانند Supervisor، systemd یا PHP-FPM برای راه‌اندازی مجدد خودکار فرآیندها پس از کرش توصیه می‌شود.
  • استفاده از لایه حفاظتی تکمیلی: از فایروال اپلیکیشن وب (WAF) برای فیلتر کردن درخواست‌های حاوی بایت‌های مشکوک یا کاراکترهای غیرمجاز استفاده کنید.
  • تست و اسکن دوره‌ای: اپلیکیشن‌ها را با ابزارهای fuzzing (مانند Burp Intruder یا sqlmap) برای شناسایی ورودی‌های نامعتبر بررسی کنید.
  • آموزش تیم توسعه: توسعه‌دهندگان باید نسبت به ریسک‌های استفاده از شبیه‌سازی دستورات آماده و اهمیت اعتبارسنجی ورودی‌ها در PDO آگاه شوند تا از تکرار چنین ضعف‌هایی در آینده جلوگیری شود.

اجرای سریع به‌روزرسانی همراه با سایر اقدامات پیشگیرانه، ریسک ناشی از این آسیب‌پذیری را به حداقل رسانده و پایداری سرورهای PHP را تضمین می‌کند.

امکان استفاده در تاکتیک های Mitre Attack (در زمان اجرای حمله )

Initial Access (TA0001)
در بهره‌برداری از CVE-2025-14180، دسترسی اولیه از طریق یک مسیر کاملاً رایج و بدون نیاز به احراز هویت خاص شکل می‌گیرد؛ به این معنا که مهاجم تنها باید قادر باشد ورودی کنترل‌شده‌ای را به یک برنامه مبتنی بر PHP ارسال کند که از درایور PDO PostgreSQL استفاده می‌کند. شرط اساسی این مرحله آن است که گزینه PDO::ATTR_EMULATE_PREPARES در برنامه فعال باشد، ورودی کاربر مستقیماً یا غیرمستقیم به یک دستور آماده منتقل شود و مکانیزم‌های اعتبارسنجی ورودی نتوانند توالی بایت نامعتبر را حذف یا اصلاح کنند. در این وضعیت، مهاجم بدون عبور از کنترل‌های امنیتی پیچیده، صرفاً با استفاده از مسیرهای استاندارد تعامل با برنامه وارد چرخه حمله می‌شود.

Execution (TA0002)
در مرحله اجرای حمله، پردازش پارامتر ورودی حاوی توالی بایت نامعتبر آغاز می‌شود و منطق شبیه‌سازی دستورات آماده در سمت کلاینت فعال می‌گردد. این تاکتیک زمانی محقق می‌شود که PHP وظیفه نقل‌قول‌گذاری پارامترها را بر عهده گرفته و به تابع مربوطه در کتابخانه libpq متکی باشد. در صورت بازگشت مقدار NULL از تابع نقل‌قول‌گذاری و نبود بررسی ایمنی در ادامه مسیر کد، عملیات پردازش به نقطه‌ای می‌رسد که ارجاع به اشاره‌گر تهی انجام می‌شود و خطای بحرانی در زمان اجرا رخ می‌دهد.

Discovery (TA0007)
در سناریوهای تکرارشونده، مهاجم می‌تواند از رفتار متفاوت برنامه در مواجهه با ورودی‌های خاص برای شناسایی وضعیت داخلی آن استفاده کند. این مرحله زمانی شکل می‌گیرد که پاسخ‌های سرویس یا قطع ناگهانی ارتباط، نشان‌دهنده نوع درایور پایگاه‌داده، فعال بودن شبیه‌سازی دستورات آماده یا نحوه مدیریت خطاها باشد. چنین نشانه‌هایی به مهاجم امکان می‌دهد بدون دسترسی مستقیم به پیکربندی، درباره شرایط لازم برای تداوم حمله و میزان اثرگذاری آن قضاوت کند.

Impact (TA0040)
پیامد نهایی این آسیب پذیری ایجاد انکار سرویس و اختلال جدی در دسترس‌پذیری سامانه است. کرش فرآیند PHP به دلیل ارجاع به اشاره‌گر تهی می‌تواند باعث توقف ناگهانی پردازش درخواست‌ها شود و در محیط‌هایی که چندین درخواست در یک فرآیند مشترک اجرا می‌شوند، دامنه اثرگذاری فراتر از یک کاربر گسترش یابد. این وضعیت به‌ویژه در سامانه‌های پرترافیک یا سرویس‌های حیاتی، منجر به قطع سرویس، نارضایتی کاربران و کاهش اعتماد به پایداری زیرساخت می‌شود، بدون آنکه نیاز به نفوذ عمیق یا دستکاری داده‌ها وجود داشته باشد.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2025-14180
  2. https://www.cvedetails.com/cve/CVE-2025-14180/
  3. https://github.com/php/php-src/security/advisories/GHSA-8xr5-qppj-gvwj
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-14180
  5. https://vuldb.com/?id.338540
  6. https://cwe.mitre.org/data/definitions/476.html

همچنین ممکن است دوست داشته باشید

پیام بگذارید