Вразливість в OpenPGP.js дозволяє обійти перевірку цифрового підпису
Вразливість в OpenPGP.js дозволяє обійти перевірку цифрового підпису
В бібліотеці OpenPGP.js виявлено вразливість (CVE-2025-47934), яка дозволяє зловмисникам обходити перевірку цифрового підпису. Ця проблема дає змогу відправити модифіковане повідомлення, яке буде сприйняте одержувачем як верифіковане.
Що таке OpenPGP.js і де використовується
Бібліотека OpenPGP.js надає самодостатню реалізацію протоколу OpenPGP мовою JavaScript. Вона дозволяє виконувати в браузері операції шифрування та працювати з цифровими підписами на основі відкритих ключів.
Проєкт розвивається розробниками Proton Mail і, крім організації наскрізного шифрування повідомлень у Proton Mail, застосовується в таких проєктах:
- FlowCrypt
- Mymail-Crypt
- UDC
- Encrypt.to
- PGP Anywhere
- Passbolt
Технічні деталі вразливості в OpenPGP.js
Вразливість впливає на процедури верифікації вбудованого в текст підпису (openpgp.verify) та підписаних і зашифрованих повідомлень (openpgp.decrypt). Функції повертатимуть ознаку успішної перевірки цифрового підпису, незважаючи на те, що вміст замінено.
Зловмисник може використовувати наявні підписані повідомлення для формування нових повідомлень. При розпакуванні таких повідомлень вразливою версією OpenPGP.js буде вилучено підставлений вміст, який відрізняється від вмісту вихідного підписаного повідомлення.
Важливо зазначити, що вразливість не зачіпає підписи, які поширюються окремо від тексту. Проблема проявляється тільки при передачі підпису разом з текстом єдиним блоком даних.
Як працює атака на цифровий підпис
Для формування підставного повідомлення зловмиснику достатньо мати одне повідомлення із вбудованим чи окремим підписом. Також потрібно знати вихідні дані, які були підписані в цьому повідомленні.
Зловмисник може змінити повідомлення так, що для зміненого варіанту підпис продовжуватиме вважатися коректним. Аналогічно можна змінювати зашифровані повідомлення з підписом, при розпакуванні яких будуть повертатися додані зловмисником дані.
Які версії бібліотеки вразливі
Проблема проявляється лише в гілках OpenPGP.js 5.x та 6.x і не зачіпає OpenPGP.js 4.x. Вразливість усунуто у випусках OpenPGP.js 5.11.3 та 6.1.1.
Отже, якщо ви використовуєте бібліотеку OpenPGP.js у своїх проєктах, настійно рекомендується оновитися до безпечних версій, щоб уникнути потенційних атак на верифікацію цифрових підписів.
Більше інформації можна знайти в офіційному повідомленні про вразливість на сайті проєкту.