Критична уязвимост в Capacitor за Android и iOS би могла да позволи на злонамерен линк, отворен вътре в засегнато мобилно приложение, да зареди управлявано от атакуващия уеб съдържание от доверения произход (origin) на приложението.

Проблемът, проследяван като CVE-2026-103922, може да изложи на риск данни на приложението, съхранени в localStorage и бисквитки (cookies), както и да даде на злонамерени скриптове достъп до локални (native) функции на Capacitor, достъпни чрез регистрираните плъгини.

Уязвимостта засяга приложения с Capacitor, използващи уязвими версии на дистрибуциите за Android, iOS, Maven и Swift пакети. Тя е получила критична CVSS оценка 9.6 по CVSS v3.1 с вектор CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N.

Проблемът се дължи на защитата за навигация в WebView на Capacitor. Защитата на навигацията проверява схемата и хоста на целевия URL адрес, но не валидира пътя на URL адреса. Това позволява заявки за навигация към вътрешния път /capacitor_http_interceptor, който се хоства в собствения произход на приложението.

Атакуващ би могъл да създаде специално съставен линк, сочещ към този вътрешен адрес, като същевременно подава произволен отдалечен URL адрес. Когато жертвата активира линка вътре в WebView на приложението, системният слой на Capacitor извлича контролираното от атакуващия съдържание и го връща в WebView.

Тъй като отговорът се зарежда под легитимния произход на приложението, скриптовете в злонамерената страница получават същите права като на самия произход (same-origin privileges).

Критична уязвимост в Capacitor

Това създава сериозен пробив в защитната граница. Злонамереният код може да чете данни от localStorage, да осъществява достъп до бисквитки и да взаимодейства с локалните възможности, предоставени от плъгините на Capacitor.

Точната степен на въздействие зависи от плъгините, които засегнатото приложение регистрира. Въпреки това изложените функции могат да включват достъп до данни от устройството, функции на приложението, токени за автентикация, файлове, известия или други чувствителни възможности.

Проблемът е особено опасен за базирани на Capacitor приложения, които показват контролирани от потребителя линкове, включително приложения за чат, секции с коментари, портали за поддръжка, социални емисии, документи с обогатен текст и вградени браузъри (in-app browsers). Експлоатацията изисква взаимодействие от страна на потребителя, което означава, че жертвата трябва да отвори злонамерения линк от самия контекст на засегнатото приложение.

Според бюлетина за сигурност в GitHub, вътрешният прокси манипулатор остава достъпен дори когато плъгинът CapacitorHttp е изключен, така че деактивирането на плъгина не отстранява проблема при уязвимите версии.

Засегнатите версии на Capacitor включват издания от 6.0.0 преди 6.2.2, 7.0.0 преди 7.6.9, 8.0.0 преди 8.3.5, 8.3.5 преди 8.4.3 и 8.5.0 преди 8.5.1.

Разработчиците трябва да преминат към съответната версия с инсталирани корекции за сигурност, да компилират отново своите Android и iOS приложения и да разпространят обновените версии до потребителите.

Корекциите от производителя блокират навигацията в рамки (frame navigations) към вътрешния прокси път и гарантират, че прокси манипулаторът се обслужва само когато CapacitorHttp е включен. Манипулаторът също така вече не отговаря на заявки за документи или основната рамка (main-frame), докато легитимната употреба на fetch и XMLHttpRequest остава незасегната.

Организациите, които не могат да обновят незабавно, могат да внедят персонализиран плъгин за Capacitor, за да отхвърлят заявки за навигация, насочени към /capacitor_http_interceptor. Разработчиците трябва също така да пречистват и стриктно да валидират всички контролирани от потребителите URL адреси, преди да ги визуализират в WebView на приложението.