Commit Graph
144 Commits
Author SHA1 Message Date
Daniel Hiller de4d768831 fix: close the gaps a security review found in the default install
Reported against 2.2.1 by someone reading the source. Every finding held.

**Sign-in had no ceiling.** Failures were logged with the caller's address
and nothing more. Two counters now — one per address, one per account —
because the two attacks look different: one source working through many
accounts is caught by the first, many sources working on one account by the
second, and behind a proxy only the second still means anything.

The count is kept in the process that serves the request. PLANKA needs no
Redis and the stock deployment is one container; run several and each keeps
its own count, which multiplies the ceiling by their number. That trade is
written where the limits are configured.

**The second factor could be guessed at leisure.** Six digits, and a
pending token that stayed valid for its full ten minutes however many codes
were wrong. Wrong codes are now counted on the session row — in the
database, so the count survives a restart and holds across every process —
and when the budget is spent the session is destroyed. After that even the
right code is refused and the login starts over from the password.

**Avatars, background images and favicons** checked the token's signature
and nothing else, so a revoked session, a deactivated account or a changed
password all kept working there for as long as the signature lasted, which
is a year by default. The five checks the API makes now live in one helper
that both use, rather than the shortened copy that had drifted from it.

**A link attachment's favicon** was fetched from wherever the URL pointed.
Storing a link is harmless — it is a string the user typed — but fetching
its icon is a request the server makes to an address the user chose, and
whether an icon came back reported on what is reachable from inside the
network. Server-side fetches now refuse private, loopback and link-local
addresses, `169.254.169.254` among them. The attachment is still created:
linking to an internal wiki is a legitimate thing to do, and it was the
server's own request that had to stop.

**The signing key.** Our own compose file ships `notsecretkey`, and it is
printed in the documentation — so on any instance that copied it, anyone can
sign a token for any account. PLANKA now says so on every start, and keeps
saying it, along with a key that is missing or shorter than 32 characters.
The placeholder carries the warning inline, where it is copied from.

**The backup script** wrote password hashes, live sessions, TOTP secrets and
SMTP credentials to an unencrypted archive. `BACKUP_PASSPHRASE` now encrypts
it, and without one the script says what it just put on disk. It also says
what it is — an example for the stock compose stack, not a backup concept —
and names the window between the database dump and the file copy, which no
ordering closes.
2026-08-28 20:55:54 +02:00
Daniel Hiller 2e4904f77d feat: Add two-factor authentication via TOTP
Adds TOTP setup with QR code, login challenge, recovery codes and
trusted devices that let a browser skip the second factor for 30
days. Admins can reset another user's second factor by confirming
with their own password.
2026-08-07 20:11:55 +02:00
Daniel Hiller 36aa732fec feat: Remove OIDC and SSO support
Existing SSO accounts have no local password, so the migration
deactivates them before dropping is_sso_user and the
identity_provider_user table.
2026-08-07 19:15:43 +02:00
Roberto Fernández Iglesias 5e6195b252 feat: Support running under subpath (#1451) 2026-03-12 22:11:11 +01:00
Fabian Reinold 605dcace54 fix(gravatar): Update hash algorithm to SHA-256 for improved security (#1550) 2026-02-23 16:59:55 +01:00
Maksim Eltyshev 52c96c6c8f fix(platform): Make app compatible with Windows 2026-02-19 20:15:28 +01:00
Maksim Eltyshev d83ea4b146 fix(terms): Display template notice, support custom terms loading
Closes #1523
2026-02-17 15:37:26 +01:00
Maksim Eltyshev a82ae49fe4 chore: Unify term types 2026-02-10 21:14:56 +01:00
Maksim Eltyshev 8898a0f0a2 fix: Block unsupported local Apprise schemas 2026-02-09 13:35:04 +01:00
Maksim Eltyshev 538280d197 feat: Add configurable proxy for outgoing traffic to prevent SSRF 2026-02-09 13:33:27 +01:00
Maksim Eltyshev 052edc9fb1 feat: Migrate file storage to unified data directory 2026-01-31 20:27:15 +01:00
Maksim Eltyshev db99227f32 feat: Re-stream static files from S3, introduce protected static files 2026-01-30 21:45:18 +01:00
Maksim Eltyshev d688a64e36 feat: Add OIDC debug mode 2026-01-27 22:34:08 +01:00
Maksim Eltyshev 2c4369159b fix: Hide unlinking SSO when OIDC is enforced 2026-01-26 22:21:27 +01:00
Maksim Eltyshev 3b8ad26169 feat: Add ability to pre-fill login credentials in demo mode 2026-01-25 20:17:13 +01:00
Maksim Eltyshev 267fce0505 fix: Prevent deactivated users from receiving socket events when possible 2026-01-23 19:38:58 +01:00
Maksim Eltyshev 6ec0bafecb fix: Prevent sending notifications to deactivated users 2026-01-23 17:20:12 +01:00
Maksim Eltyshev 1264fd5715 feat: Add internal runtime configuration 2026-01-22 18:02:42 +01:00
Maksim Eltyshev 1f4f439f4c feat: Add demo mode with restricted user actions 2026-01-14 14:11:21 +01:00
Maksim Eltyshev a60f8e3c3e chore: Rename for consistency 2026-01-13 17:52:31 +01:00
Maksim Eltyshev 208e61a272 feat: Optimize and parallel image processing 2025-12-19 19:11:02 +01:00
Maksim Eltyshev fb5d5233bf feat: Improve mime type detection, limit image processing size 2025-12-19 17:24:22 +01:00
Maksim Eltyshev 12f388fd35 fix: Fix attachment file handling when S3 is enabled 2025-12-11 19:26:55 +01:00
Maksim Eltyshev 9e6e38fcf7 feat: Add ability to copy/cut cards with shortcut support 2025-12-09 14:58:01 +01:00
Maksim Eltyshev 52acc9de90 feat: Allow setting customer panel URL via environment variables 2025-12-08 21:25:13 +01:00
Maksim Eltyshev f030b78f82 feat: Add object-path support to OIDC attribute mapping
Closes #1359
2025-12-04 17:38:39 +01:00
Maksim Eltyshev bf2ab4649e fix: Create isolated i18n instances to prevent locale collision 2025-11-27 18:28:25 +01:00
Maksim Eltyshev 54e230d4c1 ref: Refactoring 2025-11-27 18:24:55 +01:00
Maksim Eltyshev cd5685049e fix: Log errors when sending notifications via Apprise 2025-11-19 18:19:31 +01:00
Samuel b4cbd32bf2 feat: Add API key authentication (#1254)
Closes #945
2025-11-06 20:56:48 +01:00
Maksim Eltyshev fee300908c fix: Set detected language on first login, remove auto-detect language option 2025-10-15 00:08:29 +02:00
Maksim Eltyshev c6f4dcdb70 feat: Add ability to configure and test SMTP via UI 2025-09-22 20:35:13 +02:00
Mary Ojo 5dc783c5b5 feat: Add ability to use Gravatar as avatar provider (#1319)
Closes #1243
2025-09-05 19:00:17 +02:00
Steven Correia 37bd4d1349 feat: Restore toggleable due dates (#1332) 2025-09-05 13:55:20 +02:00
Maksim Eltyshev 203fbd152d fix: Correctly parse environment variables, little refactoring 2025-09-05 00:19:35 +02:00
Symon Baikov 9683227fbc feat: Add ability to move lists between boards (#1208) 2025-09-04 00:07:10 +02:00
Maksim Eltyshev 60a94f33fc ref: Little refactoring 2025-08-25 17:23:59 +02:00
Maksim Eltyshev 4d77a1f596 feat: Track storage usage 2025-08-23 00:03:20 +02:00
Maksim Eltyshev 2f4bcb0583 feat: Add legal requirements (#1306) 2025-08-21 15:10:02 +02:00
Maksim Eltyshev 6515877eb6 fix: Improve mentions behavior 2025-08-11 13:52:17 +02:00
Luis Chacón cbb00d1d59 feat: Add OAuth callback support for OIDC (#1290)
Closes #593, closes #690, closes #1289
2025-08-09 18:58:55 +02:00
Symon Baikov d8fbf2f909 feat: Add ability to hide completed tasks (#1210) 2025-07-21 18:33:02 +02:00
Maksim Eltyshev 3aba4d4a56 ref: Little refactoring 2025-07-14 14:54:06 +02:00
Maksim Eltyshev 230f50e3d9 feat: Add ability to link tasks to cards 2025-07-11 01:04:02 +02:00
Maksim Eltyshev 709a0d1758 feat: Persist closed state per card 2025-07-09 17:45:47 +02:00
Maksim Eltyshev 9d07178e57 fix: Move webhooks declaration to correct position 2025-07-08 00:22:24 +02:00
Maksim Eltyshev b22dba0d11 feat: Move webhooks configuration from environment variable to UI 2025-07-04 22:04:11 +02:00
Maksim Eltyshev 63de346b0e ref: Little refactoring 2025-06-06 12:34:09 +02:00
Roman Zavarnitsyn c0b0436851 feat: Add ability to mention users in comments (#1162) 2025-05-30 22:01:29 +02:00
Maksim Eltyshev 86cfd155f2 feat: Add board activity log 2025-05-22 23:14:46 +02:00