PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Security & Risk Analysis

wordpress.org/plugins/pressprimer-quiz

Enterprise-grade quiz builder plugin with AI question generation, LMS integration, and beautiful themes. Free forever.

20 active installs v2.1.0 PHP 7.4+ WP 6.4+ Updated Feb 19, 2026
assessmentelearninglearndashlmsquiz
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Safe to Use in 2026?

Generally Safe

Score 100/100

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 1mo ago
Risk Assessment

The "pressprimer-quiz" v2.1.0 plugin exhibits a generally strong security posture, with excellent practices in SQL query preparation (93%) and output escaping (98%). The absence of known CVEs and common vulnerability types in its history is a significant positive indicator. However, the static analysis reveals some areas for improvement. A notable concern is the presence of 14 unprotected entry points across its REST API routes, suggesting potential vulnerabilities to unauthorized access or manipulation. Additionally, the taint analysis identified 2 high-severity flows with unsanitized paths, which could lead to exploitable issues if not properly addressed. The use of dangerous functions like 'exec' also warrants careful scrutiny, even if not directly implicated in a current vulnerability.

While the plugin demonstrates good defensive coding practices in most areas, the unprotected REST API routes and high-severity taint flows represent the most immediate risks. The history of no vulnerabilities is encouraging, but it doesn't guarantee future security. The plugin developers should prioritize addressing the identified unsanitized paths and implementing proper permission callbacks for all REST API routes to strengthen its overall security and mitigate potential risks.

Key Concerns

  • REST API routes without permission callbacks
  • High severity taint flows with unsanitized paths
  • Use of dangerous function 'exec'
Vulnerabilities
None known

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Code Analysis
Analyzed Mar 16, 2026

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Code Analysis

Dangerous Functions
2
Raw SQL Queries
25
322 prepared
Unescaped Output
19
1134 escaped
Nonce Checks
54
Capability Checks
159
File Operations
2
External Requests
3
Bundled Libraries
0

Dangerous Functions Found

execexec( $command, $output, $return_var );includes\services\class-ppq-file-processor.php:476
exec$which_result = @exec( 'which ' . escapeshellarg( $name ) . ' 2>/dev/null' );includes\services\class-ppq-file-processor.php:1053

SQL Query Safety

93% prepared347 total queries

Output Escaping

98% escaped1153 total outputs
Data Flows
11 unsanitized

Data Flow Analysis

25 flows11 with unsanitized paths
<class-ppq-admin-banks> (includes\admin\class-ppq-admin-banks.php:0)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
14 unprotected

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Attack Surface

Entry Points81
Unprotected14

AJAX Handlers 39

authwp_ajax_pressprimer_quiz_ai_generate_questionsincludes\admin\class-ppq-admin-ai-generation.php:33
authwp_ajax_pressprimer_quiz_ai_save_questionsincludes\admin\class-ppq-admin-ai-generation.php:34
authwp_ajax_pressprimer_quiz_ai_upload_fileincludes\admin\class-ppq-admin-ai-generation.php:35
authwp_ajax_pressprimer_quiz_ai_check_statusincludes\admin\class-ppq-admin-ai-generation.php:36
authwp_ajax_pressprimer_quiz_get_available_questionsincludes\admin\class-ppq-admin-quizzes.php:55
authwp_ajax_pressprimer_quiz_add_quiz_questionsincludes\admin\class-ppq-admin-quizzes.php:56
authwp_ajax_pressprimer_quiz_remove_quiz_questionincludes\admin\class-ppq-admin-quizzes.php:57
authwp_ajax_pressprimer_quiz_save_user_api_keyincludes\admin\class-ppq-admin-settings.php:45
authwp_ajax_pressprimer_quiz_validate_api_keyincludes\admin\class-ppq-admin-settings.php:46
authwp_ajax_pressprimer_quiz_clear_user_api_keyincludes\admin\class-ppq-admin-settings.php:47
authwp_ajax_pressprimer_quiz_get_api_modelsincludes\admin\class-ppq-admin-settings.php:48
authwp_ajax_pressprimer_quiz_save_site_api_keyincludes\admin\class-ppq-admin-settings.php:49
authwp_ajax_pressprimer_quiz_clear_site_api_keyincludes\admin\class-ppq-admin-settings.php:50
authwp_ajax_pressprimer_quiz_repair_database_tablesincludes\admin\class-ppq-admin-settings.php:53
authwp_ajax_pressprimer_quiz_search_questionsincludes\admin\class-ppq-admin.php:36
authwp_ajax_pressprimer_quiz_get_recent_questionsincludes\admin\class-ppq-admin.php:37
authwp_ajax_pressprimer_quiz_remove_question_from_bankincludes\admin\class-ppq-admin.php:38
authwp_ajax_pressprimer_quiz_onboarding_progressincludes\admin\class-ppq-onboarding.php:96
authwp_ajax_pressprimer_quiz_get_onboarding_stateincludes\admin\class-ppq-onboarding.php:97
authwp_ajax_pressprimer_quiz_celebration_reviewincludes\admin\class-ppq-review-notice.php:48
authwp_ajax_pressprimer_quiz_celebration_feedbackincludes\admin\class-ppq-review-notice.php:49
authwp_ajax_pressprimer_quiz_celebration_snoozeincludes\admin\class-ppq-review-notice.php:50
authwp_ajax_pressprimer_quiz_celebration_dismissincludes\admin\class-ppq-review-notice.php:51
authwp_ajax_pressprimer_quiz_start_quizincludes\frontend\class-ppq-ajax-handler.php:58
noprivwp_ajax_pressprimer_quiz_start_quizincludes\frontend\class-ppq-ajax-handler.php:59
authwp_ajax_pressprimer_quiz_save_answersincludes\frontend\class-ppq-ajax-handler.php:62
noprivwp_ajax_pressprimer_quiz_save_answersincludes\frontend\class-ppq-ajax-handler.php:63
authwp_ajax_pressprimer_quiz_sync_timeincludes\frontend\class-ppq-ajax-handler.php:66
noprivwp_ajax_pressprimer_quiz_sync_timeincludes\frontend\class-ppq-ajax-handler.php:67
authwp_ajax_pressprimer_quiz_submit_quizincludes\frontend\class-ppq-ajax-handler.php:70
noprivwp_ajax_pressprimer_quiz_submit_quizincludes\frontend\class-ppq-ajax-handler.php:71
authwp_ajax_pressprimer_quiz_email_resultsincludes\frontend\class-ppq-ajax-handler.php:74
noprivwp_ajax_pressprimer_quiz_email_resultsincludes\frontend\class-ppq-ajax-handler.php:75
authwp_ajax_pressprimer_quiz_check_answerincludes\frontend\class-ppq-ajax-handler.php:78
noprivwp_ajax_pressprimer_quiz_check_answerincludes\frontend\class-ppq-ajax-handler.php:79
authwp_ajax_pressprimer_quiz_search_quizzes_learndashincludes\integrations\class-ppq-learndash.php:81
authwp_ajax_pressprimer_quiz_search_quizzes_learnpressincludes\integrations\class-ppq-learnpress.php:71
authwp_ajax_pressprimer_quiz_search_quizzes_lifterlmsincludes\integrations\class-ppq-lifterlms.php:99
authwp_ajax_pressprimer_quiz_search_quizzes_tutorlmsincludes\integrations\class-ppq-tutorlms.php:90

REST API Routes 40

GET/wp-json/ppq/v1/questionsincludes\api\class-ppq-rest-controller.php:40
GET/wp-json/ppq/v1/questions/(?P<id>\d+)includes\api\class-ppq-rest-controller.php:57
GET/wp-json/ppq/v1/taxonomiesincludes\api\class-ppq-rest-controller.php:75
GET/wp-json/ppq/v1/banksincludes\api\class-ppq-rest-controller.php:93
GET/wp-json/ppq/v1/banks/(?P<id>\d+)includes\api\class-ppq-rest-controller.php:110
GET/wp-json/ppq/v1/quizzesincludes\api\class-ppq-rest-controller.php:133
GET/wp-json/ppq/v1/quizzes/publishedincludes\api\class-ppq-rest-controller.php:151
GET/wp-json/ppq/v1/quizzes/(?P<id>\d+)includes\api\class-ppq-rest-controller.php:161
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/itemsincludes\api\class-ppq-rest-controller.php:179
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/items/(?P<item_id>\d+)includes\api\class-ppq-rest-controller.php:196
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/items/reorderincludes\api\class-ppq-rest-controller.php:213
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/rulesincludes\api\class-ppq-rest-controller.php:224
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/rules/(?P<rule_id>\d+)includes\api\class-ppq-rest-controller.php:241
GET/wp-json/ppq/v1/quizzes/(?P<quiz_id>\d+)/rules/reorderincludes\api\class-ppq-rest-controller.php:258
GET/wp-json/ppq/v1/settingsincludes\api\class-ppq-rest-controller.php:269
GET/wp-json/ppq/v1/settings/api-keyincludes\api\class-ppq-rest-controller.php:287
GET/wp-json/ppq/v1/settings/api-key/validateincludes\api\class-ppq-rest-controller.php:304
GET/wp-json/ppq/v1/settings/api-key/clearincludes\api\class-ppq-rest-controller.php:314
GET/wp-json/ppq/v1/settings/api-modelsincludes\api\class-ppq-rest-controller.php:324
GET/wp-json/ppq/v1/settings/api-modelincludes\api\class-ppq-rest-controller.php:334
GET/wp-json/ppq/v1/statistics/dashboardincludes\api\class-ppq-rest-controller.php:345
GET/wp-json/ppq/v1/statistics/overviewincludes\api\class-ppq-rest-controller.php:355
GET/wp-json/ppq/v1/statistics/quiz-performanceincludes\api\class-ppq-rest-controller.php:365
GET/wp-json/ppq/v1/statistics/attemptsincludes\api\class-ppq-rest-controller.php:375
GET/wp-json/ppq/v1/statistics/attempts/(?P<id>\d+)includes\api\class-ppq-rest-controller.php:385
GET/wp-json/ppq/v1/statistics/quiz-optionsincludes\api\class-ppq-rest-controller.php:395
GET/wp-json/ppq/v1/statistics/activity-chartincludes\api\class-ppq-rest-controller.php:405
GET/wp-json/ppq/v1/email/testincludes\api\class-ppq-rest-controller.php:416
GET/wp-json/ppq/v1/learndash/quizzes/searchincludes\integrations\class-ppq-learndash.php:1418
GET/wp-json/ppq/v1/learndash/navigationincludes\integrations\class-ppq-learndash.php:1443
GET/wp-json/ppq/v1/learndash/statusincludes\integrations\class-ppq-learndash.php:1459
POST/wp-json/ppq/v1/learndash/settingsincludes\integrations\class-ppq-learndash.php:1471
GET/wp-json/ppq/v1/learnpress/quizzes/searchincludes\integrations\class-ppq-learnpress.php:971
GET/wp-json/ppq/v1/learnpress/statusincludes\integrations\class-ppq-learnpress.php:993
GET/wp-json/ppq/v1/lifterlms/statusincludes\integrations\class-ppq-lifterlms.php:982
GET/wp-json/ppq/v1/lifterlms/quizzes/searchincludes\integrations\class-ppq-lifterlms.php:995
POST/wp-json/ppq/v1/lifterlms/lesson-quizincludes\integrations\class-ppq-lifterlms.php:1018
GET/wp-json/ppq/v1/tutorlms/quizzes/searchincludes\integrations\class-ppq-tutorlms.php:1185
GET/wp-json/ppq/v1/tutorlms/statusincludes\integrations\class-ppq-tutorlms.php:1207
POST/wp-json/ppq/v1/tutorlms/lesson-quizincludes\integrations\class-ppq-tutorlms.php:1219

Shortcodes 2

[pressprimer_quiz] includes\frontend\class-ppq-shortcodes.php:44
[pressprimer_quiz_my_attempts] includes\frontend\class-ppq-shortcodes.php:45
WordPress Hooks 90
actionadmin_enqueue_scriptsincludes\admin\class-ppq-admin-ai-generation.php:39
actionadmin_post_ppq_save_bankincludes\admin\class-ppq-admin-banks.php:40
actionadmin_post_ppq_delete_bankincludes\admin\class-ppq-admin-banks.php:41
actionadmin_post_ppq_add_question_to_bankincludes\admin\class-ppq-admin-banks.php:42
actionadmin_post_ppq_remove_question_from_bankincludes\admin\class-ppq-admin-banks.php:43
actionadmin_noticesincludes\admin\class-ppq-admin-banks.php:44
actioncurrent_screenincludes\admin\class-ppq-admin-banks.php:47
filterset_screen_option_pressprimer_quiz_banks_per_pageincludes\admin\class-ppq-admin-banks.php:50
filterset-screen-optionincludes\admin\class-ppq-admin-banks.php:110
actionadmin_post_ppq_save_categoryincludes\admin\class-ppq-admin-categories.php:40
actionadmin_post_ppq_delete_categoryincludes\admin\class-ppq-admin-categories.php:41
actionadmin_noticesincludes\admin\class-ppq-admin-categories.php:42
actionadmin_initincludes\admin\class-ppq-admin-questions.php:45
actionadmin_noticesincludes\admin\class-ppq-admin-questions.php:46
actioncurrent_screenincludes\admin\class-ppq-admin-questions.php:49
filterset_screen_option_pressprimer_quiz_questions_per_pageincludes\admin\class-ppq-admin-questions.php:52
filterset-screen-optionincludes\admin\class-ppq-admin-questions.php:111
actionadmin_initincludes\admin\class-ppq-admin-quizzes.php:45
actionadmin_noticesincludes\admin\class-ppq-admin-quizzes.php:46
actioncurrent_screenincludes\admin\class-ppq-admin-quizzes.php:49
filterset_screen_option_pressprimer_quiz_quizzes_per_pageincludes\admin\class-ppq-admin-quizzes.php:52
filterset-screen-optionincludes\admin\class-ppq-admin-quizzes.php:116
actionadmin_initincludes\admin\class-ppq-admin-settings.php:42
actionadmin_menuincludes\admin\class-ppq-admin.php:34
actionadmin_enqueue_scriptsincludes\admin\class-ppq-admin.php:35
actionadmin_noticesincludes\admin\class-ppq-review-notice.php:44
actionadmin_enqueue_scriptsincludes\admin\class-ppq-review-notice.php:45
actionrest_api_initincludes\api\class-ppq-rest-controller.php:30
filterblock_categories_allincludes\blocks\class-ppq-blocks.php:33
actioninitincludes\blocks\class-ppq-blocks.php:36
actionpressprimer_quiz_attempt_submittedincludes\class-ppq-plugin.php:274
actionpressprimer_quiz_attempt_submittedincludes\class-ppq-plugin.php:278
actioninitincludes\frontend\class-ppq-shortcodes.php:35
actionadd_meta_boxesincludes\integrations\class-ppq-learndash.php:77
actionsave_postincludes\integrations\class-ppq-learndash.php:78
actioninitincludes\integrations\class-ppq-learndash.php:84
actionrest_api_initincludes\integrations\class-ppq-learndash.php:85
actionenqueue_block_editor_assetsincludes\integrations\class-ppq-learndash.php:86
filterthe_contentincludes\integrations\class-ppq-learndash.php:89
filterlearndash_content_tabsincludes\integrations\class-ppq-learndash.php:90
filterlearndash_mark_complete_buttonincludes\integrations\class-ppq-learndash.php:91
actionpressprimer_quiz_quiz_passedincludes\integrations\class-ppq-learndash.php:94
filterlearndash-lesson-can-completeincludes\integrations\class-ppq-learndash.php:97
filterlearndash_process_mark_completeincludes\integrations\class-ppq-learndash.php:100
actionlearndash_course_completedincludes\integrations\class-ppq-learndash.php:106
filterpressprimer_quiz_quiz_access_allowedincludes\integrations\class-ppq-learndash.php:109
actionrest_api_initincludes\integrations\class-ppq-learndash.php:112
filterpressprimer_quiz_results_dataincludes\integrations\class-ppq-learndash.php:115
filterpressprimer_quiz_user_has_teacher_capabilityincludes\integrations\class-ppq-learndash.php:119
filterlearndash_process_mark_completeincludes\integrations\class-ppq-learndash.php:895
actionlearnpress/lesson-settings/afterincludes\integrations\class-ppq-learnpress.php:67
actionsave_post_lp_lessonincludes\integrations\class-ppq-learnpress.php:68
actioninitincludes\integrations\class-ppq-learnpress.php:74
actionlearn-press/after-content-item-summary/lp_lessonincludes\integrations\class-ppq-learnpress.php:77
actionlearn-press/after-content-item-summary/lp_lessonincludes\integrations\class-ppq-learnpress.php:80
actionpressprimer_quiz_attempt_submittedincludes\integrations\class-ppq-learnpress.php:83
actionpressprimer_quiz_quiz_passedincludes\integrations\class-ppq-learnpress.php:84
actionrest_api_initincludes\integrations\class-ppq-learnpress.php:87
actionwp_enqueue_scriptsincludes\integrations\class-ppq-learnpress.php:90
filterpressprimer_quiz_user_has_teacher_capabilityincludes\integrations\class-ppq-learnpress.php:94
actionadd_meta_boxesincludes\integrations\class-ppq-lifterlms.php:67
actionsave_postincludes\integrations\class-ppq-lifterlms.php:68
actionadmin_enqueue_scriptsincludes\integrations\class-ppq-lifterlms.php:71
actionllms_before_lesson_buttonsincludes\integrations\class-ppq-lifterlms.php:75
actionllms_lesson-navigation_block_renderincludes\integrations\class-ppq-lifterlms.php:79
filterthe_contentincludes\integrations\class-ppq-lifterlms.php:83
filterllms_is_completeincludes\integrations\class-ppq-lifterlms.php:86
filterllms_show_mark_complete_buttonincludes\integrations\class-ppq-lifterlms.php:89
actionpressprimer_quiz_quiz_passedincludes\integrations\class-ppq-lifterlms.php:92
filterpressprimer_quiz_user_has_teacher_capabilityincludes\integrations\class-ppq-lifterlms.php:96
actionrest_api_initincludes\integrations\class-ppq-lifterlms.php:102
actionadd_meta_boxesincludes\integrations\class-ppq-tutorlms.php:86
actionsave_postincludes\integrations\class-ppq-tutorlms.php:87
actioninitincludes\integrations\class-ppq-tutorlms.php:93
actionenqueue_block_editor_assetsincludes\integrations\class-ppq-tutorlms.php:94
actionadmin_enqueue_scriptsincludes\integrations\class-ppq-tutorlms.php:97
filterpressprimer_quiz_user_has_teacher_capabilityincludes\integrations\class-ppq-tutorlms.php:101
filterthe_contentincludes\integrations\class-ppq-tutorlms.php:106
filtertutor_has_lesson_contentincludes\integrations\class-ppq-tutorlms.php:111
actiontutor_course/single/enrolled/after/lesson_listincludes\integrations\class-ppq-tutorlms.php:112
filtertutor_course/single/enrolled/topic_contentsincludes\integrations\class-ppq-tutorlms.php:113
filtertutor_lesson/single/complete_formincludes\integrations\class-ppq-tutorlms.php:116
actionpressprimer_quiz_quiz_passedincludes\integrations\class-ppq-tutorlms.php:119
actionrest_api_initincludes\integrations\class-ppq-tutorlms.php:122
actionautomator_add_integrationincludes\integrations\uncanny-automator\class-ppq-automator-loader.php:33
actionpressprimer_quiz_quiz_completedincludes\integrations\uncanny-automator\triggers\class-ppq-quiz-completed.php:58
actionpressprimer_quiz_quiz_failedincludes\integrations\uncanny-automator\triggers\class-ppq-quiz-failed.php:58
actionpressprimer_quiz_quiz_passedincludes\integrations\uncanny-automator\triggers\class-ppq-quiz-passed.php:58
actionwp_initialize_sitepressprimer-quiz.php:47
actioninitpressprimer-quiz.php:62
Maintenance & Trust

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.4
Last updatedFeb 19, 2026
PHP min version7.4
Downloads353

Community Trust

Rating100/100
Number of ratings1
Active installs20
Developer Profile

PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin Developer Profile

PressPrimer

1 plugin · 20 total installs

94
trust score
Avg Security Score
100/100
Avg Patch Time
30 days
View full developer profile
Detection Fingerprints

How We Detect PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/pressprimer-quiz/assets/js/ai-generation.js/wp-content/plugins/pressprimer-quiz/assets/css/ai-generation.css
Script Paths
/wp-content/plugins/pressprimer-quiz/assets/js/ai-generation.js
Version Parameters
pressprimer-quiz/assets/js/ai-generation.js?ver=pressprimer-quiz/assets/css/ai-generation.css?ver=

HTML / DOM Fingerprints

CSS Classes
ppq-ai-generation-wrapperppq-ai-generation-formppq-ai-generation-textareappq-ai-generation-file-uploadppq-ai-generation-controlsppq-ai-generation-buttonppq-ai-generation-resultsppq-ai-generation-question+9 more
HTML Comments
<!-- AI Generation Panel --><!-- AI Generation Form --><!-- AI Generation Controls --><!-- AI Generation Results -->+2 more
Data Attributes
data-action="pressprimer_quiz_ai_generate_questions"data-action="pressprimer_quiz_ai_save_questions"data-action="pressprimer_quiz_ai_upload_file"data-action="pressprimer_quiz_ai_check_status"data-nonce="pressprimer_quiz_ai_generation"data-max-file-size+1 more
JS Globals
pressprimerQuizAIGeneration
REST Endpoints
/wp-json/pressprimer-quiz/v1/ai/generate/wp-json/pressprimer-quiz/v1/ai/save/wp-json/pressprimer-quiz/v1/ai/upload/wp-json/pressprimer-quiz/v1/ai/status
FAQ

Frequently Asked Questions about PressPrimer Quiz – AI Quiz Maker, Exam Builder & LMS Assessment Plugin