
Imperva-მ Node.js-ზე Node2Shell RCE აჩვენა სპეციალურად შექმნილი Brotli მონაცემებით
Imperva-ს მკვლევრებმა აჩვენეს დისტანციური კოდის შესრულება Node.js 24.22.0-ის ოფიციალურ Linux arm64 ბილდზე სპეციალურად შექმნილი Brotli მონაცემებით, CVE-2026-111497-ის გამოყენებით. Node.js-მა გამოსწორება 21 ოქტომბერს გამოუშვა.
ექსპლოიტის დემონსტრირება
Imperva-ს მკვლევრებმა წარმოადგინეს კონცეფციის დამადასტურებელი ნიმუში სახელწოდებით Node2Shell, რომელიც დისტანციური კოდის შესრულებას ახერხებს Node.js 24.22.0-ის ოფიციალურ Linux arm64 იმიჯზე. შეტევა სპეციალურად შექმნილ Brotli-ით შეკუმშულ მონაცემებს აწვდის Node.js-თან ერთად მოწოდებულ Brotli დეკოდერს, რაც იწვევს CVE-2026-111497-ს. ექსპლოიტს სატესტო გარემოში რამდენიმე მცდელობა დასჭირდა და მხოლოდ ამ კონკრეტულ ბილდზე იმუშავა; გამოსწორებული 24.22.1 უარყოფს მავნე მონაცემებს და კოდის შესრულებას ხელს უშლის.
რომელ აპლიკაციებს ეხება
სისუსტე იმ Brotli დეკოდერშია, რომელსაც Node.js მოიცავს, ამიტომ 22.x, 24.x და 26.x გამოშვებების სერიებზე მომუშავე ყველა აპლიკაცია პოტენციურად დაუცველია. სერვისი დეკოდერამდე აღწევს, როცა ჩაშენებული fetch ფუნქციით Brotli-ით შეკუმშულ პასუხს კითხულობს ან როცა middleware-ი Brotli-ით შეკუმშულ მოთხოვნის სხეულს დეკოდირებს. Express 5-ის body parser-ები, როგორიცაა express.json, express.urlencoded, express.text და express.raw, ახლა Brotli-ით შეკუმშულ მოთხოვნის სხეულებს დეკოდირებენ; იგივე ეხება body-parser-ის 2.0.0-დან 2.3.0-მდე ვერსიებს. ჩვეულებრივი Node.js HTTP სერვერი Brotli-ით შეკუმშულ მოთხოვნის სხეულებს ავტომატურად არ დეკოდირებს.
ტექნიკური დეტალები
Imperva-მ ხარვეზის წყარო Brotli ნაკადში შეუძლებელი ბლოკის გადასვლის დეკოდერის დამუშავებაში მიაკვლია. მავნე ნაკადი აცხადებს ბლოკის ისეთ ტიპებს, რომლებსაც ნაკადის სტრუქტურა გამორიცხავს, რის გამოც დეკოდერი მეტ შეყვანას ითხოვს და არასწორ მდგომარეობაში აგრძელებს მუშაობას. მეხსიერების სანიტიზატორის ტესტმა აჩვენა, რომ ამ მდგომარეობიდან გაგრძელება ჩაწერს გამოყოფილი ბუფერის საზღვრებს მიღმა და წარმოქმნის out of bounds write-ს, რომელიც სისუსტის საფუძველია. Node.js-მა პრობლემა გადაჭრა Brotli-ის upstream პატჩის იმპორტით, რომელიც დეკოდერს პრობლემურ წერტილში ფორმატის შეცდომით აჩერებს.
რისკის შემცირება
ერთადერთი საიმედო გამოსწორება გამოსწორებულ Node.js გამოშვებაზე განახლებაა. EOL ხაზები, როგორიცაა 20.x, გამოსწორებას არ იღებენ და მხარდაჭერილ ხაზზე უნდა გადავიდნენ. უსაფრთხოების ცნობაში runtime-ის workaround-ი არ არის მითითებული, ამიტომ აპლიკაციებს, რომლებიც დაუყოვნებლივ ვერ განახლდებიან, თავად Node.js-ში სარეზერვო გზა არ აქვთ. Imperva-ს რეკომენდაციაა, სადაც შესაძლებელია, შეიზღუდოს არასანდო Brotli ტრაფიკი დაზარალებულ მარშრუტებზე. Vercel-მა 21 ოქტომბერს დაამატა ვებ-აპლიკაციის firewall-ის წესები, რომლებიც შემომავალ მოთხოვნებში შეტევას ბლოკავენ, თუმცა ეს წესები არ ფარავენ გარე სერვერებიდან წამოღებულ Brotli პასუხებს და არ ცვლიან განახლებას.
წყაროები: The Hacker News
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.