Flexible Subscriptions Security & Risk Analysis

wordpress.org/plugins/flexible-subscriptions

Meet Flexible Subscriptions for WooCommerce. The best & free plugin for recurring payments and subscriptions in WooCommerce.

1K active installs v1.7.8 PHP 7.4+ WP 6.4+ Updated Mar 9, 2026
recurringreordersubscriptionsubscriptionswoocommerce-subscriptions
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Flexible Subscriptions Safe to Use in 2026?

Generally Safe

Score 100/100

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

No known CVEs Updated 25d ago
Risk Assessment

The "flexible-subscriptions" plugin v1.7.8 presents a mixed security posture. On the positive side, it has a clean vulnerability history with no recorded CVEs, indicating a generally well-maintained codebase. The extensive use of prepared statements for SQL queries (89%) and a reasonable rate of output escaping (66%) are also good security practices. However, several concerns are raised by the static analysis. The presence of unprotected AJAX handlers is a significant risk, as it opens up potential attack vectors without proper authentication or authorization checks. The use of dangerous functions like 'unserialize', 'proc_open', and 'shell_exec' warrants careful scrutiny, as these can be exploited if user-controlled input is processed insecurely. While taint analysis did not reveal critical or high-severity issues, the single flow with an unsanitized path is a potential weakness. The attack surface is relatively small, but the unprotected entry point is a notable concern.

In conclusion, while the plugin benefits from a lack of known vulnerabilities and good SQL practices, the unprotected AJAX handler and the presence of dangerous functions introduce moderate risk. The absence of a comprehensive review for these dangerous functions and the lack of authorization checks on all entry points are areas that require immediate attention. The plugin has a decent foundation but needs further hardening to address specific vulnerabilities identified in the static analysis.

Key Concerns

  • Unprotected AJAX handler present
  • Use of dangerous functions (unserialize, proc_open, shell_exec)
  • Flow with unsanitized path detected
  • Lower output escaping rate (66%)
Vulnerabilities
None known

Flexible Subscriptions Security Vulnerabilities

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

Flexible Subscriptions Code Analysis

Dangerous Functions
12
Raw SQL Queries
2
17 prepared
Unescaped Output
194
379 escaped
Nonce Checks
12
Capability Checks
12
File Operations
60
External Requests
2
Bundled Libraries
0

Dangerous Functions Found

assertassert( $this->supported_strategy instanceof RequestPaymentStrategy );src\Subscription\Renewal\CompositePaymentRequest.php:45
assertassert( $order instanceof \WC_Order );src\Subscription\Renewal\RenewalFactory.php:34
assertassert( $renewal instanceof Renewal );src\Subscription\Renewal\RenewalFactory.php:48
unserialize$serializable = unserialize($signature['serializable']);vendor_prefixed\laravel\serializable-closure\src\Serializers\Signed.php:76
proc_open$this->process = proc_open($this->command, static::DESCRIPTOR_SPEC, $this->pipes, $this->cwd);vendor_prefixed\monolog\monolog\src\Monolog\Handler\ProcessHandler.php:104
shell_exec$branches = shell_exec('git branch -v --no-abbrev');vendor_prefixed\monolog\monolog\src\Monolog\Processor\GitProcessor.php:60
shell_exec$result = explode(' ', trim((string) shell_exec('hg id -nb')));vendor_prefixed\monolog\monolog\src\Monolog\Processor\MercurialProcessor.php:59
unserialize$instance = @unserialize((string) $value);vendor_prefixed\nesbot\carbon\src\Carbon\Traits\Serialization.php:81
unserializeparent::__construct($date, unserialize($timezone));vendor_prefixed\nesbot\carbon\src\Carbon\Traits\Serialization.php:164
unserialize$this->__construct($date, unserialize($timezone));vendor_prefixed\nesbot\carbon\src\Carbon\Traits\Serialization.php:197
unserializereturn unserialize($value);vendor_prefixed\wpdesk\wp-forms\src\Serializer\SerializeSerializer.php:15
unserializereturn unserialize($this->container->get($id));vendor_prefixed\wpdesk\wp-persistence\src\Decorator\SerializedPersistentContainer.php:24

SQL Query Safety

89% prepared19 total queries

Output Escaping

66% escaped573 total outputs
Data Flows
1 unsanitized

Data Flow Analysis

3 flows1 with unsanitized paths
<translation-status> (vendor_prefixed\symfony\translation\Resources\bin\translation-status.php:0)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
1 unprotected

Flexible Subscriptions Attack Surface

Entry Points2
Unprotected1

AJAX Handlers 2

authwp_ajax_fsb_get_customer_orderssrc\HookProvider\Ajax\LoadParentOrder.php:12
authwp_ajax_wpdesk_notice_dismissvendor_prefixed\wpdesk\wp-notice\src\WPDesk\Notice\AjaxHandler.php:42
WordPress Hooks 150
actioninitsrc\HookProvider\Account\AccountEndpoints.php:28
filterquery_varssrc\HookProvider\Account\AccountEndpoints.php:29
actionparse_requestsrc\HookProvider\Account\AccountEndpoints.php:30
filterwoocommerce_account_menu_itemssrc\HookProvider\Account\AccountEndpoints.php:31
filterwoocommerce_get_query_varssrc\HookProvider\Account\AccountEndpoints.php:32
filterwoocommerce_get_endpoint_urlsrc\HookProvider\Account\AccountEndpoints.php:33
actionadmin_post_customer_cancel_subscriptionsrc\HookProvider\Account\CustomerActionsController.php:30
actionwoocommerce_account_fsb-subscriptions_endpointsrc\HookProvider\Account\SubscriptionsPage.php:28
filterwoocommerce_endpoint_fsb-subscriptions_titlesrc\HookProvider\Account\SubscriptionsPage.php:29
actionwoocommerce_account_view-fsb-subscription_endpointsrc\HookProvider\Account\SubscriptionViewPage.php:36
filterwoocommerce_endpoint_view-fsb-subscription_titlesrc\HookProvider\Account\SubscriptionViewPage.php:37
filterwoocommerce_get_settings_advancedsrc\HookProvider\Admin\AccountEndpointsSettings.php:21
filterwoocommerce_account_settingssrc\HookProvider\Admin\AccountSettings.php:11
actionadmin_enqueue_scriptssrc\HookProvider\Admin\AdminScripts.php:18
filterwoocommerce_payment_gateways_settingssrc\HookProvider\Admin\CustomerLoginReminder.php:21
filterwoocommerce_account_settingssrc\HookProvider\Admin\CustomerLoginReminder.php:22
actionadmin_noticessrc\HookProvider\Admin\FailedPaymentRequestNotice.php:16
actionwpdesk_notice_dismissed_noticesrc\HookProvider\Admin\FailedPaymentRequestNotice.php:17
actionadmin_menusrc\HookProvider\Admin\Menu.php:11
filtermanage_edit-shop_order_columnssrc\HookProvider\Admin\OrderColumns.php:24
actionmanage_shop_order_posts_custom_columnsrc\HookProvider\Admin\OrderColumns.php:25
filterwoocommerce_shop_order_list_table_columnssrc\HookProvider\Admin\OrderColumns.php:27
actionwoocommerce_shop_order_list_table_custom_columnsrc\HookProvider\Admin\OrderColumns.php:28
actionrestrict_manage_postssrc\HookProvider\Admin\OrderColumns.php:30
actionwoocommerce_order_list_table_restrict_manage_orderssrc\HookProvider\Admin\OrderColumns.php:31
actiondelete_usersrc\HookProvider\Admin\OrphanSubscriptionsRemover.php:29
actiondelete_user_formsrc\HookProvider\Admin\OrphanSubscriptionsRemover.php:30
actionwoocommerce_product_options_general_product_datasrc\HookProvider\Admin\ProductView.php:21
actionwoocommerce_product_options_pricingsrc\HookProvider\Admin\ProductView.php:25
actionwoocommerce_product_options_shipping_product_datasrc\HookProvider\Admin\ProductView.php:29
actionwoocommerce_variation_options_pricingsrc\HookProvider\Admin\ProductView.php:34
actionwoocommerce_product_after_variable_attributessrc\HookProvider\Admin\ProductView.php:40
filterwoocommerce_shop_order_list_table_prepare_items_query_argssrc\HookProvider\Admin\QueryEnhancement.php:28
filterrequestsrc\HookProvider\Admin\QueryEnhancement.php:29
actionwoocommerce_admin_order_data_after_order_detailssrc\HookProvider\Admin\RelatedSubscription.php:24
actionadmin_initsrc\HookProvider\Admin\RenewalMetaBackfill.php:22
actionadmin_menusrc\HookProvider\Admin\SettingsPage.php:23
actionadmin_post_fsb_save_settingssrc\HookProvider\Admin\SettingsPage.php:24
actionwoocommerce_process_shop_order_metasrc\HookProvider\Admin\Subscription\AdminSubscriptionUpdate.php:30
actionwoocommerce_process_shop_order_metasrc\HookProvider\Admin\Subscription\AdminSubscriptionUpdate.php:31
actionadd_meta_boxessrc\HookProvider\Admin\Subscription\PaymentRequestsMetaBox.php:35
actionadd_meta_boxessrc\HookProvider\Admin\Subscription\ScheduleMetaBox.php:32
filterwoocommerce_order_actionssrc\HookProvider\Admin\Subscription\SubscriptionActions.php:13
actionadd_meta_boxessrc\HookProvider\Admin\Subscription\SubscriptionDataMetaBox.php:34
actionadd_meta_boxessrc\HookProvider\Admin\Subscription\SubscriptionDataMetaBox.php:35
actionadmin_noticessrc\HookProvider\Admin\Subscription\SubscriptionErrorsNotice.php:25
filterrequestsrc\HookProvider\Admin\Subscription\SubscriptionsList.php:13
filterwoocommerce_fsb_subscription_list_table_requestsrc\HookProvider\Admin\Subscription\SubscriptionsList.php:15
filtermanage_edit-fsb_subscription_columnssrc\HookProvider\Admin\SubscriptionColumns.php:41
filtermanage_edit-fsb_subscription_sortable_columnssrc\HookProvider\Admin\SubscriptionColumns.php:42
actionmanage_fsb_subscription_posts_custom_columnsrc\HookProvider\Admin\SubscriptionColumns.php:43
filterwoocommerce_fsb_subscription_list_table_columnssrc\HookProvider\Admin\SubscriptionColumns.php:45
filterwoocommerce_fsb_subscription_list_table_sortable_columnssrc\HookProvider\Admin\SubscriptionColumns.php:46
actionwoocommerce_fsb_subscription_list_table_custom_columnsrc\HookProvider\Admin\SubscriptionColumns.php:47
filterpost_updated_messagessrc\HookProvider\Admin\SubscriptionEditedMessages.php:13
filterwoocommerce_fsb_subscription_list_table_prepare_items_query_argssrc\HookProvider\Admin\SubscriptionFilter.php:23
filterwoocommerce_payment_gateways_setting_columnssrc\HookProvider\Admin\SupportedGateways.php:16
filterwoocommerce_payment_gateways_setting_column_renewalssrc\HookProvider\Admin\SupportedGateways.php:17
filterwoocommerce_payment_gateways_settingssrc\HookProvider\Admin\SupportedGateways.php:18
filterwoocommerce_ajax_add_order_item_validationsrc\HookProvider\Ajax\AddingNonSubscriptionProducts.php:18
actionwoocommerce_rest_insert_shop_order_objectsrc\HookProvider\Api\Order.php:33
filterwoocommerce_rest_prepare_shop_order_objectsrc\HookProvider\Api\Order.php:39
actionwoocommerce_blocks_loadedsrc\HookProvider\Blocks\BlocksIntegrationLoader.php:19
actionwoocommerce_blocks_loadedsrc\HookProvider\Blocks\ExtendStoreApi.php:27
actionwoocommerce_cart_totals_after_order_totalsrc\HookProvider\Cart\DisplayRecurringTotals.php:29
actionwoocommerce_review_order_after_order_totalsrc\HookProvider\Cart\DisplayRecurringTotals.php:30
filterwoocommerce_cart_product_subtotalsrc\HookProvider\Cart\DisplayRecurringTotals.php:32
filterwoocommerce_cart_needs_paymentsrc\HookProvider\Cart\PaymentRequired.php:23
filterfsub/payment/manual_renewal/enabledsrc\HookProvider\Cart\PaymentRequired.php:59
actionwoocommerce_before_calculate_totalssrc\HookProvider\Cart\RecurrentCartAdder.php:56
actionwoocommerce_calculate_totalssrc\HookProvider\Cart\RecurrentCartAdder.php:57
actionwoocommerce_after_calculate_totalssrc\HookProvider\Cart\RecurrentCartAdder.php:58
actionwoocommerce_calculate_totalssrc\HookProvider\Cart\RecurrentCartAdder.php:60
filterwoocommerce_add_to_cart_handlersrc\HookProvider\Cart\RecurrentCartAdder.php:62
filterwoocommerce_cart_shipping_packagessrc\HookProvider\Cart\RecurrentCartAdder.php:132
filterwoocommerce_package_ratessrc\HookProvider\Cart\RecurrentCartAdder.php:145
filterwoocommerce_product_get_pricesrc\HookProvider\Cart\RecurrentCartAdder.php:197
filterwoocommerce_product_variation_get_pricesrc\HookProvider\Cart\RecurrentCartAdder.php:198
filterwoocommerce_shipping_package_namesrc\HookProvider\Cart\ShippingDetails.php:19
filterwoocommerce_checkout_registration_enabledsrc\HookProvider\Checkout\ForceCheckoutEnabled.php:22
filterwoocommerce_checkout_registration_requiredsrc\HookProvider\Checkout\ForceCheckoutEnabled.php:23
actionwoocommerce_order_details_after_order_tablesrc\HookProvider\Checkout\OrderRelatedSubscriptionsDetails.php:29
actionwoocommerce_review_order_after_shippingsrc\HookProvider\Checkout\RecurringShippingOptions.php:23
actionwoocommerce_checkout_order_processedsrc\HookProvider\Checkout\SubscriptionCheckout.php:39
actionwoocommerce_store_api_checkout_order_processedsrc\HookProvider\Checkout\SubscriptionCheckout.php:40
actionfsub/subscription/newsrc\HookProvider\Compatibility\HookMapper.php:24
actionfsub/subscription_renewal/createdsrc\HookProvider\Compatibility\HookMapper.php:25
actionfsub/subscription/payment_request/paysrc\HookProvider\Compatibility\HookMapper.php:26
actionfsub/subscription/payment_request/updated_failing_payment_methodsrc\HookProvider\Compatibility\HookMapper.php:27
actionfsub/subscription/validate_payment_metasrc\HookProvider\Compatibility\HookMapper.php:28
actionwoocommerce_fsb-variable-subscription_add_to_cartsrc\HookProvider\Compatibility\HookMapper.php:29
actionfsub/subscription/status/updatedsrc\HookProvider\Compatibility\StatusHookMapper.php:24
actionwoocommerce_before_calculate_totalssrc\HookProvider\Coupons\RemoveIncompatibleCoupons.php:11
filterwoocommerce_coupon_discount_typessrc\HookProvider\Coupons\SubscriptionCouponTypes.php:61
filterwoocommerce_product_coupon_typessrc\HookProvider\Coupons\SubscriptionCouponTypes.php:62
filterwoocommerce_coupon_get_discount_amountsrc\HookProvider\Coupons\SubscriptionCouponTypes.php:64
filterwoocommerce_coupon_is_validsrc\HookProvider\Coupons\SubscriptionCouponTypes.php:66
filterwoocommerce_coupon_is_valid_for_productsrc\HookProvider\Coupons\SubscriptionCouponTypes.php:67
filterwoocommerce_coupon_get_apply_quantitysrc\HookProvider\Coupons\SubscriptionCouponTypes.php:69
actionwoocommerce_email_after_order_tablesrc\HookProvider\Email\NewOrderSubscriptionInfo.php:26
actionwoocommerce_email_after_order_tablesrc\HookProvider\Email\OrderAdditionalInfo.php:26
filterwoocommerce_available_payment_gatewayssrc\HookProvider\Gateways\AvailableGateways.php:19
filterwoocommerce_no_available_payment_methods_messagesrc\HookProvider\Gateways\AvailableGateways.php:20
actioninitsrc\HookProvider\Gateways\GatewayCompatibilityLoader.php:28
actionplugins_loadedsrc\HookProvider\Gateways\GatewayCompatibilityLoader.php:29
actionadmin_noticessrc\HookProvider\Gateways\WooPaymentsIncompatibility.php:21
actionwoocommerce_payment_gateways_setting_column_renewalssrc\HookProvider\Gateways\WooPaymentsIncompatibility.php:22
actioninitsrc\HookProvider\Init.php:17
filteradmin_footer_textsrc\HookProvider\Marketing\EncourageRating.php:11
actionadmin_menusrc\HookProvider\Marketing\SupportPage.php:28
actionwoocommerce_order_status_changedsrc\HookProvider\OrderStatusListener.php:34
actionwoocommerce_order_fully_refundedsrc\HookProvider\OrderStatusListener.php:35
filterwoocommerce_data_storessrc\HookProvider\OverrideDataStores.php:14
filterwoocommerce_order_button_textsrc\HookProvider\Product\ChangeAddButtonText.php:23
filterfsub/product_add_to_cart_textsrc\HookProvider\Product\ChangeAddButtonText.php:24
actionwoocommerce_process_product_meta_fsb-subscriptionsrc\HookProvider\Product\SimpleSubscriptionProductSaver.php:13
filterproduct_type_selectorsrc\HookProvider\Product\SubscriptionProductType.php:14
filterwoocommerce_product_classsrc\HookProvider\Product\SubscriptionProductType.php:15
filterwoocommerce_product_classsrc\HookProvider\Product\SubscriptionProductType.php:16
actionwoocommerce_process_product_meta_fsb-variable-subscriptionsrc\HookProvider\Product\VariableSubscriptionProductSaver.php:14
actionwoocommerce_save_product_variationsrc\HookProvider\Product\VariableSubscriptionProductSaver.php:18
filterwoocommerce_available_variationsrc\HookProvider\Product\VariationProductAid.php:11
actionaction_scheduler_initsrc\HookProvider\Subscription\AutorecoverOnHoldSubscriptions.php:34
actionfsub/subscription/autorecover_on_hold_subscriptionssrc\HookProvider\Subscription\AutorecoverOnHoldSubscriptions.php:37
actionaction_scheduler_initsrc\HookProvider\Subscription\AutorecoverPastDueSubscriptions.php:37
actionfsub/subscription/payment_request/processsrc\HookProvider\Subscription\PaymentRequestProcessor.php:38
actionfsub/subscription/cancelsrc\HookProvider\Subscription\SubscriptionScheduledCancel.php:35
actioninitsrc\HookProvider\SubscriptionOrderType.php:15
filterwc_order_typessrc\HookProvider\SubscriptionOrderType.php:16
actioninitsrc\HookProvider\SubscriptionOrderType.php:17
filterwpdesk_tracker_datasrc\HookProvider\Telemetry\TelemetryData.php:9
filterwoocommerce_order_query_argssrc\HookProvider\WcQueryFix.php:15
actionadmin_initsrc\HookProvider\WooCommerceSubscriptionsDetector.php:29
actionadmin_enqueue_scriptsvendor_prefixed\wpdesk\wp-builder\src\Plugin\AbstractPlugin.php:148
actionwp_enqueue_scriptsvendor_prefixed\wpdesk\wp-builder\src\Plugin\AbstractPlugin.php:149
actionbefore_woocommerce_initvendor_prefixed\wpdesk\wp-init\src\Extension\CommonBinding\CustomOrdersTableCompatibility.php:16
actionplugins_loadedvendor_prefixed\wpdesk\wp-init\src\Extension\CommonBinding\I18n.php:19
actionplugins_loadedvendor_prefixed\wpdesk\wp-init\src\Extension\CommonBinding\WPDeskLicenseBridge.php:27
actionplugins_loadedvendor_prefixed\wpdesk\wp-init\src\HookDriver\GenericDriver.php:20
actionplugins_loadedvendor_prefixed\wpdesk\wp-init\src\HookDriver\LegacyDriver.php:24
actionadmin_enqueue_scriptsvendor_prefixed\wpdesk\wp-notice\src\WPDesk\Notice\AjaxHandler.php:41
actionadmin_noticesvendor_prefixed\wpdesk\wp-notice\src\WPDesk\Notice\Notice.php:144
actionadmin_footervendor_prefixed\wpdesk\wp-notice\src\WPDesk\Notice\Notice.php:145
actionadmin_enqueue_scriptsvendor_prefixed\wpdesk\wp-wpdesk-marketing\src\Boxes\Assets.php:16
actionadmin_enqueue_scriptsvendor_prefixed\wpdesk\wp-wpdesk-marketing\src\Boxes\Assets.php:30
actionadmin_enqueue_scriptsvendor_prefixed\wpdesk\wp-wpdesk-tracker\src\PSR\WPDesk\Tracker\Assets.php:28
actionadmin_menuvendor_prefixed\wpdesk\wp-wpdesk-tracker\src\PSR\WPDesk\Tracker\OptInPage.php:35
actionadmin_initvendor_prefixed\wpdesk\wp-wpdesk-tracker\src\PSR\WPDesk\Tracker\OptInPage.php:36
actionadmin_noticesvendor_prefixed\wpdesk\wp-wpdesk-tracker\src\PSR\WPDesk\Tracker\OptOut.php:28
filterplugin_row_metavendor_prefixed\wpdesk\wp-wpdesk-tracker\src\PSR\WPDesk\Tracker\PluginActionLinks.php:36
Maintenance & Trust

Flexible Subscriptions Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.4
Last updatedMar 9, 2026
PHP min version7.4
Downloads23K

Community Trust

Rating90/100
Number of ratings8
Active installs1K
Developer Profile

Flexible Subscriptions Developer Profile

wpdesk

23 plugins · 127K total installs

78
trust score
Avg Security Score
99/100
Avg Patch Time
135 days
View full developer profile
Detection Fingerprints

How We Detect Flexible Subscriptions

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/flexible-subscriptions/assets/css/admin.css/wp-content/plugins/flexible-subscriptions/assets/css/admin-metaboxes.css/wp-content/plugins/flexible-subscriptions/assets/css/editor.css/wp-content/plugins/flexible-subscriptions/assets/js/admin-metaboxes.js/wp-content/plugins/flexible-subscriptions/assets/js/admin.js/wp-content/plugins/flexible-subscriptions/assets/js/editor.js
Script Paths
/wp-content/plugins/flexible-subscriptions/assets/js/admin-metaboxes.js/wp-content/plugins/flexible-subscriptions/assets/js/admin.js/wp-content/plugins/flexible-subscriptions/assets/js/editor.js
Version Parameters
flexible-subscriptions/assets/css/admin.css?ver=flexible-subscriptions/assets/css/admin-metaboxes.css?ver=flexible-subscriptions/assets/css/editor.css?ver=flexible-subscriptions/assets/js/admin-metaboxes.js?ver=flexible-subscriptions/assets/js/admin.js?ver=flexible-subscriptions/assets/js/editor.js?ver=

HTML / DOM Fingerprints

CSS Classes
wpdesk-flexible-subscriptions
Data Attributes
data-period-typedata-period-amountdata-subscription-billing-period-settings
JS Globals
wpdesk_flexible_subscriptions_params
Shortcode Output
[flexible-subscription_order_details]
FAQ

Frequently Asked Questions about Flexible Subscriptions