پرش به محتوای اصلی

Node2Shell به HTTP2Shell تبدیل می‌شود، شعاع انفجار بر بسیاری از برنامه‌ها و برنامه‌های HTTP تأثیر می‌گذارد.

هکرنیوز۱۴۰۵ آبان ۲, شنبه، ساعت ۱۱:۳۶حدود 8 دقیقه مطالعه

آدرس مقاله: https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497 آدرس نظرات: https://news.ycombinator.com/item?id=50219177 امتیاز: 221 # نظرات: 101

Brotli یک الگوریتم فشرده سازی بدون تلفات و فرمت داده است که توسط گوگل توسعه یافته است. این راهی برای کوچکتر کردن داده ها برای ذخیره سازی یا ارسال از طریق اینترنت است. سپس نرم افزار آن را باز می کند تا داده های اصلی را بازیابی کند. به طور گسترده ای برای فشرده سازی HTTP برای فشرده سازی محتوای وب مانند HTML، CSS و جاوا اسکریپت استفاده می شود.

CVE-2026-111497 یک نوشتن خارج از محدوده در رمزگشای Google Brotli است که بر نسخه های 1.0.3 تا 1.2.0 در همه سیستم عامل ها تأثیر می گذارد. این همان نقص رمزگشای Brotli است که در پشت Node2Shell چند روز پیش اعلام شد. یک مهاجم از راه دور و احراز هویت نشده می‌تواند یک جریان فشرده‌سازی شده توسط Brotli را برای خراب کردن حافظه ارسال کند، داده‌های حساس به بیرون درز کند، فرآیند را خراب کند یا به طور بالقوه کد دلخواه را اجرا کند. دارای امتیاز CVSS v4.0 9.2 (بحرانی) است و Node.js از طریق کتابخانه همراه Brotli تحت تأثیر قرار می گیرد.

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

OpenAI در ماه فوریه دریافت که این مورد را به‌عنوان اجرای کد از راه دور تأیید نشده گزارش کرد که در هر دو جهت کار می‌کند، بنابراین یک کلاینت مخرب می‌تواند یک سرور وصله‌نشده و یک سرور مخرب می‌تواند یک کلاینت وصله‌نشده را که پاسخ‌های فشرده را می‌پذیرد، تصاحب کند.

علت اصلی در کد منبع Brotli در ماه فوریه برطرف شد، اما در آن زمان به عنوان یک مشکل امنیتی شناخته نشد و تا کنون نسخه ای همراه با این اصلاح ارسال نشده است. این بدان معناست که هر پروژه ای که Brotli را باندل می کند باید به روز رسانی خود را ارسال کند.

اگر هر محیطی Brotli 1.2.0 یا قدیمی‌تر یا brotlicffi 1.2.0.x را نصب کرده باشد، در معرض قرار می‌گیرید، زیرا کلاینت‌های HTTP مانند درخواست‌ها، httpx و aiohttp این بسته‌ها را به‌طور خودکار بارگیری می‌کنند. به Brotli 1.2.1 یا brotlicffi 1.2.1.0 ارتقا دهید و هر تصویر کانتینری را که آنها را باندل می کند، بازسازی کنید. از 23 اکتبر، پایگاه‌های اطلاعاتی مشاوره CVE را به هیچ یک از بسته‌های PyPI نگاشت نمی‌کنند، بنابراین pip-audit، Dependabot و Safety هنوز نسخه‌های آسیب‌پذیر را علامت‌گذاری نمی‌کنند.

شما می توانید آنچه را که ما در آیکیدو اینتل دنبال کرده ایم، ببینید.

در مورد نرم افزارهای بدون تاثیر، mod_brotli استاندارد آپاچی Brotli را رمزگشایی نمی کند

برای CVE-2026-111497، زمان اجرا یا کتابخانه Brotli آسیب دیده را به روز کنید:

قفل‌های وابستگی را به‌روزرسانی کنید، برنامه‌ها و تصاویر کانتینر آسیب‌دیده را بازسازی کنید، مجددا مستقر کنید و خدمات را راه‌اندازی مجدد کنید. بررسی کنید که بارهای کاری در حال اجرا از مؤلفه های اصلاح شده استفاده می کنند.

این راه‌حل‌ها قرار گرفتن در معرض را در حین آماده‌سازی ارتقا کاهش می‌دهند:

تغییر Accept-Encoding به تنهایی کافی نیست: یک سرور مخرب می تواند بدون توجه به آنچه مشتری تبلیغ می کند، یک پاسخ Brotli ارسال کند و urllib3 رمزگشای خود را از سربرگ Content-Encoding پاسخ انتخاب می کند.

این کنترل‌ها را تا زمانی که اجزای آسیب‌دیده وصله و تأیید شوند، نگه دارید. پوشش را بررسی کنید زیرا فروشندگان اجزای آسیب‌دیده اضافی یا مسیرهای حمله را تأیید می‌کنند.

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

پس از ارتقاء، آیکیدو بررسی می‌کند که آیا یافته از بین رفته است یا خیر.

Brotli یک کتابخانه فشرده سازی پر استفاده از گوگل است. روز چهارشنبه، 22 اکتبر، NodeJS CVE-2026-111497 را با نام "node2shell" فاش کرد، که در آن یک فرآیند Node.js که داده های Brotli کنترل شده توسط مهاجم را از حالت فشرده خارج می کند، می تواند باعث نشت حافظه یا اجرای کد دلخواه شود. اگر برنامه یا کتابخانه آن‌ها داده‌های بد Brotli (مانند fetch داخلی)، تجزیه‌کننده بدنه را از حالت فشرده خارج کند، کاربران در معرض دید قرار می‌گیرند.

روز بعد، پایتون یک به‌روزرسانی امنیتی منتشر کرد که همان نقص را برطرف می‌کند. بسته های پایتون نیز در برابر CVE-2026-111497 آسیب پذیر بودند. نقص Brotli ممکن است بر زبان‌ها و برنامه‌های خدماتی بیشتری تأثیر بگذارد، با توجه به اینکه کتابخانه در پایین‌دست چقدر یکپارچه شده است. به نظر می رسد OpenAI این را در ماه فوریه پیدا کرده است.

این نقص در DecodeBlockTypeAndLength() قرار دارد، که سوئیچ های بلوک را کنترل می کند، نقاطی که یک جریان Brotli درخت هافمن را که استفاده می کند تغییر می دهد. در نسخه‌های آسیب‌پذیر، تابع یک بولی ساده برمی‌گرداند، و BROTLI_FALSE می‌تواند به معنای "این جریان بدشکل است" یا "من به ورودی بیشتری نیاز دارم." تماس گیرندگان نمی توانند این دو را از هم تشخیص دهند و در مسیر سریع رمزگشا مقدار برگشتی را به طور کامل حذف می کند.

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

اصلاح upstream، google/brotli commit 0ed4268، باعث می شود که تابع یک کد خطا برگرداند و یک خطای جدید، BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17) اضافه کند. رمزگشایی اکنون در یک خطای قالب در مسیرهای امن و سریع متوقف می شود. OSM توزیع های منبع Brotli 1.2.0 و 1.2.1 را متفاوت کرد و دریافت که 1.2.1 فقط در نسخه bump متفاوت است و رمزگشا از آن commit تغییر می کند.

نقص Brotli پشت Node2Shell (CVE-2026-111497) پایتون را تحت تأثیر قرار می دهد. دو بسته PyPI، Brotli و brotlicffi، همان رمزگشای آسیب پذیر Brotli را که Node.js باندل می کند، کامپایل می کنند. یک توصیه رسمی در GitHub ارسال شد. Brotli 82.8 میلیون دانلود در ماه دارد.

اگر هر محیط پایتونی که اجرا می کنید، Brotli 1.2.0 یا قبل از آن، یا brotlicffi 1.2.0.x نصب شده باشد، تحت تأثیر قرار می گیرید. کلاینت‌های محبوب HTTP مانند درخواست‌ها و httpx این بسته‌ها را به صورت خودکار بارگیری می‌کنند. برخی از بسته ها به طور خودکار Brotli را به عنوان یک وابستگی مانند Scrapy نصب می کنند، در حالی که برخی دیگر نیاز به ذکر صریح از آن دارند. مهاجم می‌تواند با ارسال یک پاسخ مخرب Brotli به درخواستی که برنامه شما ارائه می‌کند، یا با ارسال بدنه درخواست فشرده‌شده با Brotli، به رمزگشای آسیب‌پذیر دسترسی پیدا کند. این بدان معناست که یک برنامه می تواند بدون وارد کردن Brotli در هر جایی از کد خودش در معرض نمایش قرار گیرد.

این یک وابستگی گذرا محبوب است، بنابراین سیستم های خود را بررسی کنید.

در یادداشت های انتشار برای هر دو نسخه ثابت اشاره ای به CVE نشده است. از 23 اکتبر، پایگاه‌های اطلاعاتی مشاوره هنوز آن را به هیچ یک از بسته‌های PyPI نگاشت نکرده‌اند، بنابراین pip-audit، Dependabot و Safety این نسخه‌ها را پرچم‌گذاری نمی‌کنند.

اگر هر یک از محیط های پایتون شما یکی از این بسته ها را نصب کرده باشد، تحت تأثیر قرار می گیرید:

کد شما نیازی به وارد کردن هر یک از بسته ها ندارد. این مشتریان HTTP Adcept-Encoding: br را تبلیغ می کنند و پاسخ های Brotli را به طور خودکار رمزگشایی می کنند:

اطلاعات مهاجم می تواند از دو مسیر به رمزگشا برسد:

راه حل یک ارتقاء بسته است و چهار مرحله را طی می کند:

اگر پیوندهای Python Brotli شما از یک بسته توزیع لینوکس به جای PyPI آمده است، رفع مشکل از طریق توزیع شما انجام می شود، بنابراین توصیه های امنیتی آن را نیز بررسی کنید.

آسیب‌پذیری Python Brotli به CVE-2026-111497 اشاره دارد، نقص رمزگشای Brotli که با نام Node2Shell شناخته می‌شود، زیرا بسته‌های Python در PyPI را تحت تأثیر قرار می‌دهد. رکورد CVE CWE-252 (مقدار برگشتی علامت نخورده) را با CWE-787 (نوشتن خارج از محدوده) جفت می کند.

رکورد CVE به این نقص نمره CVSS 4.0 9.2 می دهد و Node.js آن را با شدت بالا ارزیابی می کند. OSM Brotli 1.2.0 و 1.2.1 را با AddressSanitizer ساخت و یک جریان دستکاری شده را در هر دو اجرا کرد. نسخه 1.2.0 تمام جریان تقریبا 23 مگابایتی را مصرف می کرد و مدام گزارش می داد که به ورودی بیشتری نیاز دارد، چه جریان به صورت یک تکه یا به صورت تکه های کوچک به اندازه یک بایت باشد. نسخه 1.2.1 هر بار جریان را با خطای -17 رد می کرد.

OSM به دنبال تخریب حافظه یا اجرای کد در پسوند پایتون نبود. همانطور که Imperva و دیگران گزارش کردند، کد رمزگشا همان کدی است که محققان در برابر یک سازه Node.js 24.22.0 اصلاح نشده از آن سوء استفاده کردند. برای Node.js، The Hacker News تا 22 اکتبر هیچ بهره برداری در طبیعت را گزارش نکرده است.

به هر حال با آن به عنوان یک فوریت رفتار کنید. این اشکال یک نقص ایمنی حافظه در مؤلفه‌ای است که ورودی شبکه غیرقابل اعتماد را کنترل می‌کند، و رفع آن یک نسخه معمولی است. سرویس‌هایی که با سرورهای خارجی تماس می‌گیرند یا بدنه‌های درخواست فشرده را می‌پذیرند باید ابتدا ارائه شوند.

اگر در حال بازتولید باگ از پایتون هستید، brotli.decompress() یک brotli.error عمومی را ایجاد می‌کند: رمزگشا برای هر خطایی شکست خورد، بنابراین نمی‌توانید ببینید کدام کد خطا اجرا شده است. یک Decompressor() که جریان ساخته شده را به صورت تدریجی تغذیه می کند، هرگز در 1.2.0 تمام نمی شود.

کدام نسخه ها CVE-2026-111497 را در پایتون برطرف می کنند؟

Brotli 1.2.1 و brotlicffi 1.2.1.0 به همراه هر نسخه جدیدتری.

یک بسته نصب شده کافی است. urllib3، درخواست‌ها، httpx و aiohttp از Brotli یا brotlicffi به‌طور خودکار در صورت وجود هر کدام استفاده می‌کنند و پاسخ‌های Brotli را از هر سروری که برنامه شما تماس می‌گیرد رمزگشایی می‌کند.

هنوز نه. از 23 اکتبر، رکورد CVE، OSV و پایگاه داده مشاوره GitHub هیچ یک از بسته های PyPI را فهرست نمی کنند. OSM در حال ارسال ورودی‌های PYSEC و نقشه‌برداری بسته PyPI برای مشاوره GitHub است تا ابزارسازی این را انتخاب کند.

حذف Brotli و brotlicffi رمزگشای آسیب‌پذیر را حذف می‌کند و کلاینت‌های HTTP دوباره به gzip می‌افتند و کاهش می‌یابند. رد کردن درخواست‌های کدگذاری شده با Brotli در لبه، نوردهی ورودی را کاهش می‌دهد، اما در برابر پاسخ‌های Brotli که برنامه شما واکشی می‌کند محافظت نمی‌کند.

https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497

Node.js CVE-2026-111497 (Node2Shell) یک نقص Brotli است که می تواند اجرای کد از راه دور را امکان پذیر کند. ببینید چه کسی تحت تاثیر قرار گرفته است، نسخه های وصله شده و رفع آن.

هشت کلید eMudhra CA را می‌توان در حداکثر 256 بار حدس زد، و یکی فقط عدد 4 است. چه کسی تحت تأثیر قرار می‌گیرد، چرا مرورگرهای عقب افتاده را می‌چرخاند، و چگونه آن را برطرف کنیم.

LiteLLM 1.107.0 حاوی infostealer و RAT است و PyPI بسته را قرنطینه کرده است. ببینید آیا تحت تأثیر قرار گرفته اید، چه چیزی می دزدد، و چه چیزی را باید بچرخانید.

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

خواندن متن کامل در هکرنیوزبه زبان اصلی، در سایت ناشر باز می‌شود
متن اصلی (انگلیسی)

Node2Shell evolves to HTTP2Shell, blast radius affects many HTTP libs and apps

Article URL: https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497 Comments URL: https://news.ycombinator.com/item?id=50219177 Points: 221 # Comments: 101

همه‌ی اخبار فناوری