From b16322aefbe09008fa6f68df3d91bed0cf2416e2 Mon Sep 17 00:00:00 2001 From: Bernhard Amann Date: Wed, 21 May 2014 10:50:31 -0700 Subject: [PATCH] fix expression errors in x509 policy scrips when unparseable data is in certificate chain. --- scripts/policy/protocols/ssl/extract-certs-pem.bro | 2 +- scripts/policy/protocols/ssl/validate-certs.bro | 5 +++-- scripts/policy/protocols/ssl/validate-ocsp.bro | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/policy/protocols/ssl/extract-certs-pem.bro b/scripts/policy/protocols/ssl/extract-certs-pem.bro index 549c6943e6..22de3bfb84 100644 --- a/scripts/policy/protocols/ssl/extract-certs-pem.bro +++ b/scripts/policy/protocols/ssl/extract-certs-pem.bro @@ -29,7 +29,7 @@ global extracted_certs: set[string] = set() &read_expire=1hr &redef; event ssl_established(c: connection) &priority=5 { - if ( ! c$ssl?$cert_chain || |c$ssl$cert_chain| == 0 ) + if ( ! c$ssl?$cert_chain || |c$ssl$cert_chain| == 0 || !c$ssl$cert_chain[0]?$x509 ) return; if ( ! addr_matches_host(c$id$resp_h, extract_certs_pem) ) diff --git a/scripts/policy/protocols/ssl/validate-certs.bro b/scripts/policy/protocols/ssl/validate-certs.bro index de22e2d30d..205bf6808e 100644 --- a/scripts/policy/protocols/ssl/validate-certs.bro +++ b/scripts/policy/protocols/ssl/validate-certs.bro @@ -36,7 +36,8 @@ event ssl_established(c: connection) &priority=3 local chain: vector of opaque of x509 = vector(); for ( i in c$ssl$cert_chain ) { - chain[i] = c$ssl$cert_chain[i]$x509$handle; + if ( c$ssl$cert_chain[i]?$x509 ) + chain[i] = c$ssl$cert_chain[i]$x509$handle; } if ( chain_id in recently_validated_certs ) @@ -49,7 +50,7 @@ event ssl_established(c: connection) &priority=3 c$ssl$validation_status = result$result_string; recently_validated_certs[chain_id] = result$result_string; } - + if ( c$ssl$validation_status != "ok" ) { local message = fmt("SSL certificate validation failed with (%s)", c$ssl$validation_status); diff --git a/scripts/policy/protocols/ssl/validate-ocsp.bro b/scripts/policy/protocols/ssl/validate-ocsp.bro index 70205c5a49..01b6853226 100644 --- a/scripts/policy/protocols/ssl/validate-ocsp.bro +++ b/scripts/policy/protocols/ssl/validate-ocsp.bro @@ -39,7 +39,10 @@ event ssl_established(c: connection) &priority=3 local chain: vector of opaque of x509 = vector(); for ( i in c$ssl$cert_chain ) - chain[i] = c$ssl$cert_chain[i]$x509$handle; + { + if ( c$ssl$cert_chain[i]?$x509 ) + chain[i] = c$ssl$cert_chain[i]$x509$handle; + } local reply_id = cat(md5_hash(c$ssl$ocsp_response), join_string_vec(c$ssl$cert_chain_fuids, "."));