This release includes 3 security fixes for security teams reviewing exposed deployments.
Topics
Affected surfaces
ReleasePort's take
Moderate signalThe release fixes IDOR bugs that let users mutate other accounts via foreign UUIDs and caps request bodies at 1 MiB with added read/write/idle timeouts.
Why it matters: Security: patches critical IDOR vulnerability; Performance/Reliability: enforces a hard 1 MiB limit on request payloads to prevent abuse.
Summary
AI summaryUpdates What's new, Fixes & improvements, and Budget across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Fixed IDOR bugs allowing mutation of other users' data via foreign UUIDs. Fixed IDOR bugs allowing mutation of other users' data via foreign UUIDs. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Security | High |
Request bodies capped at 1 MiB; server added proper read/write/idle timeouts. Request bodies capped at 1 MiB; server added proper read/write/idle timeouts. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Breaking | High |
Budget sharing now fails closed; only owner/admin can grant/revoke access. Budget sharing now fails closed; only owner/admin can grant/revoke access. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Breaking | High |
Old account‑sharing endpoints (`connection/set-account-access`, `connection/revoke-account-access`) are removed. Old account‑sharing endpoints (`connection/set-account-access`, `connection/revoke-account-access`) are removed. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Medium |
Standardized account sharing uses invite → accept/decline handshake. Standardized account sharing uses invite → accept/decline handshake. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Medium |
Server checks for new releases daily and shows a badge/notification in the UI. Server checks for new releases daily and shows a badge/notification in the UI. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Medium |
Money amounts now transmitted as exact decimal strings end‑to‑end. Money amounts now transmitted as exact decimal strings end‑to‑end. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Feature | Medium |
App now supports English and Russian UI languages via a globe selector. App now supports English and Russian UI languages via a globe selector. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Dependency | Low |
Money amounts in JSON are now decimal strings; API clients must handle string values. Money amounts in JSON are now decimal strings; API clients must handle string values. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Medium |
Archived budget categories with history remain visible; Spent column no longer negated. Archived budget categories with history remain visible; Spent column no longer negated. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Low |
Spent column no longer shows negated values and aligns correctly across rows. Spent column no longer shows negated values and aligns correctly across rows. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
Full changelog
Econumo v1.1.0 brings multi-language support, a redesigned account-sharing flow, exact decimal money handling, new-release notifications, and a substantial security-hardening pass — plus a batch of budget and UI fixes.
What's new
- Multi-language support (#94) — the app now speaks English and Russian. A globe selector on the sign-in/registration pages and in Settings switches the UI language; validation errors and the password-reset email are localized too. Your choice is remembered per browser and stored in your profile. More languages are easy to add — contributions welcome.
- Standardized account sharing (#90) — sharing an account now uses the same invite → accept/decline handshake budgets already had: the recipient sees a pending invite and explicitly accepts (choosing a folder for the account) or declines, instead of the account silently appearing. Existing shares are grandfathered as accepted, and leaving a share you received is now a "Decline/Leave" action rather than a scary "Delete" (#103).
- Exact money amounts (#60, #113) — amounts (balances, transactions, budget limits/spent) now travel as decimal strings end-to-end and the web app does all money math in exact decimal arithmetic instead of JavaScript floats, so large amounts like
12345678901234567.89survive byte-exactly. Amount inputs now reject non-numeric text outright, and-0can no longer be produced. - New-release notifications (#98) — the server checks
econumo.comonce a day for a new release (a single server-side request, nothing about your instance is sent) and the app shows a subtle badge plus a dismissible notice when one is available. Opt out withECONUMO_CHECK_UPDATES=false. - Anonymous product analytics (#99, #100) — the web app now reports anonymous, cookieless usage events (feature usage only — never amounts, names, or any personal data) to help prioritize development. Self-hosters can disable it instance-wide with
ECONUMO_ANALYTICS=false.
Security hardening
An authorization audit of every write endpoint, plus fixes for the findings of an external security review (#106, #108, #109, #110):
- Fixed IDOR bugs where a valid foreign UUID was enough to mutate another user's data (transaction updates/transfers, budget folders and envelopes), and closed several secondary authorization gaps.
- Budget sharing now fails closed: only an accepted owner/admin can grant or revoke access, and the owner can no longer be revoked (previously anyone knowing a budget UUID could remove members).
- Read-only budget guests really are read-only now — budget metadata edits are rejected server-side and the Edit dialog is read-only for guests (#112); tag/payee reordering is owner-only (#108, #109).
- Request bodies are capped (1 MiB; CSV import bounded as a whole), and the server got proper read/write/idle timeouts.
Fixes & improvements
- Budget: archived categories with history stay visible, folder visibility corrected, and Spent is no longer shown negated (#104); the Spent column aligns across rows in edit mode (#107); a revoked or deleted default budget no longer strands you on an endless loader (#102).
- A failed update check is silent instead of showing an amber sync icon (#101).
- The SPA sends explicit
Cache-Controlheaders, so browsers pick up new versions reliably after an upgrade (#96). - Category/payee pickers in the transaction form are keyboard-reachable in Safari (#89).
- Copy button placement fixed in the created-token dialog.
Upgrading
Drop-in for self-hosters: pull the new image and restart — migrations run on boot, and the bundled web app always matches the API.
Two notes for third-party API clients (the bundled SPA is unaffected):
- Money amounts in JSON are now decimal strings (e.g.
"10.50"), in both requests and responses. - Account sharing moved to
POST /api/v1/account/{grant,accept,decline,revoke}-access; the oldconnection/set-account-accessandconnection/revoke-account-accessendpoints are gone.
The ghcr.io/econumo/econumo:latest image tag points to this build; to pin the exact version use ghcr.io/econumo/econumo:v1.1.0.
Contributors
@dmtrkzntsv — with Claude (Fable 5 and Opus 4.8) co-authoring throughout.
Full changelog: v1.0.2...v1.1.0
Breaking Changes
- Removed legacy account‑sharing endpoints `connection/set-account-access` and `connection/revoke-account-access`
- Money amounts in JSON are now decimal strings (e.g., "10.50") instead of numeric types
Security Fixes
- Fixed IDOR bugs allowing mutation of other users' data via foreign UUIDs (transactions, budget folders/envelopes).
- Budget sharing now fails closed: only accepted owners/admins can grant/revoke access; owner cannot be revoked.
- Read‑only guests are truly read‑only – metadata edits rejected server‑side and UI dialogs disabled for guests.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Econumo
Budgeting application for managing personal and family finances, supporting multiple currencies, joint accounts, and budgets.
Related context
Related tools
Beta — feedback welcome: [email protected]