By Null Ventures MCP platform
Menu

vulnerability / NVI-00001924 / Revision 1

Firefly II has Stored XSS in Audit Log Entry view via piggy bank name (ale.twig)

OSV carries this publisher advisory for grumpydictator/firefly-iii. This is an aggregated source copy; consult the original publisher and compare update dates.

source listedactiveGHSA-6jq6-x4cx-qvcm

This report has not inspected your inventory, configuration, deployed build, reachability or evidence. A catalog listing and a severity score do not establish exposure or compromise.

01 / Meaning

Why it matters

Published affected context helps an owner decide what evidence to gather. This report has not examined your application.

02 / Applicability

The affected context

Affected versions, configuration prerequisites and known exclusions are public. Confirm each one against the deployed service.

grumpydictator/firefly-iii

source listed
  • ECOSYSTEM: introduced 0; fixed 6.6.3

## Summary The Twig template `resources/views/list/ale.twig` renders the piggy bank name from `AuditLogEntry.after.piggy` using the `|raw` filter, bypassing Twig's auto-escaping. A piggy bank created with an HTML payload in its name executes arbitrary JavaScript in any browser viewing that transaction's audit log. ## Root Cause The `|raw` filter is required on the outer `trans()` call to preserve `` tags in the `amount` parameter (currency styling). However, this also disables escaping for the user-controlled `name` parameter. **Vulnerable code (`resources/views/list/ale.twig` lines 107, 110):** ```twig {{ trans('firefly.ale_action_log_add', { amount: formatAmountBySymbol(...), name: logEntry.after.piggy })|raw }} ``` No HTML sanitization at storage time — `PiggyBankStoreRequest` only validates `min:1|max:255|uniquePiggyBankForUser`. ## Data Flow ``` POST /api/v1/piggy-banks {"name": ""} → Stored verbatim in piggy_banks.name → Transaction rule fires add_to_piggy / remove_from_piggy → UpdatePiggyBank::handle() stores AuditLogEntry.after.piggy = raw name → Any user views /transactions/show/{id} → ale.twig outputs unescaped payload

GitHub Advisory Database via OSV

03 / Response

What to do next

  1. vendor patch

    The original advisory lists fixed boundaries 6.6.3 for grumpydictator/firefly-iii. Confirm the publisher’s latest guidance.

    Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system. GitHub Advisory Database via OSV

A fixed release is not deployment evidence.

Check current vendor support and compatibility. After making a change, verify the deployed build and relevant runtime conditions. Keep the evidence, owner and time. An updated lockfile alone does not prove what is running.

04 / Limits

What this report cannot establish

  • Customer inventory, deployment, reachability and exploitation have not been inspected.
Read the collection and interpretation limits ↗

05 / Provenance

Sources you can inspect

Each assertion retains its source. Mirrored records may repeat one underlying publisher; additional links are not independent corroboration.

  1. GHSA-6jq6-x4cx-qvcm ↗

    GitHub Advisory Database via OSV · vendor advisory

    Observed . GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.

Public revision history

Only published revisions appear here. Routine fetches do not create a material-change event.

  1. Revision 1 ·

    First indexed by Null; source disclosure date is shown separately.

Read the public revision data ↗

The next step is private

Bring the question into your environment.

The connected workflow is a development preview for inventory, contextual matching, owner decisions and evidence-based verification. No system-specific result is generated by this page.

See the synthetic workflow preview ↗