CVE-2026-84445 در gRPC-Go: سرور xDS با درخواست بدون :authority از پا می‌افتد

/images/grpc-go-cve-2026-84445.png

مسیر exploit این‌جا RCE نیست. یک ایندکس روی اسلایس خالی است، و goroutine مربوط به RPC از panic برنمی‌گردد؛ پس کل پروسه خارج می‌شود.

۸ سپتامبر ۲۰۲۶ این موضوع در GitLab Advisory Database با شناسه CVE-2026-84445 ثبت شد. کلاس ضعف: CWE-129 (اعتبارسنجی نادرست ایندکس آرایه) و CWE-248 (استثنای گرفته‌نشده). advisory گیت‌هاب: GHSA-2v4p-qf9q-27wj.

فقط سرورهایی که با xds.NewGRPCServer() ساخته شده‌اند. این سازنده روی هر RPC یک interceptor مسیریابی xDS می‌گذارد. interceptor برای انتخاب virtual host سراغ هدر :authority می‌رود. ترنسپورت HTTP/2 قبلاً درخواستی را قبول می‌کرد که نه :authority داشت نه Host. آن‌وقت authorities یک اسلایس خالی می‌شد و دسترسی به عنصر اول، index out of bounds و panic.

panic در pipeline اینترسپتور است. یعنی اول handshake ترنسپورت (TLS، mTLS یا ALTS) و برقراری HTTP/2 باید موفق شود، بعد درخواست ساخته‌شده به این منطق برسد.

  • Insecure / TLS معمولی: اگر سرور plaintext یا credential استاندارد بدون چک گواهی کلاینت بپذیرد، مهاجم remote بدون احراز هویت می‌تواند crash بسازد.
  • mTLS / ALTS: مهاجم باید credential معتبر ترنسپورت داشته باشد.

نسخه‌های آسیب‌پذیر طبق GLAD: همه قبل از ۱٫۸۲٫۲؛ از ۱٫۸۳٫۰ تا قبل از ۱٫۸۳٫۲؛ و dev از ۱٫۸۴٫۰-dev تا قبل از ۱٫۸۵٫۰-dev.0.20260825072537-93e31b48545e.

فیکس:

نوت ریلیز ۱٫۸۲٫۲ رفتار جدید را این‌طور نوشته: درخواست بدون هر دو هدر با HTTP 400 و status Internal رد می‌شود، نه با panic. اگر سرویستان روی xDS است، پین ماژول را به یکی از این سه برسانید؛ DoS سطح پروسه برای control-plane معمولاً از «یک RPC بد» گران‌تر تمام می‌شود.

آخرین مطالب