{"id":"CVE-2026-87718","kind":"vulnerability","aliases":["CVE-2026-87718"],"related":[],"title":"Apache Wicket: nested request handlers drop Content-Security-Policy headers on pages","description":"Apache Wicket 10.10.0, 10.11.0 and 9.24.0 do not set the Content-Security-Policy headers on a page whose render request handler is wrapped in more than one IRequestHandlerDelegate. The framework unwraps only a single delegate level when deciding whether a request renders a page, so with a deeper chain, for example an application-provided delegating request mapper combined with CryptoMapper, the page is served without any CSP header even though CSP is enabled, and no error or warning is raised. The nonce-based protection Wicket applies to inline scripts and styles, together with any other CSP directives configured by the application, is thereby lost for those pages, exposing them to content injection the policy was meant to prevent. Applications on stock Wicket that do not wrap request handlers themselves are not affected. Versions before 10.10.0 and 9.24.0 handled nested delegates correctly. Users are recommended to upgrade to version 10.12.0 or 9.25.0, which fix the issue.","summary":"Apache Wicket 10.10.0, 10.11.0 and 9.24.0 skip the Content-Security-Policy header on pages whose request handler is wrapped in more than one delegate. An attacker gets content injection on those pages that the configured CSP was meant to block.","severity":"low","cvss":2.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["apache-wicket","java","package","web-apps"],"not_affected_if":["older-versions","stock-request-mapping"],"how_to_check":"- Check the Wicket version in the build file (for example `pom.xml` or `build.gradle`) for `10.10.0`, `10.11.0` or `9.24.0`\n- Look for application-provided request mappers or delegates wrapped around `CryptoMapper`\n- Inspect response headers on a rendered page for a `Content-Security-Policy` header","fix":"- Apache Wicket 10.10.0 and 10.11.0: upgrade to `10.12.0`\n- Apache Wicket 9.24.0: upgrade to `9.25.0`","status":"open","published_at":"2026-11-01T23:17:30+00:00","first_seen_at":"2026-11-01T23:22:40+00:00","triaged_at":"2026-11-01T23:23:33+00:00","updated_at":"2026-11-01T23:23:33+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-01T23:23:33Z","model":"claude-haiku-5-5","output":{"fix":"- Apache Wicket 10.10.0 and 10.11.0: upgrade to `10.12.0`\n- Apache Wicket 9.24.0: upgrade to `9.25.0`","reach":"internet","title":"Apache Wicket: nested request handlers drop Content-Security-Policy headers on pages","impact":"low","summary":"Apache Wicket 10.10.0, 10.11.0 and 9.24.0 skip the Content-Security-Policy header on pages whose request handler is wrapped in more than one delegate. An attacker gets content injection on those pages that the configured CSP was meant to block.","audience":"developers","category":"package","nicknames":[],"who_cares":["java","apache-wicket","web-apps"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Pages lose CSP protection, enabling content injection against users","analyst_note":"","how_to_check":"- Check the Wicket version in the build file (for example `pom.xml` or `build.gradle`) for `10.10.0`, `10.11.0` or `9.24.0`\n- Look for application-provided request mappers or delegates wrapped around `CryptoMapper`\n- Inspect response headers on a rendered page for a `Content-Security-Policy` header","plain_action":"","needs_analyst":false,"not_affected_if":["stock-request-mapping","older-versions"],"who_is_affected":"Only applications that run Wicket 10.10.0, 10.11.0 or 9.24.0 and wrap request handlers in more than one delegate level, for example a custom delegating request mapper combined with CryptoMapper, are exposed. Applications on stock Wicket that do not wrap request handlers themselves are not affected. Those running earlier versions were not affected by this flaw.","user_interaction":"unknown","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000763,"input_tokens":4366,"output_tokens":652,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-2026':15A,18A '-87718':16A,19A '10.10.0':30B,71C,206C '10.11.0':31B,72C '10.12.0':220C '9.24.0':33B,74C,208C '9.25.0':222C 'affect':203C 'apach':1A,21B,28B,69C 'apache-wicket':20B 'app':27B 'appli':157C 'applic':123C,172C,190C 'application-provid':122C 'attack':54B 'base':154C 'block':68B 'chain':118C 'combin':128C 'configur':63B,169C 'content':8A,37B,56B,80C,182C 'content-security-polici':7A,36B,79C 'correct':212C 'cryptomapp':130C 'csp':64B,137C,141C,167C 'cve':14A,17A 'decid':107C 'deeper':117C 'deleg':52B,104C,125C,211C 'direct':168C 'drop':6A 'enabl':143C 'error':146C 'even':139C 'exampl':120C 'expos':179C 'fix':224C 'framework':99C 'get':55B 'handl':209C 'handler':5A,45B,90C,199C 'header':11A,40B,83C,138C 'inject':57B,183C 'inlin':159C 'irequesthandlerdeleg':97C 'issu':226C 'java':23B 'level':105C 'lost':175C 'mapper':127C 'meant':66B,187C 'nest':3A,210C 'nonc':153C 'nonce-bas':152C 'one':51B,96C 'packag':24B 'page':13A,42B,60B,86C,113C,132C,178C 'polici':10A,39B,82C,185C 'prevent':189C 'protect':155C 'provid':124C 'rais':150C 'recommend':215C 'render':88C,111C 'request':4A,44B,89C,110C,126C,198C 'script':160C 'secur':9A,38B,81C 'serv':134C 'set':77C 'singl':103C 'skip':34B 'stock':192C 'style':162C 'therebi':174C 'though':140C 'togeth':163C 'unwrap':100C 'upgrad':217C 'user':213C 'version':204C,219C 'warn':148C 'web':26B 'web-app':25B 'whether':108C 'whose':43B,87C 'wicket':2A,22B,29B,70C,156C,193C 'without':135C 'wrap':47B,92C,197C","nicknames":[],"mitigations":[],"who_affected":"Only applications that run Wicket 10.10.0, 10.11.0 or 9.24.0 and wrap request handlers in more than one delegate level, for example a custom delegating request mapper combined with CryptoMapper, are exposed. Applications on stock Wicket that do not wrap request handlers themselves are not affected. Those running earlier versions were not affected by this flaw.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-11-01T23:17:30+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/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:N/R:X/V:X/RE:L/U:X","cvss_by":"security@apache.org","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-87718","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-87718","severity":null,"published_at":"2026-11-01T23:17:30+00:00","modified_at":"2026-11-01T23:17:30+00:00","first_seen_at":"2026-11-01T23:22:40+00:00","fetched_at":"2026-11-01T23:22:40+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}