CVE-2026-53495 در containerd: نشت goroutine در CRI ExecSync و DoS سطح نود

/images/containerd-cve-2026-53495.png

kubelet برای liveness و readiness از نوع exec، و برای بعضی lifecycle hookها، مدام از مسیر همگام CRI به نام ExecSync استفاده می‌کند: یک فرمان داخل Container اجرا می‌شود و stdout/stderr برمی‌گردد. روی تقریباً هر کلاستر Kubernetes لینوکسی با containerd، این مسیر ترافیک روزمره است — نه یک گوشهٔ تاریک API.

۴ سپتامبر ۲۰۲۶ پروژه containerd آسیب‌پذیری CVE-2026-53495 را با شناسه GHSA-7jxh-36q5-gcqv منتشر کرد. شدت Moderate است. در GitHub Advisory Database امتیاز CVSS 4.0 = 6.8 ثبت شده؛ بردار CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N. کلاس ضعف: CWE-400 (مصرف کنترل‌نشده منبع).

محدوده اثر صریح است: فقط containerd روی Linux با پلاگین CRI. اگر CRI را استفاده نمی‌کنید یا Container روی Linux اجرا نمی‌کنید، طبق advisory در معرض نیستید. این RCE نیست و CVSS هم Confidentiality/Integrity را صفر گذاشته. خطر عملی Availability نود است: وقتی containerd از بین برود، kubelet دیگر runtime ندارد.

drain که برنمی‌گردد

طبق advisory رسمی: اگر exec probe یا lifecycle hook یک child پس‌زمینه باقی بگذارد، descriptorهای stdout/stderr باز می‌مانند. goroutineهای stdio-drain منتظر بسته شدن آن I/O می‌مانند. فاز تخلیه I/O نه timeout پیش‌فرض دارد، نه لغو با context. آن goroutine برنمی‌گردد.

هر ExecSync بعدی — همان چیزی که kubelet برای پروب‌ها مدام صدا می‌زند — یک نشت دیگر است. حافظه host رشد می‌کند تا OOM killer سراغ خود containerd برود، نه لزوماً همان Container. نود عملاً بدون runtime می‌ماند تا دیمون از نو بالا بیاید. این همان node-level DoS است.

لازم نیست مهاجم از بیرون پکت بفرستد؛ کافی است workload یا تصویر، پروب/hookی داشته باشد که child پس‌زمینه راه بیندازد. Moderate بودن یعنی این CVE در صف RCEهای هفته جا نمی‌گیرد. برای اپراتور نود، از کار افتادن containerd با OOM همان‌قدر عملی است که نود NotReady شود.

گزارش مستقل از XlabAI Team در Tencent Xuanwu Lab (Guannan Wang، Zhanpeng Liu، Jiashuo Liang، Guancheng Li) و از @IamwhatIamSY.

به کدام ریلیز بروید

پچ ۴ سپتامبر، همزمان با advisory:

بازه آسیب‌پذیر طبق GitHub Advisory: همهٔ 1.7 قبل از 1.7.35؛ 2.0 قبل از 2.0.12؛ از 2.2.0 تا قبل از 2.2.8؛ از 2.3.0 تا قبل از 2.3.5. در نوت ریلیز v2.3.5 فیکس با این commit آمده: cri: cancel ExecSync IO drain on context cancellation.

تا ارتقا، تنها workaround رسمی advisory این است: در exec probe و lifecycle hook، child طولانی‌عمر در پس‌زمینه راه نیندازید. اگر نود بی‌دلیل OOM روی پروسه containerd می‌بیند، نسخه runtime و پروب‌های exec را قبل از «فقط حافظه کم است» چک کنید.

آخرین مطالب