{"id":"CVE-2026-119275","kind":"vulnerability","aliases":["CVE-2026-119275"],"related":[],"title":"Akaunting: stored XSS via XLSX invoice import runs script in browsers","description":"Akaunting 3.3.0 contains a stored cross-site scripting vulnerability in the XLSX invoice-import workflow. An authenticated Manager can import a child invoice whose invoice number contains HTML and is linked to a recurring invoice. When a victim opens that recurring invoice, Akaunting raw-renders the stored child number in an anchor, causing attacker-controlled markup to execute in the victim's browser.","summary":"Akaunting 3.3.0 renders imported invoice numbers unescaped on the recurring-invoice page. A Manager who imports an invoice with HTML in its number, linked to a recurring invoice, runs script in the browser of any user who opens that page. A public proof of concept exists; no fixed version is published yet.","severity":"high","cvss":7.0,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"akaunting/akaunting","fixed":[],"affected":"= 3.3.0","ecosystem":"packagist"}],"ecosystems":[],"tags":["akaunting","laravel","package","php","self-hosted","xss"],"not_affected_if":["no-xlsx-import","untrusted-managers-absent"],"how_to_check":"Run Akaunting 3.3.0? Check the version shown in the admin footer. Then look for HTML in invoice numbers: SELECT id, document_number, parent_id FROM documents WHERE document_number LIKE '%<%'; Also check if you run a nearby version, since the advisory only tested 3.3.0.","fix":null,"status":"open","published_at":"2026-11-12T18:17:16+00:00","first_seen_at":"2026-11-12T18:40:38+00:00","triaged_at":"2026-11-12T18:42:49+00:00","updated_at":"2026-11-12T18:43:32+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-12T18:42:49Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"Akaunting: stored XSS via XLSX invoice import runs script in browsers","impact":"medium","summary":"Akaunting 3.3.0 lets a logged-in Manager import an invoice whose number contains HTML. When another user opens the related recurring invoice, that HTML is rendered unescaped and runs in their browser.","audience":"businesses","category":"package","nicknames":[],"who_cares":["akaunting","self-hosted","php","laravel"],"confidence":0.6,"fix_status":"unknown","needs_auth":"yes","worst_case":"Attacker script runs in victim's browser session within Akaunting","analyst_note":"Confirm fixed version and mitigation from the NVD entry or the Akaunting advisory; sources list no product ranges.","how_to_check":"unknown","plain_action":"","product_name":"","needs_analyst":true,"not_affected_if":["no-xlsx-import","untrusted-managers-absent"],"who_is_affected":"Teams running Akaunting 3.3.0 where users hold the Manager role and can import invoices from XLSX files. Exposure requires a recurring invoice to be opened by another user after the malicious import. Installations on other versions or without invoice import use are not described by the sources.","user_interaction":"yes","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000703,"input_tokens":4598,"output_tokens":487,"severity_before":"high"},"analyst_status":"done","analyst_note":"Confirm fixed version and mitigation from the NVD entry or the Akaunting advisory; sources list no product ranges.","search":"'-119275':14A,17A '-2026':13A,16A '3.3.0':28B,81C 'akaunt':1A,19B,27B,80C,124C 'akaunting/akaunting':18A 'anchor':134C 'attack':137C 'attacker-control':136C 'authent':98C 'browser':11A,60B,146C 'caus':135C 'child':103C,130C 'concept':72B 'contain':82C,108C 'control':138C 'cross':86C 'cross-sit':85C 'cve':12A,15A 'execut':141C 'exist':73B 'fix':75B 'host':25B 'html':47B,109C 'import':7A,30B,43B,95C,101C 'invoic':6A,31B,38B,45B,55B,94C,104C,106C,116C,123C 'invoice-import':93C 'laravel':20B 'link':51B,112C 'manag':41B,99C 'markup':139C 'number':32B,50B,107C,131C 'open':65B,120C 'packag':21B 'page':39B,67B 'php':22B 'proof':70B 'public':69B 'publish':78B 'raw':126C 'raw-rend':125C 'recur':37B,54B,115C,122C 'recurring-invoic':36B 'render':29B,127C 'run':8A,56B 'script':9A,57B,88C 'self':24B 'self-host':23B 'site':87C 'store':2A,84C,129C 'unescap':33B 'user':63B 'version':76B 'via':4A 'victim':119C,144C 'vulner':89C 'whose':105C 'workflow':96C 'xlsx':5A,92C 'xss':3A,26B 'yet':79B","nicknames":[],"mitigations":[],"who_affected":"Self-hosted Akaunting 3.3.0 where a user with the Manager role (or anyone allowed to import invoices) is not fully trusted. The Manager imports an invoice XLSX whose invoice number holds HTML, linked to a recurring invoice. Script runs in the browser of whoever opens that recurring invoice, with that user's permissions, so it matters most when administrators view it. Skip it if no untrusted users can import invoices.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"pkeys":["akauntingakaunting"],"ptokens":["akaunting"],"labels":["akaunting","high","laravel","package","php","selfhosted","xss"],"campaign_type":null,"search_a":"'-119275':14A,17A '-2026':13A,16A 'akaunt':1A 'akaunting/akaunting':18A 'browser':11A 'cve':12A,15A 'import':7A 'invoic':6A 'run':8A 'script':9A 'store':2A 'via':4A 'xlsx':5A 'xss':3A","search_b":"'3.3.0':28B 'akaunt':19B,27B 'browser':60B 'concept':72B 'exist':73B 'fix':75B 'host':25B 'html':47B 'import':30B,43B 'invoic':31B,38B,45B,55B 'laravel':20B 'link':51B 'manag':41B 'number':32B,50B 'open':65B 'packag':21B 'page':39B,67B 'php':22B 'proof':70B 'public':69B 'publish':78B 'recur':37B,54B 'recurring-invoic':36B 'render':29B 'run':56B 'script':57B 'self':24B 'self-host':23B 'unescap':33B 'user':63B 'version':76B 'xss':26B 'yet':79B","search_c":"'3.3.0':81C 'akaunt':80C,124C 'anchor':134C 'attack':137C 'attacker-control':136C 'authent':98C 'browser':146C 'caus':135C 'child':103C,130C 'contain':82C,108C 'control':138C 'cross':86C 'cross-sit':85C 'execut':141C 'html':109C 'import':95C,101C 'invoic':94C,104C,106C,116C,123C 'invoice-import':93C 'link':112C 'manag':99C 'markup':139C 'number':107C,131C 'open':120C 'raw':126C 'raw-rend':125C 'recur':115C,122C 'render':127C 'script':88C 'site':87C 'store':84C,129C 'victim':119C,144C 'vulner':89C 'whose':105C 'workflow':96C 'xlsx':92C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T18:17:16+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:A/VC:H/VI:H/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"help@fluidattacks.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-119275","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119275","severity":null,"published_at":"2026-11-12T18:17:16+00:00","modified_at":"2026-11-12T18:17:16+00:00","first_seen_at":"2026-11-12T18:40:38+00:00","fetched_at":"2026-11-12T18:40:38+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-119275:3763","url":"https://fluidattacks.com/advisories/soda","severity":null,"published_at":"2026-11-12T18:43:32+00:00","modified_at":"2026-11-12T18:43:32+00:00","first_seen_at":"2026-11-12T18:43:32+00:00","fetched_at":"2026-11-12T18:43:32+00:00","note":"Read Fluid Attacks CNA advisory (researcher's, not Akaunting's). Only 3.3.0 confirmed affected; no fixed version stated, vendor contacted Oct 29, no vendor reply seen, so fix left unknown. Public PoC in advisory. Nothing verified: no vendor/maintainer page.","cites":["https://fluidattacks.com/advisories/soda"]}],"documents":[{"id":137493,"url":"https://fluidattacks.com/advisories/soda","title":"Akaunting 3.3.0 - Stored XSS through imported invoice numbers (Fluid Attacks)","kind":"advisory","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}