{"id":"CVE-2026-103917","kind":"vulnerability","aliases":["CVE-2026-103917"],"related":[],"title":"WordPress QSM quiz plugin: unauthenticated attackers can run arbitrary shortcodes","description":"The The Quiz and Survey Master (QSM) – Quiz Maker & Survey Maker plugin for WordPress is vulnerable to arbitrary shortcode execution in all versions up to, and including, 11.2.7. This is due to the software allowing users to execute an action that does not properly validate a value before running do_shortcode. This makes it possible for unauthenticated attackers to execute arbitrary shortcodes. The submission nonce is dispensed to any unauthenticated caller by the public wp_ajax_nopriv_qsm_create_quiz_nonce endpoint, meaning it functions as a CSRF token rather than an authorization barrier and imposes no meaningful obstacle to exploitation.","summary":"The Quiz and Survey Master (QSM) WordPress plugin up to and including 11.2.7 passes an unvalidated value to do_shortcode, so anyone can trigger shortcode execution. An unauthenticated attacker can get past the nonce check because the public endpoint wp_ajax_nopriv_qsm_create_quiz_nonce hands the nonce to any caller.","severity":"medium","cvss":6.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","qsm","quiz-maker","self-hosted","wordpress"],"not_affected_if":["plugin-not-installed"],"how_to_check":"- Check the installed QSM plugin version in the WordPress admin under Plugins; affected if it is `11.2.7` or earlier.\n- Check whether the public endpoint `wp_ajax_nopriv_qsm_create_quiz_nonce` is reachable through `admin-ajax.php` on the site.","fix":null,"status":"open","published_at":"2026-11-07T07:17:01+00:00","first_seen_at":"2026-11-07T07:46:06+00:00","triaged_at":"2026-11-07T07:47:04+00:00","updated_at":"2026-11-07T07:47:04+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-07T07:47:04Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"WordPress QSM quiz plugin: unauthenticated attackers can run arbitrary shortcodes","impact":"medium","summary":"The Quiz and Survey Master (QSM) WordPress plugin up to and including 11.2.7 passes an unvalidated value to do_shortcode, so anyone can trigger shortcode execution. An unauthenticated attacker can get past the nonce check because the public endpoint wp_ajax_nopriv_qsm_create_quiz_nonce hands the nonce to any caller.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","qsm","quiz-maker","self-hosted"],"confidence":0.6,"fix_status":"unknown","needs_auth":"no","worst_case":"Attackers run arbitrary WordPress shortcodes on the site without logging in.","analyst_note":"Confirm the first fixed QSM version and whether the shortcode execution can reach code or only data; check the plugin changelog on WordPress.org or the NVD entry.","how_to_check":"- Check the installed QSM plugin version in the WordPress admin under Plugins; affected if it is `11.2.7` or earlier.\n- Check whether the public endpoint `wp_ajax_nopriv_qsm_create_quiz_nonce` is reachable through `admin-ajax.php` on the site.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed"],"who_is_affected":"Sites running the QSM quiz and survey plugin for WordPress at version 11.2.7 or earlier are exposed, because the vulnerable endpoint is public and needs no login. Sites without this plugin, or running a newer version than the affected range, are not affected. The sources do not say which fixed version to move to.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000769,"input_tokens":4375,"output_tokens":663,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-103917':13A,16A '-2026':12A,15A '11.2.7':38B,105C 'action':117C 'ajax':66B,153C 'allow':112C 'anyon':47B 'arbitrari':9A,95C,138C 'attack':6A,54B,135C 'author':170C 'barrier':171C 'caller':77B,148C 'check':60B 'creat':69B,156C 'csrf':165C 'cve':11A,14A 'dispens':144C 'due':108C 'endpoint':64B,159C 'execut':51B,97C,115C,137C 'exploit':178C 'function':162C 'get':56B 'hand':72B 'host':24B 'impos':173C 'includ':37B,104C 'make':130C 'maker':21B,86C,88C 'master':30B,83C 'mean':160C 'meaning':175C 'nonc':59B,71B,74B,142C,158C 'nopriv':67B,154C 'obstacl':176C 'packag':17B 'pass':39B 'past':57B 'plugin':4A,33B,89C 'possibl':132C 'proper':121C 'public':63B,151C 'qsm':2A,18B,31B,68B,84C,155C 'quiz':3A,20B,27B,70B,80C,85C,157C 'quiz-mak':19B 'rather':167C 'run':8A,126C 'self':23B 'self-host':22B 'shortcod':10A,45B,50B,96C,128C,139C 'softwar':111C 'submiss':141C 'survey':29B,82C,87C 'token':166C 'trigger':49B 'unauthent':5A,53B,134C,147C 'unvalid':41B 'user':113C 'valid':122C 'valu':42B,124C 'version':100C 'vulner':93C 'wordpress':1A,25B,32B,91C 'wp':65B,152C","nicknames":[],"mitigations":[],"who_affected":"Sites running the QSM quiz and survey plugin for WordPress at version 11.2.7 or earlier are exposed, because the vulnerable endpoint is public and needs no login. Sites without this plugin, or running a newer version than the affected range, are not affected. The sources do not say which fixed version to move to.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","qsm","quizmaker","selfhosted","wordpress"],"campaign_type":null,"search_a":"'-103917':13A,16A '-2026':12A,15A 'arbitrari':9A 'attack':6A 'cve':11A,14A 'plugin':4A 'qsm':2A 'quiz':3A 'run':8A 'shortcod':10A 'unauthent':5A 'wordpress':1A","search_b":"'11.2.7':38B 'ajax':66B 'anyon':47B 'attack':54B 'caller':77B 'check':60B 'creat':69B 'endpoint':64B 'execut':51B 'get':56B 'hand':72B 'host':24B 'includ':37B 'maker':21B 'master':30B 'nonc':59B,71B,74B 'nopriv':67B 'packag':17B 'pass':39B 'past':57B 'plugin':33B 'public':63B 'qsm':18B,31B,68B 'quiz':20B,27B,70B 'quiz-mak':19B 'self':23B 'self-host':22B 'shortcod':45B,50B 'survey':29B 'trigger':49B 'unauthent':53B 'unvalid':41B 'valu':42B 'wordpress':25B,32B 'wp':65B","search_c":"'11.2.7':105C 'action':117C 'ajax':153C 'allow':112C 'arbitrari':95C,138C 'attack':135C 'author':170C 'barrier':171C 'caller':148C 'creat':156C 'csrf':165C 'dispens':144C 'due':108C 'endpoint':159C 'execut':97C,115C,137C 'exploit':178C 'function':162C 'impos':173C 'includ':104C 'make':130C 'maker':86C,88C 'master':83C 'mean':160C 'meaning':175C 'nonc':142C,158C 'nopriv':154C 'obstacl':176C 'plugin':89C 'possibl':132C 'proper':121C 'public':151C 'qsm':84C,155C 'quiz':80C,85C,157C 'rather':167C 'run':126C 'shortcod':96C,128C,139C 'softwar':111C 'submiss':141C 'survey':82C,87C 'token':166C 'unauthent':134C,147C 'user':113C 'valid':122C 'valu':124C 'version':100C 'vulner':93C 'wordpress':91C 'wp':152C","first_public_at":"2026-11-07T07:17:01+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-103917","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-103917","severity":null,"published_at":"2026-11-07T07:17:01+00:00","modified_at":"2026-11-07T07:17:02+00:00","first_seen_at":"2026-11-07T07:46:06+00:00","fetched_at":"2026-11-07T07:46:06+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}