آسیب‌پذیری Ghostscript با شناسهٔ CVE-2026-39919: چطور یک PDF می‌تواند سرور را تصاحب کند و چه کسی واقعاً در خطر است

بچه‌گربه‌ای که زیر پارچه‌ای سفید روی میزی در اتاق سرور شبیه روح کوچکی شده و زنی گوشهٔ پارچه را بالا می‌زند

بیشتر مردم هرگز Ghostscript را نصب نکرده‌اند و نمی‌دانند که از آن استفاده می‌کنند. با این حال، این برنامه پشت صحنهٔ شمار بسیار زیادی از سرورها کار می‌کند: همین برنامه است که در وردپرس، سامانه‌های مدیریت اسناد، درگاه‌های ایمیل و سرویس‌هایی مثل «PDF خود را آنلاین فشرده کنید» فایل PDF بارگذاری‌شده را به تصویر بندانگشتی تبدیل می‌کند. در سپتامبر ۲۰۲۶ آسیب‌پذیری‌ای در آن برطرف شد که به‌واسطهٔ آن یک PDF دستکاری‌شده می‌تواند به اجرای کد بیگانه روی دستگاهی بینجامد که فایل را پردازش می‌کند.

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

به‌طور خلاصه

  • آسیب‌پذیری: CVE-2026-39919، سرریز بافر در heap هنگام پردازش تصاویر JPEG 2000 در Ghostscript. یک PDF با تصویری که مخصوص این کار ساخته شده کافی است.
  • نسخه‌های آسیب‌پذیر: به گفتهٔ کاشفان، از 9.21 تا 10.07.1 (رکورد CVE به‌طور کلی می‌گوید «پیش از 10.08.0»).
  • اصلاحیه: Ghostscript 10.08.0 که در ۸ سپتامبر ۲۰۲۶ منتشر شد. توزیع‌های لینوکس اصلاحیه را به شماره‌نسخه‌های قدیمی‌تر هم منتقل می‌کنند، پس آنچه اهمیت دارد بازبینی کامل بسته است، نه چیزی که gs --version نشان می‌دهد.
  • شدت: طبق رکورد CVE در CVSS 3.1 نمرهٔ 9.8 و طبق Red Hat نمرهٔ 7.8 («Moderate»). هر دو عدد صادقانه‌اند؛ فقط سناریوهای متفاوتی را توصیف می‌کنند.
  • حملات واقعی: تاکنون هیچ موردی تأیید نشده است. اکسپلویتی که کار کرد در آزمایشگاه ساخته شد و برای یک بیلد مشخص تنظیم شده بود.
  • -dSAFER محافظت نمی‌کند. این خطا حتی با فعال بودن سندباکس هم رخ می‌دهد.

چه اتفاقی افتاد

این آسیب‌پذیری را Wordfence، شرکتی که در امنیت وردپرس فعالیت می‌کند، با Argus، سامانهٔ آزمون مبتنی بر هوش مصنوعی خود، پیدا کرد. تاریخ آن ۲۳ اوت ۲۰۲۶ بود، هنگام بازبینی امنیتی وردپرس 7.1. این ابزار مسیر یک فایل بارگذاری‌شده را فراتر از کد PHP که آن را پذیرفته بود دنبال کرد: از افزونهٔ Imagick، از ImageMagick، تا Ghostscript و رمزگشای JPEG 2000 در پایین‌ترین لایه.

Artifex، شرکت توسعه‌دهندهٔ Ghostscript، گزارش را روز بعد تأیید کرد و در ۸ سپتامبر نسخهٔ 10.08.0 را همراه با اصلاحیه منتشر کرد. رکورد CVE در ۱۵ سپتامبر منتشر شد. Wordfence جزئیات فنی را در ۱۲ اکتبر علنی کرد و یک روز بعد BleepingComputer و دیگر رسانه‌های تخصصی به آن پرداختند.

این خطا چطور کار می‌کند

برای فهمیدنش لازم نیست زبان C بلد باشید. تصویر شبکه‌ای از نمونه‌هاست. JPEG 2000 اجازه می‌دهد اجزای یک تصویر (مثلاً روشنایی و شفافیت) وضوح متفاوتی داشته باشند و هر نمونه کمتر از ۸ بیت جا بگیرد. با نمونه‌های ۲ بیتی، چهار نمونه در یک بایت جا می‌شوند.

در مثالی که پژوهشگران توصیف کرده‌اند، یک ردیف تصویر ۱۰۲۴ نمونه از این دست دارد. به‌صورت فشرده ۲۵۶ بایت می‌شوند و Ghostscript هم به‌درستی ۲۵۶ بایت رزرو می‌کند. اما وقتی هر دو شرط بالا هم‌زمان برقرار باشند، حلقه‌ای که ردیف را پر می‌کند به‌جای جا دادن چهار نمونه در هر بایت، برای هر نمونه یک بایت کامل می‌نویسد. ۱۰۲۴ بایت در بافری ۲۵۶ بایتی می‌نشیند. ۷۶۸ بایت اضافی هر ردیف روی حافظه‌ای نوشته می‌شود که Ghostscript داده‌های مدیریتی خودش را در آن نگه می‌دارد. و چون این بایت‌ها از خود تصویر می‌آیند، محتوایشان را سازندهٔ فایل انتخاب می‌کند.

قفسه‌های چوبی نامه در یک ادارهٔ پست قدیمی که در هر خانه‌اش بچه‌گربه‌ای نشسته و در انتهای ردیف بچه‌گربه‌ها روی زمین می‌ریزند

این همان مسیر کلاسیک از «برنامه از کار افتاد» تا «برنامه همان کاری را کرد که مهاجم می‌خواست» است. سیستم‌های امروزی این مسیر را بسیار دشوارتر کرده‌اند (چینش تصادفی حافظه و محافظت‌های دیگر)، اما آن را کاملاً نبسته‌اند.

PDF در وردپرس چطور به Ghostscript می‌رسد

وردپرس پیش‌نمایش PDF را خودش رسم نمی‌کند. از نسخهٔ 4.7 می‌تواند تصویری از صفحهٔ اول سند بارگذاری‌شده بسازد و این کار را با کمک برنامه‌های دیگر انجام می‌دهد. زنجیره چنین است:

WordPress → افزونهٔ PHP به نام Imagick → ImageMagick → Ghostscript

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

حمله از این مسیر مستلزم آن است که هر چهار شرط هم‌زمان برقرار باشند:

  1. کسی از بیرون (به‌صورت ناشناس یا با حسابی با دسترسی کم) بتواند PDF بارگذاری کند،
  2. سایت برای آن فایل پیش‌نمایش یا تصویر بندانگشتی درخواست کند،
  3. روی سرور Imagick یا ابزار دیگری باشد که برای این کار Ghostscript را فراخوانی می‌کند و سیاست ImageMagick خواندن PDF را مجاز بداند،
  4. Ghostscript نصب‌شده اصلاحیه را نداشته باشد.

یک قید مهم: وردپرس در حالت پیش‌فرض اجازه نمی‌دهد بازدیدکنندگان ناشناس در کتابخانهٔ رسانه فایل بارگذاری کنند. مهاجم به افزونه، فرمی با فیلد پیوست یا حسابی نیاز دارد که این راه را باز کند. Wordfence ایمیج رسمی Docker وردپرس را هم بررسی کرد: در آن Ghostscript 10.05.1 آسیب‌پذیر، افزونهٔ Imagick و مسیر فعال پیش‌نمایش PDF وجود داشت. با این حال این ایمیج به‌تنهایی برای یک حملهٔ ناشناس کافی نبود.

یک جزئیات به نفع مهاجم است: وقتی نخستین تلاش برای ساخت پیش‌نمایش شکست بخورد، وردپرس خودکار با تنظیمات دیگری دوباره تلاش می‌کند. بنابراین سه پیوست مخرب یعنی شش بار اجرای Ghostscript. در آزمون Wordfence، فرم همچنان «بارگذاری موفق» نشان می‌داد، در حالی که Ghostscript در پس‌زمینه بی‌صدا از کار می‌افتاد.

این خطای وردپرس یا افزونهٔ فرم نیست. آن‌ها فقط مسیری بودند که فایل از آن به Ghostscript رسید.

در واقع چقدر خطرناک است

این‌جا ارزش دارد کمی مکث کنیم، چون تیترهایی مثل «یک PDF سرور شما را تصاحب می‌کند» فقط نیمی از حقیقت را می‌گویند.

چرا دو نمرهٔ متفاوت. رکورد CVE نمرهٔ 9.8 از ۱۰ (CVSS 3.1) و 9.3 (CVSS 4.0) می‌دهد. این اعداد بدترین حالت را توصیف می‌کنند: برنامه‌ای در دسترس شبکه که بدون ورود به حساب و بدون دخالت انسان PDF می‌پذیرد. Red Hat همین آسیب‌پذیری را 7.8 ارزیابی می‌کند و آن را «Moderate» می‌نامد، چون سناریویی را می‌سنجد که در آن کاربر فایل مخرب را روی رایانهٔ خودش باز می‌کند. هیچ‌کدام از این نمره‌ها اشتباه نیست؛ به پرسش‌های متفاوتی پاسخ می‌دهند.

چند تلاش، چند موفقیت. Wordfence برای بیلد آزمایشگاهی خود دو اکسپلویت کارا ساخت و سپس آن‌ها را ۱۰٬۲۴۰ بار در ده محیط دیگر اجرا کرد: Debian، Ubuntu، Fedora، AlmaLinux، Alpine و کانتینر رسمی وردپرس. حتی یک بار هم موفق نشدند. اما روی بیلدی که برایش ساخته شده بودند، حتی پس از تغییر فونت‌ها، تنظیمات زبان و یکی از کتابخانه‌های پایه‌ای سیستم، همچنان کار کردند؛ هرچند نه در همهٔ تلاش‌ها.

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

با چه دسترسی‌ای. کد مهاجم با حسابی اجرا می‌شود که PDF را پردازش می‌کند، معمولاً حساب وب‌سرور. این به‌طور خودکار root نیست، اما این حساب معمولاً می‌تواند فایل‌های سایت را بخواند، از جمله پیکربندی‌ای که گذرواژهٔ پایگاه داده در آن است.

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

چطور سرور خودتان را بررسی کنید

زنی عینکی پشت لپ‌تاپ و کنارش بچه‌گربه‌ای راه‌راه که با دقت به صفحه خیره شده؛ روی میز یک ذره‌بین هست

اگر به خط فرمان دسترسی دارید، با سه پرسش شروع کنید.

۱. آیا اصلاً Ghostscript این‌جا هست و بازبینی بسته‌اش چیست؟

  • Debian و Ubuntu: dpkg -s ghostscript | grep Version
  • Fedora، RHEL، AlmaLinux: rpm -q ghostscript
  • برای کامل بودن: gs --version، اما این شماره به‌تنهایی چیزی را مشخص نمی‌کند.

چرا شماره کافی نیست؟ Ubuntu 22.04 این آسیب‌پذیری را در بستهٔ 9.55.0~dfsg1-0ubuntu5.14 برطرف کرد که وقتی نسخه‌اش را بپرسید هنوز «9.55.0» پاسخ می‌دهد. Debian 13 اصلاحیه را در 10.05.1~dfsg-1+deb13u2 دارد (اطلاعیهٔ DSA-6516-1). Red Hat اصلاحیه‌های RHEL 10، 9 و 8 را بین ۱ تا ۶ اکتبر منتشر کرد. طبق ردیاب امنیتی Debian، نسخهٔ Debian 12 (bookworm) هنوز آسیب‌پذیر علامت خورده است. همیشه با اطلاعیهٔ توزیع خودتان مقایسه کنید.

دامی در جهت عکس هم هست: نسخهٔ نامزد انتشار 10.08.0 (RC) خود را 10.08.0 معرفی می‌کند اما اصلاحیه را ندارد. دقیقاً همین نسخه روی دستگاه آزمون Wordfence اجرا می‌شد. اگر Ghostscript را از کد منبع ساخته‌اید، مطمئن شوید نسخهٔ نهایی است.

۲. آیا PHP افزونهٔ Imagick دارد؟ php -m | grep -i imagick. در پیشخوان وردپرس: ابزارها ← سلامت سایت ← اطلاعات ← مدیریت رسانه. این فقط نقطهٔ شروع است: نشان می‌دهد Imagick قالب PDF را می‌شناسد یا نه، اما چیزی دربارهٔ وصله شدن Ghostscript نمی‌گوید.

۳. آیا ImageMagick می‌تواند PDF بخواند؟ convert -list format | grep -i pdf (در ImageMagick 7: magick -list format). حروف rw کنار PDF یعنی راه رسیدن به Ghostscript باز است.

کانتینرها: راه‌اندازی دوباره کافی نیست. ایمیج پایهٔ به‌روزشده را بگیرید، بدون لایه‌های کش‌شده دوباره بسازید و دوباره مستقر کنید.

میزبانی اشتراکی: معمولاً خودتان نمی‌توانید این را بررسی کنید. دو پرسش از ارائه‌دهنده بپرسید: آیا بستهٔ Ghostscript روی سرورهایش اصلاحیهٔ CVE-2026-39919 را دارد، و آیا PDFهایی که مشتریان بارگذاری می‌کنند جایی در سامانه‌هایش به پیش‌نمایش تبدیل می‌شوند؟

اگر نمی‌توانید فوراً به‌روزرسانی کنید

  • پذیرفتن PDF از بازدیدکنندگان ناشناس و حساب‌های کم‌دسترسی را متوقف کنید. فایلی که به سرور نرسد، به Ghostscript هم نمی‌رسد.
  • خواندن PDF را در سیاست ImageMagick غیرفعال کنید. در فایل policy.xml (معمولاً در /etc/ImageMagick-6/ یا /etc/ImageMagick-7/) درون بخش <policymap> این خط را اضافه کنید: <policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />. اثر جانبی: وردپرس دیگر تصویر بندانگشتی PDF نمی‌سازد.
  • تعداد فایل در هر ارسال و تعداد دفعات بارگذاری را محدود کنید. این کار تعداد تلاش‌های مهاجم را کم می‌کند، اما چیزی را درست نمی‌کند.
  • تبدیل اسناد را جدا کنید: آن را در سرویسی مستقل اجرا کنید که به رازهای سایت دسترسی نداشته باشد و اتصال شبکهٔ غیرضروری هم نداشته باشد. این کار آسیب را محدود می‌کند، اما آن هم اصلاحیه نیست.

کاری که نباید بکنید: -dSAFER را محافظ ندانید. سندباکس Ghostscript محدود می‌کند که یک سند با قابلیت‌های مستند PostScript چه کارهایی می‌تواند بکند. جلوی خرابی حافظه را نمی‌گیرد و در آزمون‌ها، خطا با سندباکس روشن هم رخ داد. هیچ افزونهٔ وردپرسی نمی‌تواند این را درست کند، چون Ghostscript از سیستم‌عامل یا ایمیج کانتینر می‌آید، نه از وردپرس.

این آسیب‌پذیری را با CVE-2026-65640 اشتباه نگیرید. آن موضوع دیگری است: اجرای کد از راه دور در وردپرس از طریق بارگذاری فایل PostScript که آن هم از Imagick و Ghostscript می‌گذرد، اما به حسابی با اجازهٔ بارگذاری فایل نیاز دارد (معمولاً نقش نویسنده یا بالاتر). این مورد در وردپرس 7.0.4 برطرف شد و اصلاحیه تا شاخهٔ 4.7 به عقب منتقل شد.

این فقط مشکل وردپرس نیست

وردپرس تنها یکی از راه‌های بسیاری است که PDF یک غریبه می‌تواند از آن به Ghostscript برسد. همین موضوع دربارهٔ سامانه‌های مدیریت اسناد، سرورهای چاپ، پردازش صورت‌حساب، تولیدکننده‌های پیش‌نمایش، درگاه‌های ایمیلی که پیوست‌ها را بررسی می‌کنند و APIهای تبدیل فایل هم صدق می‌کند. پرسش همیشه یکی است: آیا این نرم‌افزار PDFهایی را که از کس دیگری رسیده رندر می‌کند؟

جست‌وجوی واژهٔ «Ghostscript» در کد برنامهٔ خودتان شاید هیچ نتیجه‌ای ندهد. معمولاً ImageMagick یا کتابخانهٔ دیگری در میانه است و همان است که Ghostscript را فرا می‌خواند.

این برای فرستادن PDF به اینترنت چه معنایی دارد

این ماجرا روی دیگری هم دارد که کمتر دربارهٔ آن حرف زده می‌شود. سرویس «فشرده‌سازی PDF»، «تبدیل PDF به تصویر» یا «ادغام PDF» در مرورگر دقیقاً همان نوع سروری است که در بالا گفتیم: فایل‌ها را از غریبه‌ها می‌گیرد و از ابزارهایی عبور می‌دهد که آن‌ها را از هم باز می‌کنند و دوباره سر هم می‌کنند. نمی‌دانید سند شما با چه چیزی و با چه نسخه‌ای پردازش می‌شود، یا آیا پس از ۸ سپتامبر به‌روزرسانی شده است. اما می‌دانید که فایل شما دست‌کم مدتی روی همان دستگاهی است که فایل‌های هزاران نفر دیگر هم هست، و برخی از آن‌ها ممکن است دستکاری‌شده باشند.

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

از سر انصاف باید گفت که پردازش محلی هم ذاتاً مصون نیست. اگر خودتان با Ghostscript فایل‌های PDF را فشرده می‌کنید، آن را به 10.08.0 یا جدیدتر به‌روز کنید. مزیت کار آفلاین جای دیگری است: سند هرگز رایانهٔ شما را ترک نمی‌کند و اینکه کدام نسخهٔ نرم‌افزار آن را پردازش کند را خودتان تعیین می‌کنید، نه کسی که هرگز ندیده‌اید.

اگر مرتب PDFها را ادغام، تقسیم یا رمزگذاری می‌کنید یا به Word تبدیل می‌کنید، می‌توانید این کارها را بدون بارگذاری در هیچ جایی انجام دهید. PDF Manipulator رایگان است، روی ویندوز و لینوکس اجرا می‌شود و هر فایل روی رایانهٔ خودتان می‌ماند.

منابع

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا