พบช่องโหว่ (CVE-2026-111497 รหัส Broccoli2Shell และ HTTP2Shell) ในไลบรารีที่มีการใช้งานอ้างอิงของตัวถอดรหัสการบีบอัดข้อมูล Brotli ช่องโหว่นี้ทำให้เกิดบัฟเฟอร์โอเวอร์โฟลว์เมื่อประมวลผลข้อมูลที่ถูกบีบอัดเป็นพิเศษ ตามข้อมูลของ Google ช่องโหว่นี้สามารถใช้สำหรับการเรียกใช้โค้ดจากระยะไกลเมื่อโจมตีโครงการที่ใช้การใช้งานตัวถอดรหัส Brotli อย่างเป็นทางการ โครงการที่ได้รับผลกระทบ ได้แก่ Node.js, Bun, Envoy, Istio, เว็บเบราว์เซอร์, พร็อกซีเซิร์ฟเวอร์, ไคลเอ็นต์ HTTP, เซิร์ฟเวอร์ HTTP, โปรแกรมบีบอัดไฟล์, เฟิร์มแวร์ UEFI, โปรแกรมดู JPEG XL, ไลบรารีการถอดรหัสเนื้อหาสำหรับ Python, Ruby, Java, PHP และ .NET และส่วนประกอบที่เกี่ยวข้อง
ปัญหาดังกล่าวถูกค้นพบโดย OpenAI ในเดือนกุมภาพันธ์ปีนี้ และถูกบล็อกในโค้ดเบสของ Brotli โดยการทิ้งสตรีมที่ไม่ถูกต้องระหว่างการถอดรหัส เมื่อวันที่ 22 ตุลาคม ได้มีการเผยแพร่แพทช์เวอร์ชัน 1.0.10, 1.1.1 และ 1.2.1 ของ Brotli ซึ่งประกาศการแก้ไขและกล่าวถึงปัญหาพื้นฐานอย่างชัดเจน ในวันเดียวกันนั้นเอง ได้มีการสร้างต้นแบบการโจมตีที่อนุญาตให้เรียกใช้โค้ดจากระยะไกลในสภาพแวดล้อมห้องปฏิบัติการโดยใช้เวอร์ชันที่ไม่เป็นมาตรฐาน (เวอร์ชันมาตรฐานจะเกิดข้อผิดพลาด) ต่อมา Imperva ตรวจพบการโจมตีบนเวอร์ชัน Node.js 24.22.0 มาตรฐาน Linux- สภาพแวดล้อมบนระบบ ARM64
ช่องโหว่นี้ส่งผลให้เกิดการเขียนข้อมูลเกินขอบเขตบัฟเฟอร์เนื่องจากการจัดการข้อผิดพลาดที่ไม่เหมาะสมระหว่างการแยกวิเคราะห์บล็อกในสตรีมที่ถูกบีบอัด ฟังก์ชัน DecodeBlockTypeAndLength() ส่งคืนค่าจริงและเท็จเท่านั้น แทนที่จะเป็นรหัสข้อผิดพลาด ทำให้ผู้เรียกไม่สามารถแยกแยะความแตกต่างระหว่างความเสียหายของสตรีมและสภาวะที่ต้องการข้อมูลเพิ่มเติมที่จะส่งไปยังฟังก์ชันได้ หากมีการระบุประเภทบล็อกข้อมูลที่ถูกบีบอัดไม่ถูกต้องในสตรีม ตัวถอดรหัสจะตีความว่าไม่ใช่ข้อผิดพลาด แต่เป็นสภาวะข้อมูลไม่เพียงพอที่ต้องอ่านข้อมูลเพิ่มเติมจากสตรีม อย่างไรก็ตาม เนื่องจากบัฟเฟอร์ที่จัดสรรไว้ไม่ได้ออกแบบมาเพื่อรองรับการอ่านข้อมูลเพิ่มเติม ข้อมูลจึงถูกเขียนไปยังพื้นที่นอกบัฟเฟอร์ที่เก็บสถานะภายในของตัวถอดรหัส
โครงการที่ได้รับผลกระทบ:
- ไลบรารีอ้างอิง Brotli ซึ่งเป็นปัญหาที่มีมาตั้งแต่เวอร์ชัน 1.0.3 และได้รับการแก้ไขในการอัปเดตเวอร์ชัน 1.0.10, 1.1.1 และ 1.2.1 ส่งผลกระทบต่อแอปพลิเคชันและไลบรารีที่ใช้ไลบรารี libbrotlidec
- แพลตฟอร์ม JavaScript Node.js ได้รับการแก้ไขช่องโหว่ในเวอร์ชัน 26.12.1, 24.22.1 และ 22.23.4 แอปพลิเคชันที่ใช้เมธอด fetch() เพื่อร้องขอเนื้อหาจากภายนอก ซึ่งจะถอดรหัสการตอบสนอง HTTP โดยอัตโนมัติด้วยส่วนหัว "Content-Encoding: br" อาจมีความเสี่ยง ช่องโหว่นี้ยังปรากฏขึ้นเมื่อเรียกใช้เมธอด zlib.brotliDecompress*(), createBrotliDecompress() และ brotli.decompress() โดยตรงเพื่อคลายการบีบอัดเนื้อหาจากภายนอก หรือเมื่อรับคำขอ HTTP ที่แยกวิเคราะห์ผ่านไลบรารี Express 5 และ body-parser 2.x
- แพ็กเกจ Python brotli และ brotlicffi (มีการแก้ไขในเวอร์ชัน 1.2.1) และโปรเจกต์ที่ใช้แพ็กเกจเหล่านี้ รวมถึงไลบรารีที่เป็นที่นิยมอย่าง urllib3, aiohttp, httpx และ Scrapy ซึ่งถอดรหัสการตอบสนองที่มีส่วนหัว "Content-Encoding: br" เมื่อเข้าถึงแหล่งข้อมูลเว็บภายนอก
- เซิร์ฟเวอร์ HTTP, พร็อกซี HTTP, ไคลเอนต์ HTTP และเว็บเบราว์เซอร์ที่รองรับการบีบอัด Brotli ("Accept-Encoding: br") Apache httpd มาพร้อมกับ mod_brotli (ปิดใช้งานโดยค่าเริ่มต้น) โมดูลของบุคคลที่สาม ngx_brotli มีให้ใช้งานสำหรับ nginx (เวอร์ชัน brotli ในส่วนการพึ่งพาได้รับการอัปเดตเป็นเวอร์ชันล่าสุดแล้ว) ใน Chrome/Chromium และ Firefox ปัญหาได้รับการแก้ไขแล้วในการอัปเดตครั้งก่อน ในพร็อกซี-เซิร์ฟเวอร์ ช่องโหว่ของ Envoy ได้รับการแก้ไขแล้วในเวอร์ชัน 1.40.0, 1.39.3, 1.38.6, 1.37.8 และ 1.36.12
- ช่องโหว่นี้เกิดขึ้นกับรันไทม์ .NET เมื่อใช้เมธอด BrotliDecoder, BrotliStream และ HttpClient ในแอปพลิเคชัน ช่องโหว่นี้ยังไม่ได้รับการแก้ไข
- ส่วนขยาย PHP brotli เมื่อใช้ฟังก์ชัน brotli_uncompress() กำลังดำเนินการแก้ไข
- แพ็กเกจ Ruby ชื่อ Brotli มีช่องโหว่ที่สามารถถูกโจมตีได้โดยใช้เมธอด Brotli.inflate ช่องโหว่นี้ยังไม่ได้รับการแก้ไข
- DuckDB มีปัญหาในการนำเข้าไฟล์ Parquet ที่บีบอัด กำลังดำเนินการแก้ไขอยู่
- ClickHouse DBMS กำลังดำเนินการแก้ไข
- ระบบจัดการฐานข้อมูล YDB ช่องโหว่นี้ยังไม่ได้รับการแก้ไข
- Apache Arrow พบปัญหาเมื่อนำเข้าไฟล์ Parquet ที่บีบอัด กำลังดำเนินการแก้ไข
- libjxl (ใช้ Brotli สำหรับการบีบอัดข้อมูลเมตาของ JPEG XL)
กำลังเตรียมแก้ไข - โปรแกรมบีบอัดไฟล์ NanaZip, 7-Zip-zstd และ p7zip มีช่องโหว่เมื่อคลายไฟล์ .br ช่องโหว่นี้ยังคงอยู่
- MuPDF ช่องโหว่นี้ยังไม่ได้รับการแก้ไข
- เฟิร์มแวร์ UEFI ที่ใช้ EDK II และ UEFITool บีบอัดด้วย Brotli กำลังเตรียมการแก้ไขสำหรับ EDK II และ UEFITool อยู่
- เฟรมเวิร์ก JavaScript Bun ช่องโหว่นี้ได้รับการแก้ไขแล้วในเวอร์ชัน 1.4.4
- Istio เป็นแพลตฟอร์มการจัดการไมโครเซอร์วิส ช่องโหว่นี้ได้รับการแก้ไขแล้วในเวอร์ชัน 1.29.9, 1.30.6 และ 1.31.2
- สำหรับ curl และ libcurl ช่องโหว่นี้จะปรากฏขึ้นเมื่อมี libbrotlidec เวอร์ชันที่มีช่องโหว่อยู่ในส่วนประกอบของไลบรารี
- ตัวแยกวิเคราะห์สำหรับรูปแบบฟอนต์ Web Open Font (WOFF) ซึ่งใช้
บรอทลี - Brotli4j, SumatraPDF, Ghostscript, CatBoost และ YTsaurus ช่องโหว่นี้ได้รับการแก้ไขแล้วในการอัปเดต
ที่มา: opennet.ru
