Wasmtime - это время работы для WebAssembly. Время работы 37.0.0 и 37.0.1 имеют утечки памяти в C/C++ API при использовании привязок для зн…
Wasmtime - это время работы для WebAssembly. Время работы 37.0.0 и 37.0.1 имеют утечки памяти в C/C++ API при использовании привязок для значений `anyref или `externref` WebAssmably. Это вызвано регрессией, введенной во время разработки 37.0.0, и все предыдущие версии Wasmtime не затронуты. Если `anyref` или `externref` не используется в C/C++ API, то вложения также не затронуты протекающим поведением. «Разминное ящик Rust» не затронут этой утечкой. Разработка Wasmtime 37.0.0 включала в себя рефакторенизацию в Rust изменения старого `ManuallyRooted<T>` типа на новый `OwnedRooted<T>` тип. Это изменение было интегрировано в C API Wasmtime, но оставило C API в состоянии, в котором были утечки памяти. Кроме того, новая семантика владения вокруг этого типа не была отражена в C++ API, что делает его подверженным утечкам. Короткая версия изменения заключается в том, что ранее `RualyRooted<T>`, как следует из названия, требовала ручных вызовов на «неру» операцию. Если это было забыто, то память все еще была очищена, когда сам `wasmtime_store_t` был в конечном итоге разрушен. Документация о том, когда «некорняться», была скудной, и уже были ситуации до 37.0.0, когда память будет просочиться, пока магазин не был разрушен в любом случае. Однако вся память всегда была связана магазином, и разрушение магазина гарантировало бы отсутствие утечек памяти. При миграции в `OwnedRooted<T>` использование типа в Rust изменилось. Ручная «нерупорная» операция больше не требуется, и это происходит естественным образом как деструктор «Собенного Корневого» типа в самой Rust. Эта новая семантика владения ресурсами не была полностью интегрирована в ранее существовавшую семантику C/C++ API в Wasmtime. Важнейшей отличительной чертой `OwnedRooted<T>` vs `ManuallyRooted<T>` является то, что тип `OwnedRooted<T>` выделяет память хозяина за пределами магазина. Это означает, что если «OwnedRooted<T>`» просочился, то разрушение магазина не освобождает эту память, и это постоянная утечка памяти на хоста. Это привело к нескольким различным, но связанным, возникающим проблемам: опечатка в функции `wasmtime_val_unroot` в C API означала, что она фактически ничего не искоренила. Это означало, что даже если встраиваемые средства добросовестно вызовут эту функцию, память будет просочиться. Если функция, определяемая хостом, возвращала значение `wasmtime_{externref,anyref}_t` значение, то значение никогда не было безукоречным. C/C++ API больше не имеет доступа к ценности, и реализация Rust не разорвалась. Это означало, что любые ценности, возвращенные таким образом, никогда не были безусловными. Целью C++ API Wasmtime является кодирование автоматического управления памятью в системе типов, но API C++ не обновлялся при добавлении `OwnedRooted<T>`. Это означало, что идиоматическое использование C++ API будет утечкой памяти из-за отсутствия деструктурирующих факторов на значениях. Все эти проблемы были исправлены в 37.0.2 выпуска Wasmtime. Реализация C и C++ API была обновлена соответствующим образом и соответственно, чтобы учесть смену владельца здесь. Например, `wasmtime_val_unroot` был зафиксирован на unroot, реализация на стороне ржавчины вызова функции, определяемой встраиванием, будет разворачивать значения возврата, и у C++ API теперь есть деструкторы в типах «ExternRef», «AnyRef`», «AxternRef`», «AnyRef`», «Val». Эти изменения были внесены в филиал выпуска 37.0.x в не-API-брейк-стимул. Изменения в ветке выпуска 38.0.0 (и `mained в репозитории Wasmtime) включают в себя незначительные обновления API для лучшего удовлетворения семантических изменений API. Единственный известный обходной пункт в настоящее время заключается в том, чтобы избежать использования `externref` и `anyref` в C/C++ API Wasmtime. Если избежать этих типов невозможно, то пользователям необходимо обновить, чтобы смягчить проблему утечки.
Программный продукт не освобождает ресурс после окончания его эффективного жизненного цикла, то есть после того, как ресурс более не нужен.
https://cwe.mitre.org/data/definitions/772.html →Открыть в коллекции CWE →Злоумышленник выполняет флудинг на уровне HTTP с целью вывода из строя конкретного веб-приложения, а не всего, что прослушивает TCP/IP-соединение. При данной атаке типа «отказ в обслуживании» требуется значительно меньше пакетов, что затрудняет её обнаружение. Это аналог SYN-флуда в HTTP. Идея состоит в том, чтобы поддерживать HTTP-сессию неограниченно долго, а затем повторить это сотни раз. Атака нацелена на слабости программного обеспечения веб-сервера, связанные с исчерпанием ресурсов. Веб-сервер ожидает ответов злоумышленника в рамках инициированных HTTP-сессий, тогда как потоки соединений истощаются.
https://capec.mitre.org/data/definitions/469.html →Открыть в коллекции CAPEC →| Продукт | Вендор | Статус |
|---|---|---|
| Отслеживается | ||
| Отслеживается | ||
| rust-wasmtime | Отслеживается | |
| wasmtime | * | Отслеживается |