Android build links prebuilt OpenSSL 1.0.2k (Jan 2017) into sqlcipher, while a 1.1.1l tree in the same repo is unreferenced
Hello, and thank you for WCDB.
I tried to send this through TSRC first, but the submission form requires a QQ or WeChat account that I do not have. Since nothing here is undisclosed — the versions are readable in this repository, and #636 already states the position publicly — I am raising it as a normal issue rather than leaving it unsent. If you would prefer it moved to a private channel, tell me where and I will resend.
What I observed
tools/prebuild/openssl/ contains sixteen committed OpenSSL static libraries across five platform families. Reading the version two independent ways — the shipped headers and the binaries themselves — they agree:
| path | version |
|---|---|
android_old/{arm,arm64,x86,x86_64} |
OpenSSL 1.0.2k — 26 Jan 2017 |
android/{arm64-v8a,armeabi-v7a,x86,x86_64} |
OpenSSL 1.1.1l — 24 Aug 2021 |
linux/{arm64,x86_64}, windows/win64 |
OpenSSL 1.1.1l — 24 Aug 2021 |
ohos/* |
I could not recover a version string |
The android_old headers state it plainly:
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2k-fips 26 Jan 2017"Which one the Android build links
I enumerated all 32 prebuild/openssl references in src/CMakeLists.txt rather than sampling. The Android branches are these six:
435: ${TARGET_NAME} PRIVATE .../openssl/android_old/${CMAKE_ANDROID_ARCH}/include
436: ${TARGET_NAME} PRIVATE .../openssl/android_old/${CMAKE_ANDROID_ARCH}/lib
437: sqlcipher PRIVATE .../openssl/android_old/${CMAKE_ANDROID_ARCH}/include
438: sqlcipher PRIVATE .../openssl/android_old/${CMAKE_ANDROID_ARCH}/lib
478: sqlcipher PUBLIC .../openssl/android_old/${CMAKE_ANDROID_ARCH}/include
479: sqlcipher PUBLIC .../openssl/android_old/${CMAKE_ANDROID_ARCH}/libBoth the shared and the static branch select android_old, and sqlcipher is among the targets — so this is the cryptography behind encrypted databases, not a peripheral dependency.
The android/ directory holding 1.1.1l, added in March 2023, appears at none of the 32 references.
Why it may matter
OpenSSL's own listing gives the 1.0.2 series an end-of-life date of 1 January 2020 and records 45 CVEs fixed after 1.0.2k, four of which OpenSSL rates High:
| CVE | Fixed in |
|---|---|
| CVE-2020-1971 | 1.0.2x |
| CVE-2022-0778 | 1.0.2zd |
| CVE-2023-0286 | 1.0.2zg |
| CVE-2026-45447 | 1.0.2zq |
Ten further Moderates are in range. For accuracy: the 1.0.2z* releases are OpenSSL's extended-support line, so most of those fixes were never freely available — the last public 1.0.2 was 1.0.2u in December 2019.
What I did NOT establish
- No exploitability or reachability analysis. I did not determine which of the 45 CVEs are reachable through WCDB's use of OpenSSL, and I am not claiming any of them is triggerable here.
- I did not confirm what your published Android artifacts contain — only which path
src/CMakeLists.txtselects. Verifying a released AAR would settle that and I have not done it. - The OpenHarmony archives gave me no version string, so I have listed them as undetermined rather than guessing.
- I did not build or run WCDB, and no database, key or credential was created or tested. This is read-only inspection.
About #636
I found #636 — "Is openssl upgraded?" — where the answer was "Not yet." in 2019, closed in 2024. I am not raising this as though it were news; the answer given then still appears to describe the Android path today. I mention it because it seemed more honest to acknowledge the question has been asked than to pretend I found something new.
Why no tooling would flag it
A committed .a file has no manifest, so Dependabot and SCA scanners have nothing to read. The one artifact a human would look for — a VERSION file — does not exist under tools/prebuild/. That is a structural blind spot rather than an oversight.
Two suggestions, one small
- Small: record a
VERSIONfile (or generate one at build time) for each prebuilt tree, so the shipped version is discoverable without runningstringson a binary. - Larger, and yours to weigh: point the Android branches at the existing
android/(1.1.1l) tree if whatever requiredandroid_oldno longer applies. A supported line would be better still, since 1.1.1 is also past end-of-life.
I am glad to prepare a pull request for the first if that would help.
Credit and disclosure
If this leads to a fix, I would be grateful to be credited as Kobi Hikri (GitHub @kobihikri).
For transparency: this analysis was assisted by an AI coding agent (Claude Code). Every observation — the version strings from headers and binaries, all 32 CMake references, the OpenSSL CVE list, and the #636 history — was reproduced and verified by hand before posting.
Thank you for your time.
Source: Tencent/wcdb