{"answers":{"affected":"1 open source package ship an affected version, including ash_authentication.","exploited":"There is no known exploitation of CVE-2026-81637 in the wild and no public exploit code.","fix":"Upgrade ash_authentication to a fixed version for your release line: 4.15.0 or 5.0.0-rc.14.","what":"CVE-2026-81637 is a low-severity vulnerability in team-alembic ash_authentication, published on 17 Sep 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link."},"fix_prompt":"Check this codebase for CVE-2026-81637 and fix it if it is affected.\n\nWhat it is: CVE-2026-81637 is a low-severity vulnerability in team-alembic ash_authentication, published on 17 Sep 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.\nExploitation: There is no known exploitation of CVE-2026-81637 in the wild and no public exploit code.\n\nAffected packages and fixed versions:\n- ash_authentication (Hex): affected from 0.6.0; fixed in 4.15.0, 5.0.0-rc.14\n\nTask:\n1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.\n2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.\n3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.\n4. Run the tests and summarise what changed and why.\n5. If nothing in the project is affected, say so and change nothing.\n\nReference: https://insights.sbomify.com/CVE-2026-81637/ (Markdown: https://insights.sbomify.com/CVE-2026-81637/index.md)","id":"CVE-2026-81637","markdown":"https://insights.sbomify.com/CVE-2026-81637/index.md","name":"CVE-2026-81637","record":{"aliases":["EEF-CVE-2026-81637","GHSA-3vcj-gxx8-3p44"],"analysis":{"component_type":"library","fix_type":"upgrade","impacts":["account_takeover"],"network_reachable":"yes","non_default_config":false,"product_category":"Elixir authentication library","requires_auth":"none","summary":"Attackers can replay OAuth2 state values after failed callbacks to sign victims into attacker-controlled accounts due to insufficient session expiration.","user_interaction":"required","vuln_class":"csrf"},"analysis_generated_by":"qwen3.8-flash-next","assigner":"EEF","cpe":[],"cvss":{"score":2.3,"severity":"low","source":"cna","vector":"CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","version":"4.0"},"cwes":[{"id":"CWE-613","name":"DEPRECATED: Insufficient Session Expiration"}],"description":"Insufficient Session Expiration vulnerability in team-alembic AshAuthentication allows an attacker who obtains a victim's OAuth2 state value to replay the callback and sign that victim into an attacker-controlled account.\n\nAshAuthentication.Strategy.OAuth2.Plug.callback/2 clears the stored session_params through a rebinding step inside its with chain, conn \u003c- delete_session(conn, session_key). Elixir evaluates the else block in the scope enclosing the with, so every failure path (the provider returning ?error=access_denied, an invalid code, a token-exchange error, or a registration or sign-in failure) reaches store_authentication_result/2 holding the original connection and the session entry is never removed. The value the module's own comment describes as protection against a CSRF-related attack is therefore consumed only when authentication succeeds, and survives a cancelled or failed attempt until the next request phase or session expiry.\n\nThis issue affects ash_authentication: from 0.6.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14.","ecosystems":["Hex"],"exploits":{"exploitdb":0,"first_seen":null,"github_poc":0,"max_poc_stars":null,"metasploit":0,"nuclei":0,"refs":[],"tier":"none_known"},"has_fix":true,"headline":"Replayable OAuth2 CSRF state retained after a failed callback in AshAuthentication","id":"CVE-2026-81637","indexable":true,"kev":null,"kind":"cve","links":{"ecosystem":"Hex","product":null,"products":[],"type":"csrf","year":"2026"},"n_packages":1,"n_references":6,"next":{"headline":"Non-canonical ULID spellings are accepted and alias to the same record in ash_double_entry","id":"CVE-2026-81638"},"packages":[{"ecosystem":"Hex","fixed":["4.15.0","5.0.0-rc.14"],"introduced":["0.6.0","5.0.0-rc.0"],"last_affected":[],"package":"ash_authentication","purl":"pkg:hex/ash_authentication","source":"EEF-CVE-2026-81637"}],"prev":{"headline":"Query-complexity limit bypass via first/last pagination arguments in AshGraphql enables denial of service","id":"CVE-2026-81636"},"products":["ash_authentication"],"published":"2026-09-17","related":[],"sources":[{"class":"attribution","licence":"CVE Terms of Use (MITRE)","name":"CVE List","prefix":"CVE"},{"class":"attribution","licence":"CC BY 4.0","name":"Erlang Ecosystem Foundation","prefix":"EEF"},{"class":"attribution","licence":"CWE Terms of Use","name":"CWE (MITRE)"},{"class":"attribution","licence":"FIRST CVSS licence","name":"CVSS (FIRST)"}],"ssvc":{"automatable":"no","exploitation":"none","technical_impact":"partial"},"state":"PUBLISHED","updated":"2026-09-17","vendors":["team-alembic"]},"summary":"Attackers can replay OAuth2 state values after failed callbacks to sign victims into attacker-controlled accounts due to insufficient session expiration.","url":"https://insights.sbomify.com/CVE-2026-81637/"}