
Exploit de prova de conceito para CVE-2019-6690, demonstrando bypass de validação de entrada na criptografia simétrica python-gnupg via injeção de nova linha na frase secreta.
Descobrimos uma maneira de injetar dados através da propriedade passphrase dos métodos gnupg.GPG.encrypt() e gnupg.GPG.decrypt() quando a criptografia simétrica é usada.
A frase secreta fornecida não é validada para quebras de linha, e a biblioteca passa
--passphrase-fd=0 para o executável gpg, que espera a frase secreta na
primeira linha do stdin, e o texto cifrado a ser decifrado ou o texto plano a ser
cifrado nas linhas subsequentes.
Ao fornecer uma frase secreta contendo uma quebra de linha, um invasor pode controlar/modificar o texto cifrado/texto plano que está sendo decifrado/cifrado.
python-gnupg 0.4.3, e talvez versões anteriores
Os usuários devem atualizar para a versão 0.4.4
Aplicação hipotética usando decifração bem-sucedida de dados para autenticar um usuário, e uma maneira de explorá-la está disponível aqui:
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
Vulnerabilidade descoberta por Alexander Kjäll e Stig Palmquist.
Agradecimentos a remmer.