-
Notifications
You must be signed in to change notification settings - Fork 133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OpenSSL in runtime is outdated, update required #307
Comments
Workaround for HttpsUrlConnection: Instead of using Java with underlying OpenSSL:
Use iOS SDK instead
Please be aware, that the callback via iOS SDK comes via a different thread, while the above sample with HttpsUrlConnection is synchronous. |
Thanks for the help. I will try what you indicate to me |
I am trying to compile the project in MacOS but display this error message(Do you know what means this???): INFO] ------------------------------------------------------------------------ This is the error en reports: Test set: org.robovm.compiler.AppCompilerTestTests run: 5, Failures: 0, Errors: 5, Skipped: 0, Time elapsed: 0.132 sec <<< FAILURE! |
@cperez-infoboy hi, Running org.robovm.compiler.AppCompilerTest |
Does this mean that doing HTTPS calls using standard java API's / libraries are in fact currently unsafe? |
there are some amount of vulnerabilities present but it is it is not always these can be used against client. For example heartbleed can be used in this scenario by server (client connects to). As long as your app is connects to know and secure servers chances are low that it happens. |
I have tried to bring a newer OpenSSL into the project. Unfortunately, this is quite a lot of effort because OpenSSL has to be configured correctly. I have cancelled the attempt after several hours and am currently using my suggested work-around. It would be great to have a fix, as one cannot modify the behavior of 3rd-party libraries easily. |
@dthommes as per updating OpenSSL, there is another problem is that runtime is outdated and there are moments in runtime. Runtime has to be migrated to OpenJDK once and updating openssl might use not required. |
@dkimitsa Until we have this peace of software, it might be wise to minimize the attack surface. It's correct, that #308 solves the connection problem with TLS 1.2 servers. That was a great move! To harden the client a bit more, the cipher suites could be limited. And the cacerts need a regular update. These are all things, I can help with. Just let me know, whether I should (re-)open distinct issues for this. BTW: Today, I have tested RoboVMs HTTPS Implementation with Jeff Hodge's great check service: TL;DR: Please use Okhttp3 if you want to have a probably secure connection :-). Here are the detailed results (rating at the end of the JSON files): With RoboVM & HttpsUrlConnection
With RoboVM & Okhttp3
Android 9.0 with HttpsUrlConnection
Android 9.0 with OkHttp3
|
the only issue here is set of weak/insecure cipher suite that can be easily removed. also these ciphers are become a problem only when connecting to outdated/compromised servers and a subject for MIM attacks. |
#527 delivers Android10 runtime. TLS1.3 is enabled there |
Is Robovm still using openssl 1.0.1 and if so is the imminent expiration of one of the Lets Encrypt root certificates going to be an issue? From https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/ :
|
@clydebarrow |
Merging into #556 |
Issue details
RoboVM bundles and uses OpenSSL 1.0.1e (release in February 2013) as can be seen here:
https://github.com/MobiVM/robovm/blob/master/compiler/vm/rt/android/external/openssl/include/openssl/opensslv.h
This version is outdated and has currently 68 open CVEs:
https://www.cvedetails.com/version/157548/Openssl-Openssl-1.0.1e.html
One of them is the heartbleed bug:
http://heartbleed.com/
From a security standpoint, its urgent to update to a secure version of OpenSSL and find a way to keep it updated - this should be semi-automatic in the best case.
Versions:
Build Targets:
ALL
Migration Plan
It is probably not possible to retrieve an update of OpenSSL from the official Android sources. In 2014, Google migrated to a custom version of OpenSSL named BoringSSL. They have made many changes and make clear, that BoringSSL "is not intended for general use" (https://github.com/google/boringssl).
Additionally, they introduced the new Open-JDK based runtime that changed, how the crypto functions are built into the VM in 2016. A back-port of their SSL implementation from the new runtime is probably too complicated, especially with the requirement of semi-automation.
I will investigate in replacing the existing OpenSSL source in RoboVM with a newer one from the official OpenSSL repo. However, it is not clear, whether this will suffice.
To stay updated on the one hand and reduce effort on the other hand, I propose to go with a LTS of OpenSSL. The current LTS release is 1.0.2 (until 2019). Then it will be followed by 1.1.1, which is currently in beta (https://www.openssl.org/blog/blog/2018/05/18/new-lts/).
The text was updated successfully, but these errors were encountered: