{"id":"CVE-2026-62860","state":"PUBLISHED","title":"Picsou vulnerable to login timing attack","description":"Picsou is a self-hosted personal finance dashboard. In the affected login implementation, the `/api/auth/login` endpoint reveals whether a username exists through a timing discrepancy. In `backend/src/main/java/com/picsou/controller/AuthController.java`, `AuthController.login()` throws `BadCredentialsException` immediately for an unknown username, before `passwordEncoder.matches(...)`, whereas an existing username with an incorrect password incurs the `bcrypt` comparison cost. Both cases return the same generic `HTTP 401` response, but repeated latency measurements disclose valid usernames without credentials. Login rate limiting, a small user population, and deployments inaccessible from outside the local network limit practical exposure; the weakness does not itself read or modify account data, though enumerated usernames can assist credential stuffing or brute-force attacks. This issue is fixed in repository release 1.0.8.","publishedAt":"2026-10-30T20:40:46.993Z","updatedAt":"2026-10-30T20:40:46.993Z","severity":{"score":5.3,"label":"Medium","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","source":"GitHub_M"},"assigner":"GitHub_M","products":["Zoeille picsou-finance"],"affected":[{"vendor":"Zoeille","product":"picsou-finance","versions":[{"version":"< 1.0.8","status":"affected"}]}],"references":["https://github.com/Cloeille/picsou-finance/security/advisories/GHSA-ww5m-pxgq-8qq6","https://github.com/Cloeille/picsou-finance/commit/877ac0f7c651612e15f0dbac5de8e96d66bbcf59","https://github.com/Cloeille/picsou-finance/releases/tag/1.0.8"],"weaknesses":["CWE-208"],"ingestedAt":"2026-10-30T20:46:06.109Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/62xxx/CVE-2026-62860.json","commit":"e21b88f72014e03094650bf3be8b2642faf68731","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-62860","state":"PUBLISHED","datePublished":"2026-10-30T20:40:46.993Z","dateUpdated":"2026-10-30T20:40:46.993Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-07-14T21:10:50.032Z"},"containers":{"cna":{"title":"Picsou vulnerable to login timing attack","descriptions":[{"lang":"en","value":"Picsou is a self-hosted personal finance dashboard. In the affected login implementation, the `/api/auth/login` endpoint reveals whether a username exists through a timing discrepancy. In `backend/src/main/java/com/picsou/controller/AuthController.java`, `AuthController.login()` throws `BadCredentialsException` immediately for an unknown username, before `passwordEncoder.matches(...)`, whereas an existing username with an incorrect password incurs the `bcrypt` comparison cost. Both cases return the same generic `HTTP 401` response, but repeated latency measurements disclose valid usernames without credentials. Login rate limiting, a small user population, and deployments inaccessible from outside the local network limit practical exposure; the weakness does not itself read or modify account data, though enumerated usernames can assist credential stuffing or brute-force attacks. This issue is fixed in repository release 1.0.8."}],"affected":[{"vendor":"Zoeille","product":"picsou-finance","versions":[{"version":"< 1.0.8","status":"affected"}]}],"references":[{"url":"https://github.com/Cloeille/picsou-finance/security/advisories/GHSA-ww5m-pxgq-8qq6","name":"https://github.com/Cloeille/picsou-finance/security/advisories/GHSA-ww5m-pxgq-8qq6","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/Cloeille/picsou-finance/commit/877ac0f7c651612e15f0dbac5de8e96d66bbcf59","name":"https://github.com/Cloeille/picsou-finance/commit/877ac0f7c651612e15f0dbac5de8e96d66bbcf59","tags":["x_refsource_MISC"]},{"url":"https://github.com/Cloeille/picsou-finance/releases/tag/1.0.8","name":"https://github.com/Cloeille/picsou-finance/releases/tag/1.0.8","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV3_1":{"attackComplexity":"LOW","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":5.3,"baseSeverity":"MEDIUM","confidentialityImpact":"LOW","integrityImpact":"NONE","privilegesRequired":"NONE","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","version":"3.1"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-208","lang":"en","description":"CWE-208: Observable Timing Discrepancy","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-10-30T20:40:46.993Z"},"source":{"advisory":"GHSA-ww5m-pxgq-8qq6","discovery":"UNKNOWN"}}}}}