Check if you are vulnerable to the OpenSSL « heartbleed » bug.
curl -s https://gist.githubusercontent.com/ironcamel/10223348/raw/ssl-heartbleed-check.pl | perl
Check if you are vulnerable to the OpenSSL « heartbleed » bug.
curl -s https://gist.githubusercontent.com/ironcamel/10223348/raw/ssl-heartbleed-check.pl | perl
#!/usr/bin/env perl | |
use strict; | |
use warnings; | |
use Net::SSLeay (); | |
use Time::ParseDate; | |
sub print_color { | |
my ($color, $text) = @_; | |
print "\e[${color}m$text\e[m\n"; | |
} | |
my $ssl_ver = Net::SSLeay::SSLeay(); | |
my $ssl_ver_text = Net::SSLeay::SSLeay_version(0); | |
my $ssl_cflags = Net::SSLeay::SSLeay_version(2); | |
my $ssl_built_on = Net::SSLeay::SSLeay_version(3); | |
print "$ssl_ver_text\n"; | |
#printf "SSL version 0x%x %d.%d.%d%s\nCFLAGS=%s\nBUILT_ON=%s\n", | |
# $ssl_ver, | |
# ($ssl_ver >> 28) & 0xff, | |
# ($ssl_ver >> 20) & 0xff, | |
# ($ssl_ver >> 12) & 0xff, | |
# do { my $minor = ($ssl_ver >> 4) & 0xff; $minor ? chr(96+$minor) : '' }, | |
# $ssl_cflags, | |
# $ssl_built_on; | |
# TODO : openssl may be dynamically linked, so the version reported by | |
# Net::SSLeay may not match the real version installed | |
if ( | |
( | |
$ssl_ver_text =~ /^OpenSSL 1\.0\.(?:1[a-f]?|2-beta1)(?:-fips)? / | |
|| ($ssl_ver >= 0x10001000 && $ssl_ver <= 0x1000106f) | |
|| $ssl_ver == 0x10002001 | |
) | |
&& $ssl_cflags !~ / -DOPENSSL_NO_HEARTBEATS / | |
) { | |
(my $build_time = $ssl_built_on) =~ s/^[^:]*: *//; | |
# the unix time 1396828800 is 2014-04-07 00:00:00 | |
my $recently_built = parsedate($build_time) > 1396828800; | |
if ( $recently_built ) { | |
print_color "1;33", "Version number indicates vulnerable," | |
. " but your build is recent so may be patched."; | |
} else { | |
print_color "1;31", "Vulnerable to heartbleed!"; | |
} | |
exit 1; | |
} else { | |
print_color "1;32", "Not vulnerable to heartbleed."; | |
#print_color "1;33", "Maybe not vulnerable to heartbleed."; | |
} |