scripts: always check certificates
authorJosh Roys <roysjosh@gmail.com>
Sat, 23 Jul 2022 15:23:16 +0000 (11:23 -0400)
committerPetr Štetiar <ynezz@true.cz>
Wed, 21 Sep 2022 09:52:40 +0000 (11:52 +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>
Signed-off-by: Petr Štetiar <ynezz@true.cz> [backport]
(cherry picked from commit 90c6e3aedf167b0ae1baf376e7800a631681e69a)

config/Config-build.in
rules.mk
scripts/download.pl

index 342859b7c0cdba020e73fb2eadea0e40d74204d0..196d4e67a0beca09e09228627f73d83c00dab127 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 da9bee2899472652d92e684ef563a21180a3ab65..7c83d90eda312b565a797ad29f36f8558dd0c5c4 100644 (file)
--- a/rules.mk
+++ b/rules.mk
@@ -265,6 +265,9 @@ TARGET_CXX:=$(TARGET_CROSS)g++
 KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
 SED:=$(STAGING_DIR_HOST)/bin/sed -i -e
 ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e
+# 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 beb3abdeee429acd7489e7b8ce1e94dc31dfe3c3..99708c456fd6a222924ecb362924582b260c7110 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 {
@@ -82,8 +84,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)
        ;
 }