خانه » CVE-2025-14178

CVE-2025-14178

Heap buffer overflow in array_merge()

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

چکیده

آسیب‌پذیری سرریز بافر هیپ (heap buffer overflow) در تابع array_merge() زبان PHP به دلیل سرریز عددی در پیش‌محاسبه تعداد المنت‌های آرایه‌های فشرده (Packed Arrays) رخ می‌دهد. در شرایطی که مجموع المنت‌های آرایه‌های ورودی از محدودیت 32 بیتی یا مقدار HT_MAX_SIZE عبور کند، محاسبات اندازه حافظه به‌درستی انجام نشده و منجر به نوشتن داده خارج از محدوده تخصیص‌یافته در حافظه هیپ می‌شود؛ وضعیتی که می‌تواند باعث خرابی حافظه، کرش پردازش و اختلال در یکپارچگی و در دسترس‌پذیری سرویس گردد.

توضیحات

آسیب‌پذیری CVE-2025-14178 ناشی از ضعف در پیاده‌سازی منطق مدیریت حافظه در تابع داخلی array_merge() زبان برنامه‌نویسی PHP است که در شرایط خاص منجر به سرریز بافر هیپ (Heap Buffer Overflow) می‌شود. این ضعف زمانی بروز می‌کند که array_merge() برای ادغام تعداد زیادی آرایه فشرده (Packed Arrays) مورد استفاده قرار می‌گیرد و مجموع تعداد المنت‌های این آرایه‌ها از محدودیت‌های داخلی موتور PHP، از جمله محدودیت 32 بیتی یا مقدار ثابت HT_MAX_SIZE فراتر رود.

PHP در جریان اجرای تابع array_merge () ، به‌منظور بهینه‌سازی عملکرد، پیش از تخصیص حافظه اقدام به محاسبه تعداد کل المنت‌های آرایه‌های ورودی می‌کند. این پیش‌محاسبه با استفاده از تابع داخلی zend_hash_num_elements انجام می‌شود و نتیجه آن در یک متغیر عددی ذخیره می‌گردد. در سناریوهایی که تعداد کل المنت‌ها بسیار بزرگ باشد، این محاسبه دچار سرریز عددی (CWE-190) می‌شود.

در ادامه، به‌دلیل این سرریز عددی، مقدار محاسبه‌شده برای تخصیص حافظه کمتر از اندازه واقعی موردنیاز خواهد بود. در نتیجه، هنگام کپی المنت آرایه‌ها به ساختار مقصد، عملیات نوشتن فراتر از محدوده حافظه تخصیص‌یافته انجام می‌شود. این عملکرد مصداق نوشتن خارج از محدوده مجاز حافظه (Out-of-Bounds Write) مطابق با CWE-787 است و مستقیماً منجر به وقوع سرریز بافر هیپ می‌شود.

پیامد این آسیب‌پذیری شامل خرابی حافظه (Memory Corruption)، کرش پردازش PHP و انکار سرویس (DoS) است که می‌تواند موجب اختلال جدی در اجرای برنامه‌های مبتنی بر PHP شود. از منظر تأثیر امنیتی، این ضعف بیشترین اثر را بر در دسترس‌پذیری (Availability) سرویس دارد و در برخی شرایط می‌تواند یکپارچگی (Integrity) داده‌ها یا وضعیت پردازش را نیز تحت تأثیر قرار دهد. برای این آسیب‌پذیری کد اثبات مفهومی (PoC) منتشر شده است که نشان می‌دهد با فراهم‌سازی شرایط مناسب در تعداد و اندازه آرایه‌ها، می‌توان سرریز بافر هیپ را به‌صورت قابل‌اعتماد فعال کرد. وجود این PoC عملی‌بودن آسیب‌پذیری را به‌روشنی تأیید می‌کند. این آسیب‌پذیری در نسخه‌های متعددی از PHP وجود داشته و با انتشار نسخه‌های جدید به‌طور کامل پچ شده است. به‌روزرسانی PHP به نسخه‌های امن توصیه‌شده، تنها راهکار قطعی برای جلوگیری از بهره‌برداری از این ضعف امنیتی محسوب می‌شود.

CVSS

Score Severity Version Vector String
6.5 MEDIUM 3.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:H

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

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

نتیجه گیری

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

  • به‌روزرسانی فوری: تمام نصب‌های PHP را در اسرع وقت به نسخه‌های 1.34، 8.2.30، 8.3.29، 8.4.16 ،8.5.1 یا بالاتر به‌روزرسانی کنید. این اقدام مؤثرترین و قطعی‌ترین راهکار برای رفع آسیب‌پذیری است و باید در اولویت قرار گیرد. سایر اقدامات نقش مکمل را دارند و می‌توانند به کاهش ریسک این آسیب پذیری و مقابله با حملات مشابه کمک کنند.
  • محدودسازی ورودی‌ها: از ارسال آرایه‌های بسیار بزرگ یا تعداد زیاد آرایه به تابع array_merge() جلوگیری کنید. در منطق برنامه، پیش از فراخوانی این تابع، تعداد کل المنت‌های ورودی را بررسی و در صورت عبور از آستانه‌های تعریف‌شده، پردازش را متوقف کنید.
  • اعتبارسنجی داده‌های ورودی: در برنامه‌هایی که داده‌های ورودی (مانند خروجی json_decode) برای ساخت آرایه‌ها استفاده می‌شوند، اندازه، عمق و ساختار داده‌ها را محدود کرده و از پردازش داده‌های غیرعادی یا بیش‌ازحد بزرگ جلوگیری نمایید.
  • استفاده از فایروال اپلیکیشن وب (WAF): قوانین فایروال اپلیکیشن وب را برای شناسایی و مسدودسازی درخواست‌هایی حاوی آرایه‌های بزرگ JSON یا پیلودهای مشکوک تنظیم کنید.
  • مانیتورینگ و ثبت لاگ: با استفاده از لاگ‌های سرور، وضعیت PHP-FPM و سامانه‌های تشخیص نفوذ (IDS)، بروز کرش‌های مکرر یا الگوهای غیرعادی پردازش مرتبط با مصرف حافظه را نظارت کنید.
  • اصل حداقل دسترسی: فرآیند PHP را با کمترین سطح دسترسی ممکن اجرا کنید (مثلاً بدون دسترسی root) تا در صورت وقوع خرابی حافظه، دامنه تأثیر آن محدود شود.

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

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

Initial Access (TA0001)
در سناریوی CVE-2025-14178، دسترسی اولیه از طریق ارسال ورودی‌های کنترلی به یک برنامه PHP آسیب‌پذیر شکل می‌گیرد؛ برنامه‌ای که بدون محدودسازی منطقی اندازه داده‌ها، از تابع array_merge() برای پردازش آرایه‌های بزرگ استفاده می‌کند. شرط اساسی در این مرحله آن است که مهاجم بتواند از راه دور و بدون نیاز به احراز هویت، داده‌هایی را به برنامه تزریق کند که مستقیماً به ساخت آرایه‌های فشرده با تعداد بسیار زیاد المنت منجر شوند و این داده‌ها پیش از رسیدن به منطق PHP فیلتر یا محدود نشوند.

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

Impact on Availability Preparation (TA0040 precursor)
در جریان حمله، مهاجم عملاً به دنبال ایجاد شرایط ناپایدار در حافظه است و نیازی به اجرای کد دلخواه یا تغییر منطق برنامه ندارد. شرط مهم این مرحله آن است که فرآیند PHP به‌صورت مداوم درخواست‌ها را در همان حافظه یا همان worker پردازش کند؛ به‌گونه‌ای که بروز یک سرریز هیپ منجر به خرابی حافظه و توقف ناگهانی پردازش شود. این وضعیت معمولاً در سرویس‌هایی که درخواست‌های هم‌زمان و پیوسته دارند، اثر پررنگ‌تری ایجاد می‌کند.

Defense Evasion (TA0005)
از منظر دور زدن مکانیزم‌های دفاعی، این آسیب‌پذیری نیازی به بای‌پس مستقیم کنترل‌های امنیتی متداول ندارد، اما شرط موفقیت آن عبور داده‌های حجیم از لایه‌های کنترلی برنامه یا وب‌سرور است. در صورتی که محدودیت‌هایی مانند max_input_vars یا بررسی‌های منطقی روی اندازه آرایه‌ها اعمال نشده باشد، حمله بدون ایجاد الگوهای کلاسیک تزریق یا کد مخرب، اجرا شده و تشخیص آن برای مکانیزم‌های امنیتی مبتنی بر امضا دشوارتر می‌شود.

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

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2025-14178
  2. https://www.cvedetails.com/cve/CVE-2025-14178/
  3. https://github.com/php/php-src/security/advisories/GHSA-h96m-rvf9-jgm2
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-14178
  5. https://vuldb.com/?id.338542
  6. https://cwe.mitre.org/data/definitions/787.html
  7. https://cwe.mitre.org/data/definitions/190.html

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

پیام بگذارید