CVE-2024-35255
Medium · 5.5CVSS
5.5
EPSS
0.8%
Published
Jun 11, 2024
CISA due date
—
Cloudanix analysis
Some Android apps using an older Microsoft sign-in component could let another app on the same device improperly access sensitive login information.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- Library
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a local elevation-of-privilege/confidentiality issue in Microsoft Authentication Library/Azure Identity Library code for Android caused by a race condition. A local attacker with low privileges on the same Android device could potentially win a timing window during authentication-library operations and gain access to sensitive authentication material or identity-related data that should be isolated from that attacker. The CVSS vector indicates local access is required, exploitation complexity is low, no user interaction is required, scope is unchanged, and the primary impact is high confidentiality exposure rather than integrity or availability loss.
Why it matters to the business
Applications that embed a vulnerable version of the Microsoft Authentication Library for Android may expose user authentication data on a compromised or shared device, which can lead to account access, privacy violations, incident response costs, and loss of trust in mobile authentication flows. The issue is not currently in CISA KEV, is not known to be used in ransomware campaigns, has low EPSS probability, and has no reported mature public exploit, so it is generally lower urgency than remotely exploitable internet-facing flaws; however, it has been public for a long time and should be removed from supported mobile applications during normal dependency maintenance.
How an attack unfolds
An attacker first needs local code execution or an app-level foothold on the same Android device, such as through a malicious installed application, a compromised device, or another local execution path. The attacker then targets an application that uses the vulnerable Microsoft Authentication Library for Android. By repeatedly interacting with, monitoring, or racing authentication-library operations, the attacker attempts to trigger the vulnerable timing condition. If the race is won, the attacker may gain access to sensitive identity or token-related information that the library should have protected. The attacker can then use the exposed data to impersonate the affected user or access downstream services, subject to token validity, conditional access controls, device binding, and server-side session protections.
How to fix it
Update applications that use azuread/microsoft-authentication-library-for-android to a version that includes the upstream fix. The fixed upstream Git commit is 3da30567e68ec62987d2c57d7967135fb3883fc5. If consuming MSAL Android through a package manager rather than directly from Git, upgrade to the first released package version that contains this commit or any later supported version. Rebuild and redeploy affected Android applications after updating the dependency; simply updating source control is not sufficient for already-distributed mobile apps. If immediate upgrade is not possible, reduce exposure by limiting use on unmanaged or rooted devices, enforcing mobile device compliance and app protection policies, minimizing token lifetimes where practical, requiring strong conditional access, and revoking sessions for users/devices suspected of compromise.
How to confirm the fix worked
Confirm the application dependency tree no longer resolves to vulnerable MSAL Android code and that the source or binary includes the fix corresponding to commit 3da30567e68ec62987d2c57d7967135fb3883fc5 or a later release. For source builds, inspect lockfiles, Gradle dependency output, vendored source, and software composition analysis results. For compiled Android artifacts, inspect the APK/AAB software bill of materials or decompile/scan the packaged libraries to confirm the updated Microsoft Authentication Library is present. Perform regression testing of sign-in, token acquisition, token refresh, account switching, brokered authentication if used, and sign-out. Validate exposure reduction by ensuring vulnerable application versions are no longer distributed through app stores, MDM/MAM channels, or internal release pipelines.
Typical attack path
- Gain local execution capability on the same Android device as a target application using the vulnerable authentication library.
- Identify that a target mobile application includes the affected Microsoft Authentication Library for Android code path.
- Trigger or wait for authentication-library activity such as sign-in, token acquisition, account selection, or token refresh.
- Exploit the race condition by manipulating timing around the vulnerable operation.
- Recover sensitive authentication or identity data exposed through the race condition.
- Use the recovered data to attempt access to protected services or user resources before tokens expire or are revoked.
How to detect it
There are no widely published, unique exploit indicators for this issue, and successful exploitation may not leave a distinctive application log entry because it is a local library race condition. Detection should combine exposure analysis with identity and endpoint telemetry. Review mobile application inventories, SBOMs, Gradle dependency reports, and SCA findings to identify apps built with vulnerable MSAL Android code. For possible prior exploitation, examine Microsoft Entra ID sign-in logs, token issuance and refresh activity, conditional access results, device identifiers, user agents, and impossible-travel or unfamiliar-device alerts for users who used vulnerable app versions. On managed Android endpoints, review EDR/MDM telemetry for malicious or sideloaded applications, rooted or tampered devices, suspicious inter-process behavior, accessibility abuse, overlay abuse, credential/token theft tooling, and abnormal access to application-private storage. Application teams should review crash logs and debug logs around authentication flows for unusual race-related errors, repeated token acquisition attempts, unexpected account context changes, or authentication cache anomalies, while avoiding collection of sensitive tokens in logs. Treat suspicious identity events as potentially token-related: revoke sessions, rotate credentials where applicable, require reauthentication, and correlate timing with vulnerable app usage.
What your security team should do
- Inventory Android applications that include Microsoft Authentication Library for Android or Azure Identity authentication components.
- Prioritize updating any supported app that uses azuread/microsoft-authentication-library-for-android to a release containing commit 3da30567e68ec62987d2c57d7967135fb3883fc5 or later.
- Rebuild, sign, and redistribute patched mobile application versions; track adoption and force upgrade where business risk justifies it.
- Use software composition analysis and mobile build pipeline checks to prevent reintroduction of vulnerable MSAL Android versions.
- Review identity telemetry for anomalous sign-ins, token use, and device changes associated with users of vulnerable mobile app versions.
- Apply compensating controls for high-risk users, including conditional access, device compliance enforcement, app protection policies, session revocation, and shorter refresh-token validity where appropriate.
- Because there is no known KEV listing, ransomware association, or mature public exploit, handle as a dependency remediation item with elevated attention for apps used on unmanaged, shared, or high-risk Android devices.
The record
Azure Identity Libraries and Microsoft Authentication Library Elevation of Privilege Vulnerability
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/Azure/azure-sdk-for-go/sdk/azidentity | 0 | 1.6.0 |
| Go | github.com/Azure/azure-sdk-for-go/sdk/azidentity | 0 | 1.6.0-beta.4.0.20240610221955-50774cd97099 |
| Maven | com.azure:azure-identity | 0 | 1.12.2 |
| Maven | com.microsoft.azure:msal4j | 1.14.4-beta | 1.15.1 |
| NuGet | Azure.Identity | 0 | 1.11.4 |
| NuGet | Microsoft.Identity.Client | 4.49.1 | 4.60.4 |
| NuGet | Microsoft.Identity.Client | 4.61.0 | 4.61.3 |
| PyPI | azure-identity | 0 | 1.16.1 |
| npm | @azure/identity | 0 | 4.2.1 |
| npm | @azure/msal-node | 2.7.0 | 2.9.2 |
| Chainguard | airflow | 0 | 2.9.2-r0 |
| Chainguard | airflow-bitnami-compat | 0 | 2.9.2-r0 |
| Chainguard | airflow-compat | 0 | 2.9.2-r0 |
| Chainguard | apache-nifi | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-compat | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-toolkit | 0 | 2.6.0-r2 |
| Chainguard | argo-cd-2.13 | 0 | 2.13.0-r1 |
| Chainguard | argo-cd-2.13-compat | 0 | 2.13.0-r1 |
| Chainguard | argo-cd-2.13-repo-server | 0 | 2.13.0-r1 |
| Chainguard | argo-cd-fips-2.13 | 0 | 2.13.0-r1 |
| Chainguard | argo-cd-fips-2.13-compat | 0 | 2.13.0-r1 |
| Chainguard | argo-cd-fips-2.13-repo-server | 0 | 2.13.0-r1 |
| Chainguard | argo-events | 0 | 1.9.2-r1 |
| Chainguard | argo-events-compat | 0 | 1.9.2-r1 |
| Chainguard | argo-events-fips | 0 | 1.9.2-r1 |
| Chainguard | argo-events-fips-compat | 0 | 1.9.2-r1 |
| Chainguard | argo-workflow-cli | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-cli-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-controller | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-controller-compat | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-controller-compat-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-controller-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-executor | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-executor-compat | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-executor-compat-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflow-executor-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflows | 0 | 3.5.7-r2 |
| Chainguard | argo-workflows-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflows-known-hosts | 0 | 3.5.7-r2 |
| Chainguard | argo-workflows-known-hosts-fips | 0 | 3.5.7-r2 |
| Chainguard | argo-workflows-ui | 0 | 3.5.7-r2 |
| Chainguard | bank-vaults | 0 | 1.20.4-r15 |
| Chainguard | bank-vaults-fips | 0 | 1.20.4-r12 |
| Chainguard | bank-vaults-template | 0 | 1.20.4-r15 |
| Chainguard | bank-vaults-template-fips | 0 | 1.20.4-r12 |
| Chainguard | boring-registry | 0 | 0.14.0-r3 |
| Chainguard | boring-registry-fips | 0 | 0.14.0-r5 |
| Chainguard | buildctl | 0 | 0.14.0-r1 |
| Chainguard | buildkitd | 0 | 0.14.0-r1 |
| Chainguard | cert-manager-1.14 | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.14-acmesolver | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.14-cainjector | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.14-controller | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.14-startupapicheck | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.14-webhook | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-1.15-acmesolver | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-1.15-cainjector | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-1.15-controller | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-1.15-startupapicheck | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-1.15-webhook | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-acmesolver-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-acmesolver-1.15-bitnami-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-acmesolver-1.15-iamguarded-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-acmesolver-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-cainjector-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-cainjector-1.15-bitnami-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-cainjector-1.15-iamguarded-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-cainjector-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-controller-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-controller-1.15-bitnami-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-controller-1.15-iamguarded-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-controller-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.14 | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-acmesolver | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-cainjector | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-cmctl | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-controller | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-startupapicheck | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.14-webhook | 0 | 1.14.6-r1 |
| Chainguard | cert-manager-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.15-acmesolver | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.15-cainjector | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.15-controller | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.15-startupapicheck | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-fips-1.15-webhook | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-startupapicheck-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-startupapicheck-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-webhook-1.15 | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-webhook-1.15-bitnami-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-webhook-1.15-iamguarded-compat | 0 | 1.15.0-r1 |
| Chainguard | cert-manager-webhook-fips-1.15 | 0 | 1.15.0-r1 |
| Chainguard | chezmoi | 0 | 2.49.0-r1 |
| Chainguard | cluster-autoscaler-1.28 | 0 | 1.28.7-r1 |
| Chainguard | cluster-autoscaler-1.28-compat | 0 | 1.28.7-r1 |
| Chainguard | cluster-autoscaler-1.30 | 0 | 1.30.3-r1 |
| Chainguard | cluster-autoscaler-1.30-compat | 0 | 1.30.3-r1 |
| Chainguard | cluster-autoscaler-1.31 | 0 | 1.31.5-r1 |
| Chainguard | cluster-autoscaler-1.31-compat | 0 | 1.31.5-r1 |
| Chainguard | cluster-autoscaler-1.32 | 0 | 1.32.0-r1 |
| Chainguard | cluster-autoscaler-1.32-compat | 0 | 1.32.0-r1 |
| Chainguard | cluster-autoscaler-fips-1.30 | 0 | 1.30.3-r1 |
| Chainguard | cluster-autoscaler-fips-1.30-compat | 0 | 1.30.3-r1 |
| Chainguard | cluster-autoscaler-fips-1.31 | 0 | 1.31.2-r0 |
| Chainguard | cluster-autoscaler-fips-1.31-compat | 0 | 1.31.2-r0 |
| Chainguard | cluster-autoscaler-fips-1.32 | 0 | 1.32.0-r1 |
| Chainguard | cluster-autoscaler-fips-1.32-compat | 0 | 1.32.0-r1 |
| Chainguard | cmctl-1.14 | 0 | 1.14.6-r1 |
| Chainguard | cmctl-1.14-fips | 0 | 1.14.6-r1 |
| Chainguard | cortex | 0 | 1.17.1-r2 |
| Chainguard | cortex-fips | 0 | 1.17.1-r4 |
| Chainguard | cosign | 0 | 2.2.4-r6 |
| Chainguard | cosign-fips | 0 | 2.2.4-r4 |
| Chainguard | datadog-agent | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-core-integrations | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-core-integrations-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-agent-fakeintake | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-fakeintake-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-agent-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-agent-jmx | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-jmx-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-agent-oci-compat | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-oci-compat-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-agent-s6-overlay | 0 | 7.56.0-r0 |
| Chainguard | datadog-agent-s6-overlay-fips | 0 | 7.72.0-r0 |
| Chainguard | datadog-cluster-agent | 0 | 7.56.0-r0 |
| Chainguard | datadog-cluster-agent-fips | 0 | 7.72.1-r0 |
| Chainguard | datadog-cluster-agent-oci-compat | 0 | 7.56.0-r0 |
| Chainguard | datadog-cluster-agent-oci-compat-fips | 0 | 7.72.0-r0 |
| Chainguard | dogstatsd | 0 | 7.56.0-r0 |
| Chainguard | druid | 0 | 32.0.1-r1 |
| Chainguard | druid-compat | 0 | 32.0.1-r1 |
| Chainguard | external-dns | 0 | 0.14.2-r2 |
| Chainguard | external-dns-bitnami-compat | 0 | 0.14.2-r2 |
| Chainguard | external-dns-fips | 0 | 0.14.2-r3 |
| Chainguard | external-dns-fips-bitnami-compat | 0 | 0.14.2-r3 |
| Chainguard | external-dns-fips-iamguarded-compat | 0 | 0.14.2-r3 |
| Chainguard | external-dns-iamguarded-compat | 0 | 0.14.2-r2 |
| Chainguard | external-secrets-0.7 | 0 | 0.7.3-r3 |
| Chainguard | external-secrets-0.7-compat | 0 | 0.7.3-r3 |
| Chainguard | external-secrets-fips | 0 | 0.9.19-r2 |
| Chainguard | external-secrets-operator | 0 | 0.9.19-r2 |
| Chainguard | falcoctl | 0 | 0.8.0-r2 |
| Chainguard | falcoctl-fips | 0 | 0.8.0-r2 |
| Chainguard | filebeat | 0 | 8.14.0-r1 |
| Chainguard | filebeat-fips | 0 | 8.14.1-r1 |
| Chainguard | fluent-bit-plugin-loki | 0 | 3.0.0-r3 |
| Chainguard | flux | 0 | 2.3.0-r2 |
| Chainguard | flux-compat | 0 | 2.3.0-r2 |
| Chainguard | flux-image-reflector-controller | 0 | 0.32.0-r3 |
| Chainguard | flux-image-reflector-controller-iamguarded-compat | 0 | 0.32.0-r3 |
| Chainguard | flux-kustomize-controller | 0 | 1.3.0-r4 |
| Chainguard | flux-kustomize-controller-bitnami-compat | 0 | 1.3.0-r4 |
| Chainguard | flux-kustomize-controller-iamguarded-compat | 0 | 1.3.0-r4 |
| Chainguard | flux-source-controller | 0 | 1.3.0-r3 |
| Chainguard | flux-source-controller-bitnami-compat | 0 | 1.3.0-r3 |
| Chainguard | flux-source-controller-iamguarded-compat | 0 | 1.3.0-r3 |
| Chainguard | fluxcd-source-controller-bitnami-compat | 0 | 1.3.0-r3 |
| Chainguard | flyte | 0 | 1.12.0-r3 |
| Chainguard | fulcio | 0 | 1.4.5-r4 |
| Chainguard | fulcio-fips | 0 | 1.4.5-r5 |
| Chainguard | gitlab-runner | 0 | 17.0.0-r2 |
| Chainguard | gitlab-runner-helper | 0 | 17.0.0-r2 |
| Chainguard | goreleaser | 0 | 2.0.1-r1 |
| Chainguard | grafana-10.4 | 0 | 10.4.4-r1 |
| Chainguard | grafana-10.4-oci-compat | 0 | 10.4.4-r1 |
| Chainguard | grafana-11.0 | 0 | 11.0.0-r3 |
| Chainguard | grafana-9 | 0 | 9.5.19-r2 |
| Chainguard | grafana-9-fips | 0 | 9.5.19-r2 |
| Chainguard | grafana-9-fips-oci-compat | 0 | 9.5.19-r2 |
| Chainguard | grafana-agent-operator | 0 | 0.41.1-r1 |
| Chainguard | grafana-fips-10.3 | 0 | 10.3.6-r2 |
| Chainguard | grafana-fips-10.3-oci-compat | 0 | 10.3.6-r2 |
| Chainguard | grafana-fips-10.4 | 0 | 10.4.3-r2 |
| Chainguard | grafana-fips-10.4-oci-compat | 0 | 10.4.3-r2 |
| Chainguard | grafana-fips-11.0 | 0 | 11.0.0-r2 |
| Chainguard | grafana-fips-11.0-oci-compat | 0 | 11.0.0-r2 |
| Chainguard | grafana-mimir | 0 | 2.12.0-r2 |
| Chainguard | grafana-mimir-metaconvert | 0 | 2.12.0-r2 |
| Chainguard | grafana-mimir-mimirtool | 0 | 2.12.0-r2 |
| Chainguard | grafana-mimir-query-tee | 0 | 2.12.0-r2 |
| Chainguard | grafana-oci-compat | 0 | 11.0.0-r3 |
| Chainguard | grafana-oci-compat | 0 | 10.4.4-r1 |
| Chainguard | grafana-oci-compat-9 | 0 | 9.5.19-r2 |
| Chainguard | guac | 0 | 0.7.2-r1 |
| Chainguard | guaccsub | 0 | 0.7.2-r1 |
| Chainguard | guacgql | 0 | 0.7.2-r1 |
| Chainguard | guacingest | 0 | 0.7.2-r1 |
| Chainguard | guacone | 0 | 0.7.2-r1 |
| Chainguard | harbor-registry | 0 | 3.0.0_alpha1-r5 |
| Chainguard | harbor-registry-fips | 0 | 3.0.0_alpha1-r5 |
| Chainguard | hugo | 0 | 0.127.0-r1 |
| Chainguard | hugo-extended | 0 | 0.130.0-r0 |
| Chainguard | k8sgpt | 0 | 0.3.32-r3 |
| Chainguard | keda-2.13 | 0 | 2.13.1-r9 |
| Chainguard | keda-2.13-adapter | 0 | 2.13.1-r9 |
| Chainguard | keda-2.13-admission-webhooks | 0 | 2.13.1-r9 |
| Chainguard | keda-2.13-compat | 0 | 2.13.1-r9 |
| Chainguard | keda-2.14 | 0 | 2.14.0-r4 |
| Chainguard | keda-2.14-adapter | 0 | 2.14.0-r4 |
Related vulnerabilities
- CVE-2025-47287 Tornado vulnerable to excessive logging caused by malformed multipart form data Also affects airflow
- CVE-2024-12797 Issue summary: Clients using RFC7250 Raw Public Keys (RPKs) to authenticate a server may… Also affects airflow
- CVE-2024-56201 Jinja has a sandbox breakout through malicious filenames Also affects airflow
- CVE-2024-56326 Jinja has a sandbox breakout through indirect reference to format method Also affects airflow
- CVE-2024-52804 Tornado has an HTTP cookie parsing DoS vulnerability Also affects airflow
- CVE-2024-52304 aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Also affects airflow
- CVE-2024-52303 aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Also affects airflow
- CVE-2024-21272 Vulnerability in the MySQL Connectors product of Oracle MySQL (component… Also affects airflow