{"id":"GHSA-qrfh-cc86-vc8c","summary":"Leantime has HTML injection through firstname and lastname fields","details":"### Summary\nLeantime v2.3.27 is vulnerable to Stored HTML Injection. The `firstname` and `lastname` fields in the admin user edit page are rendered without  HTML escaping, allowing an authenticated user to inject arbitrary HTML that executes when the profile is viewed.\n\n### Vulnerable File\n`app/Domain/Users/Templates/editUser.tpl.php`\n\n### Vulnerable Code (Lines ~14-17)\n```php\nvalue=\"\u003c?php echo $values['firstname'] ?\u003e\"\nvalue=\"\u003c?php echo $values['lastname'] ?\u003e\"\n```\nThese fields output raw user input without sanitization.\n\n### Steps to Reproduce\n1. Login as admin \u003e Go to Settings \u003e Users \u003e Edit any user\n2. Enter HTML payload in First Name or Last Name field:\n   `\u003ch1\u003eINJECTED\u003c/h1\u003e`\n3. Save the user profile\n4. Create or view an article — the injected HTML renders in the author name\n\n### Fix\nReplace unescaped `echo` with `htmlspecialchars()`:\n```php\nvalue=\"\u003c?php echo htmlspecialchars($values['firstname'], ENT_QUOTES, 'UTF-8') ?\u003e\"\nvalue=\"\u003c?php echo htmlspecialchars($values['lastname'], ENT_QUOTES, 'UTF-8') ?\u003e\"\n```\nOr use the existing `$this-\u003ee()` helper already used in `editOwn.tpl.php`.\n\n### Impact\n- Stored HTML injection visible to all users viewing affected content\n- Can be used for phishing, fake login forms, and UI defacement\n- Affects all versions before 3.3.0","modified":"2026-03-05T18:16:35.270983Z","published":"2026-03-05T18:05:57Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-03-05T18:05:57Z","nvd_published_at":null,"cwe_ids":["CWE-79"],"severity":"MODERATE"},"references":[{"type":"WEB","url":"https://github.com/Leantime/leantime/security/advisories/GHSA-qrfh-cc86-vc8c"},{"type":"WEB","url":"https://github.com/Leantime/leantime/commit/3f8b2c6346111694bb18cec558b27c22d3a2b9d1"},{"type":"PACKAGE","url":"https://github.com/Leantime/leantime"}],"affected":[{"package":{"name":"leantime/leantime","ecosystem":"Packagist","purl":"pkg:composer/leantime/leantime"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.3.0"}]}],"versions":["2.4","2.4-beta","2.4-beta-7","2.4-beta-8","2.4.1","2.4.2","2.4.3","2.4.4","2.4.5","2.4.7","2.4.8","3.0.0","3.0.0-beta","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.1.0-beta","3.1.1","3.1.2","3.1.3","3.1.4","3.2.0","3.2.0-beta","3.2.0-beta-2","3.2.1","3.3","v2.0","v2.0.1","v2.0.10","v2.0.11","v2.0.12","v2.0.13","v2.0.14","v2.0.15","v2.0.2","v2.0.3","v2.0.4","v2.0.5","v2.0.6","v2.0.7","v2.0.8","v2.0.9","v2.1","v2.1-beta","v2.1-beta2","v2.1-beta3","v2.1-beta5","v2.1-beta6","v2.1.1","v2.1.2","v2.1.3","v2.1.4","v2.1.5","v2.1.6","v2.1.7","v2.1.8","v2.1.9","v2.2.0","v2.2.1","v2.2.10","v2.2.11","v2.2.2","v2.2.3","v2.2.4","v2.2.5","v2.2.6","v2.2.7","v2.2.8","v2.2.9","v2.3.0-beta","v2.3.1-beta","v2.3.10","v2.3.11","v2.3.12","v2.3.13","v2.3.14","v2.3.15","v2.3.16","v2.3.17","v2.3.18","v2.3.19","v2.3.2","v2.3.20","v2.3.21","v2.3.22","v2.3.23","v2.3.24","v2.3.25","v2.3.26","v2.3.27","v2.3.3","v2.3.4","v2.3.5","v2.3.6","v2.3.7","v2.3.8","v2.3.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-qrfh-cc86-vc8c/GHSA-qrfh-cc86-vc8c.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N"}]}