
Secure Command Line / Scurl

Frequently users will want to download files from the Internet. Secure downloading of files is a complex subject and the potential security implications are often poorly understood.
Downloads with scurl - SSL Command Line Downloader[edit]
Introduction[edit]
When using the command line to download files or webpages, resorting to the simple wget
command is ill-advised because it is buggy. For example, if users do not force a request to use SSL encryption,
wget
can fail silently. Even when SSL is enforced with a command line option, this can break interoperability with some sites
that use self-signed, expired or invalid certificates. Users could potentially ignore certificate verification warnings and proceed with downloads where the site's authenticity is in question.
To provide greater security when downloading, scurl
comes pre-installed in Kicksecure and provides a simple wrapper around
curl
:
/usr/bin/scurl
simply adds
--tlsv1.3
to allcurl
instances to enforce strong encryption.scurl-download
additionally adds
--location
to follow redirects as to use extract the file name from the URL. [1]
scurl
is not vulnerable to SSLstrip. This is a man-in-the-middle attack which forces a user's browser to communicate with the adversary in plain-text over HTTP (poisoning the download). At present,
scurl
is available in Kicksecure and the command will generally not work in other distributions.
How-to: Invoke scurl-download[edit]
Note: In the examples below, the file will be saved in the user's current working directory. If the file should be saved elsewhere, change the current working directory before running scurl.
To invoke scurl-download to download a file, simply run (replace the https:// example with the actual file location).
Click = Copy Copied to clipboard!
This will download browser.tar.xz
to the current working directory.
To invoke scurl-download to download a web page, run (replace the https:// example with the actual webpage).
Click = Copy Copied to clipboard!
All other curl/Linux features continue to work, such as storing the input inside of a file (change index.html to the desired file name).
Click = Copy Copied to clipboard!
scurl Errors[edit]
As expected, attempting scurl with plain HTTP will fail.
Click = Copy Copied to clipboard!
This will result in the following output.
curl: (1) Protocol http not supported or disabled in libcurl
Similarly, scurl fails with the following attempt.
Click = Copy Copied to clipboard!
Returning the following output.
curl: (1) Protocol http not supported or disabled in libcurl
Running scurl against a self-signed or invalid SSL certificate also fails.
Click = Copy Copied to clipboard!
This results in an error, for example.
curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file is not adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.
Secure Downloads with Web Browsers[edit]
Preventing SSLStrip Attacks[edit]
Users often mistakenly believe that a secure, green padlock and a https://
URL makes any download from that particular website secure. This is not the case because the website might be redirecting to http
. In fact, an SSLstrip attack might succeed if a link is pasted or typed into the address bar without the
https://
component (e.g. example.com
instead of https://example.com
). [2]
In this instance, it is impossible to confirm if the file is being downloaded over https://
. Potentially, a SSLstrip attack might have made the download take place over plain http
. The reason is a padlock is not visible; it just appears empty.
To avoid this risk and similar threats, always explicitly type or paste https://
in the URL / address bar. The SSL certificate button or padlock will not appear in this instance, but that is nothing to be concerned about. Unfortunately, few users follow this sage advice; instead most mistakenly believe pasting or typing www.example.com
into the address bar is safe.
Secure Operating System Updates and Software Installation[edit]
See also:
Other Precautions[edit]
For even greater safety, download files from onion services (.onion
addresses) whenever possible. Improved security is provided by onion service downloads, since the connection is encrypted end-to-end (with PFS), targeting of individuals is difficult, and adversaries cannot easily determine where the user is connecting to or from.
Also, if files are already available in repositories, then prefer mechanisms which simplify and automate software upgrades and installations (like APT functions), rather than download Internet resources. Avoid installing unsigned software and be sure to always verify key fingerprints and digital signatures of signed software from the Internet, before importing keys or completing installations. For more on this topic, see: Installing Software Best Practices.
Finally, consider using Multiple Kicksecure when downloading and installing additional software, to better compartmentalize user activities and minimize the threat of misbehaving applications.
Outside of Kicksecure[edit]
curl[edit]
Click = Copy Copied to clipboard!
curl-download[edit]
Note: Replace the url
with the actual link to the file to download. [3]
Click = Copy Copied to clipboard!
Example:
Note: Replace the URL with the actual link to the file to download.
curl --tlsv1.3 --remote-name --continue-at - -- "https://www.kicksecure.com/download/iso/17.2.8.5/Kicksecure-Xfce-17.2.8.5.Intel_AMD64.iso"
Attribution[edit]
Kicksecure is an Implementation of the Securing Debian Manual. This chapter has been inspired by:
Securing Debian Manual
, chapter Secure file transfers
Footnotes[edit]
- ↑
write output to a local file with the same name as the remote file retrieved
. Only the file part of the remote file is used and the path is cut off.
- ↑ And that website does not:
- Use HTTP Strict Transport Security (HSTS)
. See also: https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly
. Without HSTS, sites with non-encrypted resources or sub-domains are vulnerable to SSLstrip.
- Have a HTTPS Everywhere
rule in effect.
- Use HSTS preloading
.
- Use HTTP Public Key Pinning
. See also: https://news.netcraft.com/archives/2016/03/22/secure-websites-shun-http-public-key-pinning.html
. HPKP limits trust to a handful of Certificate Authorities, but is not used by many websites due to the risk of site breakage if keys are not managed vigilantly.
- Use HTTP Strict Transport Security (HSTS)
- ↑
--
: See Use of End-of-Options Parameter (--).--continue-at -
:to tell curl to automatically find out where/how to resume the transfer. It then uses the given output/input files to figure that out.curl man page

We believe security software like Kicksecure needs to remain Open Source and independent. Would you help sustain and grow the project? Learn more about our 12 year success story and maybe DONATE!