Security researchers working for the company Sucuri, have decided to revise the report, written back in 2012, dedicated to the API-call security. API calls must verify the integrity of such libraries as JSSE, OpenSSL and of GnuTLS, or transport libraries such as cURL. However, researchers have found that it is possible to forge a TLS-certificate, used to verify the transaction.
The main sources of this vulnerability – SSL-library such as OpenSSL, GnuTLS, JSSE, CryptoAPI, etc, as well as high-level transport libraries such as cURL, Apache HttpClient, andutlib, working as a wrapper for the SSL-libraries.
Sucuri found that the use of these libraries makes it very hard or impossible to check the status of a revoked TLS-certificate, as well as the leads to other verification problems. As a result, the client is left vulnerable to attack MitM.
The problem with TLS-certificates
How does this attack work? The server on the other end of the TLS – API Server – checks itself by sending an X.509 certificate to the client. The client must check the signature certificate from the list of known root certificates.
If not reviewed, the X.509 certificate validity is left unknown, and the client can get a fake API-server certificate. The user will be unaware that they were a victim of a fraud, because the browser does not participate in this process.
PHP has fixed many of these issues in version 5.6. The same was done in Python in 2014.
Sucuri researchers decided to test new programming languages to see what problems still remain. As it turned out, all programming languages could not verify that the certificate has been revoked. This vulnerability is called OWASP.
There are several possible solutions to protect against this vulnerability. Upgrade to the latest version of the language will help to remove many of the problems with the certification validation (but is not considered as an aspect of the certificate revocation).
With Python, for example, you should pass a context parameter to verify the certificate. Similarly, http.client.HTTPSConnection constructor must also pass a context parameter. TLS Implementation in PHP 5.5 and below is broken by using stream function. Using cURL-functions instead of them and upgrade to PHP 5.6 will help to solve the problem.
There are also some services which enable test API, which is used by a server. These services can identify potential issues. In general, it can be noted that TLS can still be broken. Solutions for solving these problems exist, but they have to be used carefuly in order to achieve high efficiency.