Grav Login Plugin 2.7.0 before 3.9.9 2FA Bypass via Profile Update Form
Grav Login plugin 2.7.0 before 3.9.9 contains an authentication bypass in processUserProfile(), which checks that the session user exists but not that a pending front-end 2FA session is fully authorized. Attackers with a victim's password who can publish a page form without an access rule can invoke update_user before completing 2FA to disable twofa_enabled and take over the account.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-109312
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 05:39 UTC · Revision 1
Source evidence
Grav Login Plugin 2.7.0 before 3.9.9 2FA Bypass via Profile Update Form
core-osv · Original sourcePublished 12 Oct 2026, 16:05 UTC
Grav Login plugin 2.7.0 before 3.9.9 contains an authentication bypass in processUserProfile(), which checks that the session user exists but not that a pending front-end 2FA session is fully authorized. Attackers with a victim's password who can publish a page form without an access rule can invoke update_user before completing 2FA to disable twofa_enabled and take over the account.
osv:CVE-2026-109312
Complete source record
{
"id": "86959bb95dc7e00e8bfd337bd71e5c365ad542992ab7b52142f45ebb78bd2d12",
"url": "https://osv.dev/vulnerability/CVE-2026-109312",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Grav Login Plugin 2.7.0 before 3.9.9 2FA Bypass via Profile Update Form",
"summary": "Grav Login plugin 2.7.0 before 3.9.9 contains an authentication bypass in processUserProfile(), which checks that the session user exists but not that a pending front-end 2FA session is fully authorized. Attackers with a victim's password who can publish a page form without an access rule can invoke update_user before completing 2FA to disable twofa_enabled and take over the account.",
"evidence": "osv:CVE-2026-109312",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-109312",
"aliases": [
"CVE-2026-109312",
"GHSA-5rph-jqcf-2x36"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/getgrav/grav-plugin-login",
"type": "GIT",
"events": [
{
"introduced": "db3a7c90fa511d50ae0a4401c3bf2f9d5668f513"
},
{
"fixed": "176a175156f271e831703a2b64ca798cc76e221d"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "2.7.0"
},
{
"fixed": "3.9.9"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
}
]
}
}
],
"versions": [
"3.9.8",
"3.9.7",
"3.9.6",
"3.9.5",
"3.9.4",
"3.9.3",
"3.9.2",
"3.9.1",
"3.9.0",
"3.8.13",
"3.8.12",
"3.8.11",
"3.8.10",
"3.8.9",
"3.8.8",
"3.8.7",
"3.8.6",
"3.8.5",
"3.8.4",
"3.8.3",
"3.8.2",
"3.8.1",
"3.8.0",
"3.7.9",
"3.7.8.1",
"3.7.8",
"3.7.7",
"3.7.6",
"3.7.5",
"3.7.4",
"3.7.3",
"3.7.2",
"3.7.1",
"3.7.0",
"3.6.3",
"3.6.2",
"3.6.1",
"3.6.0",
"3.5.3",
"3.5.2",
"3.5.1",
"3.5.0",
"3.4.4",
"3.4.3",
"3.4.2",
"3.4.1",
"3.4.0",
"3.3.8",
"3.3.7",
"3.3.6",
"3.3.5",
"3.3.4",
"3.3.3",
"3.3.2",
"3.3.1",
"3.3.0",
"3.2.0",
"3.1.0",
"3.0.6",
"3.0.5",
"3.0.4",
"3.0.3",
"3.0.2",
"3.0.1",
"3.0.0",
"2.8.4",
"2.8.3",
"2.8.2",
"2.8.1",
"2.8.0",
"2.7.3",
"2.7.2",
"2.7.1",
"2.7.0"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-109312.json"
}
}
],
"modified": "2026-10-28T02:30:49.806285365Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/109xxx/CVE-2026-109312.json",
"https://github.com/getgrav/grav/security/advisories/GHSA-5rph-jqcf-2x36",
"https://nvd.nist.gov/vuln/detail/CVE-2026-109312",
"https://www.vulncheck.com/advisories/grav-login-plugin-2.7.0-before-3.9.9-2fa-bypass-via-profile-update-form",
"https://github.com/getgrav/grav-plugin-login"
],
"provider_metadata": {
"cwe_ids": [
"CWE-287"
],
"cna_assigner": "VulnCheck",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/109xxx/CVE-2026-109312.json"
}
},
"related_cves": [
{
"value": "CVE-2026-109312",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 518398,
"published_at": "2026-10-12T16:05:07.605+00:00"
}