آسیبپذیری Squidbleed از نوع خواندن خارج از محدوده حافظه هیپ (Heap Over-Read) در وب پروکسی Squid است که میتواند باعث افشای درخواستهای HTTP بدون رمزنگاری کاربران شود. این دادههای افشا شده میتوانند شامل اطلاعات حساسی مانند دادههای احراز هویت و توکنهای نشست باشند و در اختیار هر کاربری قرار گیرند که مجاز به استفاده از همان پروکسی است.
محققان شرکت Calif.io در ژوئن 2026 آسیبپذیری Squidbleed را با شناسه CVE-2026-47729 افشا کردند. این ضعف امنیتی با الهام از آسیبپذیری مشهور Heartbleed نامگذاری شده و ریشه آن به تغییر در مکانیزم تجزیهگر (Parser) پروتکل FTP در سال 1997 بازمیگردد، تغییری که همچنان در پیکربندی پیشفرض نرمافزار Squid باقی مانده است.
آسیبپذیری Squidbleed در سناریوی کلاینت مورد اعتماد
آسیبپذیری Squidbleed از نگاه Squid در قالب یک سناریوی کلاینت مورد اعتماد (trusted client) قابل سوءاستفاده است؛ به این معنا که مهاجم از پیش مجوز استفاده از پروکسی را دارد و یک کاربر ناشناس در سطح اینترنت محسوب نمیشود. این مدل تهدید با معماری رایج Squid در شبکههای اشتراکی مانند سازمانها، مدارس و شبکههای عمومی Wi-Fi همخوانی دارد؛ جایی که مهاجم عملاً یکی از کاربران عادی همان پراکسی است.
از سوی دیگر، دامنه افشای داده محدود به ترافیکی است که Squid توانایی مشاهده و پردازش آن را دارد. ارتباطات استاندارد HTTPS از طریق یک تونل رمزنگاریشده CONNECT عبور میکنند و محتوای داخلی آنها برای Squid قابل مشاهده نیست؛ در نتیجه، دادههای در معرض افشا عمدتاً شامل ترافیک HTTP بدون رمزنگاری و همچنین سناریوهایی هستند که در آنها TLS خاتمه مییابد و Squid اقدام به رمزگشایی و بررسی ترافیک میکند.
همچنین مهاجم نیاز دارد که پروکسی بتواند به یک سرور FTP تحت کنترل او روی پورت 21 متصل شود. هم پروتکل FTP و هم پورت 21 بهصورت پیشفرض در بسیاری از پیکربندیها فعال هستند.
چگونگی افشای داده
آسیبپذیری Squidbleed در بخش تجزیهگر لیست دایرکتوری FTP در Squid قرار دارد. این بخش برای پشتیبانی از سرورهای قدیمی NetWare که خروجی لیست فایلها را با فاصلههای اضافی (Whitespace Padding) تولید میکردند، از یک لوپ (Loop) برای نادیده گرفتن کاراکترهای فاصله استفاده میکند:
while (strchr(w_space, *copyFrom)) ++copyFrom;در سناریوی حمله، اگر سرور FTP مهاجم یک خط لیستینگ (Listing Line) ارسال کند که بلافاصله پس از برچسب زمانی (timestamp) پایان یابد و هیچ نام فایلی در آن وجود نداشته باشد، اشارهگر copyFrom روی کاراکتر پایانی رشته یعنی Null Terminator قرار میگیرد. در این حالت، تابع strchr این کاراکتر Null را نیز بهعنوان بخشی از رشته جستوجو در نظر میگیرد و بهجای مقدار NULL یک اشارهگر معتبر برمیگرداند؛ در نتیجه این لوپ متوقف نمیشود.
این عملکرد باعث میشود پردازش از انتهای بافر عبور کرده و منجر به خواندن خارج از محدوده حافظه شود. در نهایت تابع xstrdup دادههای باقیمانده در حافظه را بهعنوان نام فایل استخراج کرده و به مهاجم بازمیگرداند.
دادههای افشاشده بخش اصلی این آسیبپذیری Squidbleed را تشکیل میدهند. Squid از بافرهای حافظه آزادشده بدون پاکسازی مجدد استفاده میکند؛ در نتیجه یک بافر 4 کیلوبایتی که پیشتر حاوی درخواست HTTP یک کاربر قربانی بوده، همچنان بخش عمدهای از آن دادهها را در حافظه نگه میدارد. زمانی که یک خط کوتاه FTP ارسال میشود، تنها چند بایت ابتدایی بازنویسی میشود و در نتیجه عملیات خواندن خارج از محدوده باقیمانده دادهها را استخراج میکند.
در دموی منتشرشده توسط Calif، یک هدر Authorization (هدر مجوز دسترسی) از حافظه کاربری که همان پروکسی را بهاشتراک میگذارد، استخراج میشود؛ دادهای که میتواند برای جعل هویت آن کاربر مورد استفاده قرار گیرد. همچنین کد اثبات مفهوم (PoC) بهصورت عمومی منتشر شده و طبق گزارشها، تا زمان نگارش این مطلب هیچ موردی از سوءاستفاده عملی از این آسیبپذیری مشاهده نشده است.
وضعیت پچ و نسخههای تحت تأثیر
در مورد نسخههای پچشده Squid همچنان ابهام و اختلاف نظر وجود دارد. در ابتدا اعلام شد که نسخه Squid 7.6 شامل پچ امنیتی است، اما بعداً توسعهدهنده اصلی پروژه تأیید کرد که پچ اصلی در نسخه Squid 7.7 اعمال شده است. با این حال، برخی توزیعهای لینوکسی مانند Debian ممکن است این اصلاحیه را به نسخههای قبلی از طریق بکپورت(Backport) منتقل کرده باشند.
راهکار رفع آسیبپذیری Squidbleed ساده است و شامل افزودن یک بررسی Null Terminator (کاراکتر پایان رشته) پیش از فراخوانیهای آسیبپذیر strchr در فایل FtpGateway.cc میشود.
این اصلاحیه ابتدا در شاخه توسعه (Development Branch) در ماه آوریل و سپس در شاخه نسخه v7 در ماه می ادغام شده است.
لازم به ذکر است که نسخه Squid 7.6 بهصورت جداگانه آسیبپذیری CVE-2026-50012 از نوع سرریز هیپ در cache_digest (Heap Overflow in cache_digest) را نیز پچ میکند.
نحوه جلوگیری از آسیبپذیری Squidbleed
پژوهشگران امنیتی برای کاهش ریسک این آسیبپذیری چند اقدام کلیدی را توصیه میکنند:
- اعمال پچ امنیتی Squid و اطمینان از صحت اعمال آن در کد منبع
- بررسی وجود اصلاحیه در فایل cc
- بررسی اعمال شدن پچهای بکپورت در توزیعهای لینوکسی
- غیرفعالسازی کامل پروتکل FTP در تنظیمات پروکسی
در عمل، سادهترین و مؤثرترین راهکار غیرفعالسازی FTP است؛ زیرا در بسیاری از شبکهها استفاده از این پروتکل بسیار محدود است و حتی مرورگر Chromium نیز سالهاست از FTP پشتیبانی نمیکند.
ارزیابی ریسک امنیتی
شرکت SUSE شدت آسیبپذیری Squidbleed را در سطح متوسط (Moderate) ارزیابی کرده و برای آن امتیاز CVSS 6.5 در نظر گرفته است.
دلایل این امتیاز:
- نیاز مهاجم به دسترسی به پروکسی با سطح دسترسی پایین (Low Privileges)
- تأثیر مستقیم بر محرمانگی (Confidentiality)
- عدم تأثیر مستقیم بر یکپارچگی (Integrity) یا دسترسپذیری (Availability)
با این حال در شبکههای سازمانی بزرگ، همین سطح دسترسی میتواند منجر به سرقت نشستهای کاربری و اطلاعات احراز هویت شود.
نقش هوش مصنوعی در شناسایی این آسیبپذیری
طبق اعلام پژوهشگران شرکت Calif.io، مدل Claude Mythos Preview از شرکت Anthropic که زیرساخت پروژه Glasswing را تشکیل میدهد، توانسته است این عملکرد غیرعادی در تابع strchr را بهسرعت شناسایی کند.
این موضوع نمونهای دیگر از نقش روبهرشد عاملهای هوش مصنوعی (AI Agents) در شناسایی باگهای پنهان و پیچیده در تجزیهگرها محسوب میشود؛ مشابه مواردی که پیشتر در پروژههایی مانند FFmpeg نیز گزارش شده بودند.
همچنین پژوهشگران هشدار دادهاند که احتمال دارد چنین الگوهای آسیبپذیری در بخشهای دیگری از کد قدیمی Squid نیز وجود داشته باشد.