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