Изследователи по киберсигурност разкриха критичен дефект в сигурността в isolated-vm – популярна библиотека с отворен код за изолирана среда с над 2900 звезди и 190 разклонения (forks) в GitHub, който може да позволи на атакуващите да избягат от границите на изолираната среда.

Уязвимостта („GHSA-864f-rcv7-6rh4“), на която все още не е назначен CVE идентификатор, засяга всички версии на библиотеката преди и включително 7.0.0. Тя е отстранена във версии 6.2.0 и 7.0.1, пуснати по-рано този месец.

Isolated-vm е Node.js библиотека за изпълнение на ненадежден JavaScript в рамките на V8 Isolate – независим екземпляр на JavaScript двигателя Google V8, позволяващ на множество изолирани JavaScript среди да работят едновременно, без да споделят данни или да си пречат една на друга. Npm пакетът е отчетен с почти 1 милион изтегляния през последната седмица.

Тъй като всеки V8 Isolate има отделно състояние и поддържа своя собствена купчина (heap), не е възможно директно да се предават JavaScript обекти от основната Node.js нишка в работна изолирана среда. Isolated-vm предоставя клас, наречен ExternalCopy, за сигурно сериализиране на JavaScript обекти извън хост средата и десериализирането им в гост средата.

Уязвимостта, идентифицирана от Endor Labs, се намира в този компонент, позволявайки на код, изпълняван в изолираната среда, да излезе от нея и да повреди паметта в хост приложението.

„Объркване на типовете (type confusion) при обработката на опцията transferList от ExternalCopy позволява на код, работещ в изолираната среда, да повреди паметта в хост процеса“, казва изследователят от Endor Labs Кристиан-Александру Стайку, на когото се приписва откриването и докладването на дефекта, в технически доклад, споделен с The Hacker News.

„Стартирайки от нищо друго освен една ivm.Reference – стандартният начин, по който хостовете предоставят каквато и да е възможност на изолираната среда – ние ескалирахме грешката от срив с контролиран адрес чак до прихващане на потока на управление на хоста, демонстрирайки пълно бягство от изолираната среда от госта към хоста.“

Успешното експлоатиране на дефекта позволява повреждане на паметта в хост процеса, което води до срив на хост процеса с грешка в сегментирането (SIGSEGV). То може също да доведе до бягство от изолираната среда от тип гост-към-хост и разрушаване на границата на доверие, което обезсмисля самата цел на isolated-vm.

„Минималното демонстрирано въздействие е надежден срив с контролиран адрес (отказ от услуга), който може да бъде задействан от всеки гост, на когото е предоставена ivm.Reference (стандартният начин за предоставяне на възможности на изолирана среда)“, заяви поддържащият проекта Марсел Лаверде в консултативен доклад.

„Максималното демонстрирано въздействие е прихващане на потока на управление на хост процеса, т.е. потенциално отдалечено изпълнение на код в хоста.“

На потребителите, които имат инсталиран isolated-vm в своите среди за разработка, се препоръчва да обновят до най-новата версия за оптимална защита. Допълнителни подробности за пълния експлоит са спестени, за да се предотврати стартирането на собствени атаки от злонамерени субекти.

„Най-важният извод е, че това, което не беше счупено, е самият примитив за изолация“, каза Стайку. „Границата на Isolate на V8 издържа. Това, което се провали, беше свързващият C++ код, който прехвърля стойности през тази граница. Един перфектно здрав градивен елемент беше компрометиран от слоя за свързване, увит около него.“