{"items":[{"id":"NVI-00004943","kind":"vulnerability","title":"FacturaScripts: Account takeover of any 2FA-enabled user","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-c67f-gmxw-mj93","CVE-2026-47677"],"plain_summary":"OSV carries this publisher advisory for facturascripts/facturascripts. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"The original advisory lists fixed boundaries 2026.3 for facturascripts/facturascripts. Confirm the publisher’s latest guidance.","source_ids":["sr-7a2462df1f95d2db5f3e5bb5037a9ce1"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-7a2462df1f95d2db5f3e5bb5037a9ce1","url":"https://github.com/advisories/GHSA-c67f-gmxw-mj93","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-c67f-gmxw-mj93","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:42:10.695Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-7a2462df1f95d2db5f3e5bb5037a9ce1"],"technology":"facturascripts/facturascripts","known_exclusions":[],"conditions_summary":"# Authentication bypass in FacturaScripts: `/login?action=two-factor-validation` accepts brute-forceable TOTP without password or CSRF protection\n\n## Summary\n\n`Core/Controller/Login.php::twoFactorValidationAction()` accepts an\nunauthenticated POST containing only `fsNick` and `fsTwoFactorCode`. If the\nTOTP value matches, the server issues a full `fsNick` + `fsLogkey` session\ncookie pair. The handler:\n\n1. **Does not verify the password** — the user is not required to have just\n   completed `loginAction`.\n2. **Does not call `validateFormToken()`** — no CSRF token is required (every\n   other action handler in the same file does call it).\n3. **Does not call `userHasManyIncidents()` before processing** — `loginAction`\n   and `changePasswordAction` both check this guard *before* doing work; the\n   2FA handler only writes to the incident list *after* a failure, and the\n   incident list is consulted by `loginAction` / `changePasswordAction` but\n   not by the 2FA handler itself. The endpoint therefore has **no\n   rate-limiting at all**.\n\nCombined with `TwoFactorManager::VERIFICATION_WINDOW = 8` (google2fa default\nis 1), 17 distinct six-digit codes are valid simultaneously and each remains\nv","public_affected_ranges":["ECOSYSTEM: introduced 0; fixed 2026.3"]}],"null_published_at":"2026-10-31T22:12:57.148Z","source_updated_at":"2026-07-13T23:56:39.400Z","source_disclosed_at":"2026-07-13T23:35:48.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T21:42:10.695Z"}],"next_cursor":null,"snapshot_revision":"42594"}