{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2026-86688",
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "state": "PUBLISHED",
        "assignerShortName": "EEF",
        "dateReserved": "2026-09-17T00:30:01.485Z",
        "datePublished": "2026-09-17T21:58:00.853Z",
        "dateUpdated": "2026-09-18T14:31:41.961Z"
    },
    "containers": {
        "cna": {
            "affected": [
                {
                    "collectionURL": "https://repo.hex.pm",
                    "cpes": [
                        "cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*"
                    ],
                    "defaultStatus": "unaffected",
                    "packageName": "ash_authentication",
                    "packageURL": "pkg:hex/ash_authentication",
                    "product": "ash_authentication",
                    "repo": "https://github.com/team-alembic/ash_authentication",
                    "vendor": "team-alembic",
                    "versions": [
                        {
                            "lessThan": "4.15.0",
                            "status": "affected",
                            "version": "0.2.0",
                            "versionType": "semver"
                        },
                        {
                            "lessThan": "5.0.0-rc.14",
                            "status": "affected",
                            "version": "5.0.0-rc.0",
                            "versionType": "semver"
                        }
                    ]
                },
                {
                    "collectionURL": "https://github.com",
                    "cpes": [
                        "cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*"
                    ],
                    "defaultStatus": "unaffected",
                    "packageName": "team-alembic/ash_authentication",
                    "packageURL": "pkg:github/team-alembic/ash_authentication",
                    "product": "ash_authentication",
                    "repo": "https://github.com/team-alembic/ash_authentication",
                    "vendor": "team-alembic",
                    "versions": [
                        {
                            "changes": [
                                {
                                    "at": "872db454405ecad4fcdabd9ff3d8755d1d6a69ae",
                                    "status": "unaffected"
                                },
                                {
                                    "at": "3e1d452cbf1564e87f5f97be882b66fe25af7cfa",
                                    "status": "unaffected"
                                }
                            ],
                            "lessThan": "*",
                            "status": "affected",
                            "version": "a939dde9b917c072cdf10c4b0913a9886a4b0231",
                            "versionType": "git"
                        }
                    ]
                }
            ],
            "configurations": [
                {
                    "lang": "en",
                    "supportingMedia": [
                        {
                            "base64": false,
                            "type": "text/html",
                            "value": "<p>Exploitation for account takeover requires a server-side session store (ETS, Mnesia, Redis or a database), where the cookie carries a stable session identifier, and a position from which the attacker can plant that cookie in the victim's browser: cookie tossing from a sibling subdomain, an HTTP host without HSTS, or a shared or kiosk browser.</p>\n<p>Phoenix defaults to the signed cookie store, and neither package's installer changes it. Under that store the authenticated session lives in the re-signed cookie delivered only to the victim, so a planted pre-authentication copy does not become an authenticated session. Attacker-planted session contents, such as a <code>return_to</code> value, still survive into the authenticated session there.</p>"
                        },
                        {
                            "base64": false,
                            "type": "text/markdown",
                            "value": "Exploitation for account takeover requires a server-side session store (ETS, Mnesia, Redis or a database), where the cookie carries a stable session identifier, and a position from which the attacker can plant that cookie in the victim's browser: cookie tossing from a sibling subdomain, an HTTP host without HSTS, or a shared or kiosk browser.\n\nPhoenix defaults to the signed cookie store, and neither package's installer changes it. Under that store the authenticated session lives in the re-signed cookie delivered only to the victim, so a planted pre-authentication copy does not become an authenticated session. Attacker-planted session contents, such as a `return_to` value, still survive into the authenticated session there."
                        }
                    ],
                    "value": "Exploitation for account takeover requires a server-side session store (ETS, Mnesia, Redis or a database), where the cookie carries a stable session identifier, and a position from which the attacker can plant that cookie in the victim's browser: cookie tossing from a sibling subdomain, an HTTP host without HSTS, or a shared or kiosk browser.\n\nPhoenix defaults to the signed cookie store, and neither package's installer changes it. Under that store the authenticated session lives in the re-signed cookie delivered only to the victim, so a planted pre-authentication copy does not become an authenticated session. Attacker-planted session contents, such as a return_to value, still survive into the authenticated session there."
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "cpeMatch": [
                                {
                                    "criteria": "cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*",
                                    "versionEndExcluding": "4.15.0",
                                    "versionStartIncluding": "0.2.0",
                                    "vulnerable": true
                                },
                                {
                                    "criteria": "cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*",
                                    "versionEndExcluding": "5.0.0-rc.14",
                                    "versionStartIncluding": "5.0.0-rc.0",
                                    "vulnerable": true
                                }
                            ],
                            "negate": false,
                            "operator": "OR"
                        }
                    ],
                    "operator": "AND"
                }
            ],
            "credits": [
                {
                    "lang": "en",
                    "type": "reporter",
                    "value": "Peter Ullrich"
                },
                {
                    "lang": "en",
                    "type": "remediation developer",
                    "value": "James Harton"
                },
                {
                    "lang": "en",
                    "type": "coordinator",
                    "value": "Jonatan Männchen / EEF"
                }
            ],
            "dateAssigned": "2026-09-17T05:24:11.000Z",
            "descriptions": [
                {
                    "lang": "en",
                    "supportingMedia": [
                        {
                            "base64": false,
                            "type": "text/html",
                            "value": "<p>Session Fixation vulnerability in team-alembic ash_authentication allows an attacker who can plant a session identifier in a victim's browser to hold an authenticated session once that victim signs in.</p>\n<p><code>AshAuthentication.Plug.Helpers.store_in_session/2</code> writes the authenticated subject into the existing session with <code>Plug.Conn.put_session/3</code> and never calls <code>Plug.Conn.configure_session(renew: true)</code>, so the identifier the visitor arrived with carries into their authenticated session. Every authentication event reaches this one function: the default <code>success/4</code> injected by <code>AshAuthentication.Phoenix.Controller.__using__/1</code>, the <code>AuthController</code> emitted by <code>mix ash_authentication_phoenix.install</code>, and remember-me auto-login. <code>AshAuthentication.Phoenix.Plug.store_in_session/2</code> is a <code>defdelegate</code> to it. Logout does not close the window either, because <code>clear_session/2</code> ends with <code>Plug.Conn.clear_session/1</code>, which clears session contents but leaves the identifier intact, so a planted identifier survives a logout-then-login cycle.</p>\n<p>This issue affects ash_authentication: from 0.2.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14.</p>"
                        },
                        {
                            "base64": false,
                            "type": "text/markdown",
                            "value": "Session Fixation vulnerability in team-alembic ash_authentication allows an attacker who can plant a session identifier in a victim's browser to hold an authenticated session once that victim signs in.\n\n`AshAuthentication.Plug.Helpers.store_in_session/2` writes the authenticated subject into the existing session with `Plug.Conn.put_session/3` and never calls `Plug.Conn.configure_session(renew: true)`, so the identifier the visitor arrived with carries into their authenticated session. Every authentication event reaches this one function: the default `success/4` injected by `AshAuthentication.Phoenix.Controller.__using__/1`, the `AuthController` emitted by `mix ash_authentication_phoenix.install`, and remember-me auto-login. `AshAuthentication.Phoenix.Plug.store_in_session/2` is a `defdelegate` to it. Logout does not close the window either, because `clear_session/2` ends with `Plug.Conn.clear_session/1`, which clears session contents but leaves the identifier intact, so a planted identifier survives a logout-then-login cycle.\n\nThis issue affects ash_authentication: from 0.2.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14."
                        }
                    ],
                    "value": "Session Fixation vulnerability in team-alembic ash_authentication allows an attacker who can plant a session identifier in a victim's browser to hold an authenticated session once that victim signs in.\n\nAshAuthentication.Plug.Helpers.store_in_session/2 writes the authenticated subject into the existing session with Plug.Conn.put_session/3 and never calls Plug.Conn.configure_session(renew: true), so the identifier the visitor arrived with carries into their authenticated session. Every authentication event reaches this one function: the default success/4 injected by AshAuthentication.Phoenix.Controller.__using__/1, the AuthController emitted by mix ash_authentication_phoenix.install, and remember-me auto-login. AshAuthentication.Phoenix.Plug.store_in_session/2 is a defdelegate to it. Logout does not close the window either, because clear_session/2 ends with Plug.Conn.clear_session/1, which clears session contents but leaves the identifier intact, so a planted identifier survives a logout-then-login cycle.\n\nThis issue affects ash_authentication: from 0.2.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14."
                }
            ],
            "impacts": [
                {
                    "capecId": "CAPEC-61",
                    "descriptions": [
                        {
                            "lang": "en",
                            "supportingMedia": [
                                {
                                    "base64": false,
                                    "type": "text/html",
                                    "value": "<p>An attacker holding a session identifier they planted before the victim signed in gains that victim's authenticated session, and with it full account takeover, in deployments using a server-side session store.</p>"
                                },
                                {
                                    "base64": false,
                                    "type": "text/markdown",
                                    "value": "An attacker holding a session identifier they planted before the victim signed in gains that victim's authenticated session, and with it full account takeover, in deployments using a server-side session store."
                                }
                            ],
                            "value": "An attacker holding a session identifier they planted before the victim signed in gains that victim's authenticated session, and with it full account takeover, in deployments using a server-side session store."
                        }
                    ]
                }
            ],
            "metrics": [
                {
                    "cvssV4_0": {
                        "Automatable": "NOT_DEFINED",
                        "Recovery": "NOT_DEFINED",
                        "Safety": "NOT_DEFINED",
                        "attackComplexity": "LOW",
                        "attackRequirements": "PRESENT",
                        "attackVector": "NETWORK",
                        "baseScore": 7.4,
                        "baseSeverity": "HIGH",
                        "privilegesRequired": "NONE",
                        "providerUrgency": "NOT_DEFINED",
                        "subAvailabilityImpact": "NONE",
                        "subConfidentialityImpact": "NONE",
                        "subIntegrityImpact": "NONE",
                        "userInteraction": "ACTIVE",
                        "valueDensity": "NOT_DEFINED",
                        "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
                        "version": "4.0",
                        "vulnAvailabilityImpact": "NONE",
                        "vulnConfidentialityImpact": "HIGH",
                        "vulnIntegrityImpact": "HIGH",
                        "vulnerabilityResponseEffort": "NOT_DEFINED"
                    },
                    "format": "CVSS",
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "GENERAL"
                        }
                    ]
                }
            ],
            "problemTypes": [
                {
                    "descriptions": [
                        {
                            "cweId": "CWE-384",
                            "description": "CWE-384 Session Fixation",
                            "lang": "en",
                            "type": "CWE"
                        }
                    ]
                }
            ],
            "providerMetadata": {
                "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
                "shortName": "EEF",
                "dateUpdated": "2026-09-17T21:58:00.853Z"
            },
            "references": [
                {
                    "name": "GitHub Advisory",
                    "tags": [
                        "related",
                        "vendor-advisory"
                    ],
                    "url": "https://github.com/team-alembic/ash_authentication/security/advisories/GHSA-v577-944g-7h3x"
                },
                {
                    "name": "EEF CNA record for CVE-2026-86688",
                    "tags": [
                        "related"
                    ],
                    "url": "https://cna.erlef.org/cves/CVE-2026-86688.html"
                },
                {
                    "name": "OSV record EEF-CVE-2026-86688",
                    "tags": [
                        "related"
                    ],
                    "url": "https://osv.dev/vulnerability/EEF-CVE-2026-86688"
                },
                {
                    "name": "Introducing commit a939dde in team-alembic/ash_authentication",
                    "tags": [
                        "related"
                    ],
                    "url": "https://github.com/team-alembic/ash_authentication/commit/a939dde9b917c072cdf10c4b0913a9886a4b0231"
                },
                {
                    "name": "Fix commit 872db45 in team-alembic/ash_authentication",
                    "tags": [
                        "patch"
                    ],
                    "url": "https://github.com/team-alembic/ash_authentication/commit/872db454405ecad4fcdabd9ff3d8755d1d6a69ae"
                },
                {
                    "name": "Fix commit 3e1d452 in team-alembic/ash_authentication",
                    "tags": [
                        "patch"
                    ],
                    "url": "https://github.com/team-alembic/ash_authentication/commit/3e1d452cbf1564e87f5f97be882b66fe25af7cfa"
                }
            ],
            "source": {
                "discovery": "EXTERNAL"
            },
            "title": "Session id is not renewed on authentication in ash_authentication, allowing session fixation",
            "workarounds": [
                {
                    "lang": "en",
                    "supportingMedia": [
                        {
                            "base64": false,
                            "type": "text/html",
                            "value": "<p>Call <code>Plug.Conn.configure_session(conn, renew: true)</code> in your own <code>success/4</code> before <code>store_in_session/2</code>. This is a one-line change in application code and closes the controller sign-in path, though not remember-me auto-login, which does not pass through application code.</p>\n<p>Add <code>Plug.Conn.configure_session(conn, drop: true)</code> at sign-out so a planted identifier does not survive a logout-then-login cycle.</p>"
                        },
                        {
                            "base64": false,
                            "type": "text/markdown",
                            "value": "Call `Plug.Conn.configure_session(conn, renew: true)` in your own `success/4` before `store_in_session/2`. This is a one-line change in application code and closes the controller sign-in path, though not remember-me auto-login, which does not pass through application code.\n\nAdd `Plug.Conn.configure_session(conn, drop: true)` at sign-out so a planted identifier does not survive a logout-then-login cycle."
                        }
                    ],
                    "value": "Call Plug.Conn.configure_session(conn, renew: true) in your own success/4 before store_in_session/2. This is a one-line change in application code and closes the controller sign-in path, though not remember-me auto-login, which does not pass through application code.\n\nAdd Plug.Conn.configure_session(conn, drop: true) at sign-out so a planted identifier does not survive a logout-then-login cycle."
                }
            ]
        },
        "adp": [
            {
                "metrics": [
                    {
                        "other": {
                            "type": "ssvc",
                            "content": {
                                "id": "CVE-2026-86688",
                                "role": "CISA Coordinator",
                                "options": [
                                    {
                                        "Exploitation": "none"
                                    },
                                    {
                                        "Automatable": "no"
                                    },
                                    {
                                        "Technical Impact": "total"
                                    }
                                ],
                                "version": "2.0.3",
                                "timestamp": "2026-09-18T14:24:09.606894Z"
                            }
                        }
                    }
                ],
                "title": "CISA ADP Vulnrichment",
                "providerMetadata": {
                    "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
                    "shortName": "CISA-ADP",
                    "dateUpdated": "2026-09-18T14:31:41.961Z"
                }
            }
        ]
    }
}