Код Читати оригінал на Phoronix 1 хв читання 1

Небезпека у Safe Rust: чому розробники zlib-rs 0.6.7 терміново

За даними видання Phoronix, проєкт zlib-rs отримав оновлення 0.6.7, яке усуває несподівану вразливість Use-After-Free, виявлену в обгортках компресії. Попри заявлену повну пам'яткобезпечність системного коду на Rust, помилка виявилася відтворюваною навіть без використання блоків unsafe. Розробники з Trifecta Tech Foundation не лише закрили прогалину в кодовій базі, а й суттєво переписали інструкції SIMD для архітектури LoongArch64.

#zlib-rs #Rust #безпека #LoongArch64 #оптимізація
Материнська плата на базі архітектури LoongArch для тестування системних бібліотек Rust
Материнська плата на базі архітектури LoongArch для тестування системних бібліотек Rust · Джерело зображення: Phoronix

Обхід гарантій компілятора rustc у Deflate::compress_uninit

Головною причиною термінового випуску zlib-rs 0.6.7 стала вразливість класу Use-After-Free, виявлена в кодовій базі під час виклику функції Deflate::compress_uninit. Відповідний тикет у репозиторії проєкту зафіксував випадок, коли звернення до вже звільненої ділянки пам'яті відбувалося без застосування ключового слова unsafe, що формально порушує інваріанти гарантій безпеки мови Rust.

Автор Proof-of-Concept довів, що внутрішня логіка управління буферами неініціалізованої пам'яті дозволяла згенерованому коду звертатися до вивільненого вказівника. Інженери Trifecta Tech Foundation переробили механізм роботи з неініціалізованими слайсами, виключивши можливість передчасного деалокування буфера під час стиснення даних.

Прискорення SIMD для LoongArch64 та оптимізація Inflate

Окрім виправлення багу пам'яті, реліз 0.6.7 приніс вагомий апгрейд продуктивності для китайських процесорів Loongson на базі архітектури LoongArch64. Команда впровадила підтримку векторних розширень Loongson SIMD eXtension (LSX) безпосередньо у критичні гарячі цикли бібліотеки:

  • Реалізовано підсистему LSX compare256, яка дала приріст швидкості стиснення на 4% у базі синтетичних бенчмарків.
  • Оптимізовано алгоритм inflate шляхом переходу на ширші векторні інструкції завантаження та збереження даних (wide loads/stores), що забезпечило стрибок продуктивності до 10%.
  • Усунуто дрібні регресії в обробці байтових свайпів для невирівняних адрес у пам'яті.

Чому витік Use-After-Free у Safe Rust змінює підхід до розробки zlib-rs

Виявлення UAF у безпечному контексті Safe Rust показало, що навіть без прямого вжитку розширень unsafe складна логіка обгортання неініціалізованих буферів через абстракції стандартної бібліотеки може приховувати логічні дірки. Для проєкту zlib-rs, який позиціонується як 100% пам'яткобезпечна та високопродуктивна альтернатива класичним C-бібліотекам zlib та zlib-ng, цей кейс став поштовхом до посилення фаззингу та статичного аналізу. Системним програмістам рекомендується оновити залежності crate zlib-rs у виробничих сервісах, аби уникнути можливих збоїв під час інтенсивної роботи з декомпресією потоків.

Контекст для України

Для української IT-галузі та продуктових компаній, які масово переводять високонавантажені мікросервіси та інфраструктуру обробки даних на Rust, вихід zlib-rs 0.6.7 є важливим технічним сигналом. Бібліотека zlib використовується у багатьох українських backend-системах, веб-серверах та фреймворках для стиснення HTTP-трафіку і знімків баз даних. Командам DevOps та Rust-розробникам у компаніях на кшталт MacPaw, Ajax Systems чи Grammarly варто негайно аудіювати файли Cargo.lock та оновити залежності zlib-rs до версії 0.6.7. Це дозволить захистити хмарні сервіси від раптових крашів процесів під час стиснення великих масивів даних у пікові години навантаження.

Часті запитання

Що виправлено у версії zlib-rs 0.6.7?
У версії zlib-rs 0.6.7 усунуто вразливість Use-After-Free у виклику Deflate::compress_uninit. Баг дозволяв звертатися до вивільненої пам'яті навіть без вжитку блоків unsafe. Також розробники додали векторні інструкції LSX для архітектури LoongArch64, підвищивши швидкість стиснення та декомпресії.
Чим zlib-rs відрізняється від класичного zlib на C?
Бібліотека zlib-rs повністю написана мовою Rust для забезпечення безпеки роботи з пам'яттю. Вона створена інженерами Trifecta Tech Foundation як drop-in заміна C-реалізацій zlib та zlib-ng, демонструючи аналогічну або вищу швидкість виконання без ризику переповнення буферів.
Telegram

Свіжі новини у нашому Telegram

Отримуйте миттєві сповіщення про нові публікації в рубриці «Код»

@procodeandevenmore