Clear-text protocols such as ftp
, telnet
or non-secure http
lack encryption of transported data, as well as
the capability to build an authenticated connection. It means that an attacker able to sniff traffic from the network can read, modify or corrupt the
transported content. These protocols are not secure as they expose applications to an extensive range of risks:
Even in the context of isolated networks like offline environments or segmented cloud environments, the insider threat exists. Thus, attacks involving communications being sniffed or tampered with can still happen.
For example, attackers could successfully compromise prior security layers by:
In such cases, encrypting communications would decrease the chances of attackers to successfully leak data or steal credentials from other network components. By layering various security practices (segmentation and encryption, for example), the application will follow the defense-in-depth principle.
Note that using the http
protocol is being deprecated by major web browsers.
In the past, it has led to the following vulnerabilities:
There is a risk if you answered yes to any of those questions.
ssh
as an alternative to telnet
sftp
, scp
or ftps
instead of ftp
https
instead of http
SMTP
over SSL/TLS
or SMTP
with STARTTLS
instead of clear-text SMTP It is recommended to secure all transport channels (even local network) as it can take a single non secure connection to compromise an entire application or system.
These clients from Apache commons net libraries are based on unencrypted protocols and are not recommended:
TelnetClient telnet = new TelnetClient(); // Sensitive FTPClient ftpClient = new FTPClient(); // Sensitive SMTPClient smtpClient = new SMTPClient(); // Sensitive
Unencrypted HTTP connections, when using okhttp library for instance, should be avoided:
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.CLEARTEXT) // Sensitive .build();
Android WebView can be configured to allow a secure origin to load content from any other origin, even if that origin is insecure (mixed content);
import android.webkit.WebView WebView webView = findViewById(R.id.webview) webView.getSettings().setMixedContentMode(MIXED_CONTENT_ALWAYS_ALLOW); // Sensitive
Use instead these clients from Apache commons net and JSch/ssh library:
JSch jsch = new JSch(); // Compliant if(implicit) { // implicit mode is considered deprecated but offer the same security than explicit mode FTPSClient ftpsClient = new FTPSClient(true); // Compliant } else { FTPSClient ftpsClient = new FTPSClient(); // Compliant } if(implicit) { // implicit mode is considered deprecated but offer the same security than explicit mode SMTPSClient smtpsClient = new SMTPSClient(true); // Compliant } else { SMTPSClient smtpsClient = new SMTPSClient(); // Compliant smtpsClient.connect("127.0.0.1", 25); if (smtpsClient.execTLS()) { // commands } }
Perform HTTP encrypted connections, with okhttp library for instance:
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) // Compliant .build();
The most secure mode for Android WebView is MIXED_CONTENT_NEVER_ALLOW
;
import android.webkit.WebView WebView webView = findViewById(R.id.webview) webView.getSettings().setMixedContentMode(MIXED_CONTENT_NEVER_ALLOW);
No issue is reported for the following cases because they are not considered sensitive:
localhost