Action Scheduler Security & Risk Analysis

wordpress.org/plugins/action-scheduler

Action Scheduler - Job Queue for WordPress

20K active installs v3.9.3 PHP 7.2+ WP 6.5+ Updated Jul 15, 2025
cronscheduler
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Action Scheduler Safe to Use in 2026?

Generally Safe

Score 100/100

Action Scheduler has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 8mo ago
Risk Assessment

The Action Scheduler plugin, version 3.9.3, presents a generally strong security posture based on the provided static analysis. The absence of any recorded CVEs and the plugin's diligent use of prepared statements for SQL queries (93%) and proper output escaping (90%) are significant strengths. The limited attack surface with zero identified entry points, especially without authentication checks, is also a positive indicator. However, the presence of the `unserialize` function, even if not immediately exploitable by other factors, represents a potential risk. While taint analysis shows only one flow with unsanitized paths and no critical or high-severity issues, this still warrants caution as it could become a vector if exploited in conjunction with other weaknesses.

The vulnerability history is completely clean, indicating a mature and well-maintained codebase. This lack of past issues, combined with the overall good practices observed in the code, suggests a low probability of immediate, critical vulnerabilities. Nevertheless, the single unsanitized path in the taint analysis and the dangerous `unserialize` function are points that require ongoing vigilance. In conclusion, Action Scheduler v3.9.3 is well-secured with robust security practices. The primary concern lies in the potential, albeit unexploited, risk associated with `unserialize` and the identified unsanitized path, which should be monitored for future updates.

Key Concerns

  • Dangerous function detected: unserialize
  • Flow with unsanitized paths detected
Vulnerabilities
None known

Action Scheduler Security Vulnerabilities

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

Action Scheduler Code Analysis

Dangerous Functions
1
Raw SQL Queries
6
74 prepared
Unescaped Output
10
93 escaped
Nonce Checks
2
Capability Checks
1
File Operations
0
External Requests
0
Bundled Libraries
0

Dangerous Functions Found

unserialize$schedule = unserialize( $data->schedule ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.seclasses\data-stores\ActionScheduler_DBStore.php:397

SQL Query Safety

93% prepared80 total queries

Output Escaping

90% escaped103 total outputs
Data Flows
1 unsanitized

Data Flow Analysis

2 flows1 with unsanitized paths
display_table (classes\abstracts\ActionScheduler_Abstract_ListTable.php:736)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface

Action Scheduler Attack Surface

Entry Points0
Unprotected0
WordPress Hooks 86
actionplugins_loadedaction-scheduler.php:36
actionplugins_loadedaction-scheduler.php:39
actioninitclasses\abstracts\ActionScheduler.php:196
actioninitclasses\abstracts\ActionScheduler.php:197
actioninitclasses\abstracts\ActionScheduler.php:198
actioninitclasses\abstracts\ActionScheduler.php:199
actioninitclasses\abstracts\ActionScheduler.php:200
actioninitclasses\abstracts\ActionScheduler.php:202
actionaction_scheduler/migration_completeclasses\abstracts\ActionScheduler.php:261
actionaction_scheduler_canceled_actionclasses\abstracts\ActionScheduler_Logger.php:67
actionaction_scheduler_begin_executeclasses\abstracts\ActionScheduler_Logger.php:68
actionaction_scheduler_after_executeclasses\abstracts\ActionScheduler_Logger.php:69
actionaction_scheduler_failed_executionclasses\abstracts\ActionScheduler_Logger.php:70
actionaction_scheduler_failed_actionclasses\abstracts\ActionScheduler_Logger.php:71
actionaction_scheduler_unexpected_shutdownclasses\abstracts\ActionScheduler_Logger.php:72
actionaction_scheduler_reset_actionclasses\abstracts\ActionScheduler_Logger.php:73
actionaction_scheduler_execution_ignoredclasses\abstracts\ActionScheduler_Logger.php:74
actionaction_scheduler_failed_fetch_actionclasses\abstracts\ActionScheduler_Logger.php:75
actionaction_scheduler_failed_to_schedule_next_instanceclasses\abstracts\ActionScheduler_Logger.php:76
actionaction_scheduler_bulk_cancel_actionsclasses\abstracts\ActionScheduler_Logger.php:77
actionaction_scheduler_stored_actionclasses\abstracts\ActionScheduler_Logger.php:84
actionwoocommerce_admin_status_content_action-schedulerclasses\ActionScheduler_AdminView.php:56
actionwoocommerce_system_status_reportclasses\ActionScheduler_AdminView.php:57
filterwoocommerce_admin_status_tabsclasses\ActionScheduler_AdminView.php:58
actionadmin_menuclasses\ActionScheduler_AdminView.php:61
actionadmin_noticesclasses\ActionScheduler_AdminView.php:62
actioncurrent_screenclasses\ActionScheduler_AdminView.php:63
filteraction_scheduler_store_classclasses\ActionScheduler_DataController.php:190
filteraction_scheduler_logger_classclasses\ActionScheduler_DataController.php:191
actiondeactivate_pluginclasses\ActionScheduler_DataController.php:192
actionaction_scheduler/progress_tickclasses\ActionScheduler_DataController.php:197
actionshutdownclasses\ActionScheduler_FatalErrorMonitor.php:45
actionaction_scheduler_before_executeclasses\ActionScheduler_FatalErrorMonitor.php:46
actionaction_scheduler_after_executeclasses\ActionScheduler_FatalErrorMonitor.php:47
actionaction_scheduler_execution_ignoredclasses\ActionScheduler_FatalErrorMonitor.php:48
actionaction_scheduler_failed_executionclasses\ActionScheduler_FatalErrorMonitor.php:49
actionaction_scheduler/created_tableclasses\ActionScheduler_ListTable.php:554
filtercron_schedulesclasses\ActionScheduler_QueueRunner.php:72
actionshutdownclasses\ActionScheduler_QueueRunner.php:95
actionaction_scheduler_initclasses\ActionScheduler_RecurringActionScheduler.php:28
actionpre_get_commentsclasses\ActionScheduler_WPCommentCleaner.php:44
actionwp_count_commentsclasses\ActionScheduler_WPCommentCleaner.php:45
actioncomment_feed_whereclasses\ActionScheduler_WPCommentCleaner.php:46
actionload-tools_page_action-schedulerclasses\ActionScheduler_WPCommentCleaner.php:49
actionload-woocommerce_page_wc-statusclasses\ActionScheduler_WPCommentCleaner.php:50
actionadmin_noticesclasses\ActionScheduler_WPCommentCleaner.php:109
actionaction_scheduler_deleted_actionclasses\data-stores\ActionScheduler_DBLogger.php:112
actionaction_scheduler/created_tableclasses\data-stores\ActionScheduler_HybridStore.php:75
filtercomments_clausesclasses\data-stores\ActionScheduler_wpCommentLogger.php:129
actionaction_scheduler_before_process_queueclasses\data-stores\ActionScheduler_wpCommentLogger.php:254
actionaction_scheduler_after_process_queueclasses\data-stores\ActionScheduler_wpCommentLogger.php:255
actionpre_get_commentsclasses\data-stores\ActionScheduler_wpCommentLogger.php:259
actionwp_count_commentsclasses\data-stores\ActionScheduler_wpCommentLogger.php:260
actioncomment_feed_whereclasses\data-stores\ActionScheduler_wpCommentLogger.php:261
actionwp_insert_commentclasses\data-stores\ActionScheduler_wpCommentLogger.php:264
actionwp_set_comment_statusclasses\data-stores\ActionScheduler_wpCommentLogger.php:265
filterwp_insert_post_dataclasses\data-stores\ActionScheduler_wpPostStore.php:81
filterpre_wp_unique_post_slugclasses\data-stores\ActionScheduler_wpPostStore.php:82
filterpre_wp_unique_post_slugclasses\data-stores\ActionScheduler_wpPostStore.php:518
filterwp_insert_post_dataclasses\data-stores\ActionScheduler_wpPostStore.php:1006
filterpre_wp_unique_post_slugclasses\data-stores\ActionScheduler_wpPostStore.php:1007
filteraction_scheduler_migration_dependencies_metclasses\data-stores\ActionScheduler_wpPostStore.php:1094
actionadmin_noticesclasses\migration\Controller.php:176
filteraction_scheduler_store_classclasses\migration\Controller.php:190
filteraction_scheduler_logger_classclasses\migration\Controller.php:191
actioninitclasses\migration\Controller.php:192
actionwp_loadedclasses\migration\Controller.php:193
actionload-tools_page_action-schedulerclasses\migration\Controller.php:196
actionload-woocommerce_page_wc-statusclasses\migration\Controller.php:197
actionaction_scheduler_before_schema_updateclasses\schema\ActionScheduler_LoggerSchema.php:35
actionaction_scheduler_before_schema_updateclasses\schema\ActionScheduler_StoreSchema.php:40
actionaction_scheduler_deleted_actionclasses\WP_CLI\Action\Delete_Command.php:40
actionaction_scheduler_execution_ignoredclasses\WP_CLI\Action\Run_Command.php:42
actionaction_scheduler_after_executeclasses\WP_CLI\Action\Run_Command.php:43
actionaction_scheduler_failed_executionclasses\WP_CLI\Action\Run_Command.php:44
actionaction_scheduler_failed_validationclasses\WP_CLI\Action\Run_Command.php:45
actionaction_scheduler_before_executeclasses\WP_CLI\ActionScheduler_WPCLI_QueueRunner.php:87
actionaction_scheduler_after_executeclasses\WP_CLI\ActionScheduler_WPCLI_QueueRunner.php:88
actionaction_scheduler_failed_executionclasses\WP_CLI\ActionScheduler_WPCLI_QueueRunner.php:89
actionaction_scheduler/migrate_action_dry_runclasses\WP_CLI\Migration_Command.php:137
actionaction_scheduler/no_action_to_migrateclasses\WP_CLI\Migration_Command.php:144
actionaction_scheduler/migrate_action_failedclasses\WP_CLI\Migration_Command.php:151
actionaction_scheduler/migrate_action_incompleteclasses\WP_CLI\Migration_Command.php:158
actionaction_scheduler/migrated_actionclasses\WP_CLI\Migration_Command.php:167
actionaction_scheduler/migration_batch_startingclasses\WP_CLI\Migration_Command.php:176
actionaction_scheduler/migration_batch_completeclasses\WP_CLI\Migration_Command.php:183
Maintenance & Trust

Action Scheduler Maintenance & Trust

Maintenance Signals

WordPress version tested6.8.5
Last updatedJul 15, 2025
PHP min version7.2
Downloads592K

Community Trust

Rating70/100
Number of ratings13
Active installs20K
Developer Profile

Action Scheduler Developer Profile

Automattic

213 plugins · 19.2M total installs

73
trust score
Avg Security Score
92/100
Avg Patch Time
1384 days
View full developer profile
Detection Fingerprints

How We Detect Action Scheduler

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/action-scheduler/css/action-scheduler.css/wp-content/plugins/action-scheduler/css/admin.css/wp-content/plugins/action-scheduler/js/action-scheduler.js/wp-content/plugins/action-scheduler/js/admin.js
Script Paths
/wp-content/plugins/action-scheduler/js/action-scheduler.js/wp-content/plugins/action-scheduler/js/admin.js
Version Parameters
action-scheduler/style.css?ver=action-scheduler/admin.css?ver=action-scheduler/action-scheduler.js?ver=action-scheduler/admin.js?ver=

HTML / DOM Fingerprints

CSS Classes
action-scheduler-admin-wrapas-status-pendingas-status-completeas-status-failedas-status-canceledas-status-in-progressas-list-table
HTML Comments
<!-- Action Scheduler --><!-- Admin page for Action Scheduler --><!-- Action Scheduler Admin Page -->
Data Attributes
data-action-iddata-action-hookdata-action-statusdata-action-groupdata-schedule-iddata-schedule-date+1 more
JS Globals
ActionScheduleractionSchedulerAdminaction_scheduler_params
REST Endpoints
/wp-json/action-scheduler/v1/reports/wp-json/action-scheduler/v1/logs/wp-json/action-scheduler/v1/actions
Shortcode Output
[action_scheduler_logs][action_scheduler_report]
FAQ

Frequently Asked Questions about Action Scheduler