CVE-2024-49723 AI-generated analysis
platform/external/conscrypt (NativeCrypto TLS cipher suite enumeration) and platform/libcore (test support StandardNames)
Conscrypt no longer explicitly adds 3DES cipher suites to its supported TLS 1.2 cipher suite list: the BoringSSL cipher query in NativeCrypto changes from "ALL:3DES" to "ALL", and the Conscrypt and libcore StandardNames test expectations drop the 3DES suite names.
Root cause
The static initializer of NativeCrypto (common/src/main/java/org/conscrypt/NativeCrypto.java and the repackaged copy) built the list of supported TLS 1.2 cipher suites from get_cipher_names("ALL:3DES"). The removed comment explains that boringssl-review 59425 would remove 3DES from BoringSSL's default, and that Conscrypt explicitly included 3DES because it was not yet ready to remove it. As a result, SUPPORTED_TLS_1_2_CIPHER_SUITES and SUPPORTED_TLS_1_2_CIPHER_SUITES_SET (and SUPPORTED_LEGACY_CIPHER_SUITES_SET, through the OpenSSL names) included the 3DES suite. In Java it appears as SSL_RSA_WITH_3DES_EDE_CBC_SHA via cipherSuiteToJava. The bulletin classifies the issue as information disclosure (ID), severity High.
How the fix works
- platform/external/conscrypt 79117043c54e, common/src/main/java/org/conscrypt/NativeCrypto.java, static initializer that builds SUPPORTED_TLS_1_2_CIPHER_SUITES: get_cipher_names("ALL:3DES") becomes get_cipher_names("ALL"). The supported suite arrays/sets are now populated only from BoringSSL's default list, and the comment about keeping 3DES is deleted.
- Same commit, repackaged/common/src/main/java/com/android/org/conscrypt/NativeCrypto.java: the same change in the repackaged copy of NativeCrypto.
- Same commit, testing/src/main/java/org/conscrypt/java/security/StandardNames.java and repackaged/testing/.../StandardNames.java, static block: addOpenSsl("SSL_RSA_WITH_3DES_EDE_CBC_SHA") is removed from the expected CIPHER_SUITES set.
- platform/libcore c9d01a45928e (same Change-Id Ic61848e0455a48ea4b39cd67ef78280aa403beba), support/src/test/java/libcore/java/security/StandardNames.java: removes seven 3DES suite names from the first branch of the conditional cipher suite expectation (the CIPHER_SUITES_ANDROID_AES_HARDWARE / CIPHER_SUITES_ANDROID_SOFTWARE branches are not shown in the diff). It also reorders, with no functional change, the initialization of the PRIVATE_KEY_SPEC_CLASSES / PUBLIC_KEY_SPEC_CLASSES / MINIMUM_KEY_SIZE maps. This commit is test-only.
Completeness
- Covers both the common/ and repackaged/common/ copies of NativeCrypto.
- The Java change contains no explicit 3DES filtering. It relies on the linked BoringSSL already excluding 3DES from the "ALL" cipher string.
- The name-mapping helpers cipherSuiteToJava and cipherSuiteFromJava still translate TLS_RSA_WITH_3DES_EDE_CBC_SHA <-> SSL_RSA_WITH_3DES_EDE_CBC_SHA (visible at android-security-15.0.0_r17). They are unchanged and only affect naming.
- The material does not show whether an application that explicitly requests the 3DES suite is rejected or silently ignored after the change, because the validation code is not included.
Behavior changes
- If BoringSSL's "ALL" excludes 3DES, Conscrypt's supported TLS 1.2 cipher suite list no longer contains SSL_RSA_WITH_3DES_EDE_CBC_SHA (or its OpenSSL name).
- The test expectations in Conscrypt StandardNames and libcore StandardNames no longer include 3DES suite names.
Per major
- Android 14: Not affected per the bulletin (not listed). The per-major facts show 3/8 lines of the patched region at android-security-14.0.0_r29, so the material does not confirm the state of the code there. Conscrypt ships as a mainline APEX module and can be updated independently of the platform branch (general platform knowledge).
- Android 15: Same fix: both commits (conscrypt 79117043c54e, libcore c9d01a45928e, shared Change-Id Ic61848e0455a48ea4b39cd67ef78280aa403beba) landed in android-security-15.0.0_r5 through internal cherry-picks (Ignore-AOSP-First). The code at android-security-15.0.0_r17 shows get_cipher_names("ALL") and StandardNames lists without 3DES.
- Android 16: Not affected per the bulletin (not listed). The per-major facts show 4/8 lines of the patched region at android-security-16.0.0_r8 (the same count as the patched 15 tag). The material does not show the commit itself.
- Android 17: Not affected per the bulletin (not listed). The per-major facts show 4/8 lines of the patched region at android-security-17.0.0_r1 (the same count as the patched 15 tag). The material does not show the commit itself.
Unknowns
- The material does not describe the information disclosure scenario that the bulletin rates High.
- Whether TLS handshakes could actually negotiate 3DES before the fix (the default enabled-suite list and negotiation code are not shown), and whether peers that offer only 3DES now fail.
- How Conscrypt handles an application that explicitly enables SSL_RSA_WITH_3DES_EDE_CBC_SHA after the change (code not shown).
- Whether the BoringSSL revision in each security branch already omits 3DES from "ALL" (only inferred from the removed comment).
- Which tests use the changed StandardNames expectations and how they behave against an unpatched Conscrypt.
- Whether Android 14/16/17 received an equivalent change through module or platform commits; the material only gives line-presence counts.