scripts: always check certificates
authorJosh Roys <roysjosh@gmail.com>
Sat, 23 Jul 2022 15:23:16 +0000 (11:23 -0400)
committerChristian Marangi <ansuelsmth@gmail.com>
Sat, 10 Sep 2022 13:24:22 +0000 (15:24 +0200)
Remove flags from wget and curl instructing them to ignore bad server
certificates. Although other mechanisms can protect against malicious
modifications of downloads, other vectors of attack may be available
to an adversary.

TLS certificate verification can be disabled by turning oof the
"Enable TLS certificate verification during package download" option
enabled by default in the "Global build settings" in "make menuconfig"

Signed-off-by: Josh Roys <roysjosh@gmail.com>
[ add additional info on how to disable this option ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
config/Config-build.in
rules.mk
scripts/download.pl

index 400bf15665df29d5280e9ecc63096682b4cd316f..2eded2b288424be38a7035dda6b85cf4a1265d2d 100644 (file)
@@ -58,6 +58,10 @@ menu "Global build settings"
                bool "Enable signature checking in opkg"
                default SIGNED_PACKAGES
 
+       config DOWNLOAD_CHECK_CERTIFICATE
+               bool "Enable TLS certificate verification during package download"
+               default y
+
        comment "General build options"
 
        config TESTING_KERNEL
index 5a56fd6f4ace889cc5f903d70e5c0cc9342666e4..c893f61b0f702ba8696a6132567e6f6c1f6ce763 100644 (file)
--- a/rules.mk
+++ b/rules.mk
@@ -257,6 +257,9 @@ ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e
 MKHASH:=$(STAGING_DIR_HOST)/bin/mkhash
 # MKHASH is used in /scripts, so we export it here.
 export MKHASH
+# DOWNLOAD_CHECK_CERTIFICATE is used in /scripts, so we export it here.
+DOWNLOAD_CHECK_CERTIFICATE:=$(CONFIG_DOWNLOAD_CHECK_CERTIFICATE)
+export DOWNLOAD_CHECK_CERTIFICATE
 CP:=cp -fpR
 LN:=ln -sf
 XARGS:=xargs -r
index af13c0ae008e90688091274b419f76d31d3e8c54..ab1801aad5aedd15ca3a2472cff53148e178bbfb 100755 (executable)
@@ -24,6 +24,8 @@ my $scriptdir = dirname($0);
 my @mirrors;
 my $ok;
 
+my $check_certificate = $ENV{DOWNLOAD_CHECK_CERTIFICATE} eq "y";
+
 $url_filename or $url_filename = $filename;
 
 sub localmirrors {
@@ -80,8 +82,8 @@ sub download_cmd($) {
        }
 
        return $have_curl
-               ? (qw(curl -f --connect-timeout 20 --retry 5 --location --insecure), shellwords($ENV{CURL_OPTIONS} || ''), $url)
-               : (qw(wget --tries=5 --timeout=20 --no-check-certificate --output-document=-), shellwords($ENV{WGET_OPTIONS} || ''), $url)
+               ? (qw(curl -f --connect-timeout 20 --retry 5 --location), $check_certificate ? '' : '--insecure', shellwords($ENV{CURL_OPTIONS} || ''), $url)
+               : (qw(wget --tries=5 --timeout=20 --output-document=-), $check_certificate ? '' : '--no-check-certificate', shellwords($ENV{WGET_OPTIONS} || ''), $url)
        ;
 }