Node.js-ээс эхлээд Python, Bun-ийг хамарсан "HTTP2Shell": Brotli шахалтын цоорхой ба RCE-ийн бодит аюул
Сүүлийн өдрүүдэд веб хөгжүүлэлтийн экосистем дахин нэг ноцтой цоорхойн дуулианд нэрвэгдлээ. Node.js төслийн багаас саяхан 10 аюулгүй байдлын засвар багтаасан шинэ хувилбаруудыг зарласан бөгөөд тэдгээрийн дундаас хамгийн өндөр буюу CVSS 9.2 (Critical) үнэлгээ авсан эмзэг байдал нь Google-ийн нээлттэй эхийн Brotli декодертой холбоотой CVE-2026-111497 байв.
Эхэндээ зөвхөн Node.js платформд хамаатай мэт үзэж, олон нийт "Node2Shell" хэмээн нэрлэж байсан бол сүүлийн 24 цагийн хугацаанд судлаачид тус алдаа нь Python (Brotli, brotlicffi), Bun 1.4 болон Envoy proxy зэрэг олон технологид ашиглагддаг суурь C сангаас үүдэлтэйг нотолсноор уг аюул "HTTP2Shell" нэрээр нэрлэгдэх болов.
Энэхүү нийтлэлээр алдааны техникийн цаад учир юу болох, хэрхэн Remote Code Execution (RCE) түвшинд хүрсэн, түүнчлэн танай аппликейшн үүнд өртөх эрсдэлтэй эсэхийг дэлгэрэнгүй авч үзье.
8 байтын буферээс эхэлсэн RCE-ийн түүх
Brotli (RFC 7932) бол Google-ийн боловсруулсан, текст өгөгдлийг маш өндөр түвшинд шахдаг алгоритм бөгөөд орчин үеийн интернет сүлжээний урсгалын дийлэнх хувийг эзэлдэг Content-Encoding: br толгойн (header) гол хөдөлгүүр юм. Хөтөч болон серверүүд өгөгдөл дамжуулах хурдаа нэмэгдүүлэхийн тулд Brotli-г өдөр тутам ашигладаг.
Уг цоорхойг OpenAI-ийн аюулгүй байдлын тусгай баг болох OpenAI Codex Security-ийн судлаачид болох Хай Тран (Khai Tran), Силви Майер (Sylvie Mayer) нар илрүүлж, тайлагнасан байна.
Алдааны суурь механизм нь Google Brotli-ийн c/dec/decode.c файл дахь санах ойн менежментээс үүдэлтэй:
- Invalid Block Switch: Урсгал өгөгдөл (stream) задлах явцад декодерт нэг л блокийн төрөл зарласан мөртлөө гэнэт өөр блок руу шилжих алдаатай өгөгдлийн багц орж ирдэг.
- Алдааг буруу мэдээлэх (CWE-252): Декодер энэхүү формат зөрчигдсөн ноцтой төлөвийг бүр мөсөн таслах алдаа гэж харахын оронд "одоохондоо оролт дутуу байна, дараагийн өгөгдлийг хүлээе" гэсэн түр зуурын төлөв хэмээн хүлээн авдаг.
- Out-of-Bounds Write (CWE-787): Үүнээс үүдэн декодер хүчингүй төлөвт үргэлжлүүлэн ажиллаж, дотооддоо ашигладаг ердөө 8 байтын жижиг буферээс халин санах ой руу өгөгдөл давхар бичиж эхэлдэг байна.
Санах ойн зэргэлдээ хаягуудад байрлах декодерийн удирдлагын бүтцийг эвдэж чадсанаар халдагч системийн ажиллаж буй санах ойг бүхэлд нь сүйтгэх, нууц өгөгдлийг задлах, эсвэл бүр өөрийн хүссэн shell кодыг ажиллуулах нөхцөл бүрддэг.
Онол биш бодит аюул: Imperva албан ёсны Docker build дээр RCE хийж үзүүлэв
Олон аюулгүй байдлын цоорхой зөвхөн хийсвэр симуляци эсвэл дебагger бүхий тусгай орчинд л ажилладаг сул талтай байдаг бол энэ удаад нөхцөл байдал шал өөрөөр эргэв.
Аюулгүй байдлын тэргүүлэх судалгааны Imperva (Thales) компанийн инженерүүд албан ёсны Docker hub дээрх бэлэн node:24.22.0 (Linux arm64) контейнер дээр туршилт хийж, нарийн боловсруулсан Brotli өгөгдөл илгээх замаар серверийн процессийн түвшинд дурын бүрэн эрхт комманд ажиллуулж (PoC - Proof of Concept) чадсанаа нийтэд нотлон үзүүлэв. Энэ нь уг цоорхой нь зөвхөн Denial of Service (DoS) буюу серверийг унагах төдий биш, бодитоор серверийг бүрэн хяналтдаа авах боломжтойг баталсан юм.
Танай системд халдлага хэрхэн нэвтрэх вэ?
Халдагчийн бэлтгэсэн хортой Brotli өгөгдөл таны серверийн декодерт хүрэх хоёр үндсэн зам бий:
- Ирж буй HTTP хүсэлт (Incoming Requests): Хэрэв таны сервер
Content-Encoding: brтолгойтой хүсэлтийн биеийг (request body) хүлээн аваад, түүнийгээnode:zlib(жишээ ньbrotliDecompress,createBrotliDecompress) ашиглан тайлдаг бол халдагч шууд серверийн endpoint руу хортой өгөгдөл илгээн халдана. - Гадагш хийсэн хүсэлтийн хариу (Outgoing Fetch/HTTP calls): Хэрэв таны систем гуравдагч этгээдийн API, вэбсайт руу
fetch()эсвэл HTTP хүсэлт илгээдэг бол дийлэнх клиентүүдAccept-Encoding: br, gzipтолгойг автоматаар дамжуулдаг. Хэрэв хүсэлт илгээсэн зорилтот сервер халдлагад өртсөн эсвэл халдагчийн хяналтад байвал хариунд нь хортой шахсан өгөгдөл буцааж, танай серверийг гаднаас нь RCE хийх эрсдэлтэй.
Мөн Python хөгжүүлэгчдийн хувьд urllib3, requests эсвэл httpx сантай хамт Brotli эсвэл brotlicffi сан суулгасан бол эдгээр нь яг ижил C декодерийг дууддаг тул ижил түвшний эрсдэлд орж байна.
Node.js 20-ийн эмгэнэл ба хөгжүүлэгчдийн авах арга хэмжээ
Энэхүү үйл явдлын хамгийн анхаарал татах, хүнд цохилт болсон зүйл нь Node.js 20.x хувилбарын хувь заяа юм.
Node.js 20 цуврал нь албан ёсоор End-of-Life (EOL) болсон тул тус хувилбарт ямар ч аюулгүй байдлын засвар гарахгүй гэдгийг төслийн багаас албан ёсоор мэдэгдлээ. Продакшн орчинд өнөөг хүртэл олон зуун сая таталттай, өргөн ашиглагдаж буй Node 20 дээр ажиллаж байгаа төслүүд цаашид ямар ч хамгаалалтгүй хоцрох тул даруй дэвшилтэт LTS хувилбар луу шилжихээс өөр гарцгүй болж байна.
Яг одоо авах алхмууд:
- Хувилбараа яаралтай шинэчлэх:
- Node.js:
22.23.4(LTS),24.22.1(LTS), эсвэл26.12.1(Current) хувилбар луу даруй апгрейд хийх. - Bun:
1.4.4хувилбар луу шинэчлэх (bun upgrade). - Python: Төслийн хамаарлаа шалгаж,
Brotli >= 1.2.1болонbrotlicffi >= 1.2.1.0болгон татах.
- Node.js:
- Docker Image-үүдээ дахин бүтээх (Rebuild): Системд ажиллаж буй процесс хуучин хувилбарын декодерийг санах ойд хадгалсаар байдаг тул бааз image-үүдээ шинэчилж, контейнерүүдээ дахин эхлүүлэх шаардлагатай.
- Түр зуурын хамгаалалт (Mitigation): Хэрэв та системийн хувилбараа шууд шинэчлэх боломжгүй бол Nginx, Cloudflare эсвэл Reverse Proxy түвшинд найдвартай бус эх үүсвэрээс ирэх Brotli хүсэлтийг цуцлах, эсвэл клиентийн хувиар гадагш хүсэлт илгээхдээ
Accept-Encoding: gzip, deflateгэж тодорхой заан Brotli хүлээн авахаас түр татгалзах нь эрсдэлийг хаана.
Дүгнэлт
AI загварууд болон автоматжуулсан хайлтын агентууд нээлттэй эхийн код дахь олон арван жил далд байсан, маш нарийн санах ойн алдаануудыг хэдхэн хормын дотор олох чадвартай болжээ. Энэ нь аюулгүй байдлын судлаачдад цоорхойг түрүүлж нөхөх боломж олгож байгаа ч нөгөө талаас халдагчдад бэлэн зэвсэг болох эрсдэлийг зэрэг дагуулж байна.
Та ч гэсэн өөрийн серверийн node -v коммандыг шалгаж, бүтээгдэхүүнийхээ найдвартай байдлыг цаг алдалгүй баталгаажуулаарай.
Эх сурвалж: Node.js Security Advisory, The Hacker News, CVE-2026-111497 (Google CNA), Imperva Cyber Threat Research
Сэтгэгдэл
Ачаалж байна...