
Мы обнаружили способ внедрения данных через свойство passphrase методов gnupg.GPG.encrypt() и gnupg.GPG.decrypt() при использовании симметричного шифрования.
Переданная парольная фраза не проверяется на наличие символов новой строки, и библиотека передаёт --passphrase-fd=0 исполняемому файлу gpg, который ожидает парольную фразу в первой строке stdin, а на последующих строках — шифротекст для расшифровки или открытый текст для шифрования.
Указывая парольную фразу, содержащую переход на новую строку, злоумышленник может управлять/изменять расшифровываемый/шифруемый шифротекст/открытый текст.
python-gnupg 0.4.3 и, возможно, более ранние версии
Пользователям следует обновиться до версии 0.4.4
Гипотетическое приложение, использующее успешную расшифровку данных для аутентификации пользователя, и способ его эксплуатации доступны здесь:
https://github.com/hackeriet/CVE-2019-6690-python-gnupg-vulnerability
Debian: apt install libmojolicious-perl python3-gnupg python3-flask
Nix: nix-shell
./server.py
./exploit.pl
Уязвимость обнаружена Александром Чьеллем и Стигом Палмквистом.
Благодарность remmer.