{"id":"CVE-2026-126778","kind":"vulnerability","aliases":["CVE-2026-126778"],"related":[],"title":"Wallos: stored script injection via notification responses runs in admin session","description":"Wallos 4.4.0 before 5.10.3 contains a stored cross-site scripting vulnerability in endpoints/cronjobs/sendnotifications.php that allows registered users to inject scripts via unescaped notification service responses. Attackers can point their Mattermost webhook URL or Web Push endpoint at a controlled server returning JavaScript, which executes in the administrator's session when sendnotifications.php is opened.","summary":"Wallos, a self-hosted subscription tracker, fails to escape responses from notification services in sendnotifications.php, so a registered user can store JavaScript that runs when an administrator opens that page. The attacker gets the administrator's session, which can expose or change data in the app.","severity":"medium","cvss":5.4,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"Wallos","fixed":[],"affected":"","ecosystem":"vendor"}],"ecosystems":["vendor"],"tags":["other","php","self-hosted","wallos"],"not_affected_if":["managed-hosting","no-untrusted-registration","version-5.10.3-or-later"],"how_to_check":"- Check the installed Wallos version; it is affected if it is from `4.4.0` up to but not including `5.10.3`\n- Look at the Wallos instance's `endpoints/cronjobs/sendnotifications.php` file and confirm whether it outputs notification service responses unescaped\n- Review which users are registered on the instance; registration by untrusted people raises the risk","fix":"- Wallos: move to `5.10.3` or later","status":"open","published_at":"2026-11-11T19:17:38+00:00","first_seen_at":"2026-11-11T19:28:47+00:00","triaged_at":"2026-11-11T19:30:27+00:00","updated_at":"2026-11-11T19:30:27+00:00","category":"other","confidence":0.8,"triage":{"at":"2026-11-11T19:30:27Z","model":"claude-haiku-5-5","output":{"fix":"- Wallos: move to `5.10.3` or later","reach":"internet","title":"Wallos: stored script injection via notification responses runs in admin session","impact":"medium","summary":"Wallos, a self-hosted subscription tracker, fails to escape responses from notification services in sendnotifications.php, so a registered user can store JavaScript that runs when an administrator opens that page. The attacker gets the administrator's session, which can expose or change data in the app.","audience":"businesses","category":"other","nicknames":[],"who_cares":["wallos","self-hosted","php"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker runs script in administrator's session and takes over the app","analyst_note":"","how_to_check":"- Check the installed Wallos version; it is affected if it is from `4.4.0` up to but not including `5.10.3`\n- Look at the Wallos instance's `endpoints/cronjobs/sendnotifications.php` file and confirm whether it outputs notification service responses unescaped\n- Review which users are registered on the instance; registration by untrusted people raises the risk","plain_action":"","product_name":"Wallos","needs_analyst":false,"not_affected_if":["managed-hosting","version-5.10.3-or-later","no-untrusted-registration"],"who_is_affected":"Teams that self-host Wallos 4.4.0 up to 5.10.3 with user registration open to people they do not fully trust. The attacker needs a registered account and must get an administrator to open sendnotifications.php, so instances limited to trusted users are at lower risk.","user_interaction":"yes","product_ecosystem":"vendor","needs_special_setup":"no","severity_if_unknown":"unknown"},"cost_usd":0.000764,"input_tokens":4644,"output_tokens":600,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-126778':14A,17A '-2026':13A,16A '4.4.0':73C '5.10.3':75C 'admin':10A 'administr':52B,60B,119C 'allow':87C 'app':71B 'attack':57B,98C 'chang':67B 'contain':76C 'control':111C 'cross':80C 'cross-sit':79C 'cve':12A,15A 'data':68B 'endpoint':108C 'endpoints/cronjobs/sendnotifications.php':85C 'escap':34B 'execut':116C 'expos':65B 'fail':32B 'get':58B 'host':23B,29B 'inject':4A,91C 'javascript':47B,114C 'mattermost':102C 'notif':6A,37B,95C 'open':53B,125C 'page':55B 'php':20B 'point':100C 'push':107C 'regist':43B,88C 'respons':7A,35B,97C 'return':113C 'run':8A,49B 'script':3A,82C,92C 'self':22B,28B 'self-host':21B,27B 'sendnotifications.php':40B,123C 'server':112C 'servic':38B,96C 'session':11A,62B,121C 'site':81C 'store':2A,46B,78C 'subscript':30B 'tracker':31B 'unescap':94C 'url':104C 'user':44B,89C 'via':5A,93C 'vulner':83C 'wallo':1A,24B,25B,72C 'wallos':18A 'web':106C 'webhook':103C","nicknames":[],"mitigations":[],"who_affected":"Teams that self-host Wallos 4.4.0 up to 5.10.3 with user registration open to people they do not fully trust. The attacker needs a registered account and must get an administrator to open sendnotifications.php, so instances limited to trusted users are at lower risk.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":["wallos"],"ptokens":["wallos"],"labels":["medium","other","php","selfhosted","vendor","wallos"],"campaign_type":null,"search_a":"'-126778':14A,17A '-2026':13A,16A 'admin':10A 'cve':12A,15A 'inject':4A 'notif':6A 'respons':7A 'run':8A 'script':3A 'session':11A 'store':2A 'via':5A 'wallo':1A 'wallos':18A","search_b":"'administr':52B,60B 'app':71B 'attack':57B 'chang':67B 'data':68B 'escap':34B 'expos':65B 'fail':32B 'get':58B 'host':23B,29B 'javascript':47B 'notif':37B 'open':53B 'page':55B 'php':20B 'regist':43B 'respons':35B 'run':49B 'self':22B,28B 'self-host':21B,27B 'sendnotifications.php':40B 'servic':38B 'session':62B 'store':46B 'subscript':30B 'tracker':31B 'user':44B 'wallo':24B,25B","search_c":"'4.4.0':73C '5.10.3':75C 'administr':119C 'allow':87C 'attack':98C 'contain':76C 'control':111C 'cross':80C 'cross-sit':79C 'endpoint':108C 'endpoints/cronjobs/sendnotifications.php':85C 'execut':116C 'inject':91C 'javascript':114C 'mattermost':102C 'notif':95C 'open':125C 'point':100C 'push':107C 'regist':88C 'respons':97C 'return':113C 'script':82C,92C 'sendnotifications.php':123C 'server':112C 'servic':96C 'session':121C 'site':81C 'store':78C 'unescap':94C 'url':104C 'user':89C 'via':93C 'vulner':83C 'wallo':72C 'web':106C 'webhook':103C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-11T19:17:38+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/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":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126778","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126778","severity":null,"published_at":"2026-11-11T19:17:38+00:00","modified_at":"2026-11-11T19:17:38+00:00","first_seen_at":"2026-11-11T19:28:47+00:00","fetched_at":"2026-11-11T19:28:47+00:00","note":null}],"documents":[{"id":128121,"url":"https://github.com/ellite/Wallos/commit/693d8676f3e5b0c85e120fc5958ccb82f37ee89c","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":128122,"url":"https://github.com/ellite/Wallos/releases/tag/v5.10.3","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":128123,"url":"https://www.vulncheck.com/advisories/wallos-4.4.0-before-5.10.3-stored-xss-via-sendnotifications-php","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"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"}