{"id":"CVE-2026-108560","kind":"vulnerability","aliases":["CVE-2026-108560"],"related":[],"title":"Revive Adserver: crafted URL runs JavaScript in victims' browsers","description":"A reflected cross-site scripting vulnerability in updates-history.php in Revive Adserver 6.0.8 and earlier allows an unauthenticated attacker to execute JavaScript in a victim's browser by persuading them to visit a crafted URL. Attacker-controlled values are included in XML command attributes without appropriate encoding, allowing injection of executable XHTML into the response. The preliminary session check omits GET xajax requests, exposing an unauthenticated attack path, while authenticated administrator requests also reach the unsafe output. The issue is fixed in Revive Adserver 6.0.9 by applying the session check to both GET and POST requests and encoding XML command attribute values in both response serializers.","summary":"Revive Adserver's updates-history.php reflects attacker-supplied values into XML output without encoding, a reflected cross-site scripting flaw. A victim who opens a crafted link lets an attacker run JavaScript in their browser session.","severity":"medium","cvss":6.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","php","revive-adserver","self-hosted"],"not_affected_if":["managed-hosting","version-6.0.9-or-later"],"how_to_check":"- Check the installed Revive Adserver version in the admin console or in the installed package metadata; versions `6.0.8` and earlier are affected\n- Confirm whether `updates-history.php` is reachable from the internet on your ad server","fix":"- Revive Adserver: upgrade to `6.0.9`","status":"open","published_at":"2026-11-11T18:18:26+00:00","first_seen_at":"2026-11-11T18:28:42+00:00","triaged_at":"2026-11-11T18:29:32+00:00","updated_at":"2026-11-11T18:29:32+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-11T18:29:32Z","model":"claude-haiku-5-5","output":{"fix":"- Revive Adserver: upgrade to `6.0.9`","reach":"internet","title":"Revive Adserver: crafted URL runs JavaScript in victims' browsers","impact":"medium","summary":"Revive Adserver's updates-history.php reflects attacker-supplied values into XML output without encoding, a reflected cross-site scripting flaw. A victim who opens a crafted link lets an attacker run JavaScript in their browser session.","audience":"businesses","category":"package","nicknames":[],"who_cares":["revive-adserver","self-hosted","php"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"attacker runs JavaScript in a victim's browser session","analyst_note":"","how_to_check":"- Check the installed Revive Adserver version in the admin console or in the installed package metadata; versions `6.0.8` and earlier are affected\n- Confirm whether `updates-history.php` is reachable from the internet on your ad server","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-6.0.9-or-later","managed-hosting"],"who_is_affected":"Revive Adserver installations at version 6.0.8 or earlier. The unauthenticated path is a GET request to updates-history.php that skips the session check, so any reachable instance is exposed to a crafted link; administrator requests reach the same unsafe output.","user_interaction":"yes","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000728,"input_tokens":4695,"output_tokens":517,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-108560':12A,15A '-2026':11A,14A '6.0.8':73C '6.0.9':146C 'administr':132C 'adserv':2A,20B,25B,72C,145C 'allow':76C,109C 'also':134C 'appli':148C 'appropri':107C 'attack':30B,54B,79C,97C,128C 'attacker-control':96C 'attacker-suppli':29B 'attribut':105C,162C 'authent':131C 'browser':9A,59B,87C 'check':120C,151C 'command':104C,161C 'control':98C 'craft':3A,50B,94C 'cross':41B,64C 'cross-sit':40B,63C 'cve':10A,13A 'earlier':75C 'encod':37B,108C,159C 'execut':81C,112C 'expos':125C 'fix':142C 'flaw':44B 'get':122C,154C 'host':23B 'includ':101C 'inject':110C 'issu':140C 'javascript':6A,56B,82C 'let':52B 'link':51B 'omit':121C 'open':48B 'output':35B,138C 'packag':16B 'path':129C 'persuad':89C 'php':17B 'post':156C 'preliminari':118C 'reach':135C 'reflect':28B,39B,62C 'request':124C,133C,157C 'respons':116C,166C 'reviv':1A,19B,24B,71C,144C 'revive-adserv':18B 'run':5A,55B 'script':43B,66C 'self':22B 'self-host':21B 'serial':167C 'session':60B,119C,150C 'site':42B,65C 'suppli':31B 'unauthent':78C,127C 'unsaf':137C 'updates-history.php':27B,69C 'url':4A,95C 'valu':32B,99C,163C 'victim':8A,46B,85C 'visit':92C 'vulner':67C 'without':36B,106C 'xajax':123C 'xhtml':113C 'xml':34B,103C,160C","nicknames":[],"mitigations":[],"who_affected":"Revive Adserver installations at version 6.0.8 or earlier. The unauthenticated path is a GET request to updates-history.php that skips the session check, so any reachable instance is exposed to a crafted link; administrator requests reach the same unsafe output.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","php","reviveadserver","selfhosted"],"campaign_type":null,"search_a":"'-108560':12A,15A '-2026':11A,14A 'adserv':2A 'browser':9A 'craft':3A 'cve':10A,13A 'javascript':6A 'reviv':1A 'run':5A 'url':4A 'victim':8A","search_b":"'adserv':20B,25B 'attack':30B,54B 'attacker-suppli':29B 'browser':59B 'craft':50B 'cross':41B 'cross-sit':40B 'encod':37B 'flaw':44B 'host':23B 'javascript':56B 'let':52B 'link':51B 'open':48B 'output':35B 'packag':16B 'php':17B 'reflect':28B,39B 'reviv':19B,24B 'revive-adserv':18B 'run':55B 'script':43B 'self':22B 'self-host':21B 'session':60B 'site':42B 'suppli':31B 'updates-history.php':27B 'valu':32B 'victim':46B 'without':36B 'xml':34B","search_c":"'6.0.8':73C '6.0.9':146C 'administr':132C 'adserv':72C,145C 'allow':76C,109C 'also':134C 'appli':148C 'appropri':107C 'attack':79C,97C,128C 'attacker-control':96C 'attribut':105C,162C 'authent':131C 'browser':87C 'check':120C,151C 'command':104C,161C 'control':98C 'craft':94C 'cross':64C 'cross-sit':63C 'earlier':75C 'encod':108C,159C 'execut':81C,112C 'expos':125C 'fix':142C 'get':122C,154C 'includ':101C 'inject':110C 'issu':140C 'javascript':82C 'omit':121C 'output':138C 'path':129C 'persuad':89C 'post':156C 'preliminari':118C 'reach':135C 'reflect':62C 'request':124C,133C,157C 'respons':116C,166C 'reviv':71C,144C 'script':66C 'serial':167C 'session':119C,150C 'site':65C 'unauthent':78C,127C 'unsaf':137C 'updates-history.php':69C 'url':95C 'valu':99C,163C 'victim':85C 'visit':92C 'vulner':67C 'without':106C 'xajax':123C 'xhtml':113C 'xml':103C,160C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-11T18:18:26+00:00","kev":null,"cvss_vector":"CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","cvss_by":"support@hackerone.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-108560","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-108560","severity":null,"published_at":"2026-11-11T18:18:26+00:00","modified_at":"2026-11-11T18:18:26+00:00","first_seen_at":"2026-11-11T18:28:42+00:00","fetched_at":"2026-11-11T18:28:42+00:00","note":null}],"documents":[],"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"}