Skip to content
Heist/ feed
Back to feed
CriticalFix available

OAuth2 sign-in attached to an existing account without an email comparison in AshAuthentication

Type: advisorySources: OSV

## Summary Improper Authentication vulnerability in team-alembic AshAuthentication allows an attacker to be signed in as another user by linking an OAuth2 identity to an account that is not theirs. `AshAuthentication.Strategy.OAuth2.UserResolver.resolve/3` matches an existing account using the register action's `upsert_identity` keys, then gates linking the incoming provider identity to it on `email_trusted?/2`, which reads only the provider's `email_verified` boolean and never compares the provider's email value with the matched account's email. That gate assumes the account was matched by its email field, so under any other `upsert_identity` it is vacuous and an attacker presenting their own verified email is attached to, and issued a session for, an account matched on some other attribute. The same unguarded gate applies in `OAuth2.SignInPreparation` on the `registration_enabled? false` path, where the account is matched by the sign-in action's read filter instead. The upsert also rewrites the matched account's email to the attacker's address, so later account recovery reaches the attacker rather than the owner. This issue affects ash_authentication: from 4.14.0 before 4.15.0 and from 5.0.0-rc.10 before 5.0.0-rc.14. ## Impact An attacker who controls a provider account with a verified email of their own is signed in as a different local user, holding a session bearing that user's subject, with no interaction from the victim and no need to pre-register. Because the link als

Products
ash_authentication
Affected versions
4.14.0, 4.14.1, 4.14.2, 5.0.0-rc.10, 5.0.0-rc.11, 5.0.0-rc.12, 5.0.0-rc.13
Fixed versions
4.15.0, 5.0.0-rc.14
CVEs
CVE-2026-88952
Confirmed fixed CVEs
Not specified
Updated in this feed
30 Oct 2026, 09:01 UTC · Revision 1

Source evidence

OAuth2 sign-in attached to an existing account without an email comparison in AshAuthentication

core-osv · Original source

Published 17 Sept 2026, 14:15 UTC

## Summary Improper Authentication vulnerability in team-alembic AshAuthentication allows an attacker to be signed in as another user by linking an OAuth2 identity to an account that is not theirs. `AshAuthentication.Strategy.OAuth2.UserResolver.resolve/3` matches an existing account using the register action's `upsert_identity` keys, then gates linking the incoming provider identity to it on `email_trusted?/2`, which reads only the provider's `email_verified` boolean and never compares the provider's email value with the matched account's email. That gate assumes the account was matched by its email field, so under any other `upsert_identity` it is vacuous and an attacker presenting their own verified email is attached to, and issued a session for, an account matched on some other attribute. The same unguarded gate applies in `OAuth2.SignInPreparation` on the `registration_enabled? false` path, where the account is matched by the sign-in action's read filter instead. The upsert also rewrites the matched account's email to the attacker's address, so later account recovery reaches the attacker rather than the owner. This issue affects ash_authentication: from 4.14.0 before 4.15.0 and from 5.0.0-rc.10 before 5.0.0-rc.14. ## Impact An attacker who controls a provider account with a verified email of their own is signed in as a different local user, holding a session bearing that user's subject, with no interaction from the victim and no need to pre-register. Because the link als

osv:EEF-CVE-2026-88952

ash_authentication

Fixed versions: 4.15.0, 5.0.0-rc.14

Complete source record
{
  "id": "0f7b30b7ac0bd87bb5d4d0af065df28a63d61894270f061fdd914086ae97dede",
  "url": "https://osv.dev/vulnerability/EEF-CVE-2026-88952",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "OAuth2 sign-in attached to an existing account without an email comparison in AshAuthentication",
    "summary": "## Summary Improper Authentication vulnerability in team-alembic AshAuthentication allows an attacker to be signed in as another user by linking an OAuth2 identity to an account that is not theirs. `AshAuthentication.Strategy.OAuth2.UserResolver.resolve/3` matches an existing account using the register action's `upsert_identity` keys, then gates linking the incoming provider identity to it on `email_trusted?/2`, which reads only the provider's `email_verified` boolean and never compares the provider's email value with the matched account's email. That gate assumes the account was matched by its email field, so under any other `upsert_identity` it is vacuous and an attacker presenting their own verified email is attached to, and issued a session for, an account matched on some other attribute. The same unguarded gate applies in `OAuth2.SignInPreparation` on the `registration_enabled? false` path, where the account is matched by the sign-in action's read filter instead. The upsert also rewrites the matched account's email to the attacker's address, so later account recovery reaches the attacker rather than the owner. This issue affects ash_authentication: from 4.14.0 before 4.15.0 and from 5.0.0-rc.10 before 5.0.0-rc.14. ## Impact An attacker who controls a provider account with a verified email of their own is signed in as a different local user, holding a session bearing that user's subject, with no interaction from the victim and no need to pre-register. Because the link als",
    "evidence": "osv:EEF-CVE-2026-88952",
    "products": [
      {
        "name": {
          "value": "ash_authentication",
          "evidence": "/affected/0/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "4.15.0",
            "evidence": "/affected/0/ranges"
          },
          {
            "value": "5.0.0-rc.14",
            "evidence": "/affected/0/ranges"
          }
        ],
        "affected_versions": [
          {
            "value": "4.14.0",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "4.14.1",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "4.14.2",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "5.0.0-rc.10",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "5.0.0-rc.11",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "5.0.0-rc.12",
            "evidence": "/affected/0/versions"
          },
          {
            "value": "5.0.0-rc.13",
            "evidence": "/affected/0/versions"
          }
        ]
      }
    ],
    "severity": "critical",
    "structured": {
      "id": "EEF-CVE-2026-88952",
      "aliases": [
        "CVE-2026-88952",
        "EEF-CVE-2026-88952",
        "GHSA-wc6x-276q-jrf9"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "type": "SEMVER",
              "events": [
                {
                  "introduced": "4.14.0"
                },
                {
                  "fixed": "4.15.0"
                }
              ]
            },
            {
              "type": "SEMVER",
              "events": [
                {
                  "introduced": "5.0.0-rc.10"
                },
                {
                  "fixed": "5.0.0-rc.14"
                }
              ]
            }
          ],
          "package": {
            "name": "ash_authentication",
            "purl": "pkg:hex/ash_authentication",
            "ecosystem": "Hex"
          },
          "versions": [
            "4.14.0",
            "4.14.1",
            "4.14.2",
            "5.0.0-rc.10",
            "5.0.0-rc.11",
            "5.0.0-rc.12",
            "5.0.0-rc.13"
          ],
          "database_specific": {
            "source": "https://cna.erlef.org/osv/EEF-CVE-2026-88952.json"
          }
        },
        {
          "ranges": [
            {
              "repo": "https://github.com/team-alembic/ash_authentication",
              "type": "GIT",
              "events": [
                {
                  "introduced": "64530644f9b37ebb76ca14aeb83a77597a0034b7"
                },
                {
                  "fixed": "738bf9f32f2aa0d1bb92ce9ca5c2476cb5710459"
                },
                {
                  "fixed": "2bd630eef8b7c8ae1e90e8fd43ba12fbc7e256ba"
                }
              ]
            },
            {
              "repo": "https://github.com/team-alembic/ash_authentication",
              "type": "GIT",
              "events": [
                {
                  "introduced": "42edcd8ebb13fafbb168f12591d7518ce0611fec"
                },
                {
                  "fixed": "738bf9f32f2aa0d1bb92ce9ca5c2476cb5710459"
                },
                {
                  "fixed": "2bd630eef8b7c8ae1e90e8fd43ba12fbc7e256ba"
                }
              ]
            }
          ],
          "versions": [
            "v5.0.0-rc.13",
            "v5.0.0-rc.12",
            "v5.0.0-rc.11",
            "v5.0.0-rc.10"
          ],
          "database_specific": {
            "source": "https://cna.erlef.org/osv/EEF-CVE-2026-88952.json"
          }
        }
      ],
      "modified": "2026-10-13T08:00:03.799369851Z",
      "provider": "osv",
      "references": [
        "https://github.com/team-alembic/ash_authentication/security/advisories/GHSA-wc6x-276q-jrf9",
        "https://cna.erlef.org/cves/CVE-2026-88952.html",
        "https://github.com/team-alembic/ash_authentication/commit/64530644f9b37ebb76ca14aeb83a77597a0034b7",
        "https://github.com/team-alembic/ash_authentication/commit/42edcd8ebb13fafbb168f12591d7518ce0611fec",
        "https://github.com/team-alembic/ash_authentication/commit/738bf9f32f2aa0d1bb92ce9ca5c2476cb5710459",
        "https://github.com/team-alembic/ash_authentication/commit/2bd630eef8b7c8ae1e90e8fd43ba12fbc7e256ba",
        "https://hex.pm/packages/ash_authentication"
      ],
      "provider_metadata": {
        "cpe_ids": [
          "cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*"
        ],
        "cwe_ids": [
          "CWE-287"
        ],
        "capec_ids": [
          "CAPEC-115"
        ]
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-88952",
        "evidence": "/aliases"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 307462,
  "published_at": "2026-09-17T14:15:19.506+00:00"
}