我们发现在使用对称加密时,可以通过 gnupg.GPG.encrypt() 和 gnupg.GPG.decrypt() 方法的 passphrase 属性注入数据。
所提供的密码短语未经过换行符验证,库会将 --passphrase-fd=0
传递给 gpg 可执行文件,gpg 期望密码短语位于
标准输入的第一行,而要解密的密文或要加密的
明文则位于后续行。
通过提供包含换行符的密码短语,攻击者可以 控制/修改正在解密/加密的密文/明文。
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
漏洞由 Alexander Kjäll 和 Stig Palmquist 发现。
感谢 remmer。