summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2023-04-14 15:27:13 +0000
committertb <>2023-04-14 15:27:13 +0000
commit1a5bd4cb78097710de5283a737286c1b65609dc7 (patch)
tree7aed66c51404da4ea67dbb87b6191ab6c0e9a5ee /src
parentbe3f11b57177567c1f951c5428261d6d8d9ee729 (diff)
downloadopenbsd-1a5bd4cb78097710de5283a737286c1b65609dc7.tar.gz
openbsd-1a5bd4cb78097710de5283a737286c1b65609dc7.tar.bz2
openbsd-1a5bd4cb78097710de5283a737286c1b65609dc7.zip
Drop policy printing from openssl
Nothing really uses the policy tree. It's desgined with built-in DoS capabilities directly from the RFC. It will be removed from the attack surface and replaced with something equivalent that doesn't grow exponentially with the depth. This removes the only reason the policy tree itself ever leaked out of the library. ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/openssl/apps.c43
-rw-r--r--src/usr.bin/openssl/apps.h3
-rw-r--r--src/usr.bin/openssl/cms.c24
-rw-r--r--src/usr.bin/openssl/s_cb.c5
-rw-r--r--src/usr.bin/openssl/smime.c21
-rw-r--r--src/usr.bin/openssl/verify.c5
6 files changed, 6 insertions, 95 deletions
diff --git a/src/usr.bin/openssl/apps.c b/src/usr.bin/openssl/apps.c
index fd13371f5d..592a68980a 100644
--- a/src/usr.bin/openssl/apps.c
+++ b/src/usr.bin/openssl/apps.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: apps.c,v 1.62 2022/01/10 12:17:49 tb Exp $ */ 1/* $OpenBSD: apps.c,v 1.63 2023/04/14 15:27:13 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -1951,47 +1951,6 @@ pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value)
1951 return rv; 1951 return rv;
1952} 1952}
1953 1953
1954static void
1955nodes_print(BIO *out, const char *name, STACK_OF(X509_POLICY_NODE) *nodes)
1956{
1957 X509_POLICY_NODE *node;
1958 int i;
1959
1960 BIO_printf(out, "%s Policies:", name);
1961 if (nodes) {
1962 BIO_puts(out, "\n");
1963 for (i = 0; i < sk_X509_POLICY_NODE_num(nodes); i++) {
1964 node = sk_X509_POLICY_NODE_value(nodes, i);
1965 X509_POLICY_NODE_print(out, node, 2);
1966 }
1967 } else
1968 BIO_puts(out, " <empty>\n");
1969}
1970
1971void
1972policies_print(BIO *out, X509_STORE_CTX *ctx)
1973{
1974 X509_POLICY_TREE *tree;
1975 int explicit_policy;
1976 int free_out = 0;
1977
1978 if (out == NULL) {
1979 out = BIO_new_fp(stderr, BIO_NOCLOSE);
1980 free_out = 1;
1981 }
1982 tree = X509_STORE_CTX_get0_policy_tree(ctx);
1983 explicit_policy = X509_STORE_CTX_get_explicit_policy(ctx);
1984
1985 BIO_printf(out, "Require explicit Policy: %s\n",
1986 explicit_policy ? "True" : "False");
1987
1988 nodes_print(out, "Authority", X509_policy_tree_get0_policies(tree));
1989 nodes_print(out, "User", X509_policy_tree_get0_user_policies(tree));
1990
1991 if (free_out)
1992 BIO_free(out);
1993}
1994
1995/* 1954/*
1996 * next_protos_parse parses a comma separated list of strings into a string 1955 * next_protos_parse parses a comma separated list of strings into a string
1997 * in a format suitable for passing to SSL_CTX_set_next_protos_advertised. 1956 * in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
diff --git a/src/usr.bin/openssl/apps.h b/src/usr.bin/openssl/apps.h
index f4fa5361a7..82e0662c88 100644
--- a/src/usr.bin/openssl/apps.h
+++ b/src/usr.bin/openssl/apps.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: apps.h,v 1.31 2022/01/10 12:17:49 tb Exp $ */ 1/* $OpenBSD: apps.h,v 1.32 2023/04/14 15:27:13 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -237,7 +237,6 @@ int parse_yesno(const char *str, int def);
237X509_NAME *parse_name(char *str, long chtype, int multirdn); 237X509_NAME *parse_name(char *str, long chtype, int multirdn);
238int args_verify(char ***pargs, int *pargc, int *badarg, BIO *err, 238int args_verify(char ***pargs, int *pargc, int *badarg, BIO *err,
239 X509_VERIFY_PARAM **pm); 239 X509_VERIFY_PARAM **pm);
240void policies_print(BIO *out, X509_STORE_CTX *ctx);
241int bio_to_mem(unsigned char **out, int maxlen, BIO *in); 240int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
242int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value); 241int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
243int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, const char *algname, 242int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, const char *algname,
diff --git a/src/usr.bin/openssl/cms.c b/src/usr.bin/openssl/cms.c
index 0ddf26e5a7..121a413a21 100644
--- a/src/usr.bin/openssl/cms.c
+++ b/src/usr.bin/openssl/cms.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: cms.c,v 1.33 2023/03/06 14:32:05 tb Exp $ */ 1/* $OpenBSD: cms.c,v 1.34 2023/04/14 15:27:13 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project. 3 * project.
4 */ 4 */
@@ -69,7 +69,6 @@
69#include <openssl/cms.h> 69#include <openssl/cms.h>
70 70
71static int save_certs(char *signerfile, STACK_OF(X509) *signers); 71static int save_certs(char *signerfile, STACK_OF(X509) *signers);
72static int cms_cb(int ok, X509_STORE_CTX *ctx);
73static void receipt_request_print(BIO *out, CMS_ContentInfo *cms); 72static void receipt_request_print(BIO *out, CMS_ContentInfo *cms);
74static CMS_ReceiptRequest *make_receipt_request( 73static CMS_ReceiptRequest *make_receipt_request(
75 STACK_OF(OPENSSL_STRING) *rr_to, int rr_allorfirst, 74 STACK_OF(OPENSSL_STRING) *rr_to, int rr_allorfirst,
@@ -1442,7 +1441,6 @@ cms_main(int argc, char **argv)
1442 if ((store = setup_verify(bio_err, cfg.CAfile, 1441 if ((store = setup_verify(bio_err, cfg.CAfile,
1443 cfg.CApath)) == NULL) 1442 cfg.CApath)) == NULL)
1444 goto end; 1443 goto end;
1445 X509_STORE_set_verify_cb(store, cms_cb);
1446 if (cfg.vpm != NULL) { 1444 if (cfg.vpm != NULL) {
1447 if (!X509_STORE_set1_param(store, cfg.vpm)) 1445 if (!X509_STORE_set1_param(store, cfg.vpm))
1448 goto end; 1446 goto end;
@@ -1804,26 +1802,6 @@ save_certs(char *signerfile, STACK_OF(X509) *signers)
1804 return 1; 1802 return 1;
1805} 1803}
1806 1804
1807/* Minimal callback just to output policy info (if any) */
1808
1809static int
1810cms_cb(int ok, X509_STORE_CTX *ctx)
1811{
1812 int error;
1813
1814 error = X509_STORE_CTX_get_error(ctx);
1815
1816 verify_err = error;
1817
1818 if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) &&
1819 ((error != X509_V_OK) || (ok != 2)))
1820 return ok;
1821
1822 policies_print(NULL, ctx);
1823
1824 return ok;
1825}
1826
1827static void 1805static void
1828gnames_stack_print(BIO *out, STACK_OF(GENERAL_NAMES) *gns) 1806gnames_stack_print(BIO *out, STACK_OF(GENERAL_NAMES) *gns)
1829{ 1807{
diff --git a/src/usr.bin/openssl/s_cb.c b/src/usr.bin/openssl/s_cb.c
index 73f45c25c5..d503b8cf27 100644
--- a/src/usr.bin/openssl/s_cb.c
+++ b/src/usr.bin/openssl/s_cb.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s_cb.c,v 1.20 2022/08/31 07:12:30 tb Exp $ */ 1/* $OpenBSD: s_cb.c,v 1.21 2023/04/14 15:27:13 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -189,11 +189,8 @@ verify_callback(int ok, X509_STORE_CTX * ctx)
189 BIO_printf(bio_err, "\n"); 189 BIO_printf(bio_err, "\n");
190 break; 190 break;
191 case X509_V_ERR_NO_EXPLICIT_POLICY: 191 case X509_V_ERR_NO_EXPLICIT_POLICY:
192 policies_print(bio_err, ctx);
193 break; 192 break;
194 } 193 }
195 if (err == X509_V_OK && ok == 2)
196 policies_print(bio_err, ctx);
197 194
198 BIO_printf(bio_err, "verify return:%d\n", ok); 195 BIO_printf(bio_err, "verify return:%d\n", ok);
199 return (ok); 196 return (ok);
diff --git a/src/usr.bin/openssl/smime.c b/src/usr.bin/openssl/smime.c
index e54c8d0b84..46bfa08679 100644
--- a/src/usr.bin/openssl/smime.c
+++ b/src/usr.bin/openssl/smime.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: smime.c,v 1.19 2023/03/06 14:32:06 tb Exp $ */ 1/* $OpenBSD: smime.c,v 1.20 2023/04/14 15:27:13 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project. 3 * project.
4 */ 4 */
@@ -70,7 +70,6 @@
70#include <openssl/x509v3.h> 70#include <openssl/x509v3.h>
71 71
72static int save_certs(char *signerfile, STACK_OF(X509) *signers); 72static int save_certs(char *signerfile, STACK_OF(X509) *signers);
73static int smime_cb(int ok, X509_STORE_CTX *ctx);
74 73
75#define SMIME_OP 0x10 74#define SMIME_OP 0x10
76#define SMIME_IP 0x20 75#define SMIME_IP 0x20
@@ -933,7 +932,6 @@ smime_main(int argc, char **argv)
933 if ((store = setup_verify(bio_err, cfg.CAfile, 932 if ((store = setup_verify(bio_err, cfg.CAfile,
934 cfg.CApath)) == NULL) 933 cfg.CApath)) == NULL)
935 goto end; 934 goto end;
936 X509_STORE_set_verify_cb(store, smime_cb);
937 if (cfg.vpm != NULL) { 935 if (cfg.vpm != NULL) {
938 if (!X509_STORE_set1_param(store, cfg.vpm)) 936 if (!X509_STORE_set1_param(store, cfg.vpm))
939 goto end; 937 goto end;
@@ -1103,20 +1101,3 @@ save_certs(char *signerfile, STACK_OF(X509) *signers)
1103 1101
1104 return 1; 1102 return 1;
1105} 1103}
1106
1107/* Minimal callback just to output policy info (if any) */
1108static int
1109smime_cb(int ok, X509_STORE_CTX *ctx)
1110{
1111 int error;
1112
1113 error = X509_STORE_CTX_get_error(ctx);
1114
1115 if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) &&
1116 ((error != X509_V_OK) || (ok != 2)))
1117 return ok;
1118
1119 policies_print(NULL, ctx);
1120
1121 return ok;
1122}
diff --git a/src/usr.bin/openssl/verify.c b/src/usr.bin/openssl/verify.c
index b412623991..b4e0f33f6a 100644
--- a/src/usr.bin/openssl/verify.c
+++ b/src/usr.bin/openssl/verify.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: verify.c,v 1.16 2023/03/06 14:32:06 tb Exp $ */ 1/* $OpenBSD: verify.c,v 1.17 2023/04/14 15:27:13 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -427,7 +427,6 @@ cb(int ok, X509_STORE_CTX *ctx)
427 X509_verify_cert_error_string(cert_error)); 427 X509_verify_cert_error_string(cert_error));
428 switch (cert_error) { 428 switch (cert_error) {
429 case X509_V_ERR_NO_EXPLICIT_POLICY: 429 case X509_V_ERR_NO_EXPLICIT_POLICY:
430 policies_print(NULL, ctx);
431 case X509_V_ERR_CERT_HAS_EXPIRED: 430 case X509_V_ERR_CERT_HAS_EXPIRED:
432 431
433 /* 432 /*
@@ -452,8 +451,6 @@ cb(int ok, X509_STORE_CTX *ctx)
452 return ok; 451 return ok;
453 452
454 } 453 }
455 if (cert_error == X509_V_OK && ok == 2)
456 policies_print(NULL, ctx);
457 if (!cfg.verbose) 454 if (!cfg.verbose)
458 ERR_clear_error(); 455 ERR_clear_error();
459 return (ok); 456 return (ok);