Link Whisper Free Security & Risk Analysis

wordpress.org/plugins/link-whisper

The AI-powered internal linking plugin for WordPress. Build internal links faster, find linking opportunities, and improve SEO automatically.

30K active installs v0.9.2 PHP 5.6+ WP 4.6+ Updated Mar 6, 2026
internal-linkinglink-buildinglinksorphan-contentseo
62
C · Use Caution
CVEs total11
Unpatched1
Last CVEApr 7, 2026
Download
Safety Verdict

Is Link Whisper Free Safe to Use in 2026?

Use With Caution

Score 62/100

Link Whisper Free has 1 unpatched vulnerability. Evaluate alternatives or apply available mitigations.

11 known CVEs 1 unpatched Last CVE: Apr 7, 2026Updated 2mo ago
Risk Assessment

The "link-whisper" plugin, version 0.9.2, presents a mixed security posture. While it demonstrates some good practices like a significant number of capability checks and a moderate adoption of prepared statements for SQL queries, there are substantial concerns.

The static analysis reveals a very large attack surface, with 93 AJAX handlers, a concerning 79 of which lack authentication checks. This opens the door to numerous potential unauthorized actions. The presence of the `unserialize` function, a known risky operation, coupled with 8 high-severity taint flows with unsanitized paths, indicates a risk of deserialization vulnerabilities and potential for code execution or data manipulation if improperly handled inputs are processed. Furthermore, the output escaping rate of 64% is insufficient, suggesting potential Cross-Site Scripting (XSS) vulnerabilities.

The plugin's vulnerability history is a significant red flag. With 10 known CVEs, including 2 currently unpatched high-severity vulnerabilities, and a history of common types like XSS, Missing Authorization, and SQL Injection, the plugin has a documented pattern of security weaknesses. The last recorded vulnerability in February 2026, while in the future, indicates a recent history of issues. The combination of an exposed attack surface, risky code functions, and a history of critical and high-severity vulnerabilities points to a plugin that requires immediate attention to mitigate significant security risks.

Key Concerns

  • Unpatched high severity CVEs
  • Large number of AJAX handlers without auth checks
  • High severity taint flows with unsanitized paths
  • Use of dangerous function: unserialize
  • Low output escaping rate
  • Multiple medium severity historical CVEs
Vulnerabilities
11 published

Link Whisper Free Security Vulnerabilities

CVEs by Year

2 CVEs in 2023
2023
3 CVEs in 2024
2024
3 CVEs in 2025 · unpatched
2025
3 CVEs in 2026
2026
Patched Has unpatched

Severity Breakdown

High
2
Medium
9

11 total CVEs

CVE-2026-1900medium · 5.3Missing Authorization

Link Whisper Free < 0.9.1 - Missing Authorization to Unauthenticated Settings Change

Apr 7, 2026 Patched in 0.9.1 (9d)
CVE-2026-22357medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Link Whisper Free <= 0.9.2 - Reflected Cross-Site Scripting

Feb 16, 2026 Patched in 0.9.3 (78d)
CVE-2025-67927medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Link Whisper Free <= 0.8.8 - Reflected Cross-Site Scripting

Jan 5, 2026 Patched in 0.8.9 (9d)
CVE-2025-11263medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Link Whisper Free <= 0.8.8 - Reflected Cross-Site Scripting

Dec 5, 2025 Patched in 0.8.9 (1d)
CVE-2025-62970medium · 5.3Missing Authorization

Link Whisper Free <= 0.8.8 - Missing Authorization

Oct 18, 2025Unpatched
CVE-2025-22306medium · 5.3Exposure of Sensitive Information to an Unauthorized Actor

Link Whisper Free <= 0.7.8 - Unauthenticated Sensitive Information Exposure

Jan 6, 2025 Patched in 0.7.9 (25d)
CVE-2024-31934medium · 4.3Cross-Site Request Forgery (CSRF)

Link Whisper Free <= 0.6.9

Apr 10, 2024 Patched in 0.7.0 (7d)
CVE-2024-2693high · 8.8Deserialization of Untrusted Data

Link Whisper Free <= 0.7.1 - Authenticated (Contributor+) PHP Object Injection

Mar 26, 2024 Patched in 0.7.2 (15d)
CVE-2024-27992medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Link Whisper Free <= 0.6.8 - Reflected Cross-Site Scripting

Mar 15, 2024 Patched in 0.6.9 (6d)
CVE-2023-47852high · 8.8Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

Link Whisper Free <= 0.6.5 - Authenticated (Contributor+) SQL Injection

Nov 20, 2023 Patched in 0.6.6 (64d)
CVE-2023-32506medium · 5.3Missing Authorization

Link Whisper Free <= 0.6.3 - Missing Authorization via init()

May 10, 2023 Patched in 0.6.4 (258d)
Code Analysis
Analyzed Mar 16, 2026

Link Whisper Free Code Analysis

Dangerous Functions
7
Raw SQL Queries
441
329 prepared
Unescaped Output
481
852 escaped
Nonce Checks
25
Capability Checks
22
File Operations
24
External Requests
12
Bundled Libraries
1

Dangerous Functions Found

unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:1617
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:1810
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:2027
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:2228
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:2425
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:2649
unserialize$keyword_data = unserialize(gzinflate(base64_decode($keyword_data)));core\Wpil\TargetKeyword.php:2949

Bundled Libraries

Select2

SQL Query Safety

43% prepared770 total queries

Output Escaping

64% escaped1333 total outputs
Data Flows · Security
23 unsanitized

Data Flow Analysis

25 flows23 with unsanitized paths
search_box (core\Wpil\Table\Domain.php:385)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
79 unprotected

Link Whisper Free Attack Surface

Entry Points93
Unprotected79

AJAX Handlers 93

authwp_ajax_wpil_live_download_ai_datacore\Wpil\AI.php:48
authwp_ajax_wpil_clear_ai_datacore\Wpil\AI.php:49
authwp_ajax_wpil_ai_dismiss_credit_noticecore\Wpil\AI.php:50
authwp_ajax_wpil_ai_dismiss_api_key_decoding_errorcore\Wpil\AI.php:51
authwp_ajax_wpil_estimate_site_processing_costcore\Wpil\AI.php:52
authwp_ajax_setup_user_ai_subscriptioncore\Wpil\AI.php:53
authwp_ajax_clear_user_ai_subscriptioncore\Wpil\AI.php:54
authwp_ajax_dismiss_email_offer_noticecore\Wpil\Base.php:26
authwp_ajax_signed_up_email_offer_noticecore\Wpil\Base.php:27
authwp_ajax_dismiss_premium_noticecore\Wpil\Base.php:28
authwp_ajax_dismiss_review_noticecore\Wpil\Base.php:29
authwp_ajax_perm_dismiss_review_noticecore\Wpil\Base.php:30
authwp_ajax_get_post_suggestionscore\Wpil\Base.php:31
authwp_ajax_update_suggestion_displaycore\Wpil\Base.php:32
authwp_ajax_wpil_csv_exportcore\Wpil\Base.php:33
authwp_ajax_wpil_export_suggestion_datacore\Wpil\Base.php:35
authwp_ajax_wpil_bulk_keyword_exportcore\Wpil\Base.php:36
authwp_ajax_wpil_clear_gsc_app_credentialscore\Wpil\Base.php:37
authwp_ajax_wpil_gsc_deactivate_appcore\Wpil\Base.php:38
authwp_ajax_wpil_disconnect_from_ai_subscriptioncore\Wpil\Base.php:39
authwp_ajax_wpil_save_animation_load_statuscore\Wpil\Base.php:40
authwp_ajax_wpil_set_multi_link_in_sentence_editorcore\Wpil\Base.php:41
authwp_ajax_wpil_term_searchcore\Wpil\Base.php:42
authwp_ajax_wpil_post_searchcore\Wpil\Base.php:43
authwp_ajax_wpil_hide_explain_pagecore\Wpil\Base.php:44
authwp_ajax_wpil_set_use_ai_suggestionscore\Wpil\Base.php:45
authwp_ajax_wpil_wizard_save_settingscore\Wpil\Base.php:46
authwp_ajax_wpil_wizard_save_oai_keycore\Wpil\Base.php:47
authwp_ajax_wpil_clear_process_trackercore\Wpil\Base.php:48
authwp_ajax_wpil_has_run_wizardcore\Wpil\Base.php:49
authwp_ajax_wpil_get_dashboard_scan_loading_datacore\Wpil\Base.php:50
authwp_ajax_wpil_wizard_set_completion_flagcore\Wpil\Base.php:51
authwp_ajax_wpil_run_autolink_insert_searchcore\Wpil\Base.php:52
authwp_ajax_user_dismissed_ai_popupcore\Wpil\Base.php:53
authwp_ajax_wpil_update_expanded_details_togglecore\Wpil\Base.php:54
authwp_ajax_wpil_link_clickedcore\Wpil\ClickTracker.php:14
noprivwp_ajax_wpil_link_clickedcore\Wpil\ClickTracker.php:15
authwp_ajax_wpil_clear_click_datacore\Wpil\ClickTracker.php:16
authwp_ajax_wpil_delete_click_datacore\Wpil\ClickTracker.php:17
authwp_ajax_wpil_delete_user_datacore\Wpil\ClickTracker.php:18
authwp_ajax_wpil_error_reset_datacore\Wpil\Error.php:18
authwp_ajax_wpil_error_processcore\Wpil\Error.php:19
authwp_ajax_wpil_delete_error_linkscore\Wpil\Error.php:21
authwp_ajax_wpil_get_edit_error_linkscore\Wpil\Error.php:22
authwp_ajax_wpil_delete_error_high_confidence_linkscore\Wpil\Error.php:23
authwp_ajax_wpil_get_link_titlecore\Wpil\Link.php:16
authwp_ajax_wpil_add_link_to_ignorecore\Wpil\Link.php:17
authwp_ajax_wpil_load_notificationscore\Wpil\Notification.php:345
authwp_ajax_reset_report_datacore\Wpil\Report.php:23
authwp_ajax_process_report_datacore\Wpil\Report.php:24
authwp_ajax_wpil_save_user_filter_settingscore\Wpil\Report.php:25
authwp_ajax_get_link_report_dropdown_datacore\Wpil\Report.php:28
authwp_ajax_get_link_report_link_datacore\Wpil\Report.php:29
authwp_ajax_get_domain_report_datacore\Wpil\Report.php:30
authwp_ajax_wpil_save_screen_optionscore\Wpil\Report.php:31
authwp_ajax_wpil_dismiss_popup_noticecore\Wpil\Report.php:32
authwp_ajax_wpil_generate_link_sitemapscore\Wpil\Sitemap.php:15
authwp_ajax_wpil_save_custom_sitemap_datacore\Wpil\Sitemap.php:16
authwp_ajax_wpil_delete_custom_sitemapcore\Wpil\Sitemap.php:17
authwp_ajax_wpil_target_keyword_resetcore\Wpil\TargetKeyword.php:23
authwp_ajax_wpil_target_keyword_selected_updatecore\Wpil\TargetKeyword.php:24
authwp_ajax_wpil_create_custom_target_keywordcore\Wpil\TargetKeyword.php:25
authwp_ajax_wpil_delete_custom_target_keywordcore\Wpil\TargetKeyword.php:26
authwp_ajax_wpil_save_inbound_target_keyword_visibilitycore\Wpil\TargetKeyword.php:27
authwp_ajax_wpil_save_inbound_link_stats_visibilitycore\Wpil\TargetKeyword.php:28
authwp_ajax_wpil_live_download_ai_datacore\Wpil\Telemetry.php:127
authwp_ajax_wpil_clear_ai_datacore\Wpil\Telemetry.php:128
authwp_ajax_wpil_csv_exportcore\Wpil\Telemetry.php:131
authwp_ajax_wpil_clear_click_datacore\Wpil\Telemetry.php:135
authwp_ajax_wpil_delete_click_datacore\Wpil\Telemetry.php:136
authwp_ajax_wpil_delete_user_datacore\Wpil\Telemetry.php:137
authwp_ajax_wpil_error_reset_datacore\Wpil\Telemetry.php:140
authwp_ajax_wpil_delete_error_linkscore\Wpil\Telemetry.php:141
authwp_ajax_wpil_keyword_resetcore\Wpil\Telemetry.php:144
authwp_ajax_wpil_insert_selected_keyword_linkscore\Wpil\Telemetry.php:145
authwp_ajax_wpil_get_link_titlecore\Wpil\Telemetry.php:148
authwp_ajax_wpil_add_link_to_ignorecore\Wpil\Telemetry.php:149
authwp_ajax_wpil_ignore_orphaned_postcore\Wpil\Telemetry.php:152
authwp_ajax_reset_report_datacore\Wpil\Telemetry.php:155
authwp_ajax_wpil_target_keyword_resetcore\Wpil\Telemetry.php:162
authwp_ajax_wpil_target_keyword_selected_updatecore\Wpil\Telemetry.php:163
authwp_ajax_wpil_url_changer_deletecore\Wpil\Telemetry.php:166
authwp_ajax_wpil_url_changer_resetcore\Wpil\Telemetry.php:167
authwp_ajax_wpil_refresh_related_post_linkscore\Wpil\Telemetry.php:170
authwp_ajax_wpil_save_related_postscore\Wpil\Telemetry.php:171
authwp_ajax_wpil_user_telemetry_notice_dismisscore\Wpil\Telemetry.php:178
authwp_ajax_wpil_dismiss_telemetry_noticecore\Wpil\Telemetry.php:181
authwp_ajax_user_opened_ai_popupcore\Wpil\Telemetry.php:184
authwp_ajax_user_dismissed_ai_popupcore\Wpil\Telemetry.php:185
authwp_ajax_wpil_log_eventcore\Wpil\Telemetry.php:188
authwp_ajax_wpil_flush_object_cachecore\Wpil\Toolbox.php:15
authwp_ajax_wpil_load_tourscore\Wpil\Tour.php:202
authwp_ajax_wpil_save_tour_progresscore\Wpil\Tour.php:203
WordPress Hooks 44
filtercron_schedulescore\Wpil\AI.php:55
actionadmin_initcore\Wpil\AI.php:56
actionwpil_ai_batch_process_croncore\Wpil\AI.php:57
filterorhanerday_openai_stream_response_datacore\Wpil\AI.php:58
actionadmin_initcore\Wpil\Base.php:16
actionadmin_menucore\Wpil\Base.php:17
actionwp_dashboard_setupcore\Wpil\Base.php:18
actionadd_meta_boxescore\Wpil\Base.php:19
actionadmin_enqueue_scriptscore\Wpil\Base.php:20
actionwp_enqueue_scriptscore\Wpil\Base.php:21
actionadmin_noticescore\Wpil\Base.php:23
actionadmin_noticescore\Wpil\Base.php:24
actionupgrader_process_completecore\Wpil\Base.php:25
actionadmin_headcore\Wpil\Base.php:195
actionadmin_initcore\Wpil\ClickTracker.php:93
actionwpil_scheduled_click_data_deletecore\Wpil\ClickTracker.php:94
actionadmin_initcore\Wpil\Email.php:30
actionwpil_email_croncore\Wpil\Email.php:31
filtercron_schedulescore\Wpil\Error.php:24
actionadmin_initcore\Wpil\Error.php:25
actionwpil_broken_link_check_croncore\Wpil\Error.php:26
actiondraft_to_publishedcore\Wpil\Post.php:20
actionsave_postcore\Wpil\Post.php:21
actionbefore_delete_postcore\Wpil\Post.php:22
filterwp_link_query_argscore\Wpil\Post.php:23
filterwp_link_querycore\Wpil\Post.php:24
filterscreen_settingscore\Wpil\Report.php:26
filterset_screen_option_report_optionscore\Wpil\Report.php:27
actionplugins_loadedcore\Wpil\Rest.php:14
actionrest_api_initcore\Wpil\Rest.php:19
filterclearfy_rest_api_white_listcore\Wpil\Rest.php:149
filterperfmatters_rest_api_exceptionscore\Wpil\Rest.php:153
filterallowed_http_originscore\Wpil\SearchConsole.php:28
filterscreen_settingscore\Wpil\TargetKeyword.php:29
filterset_screen_option_target_keyword_optionscore\Wpil\TargetKeyword.php:30
actionsave_postcore\Wpil\TargetKeyword.php:31
filtercron_schedulescore\Wpil\TargetKeyword.php:37
actionadmin_initcore\Wpil\TargetKeyword.php:38
actionwpil_search_console_updatecore\Wpil\TargetKeyword.php:39
actionwpil_search_console_update_stepcore\Wpil\TargetKeyword.php:40
actionadmin_initcore\Wpil\Telemetry.php:174
actionwpil_telemetry_cleanup_croncore\Wpil\Telemetry.php:175
actionplugins_loadedlink-whisper.php:74
filterplugin_row_metalink-whisper.php:88

Scheduled Events 7

wpil_ai_batch_process_cron
wpil_scheduled_click_data_delete
wpil_email_cron
wpil_broken_link_check_cron
wpil_search_console_update
wpil_search_console_update_step
wpil_telemetry_cleanup_cron
Maintenance & Trust

Link Whisper Free Maintenance & Trust

Maintenance Signals

WordPress version tested6.7.5
Last updatedMar 6, 2026
PHP min version5.6
Downloads858K

Community Trust

Rating82/100
Number of ratings124
Active installs30K
Developer Profile

Link Whisper Free Developer Profile

Spencer Haws

1 plugin · 30K total installs

61
trust score
Avg Security Score
62/100
Avg Patch Time
47 days
View full developer profile
Detection Fingerprints

How We Detect Link Whisper Free

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/link-whisper/core/Assets/css/main.css/wp-content/plugins/link-whisper/core/Assets/css/vue-multiselect.css/wp-content/plugins/link-whisper/core/Assets/js/vendors/lodash.min.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vue.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vue-multiselect.min.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vuex.min.js/wp-content/plugins/link-whisper/core/Assets/js/helpers/vue_app.js/wp-content/plugins/link-whisper/core/Assets/js/helpers/axios.js+8 more
Script Paths
/wp-content/plugins/link-whisper/core/Assets/js/vendors/lodash.min.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vue.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vue-multiselect.min.js/wp-content/plugins/link-whisper/core/Assets/js/vendors/vuex.min.js/wp-content/plugins/link-whisper/core/Assets/js/helpers/vue_app.js/wp-content/plugins/link-whisper/core/Assets/js/helpers/axios.js+7 more
Version Parameters
link-whisper/core/Assets/css/main.css?ver=link-whisper/core/Assets/css/vue-multiselect.css?ver=link-whisper/core/Assets/js/vendors/lodash.min.js?ver=link-whisper/core/Assets/js/vendors/vue.js?ver=link-whisper/core/Assets/js/vendors/vue-multiselect.min.js?ver=link-whisper/core/Assets/js/vendors/vuex.min.js?ver=link-whisper/core/Assets/js/helpers/vue_app.js?ver=link-whisper/core/Assets/js/helpers/axios.js?ver=link-whisper/core/Assets/js/link-whisper-backend.js?ver=link-whisper/core/Assets/js/link-whisper-frontend.js?ver=link-whisper/core/Assets/js/link-whisper-suggestions.js?ver=link-whisper/core/Assets/js/link-whisper-links.js?ver=link-whisper/core/Assets/js/link-whisper-reporting.js?ver=link-whisper/core/Assets/js/link-whisper-dashboard.js?ver=link-whisper/core/Assets/js/link-whisper-settings.js?ver=

HTML / DOM Fingerprints

CSS Classes
wpil_link_suggestions_wrapperwpil_suggestions_titlewpil_new_suggestion_buttonwpil_suggestions_tablewpil_suggestion_rowwpil_suggestion_actionswpil_suggestions_action_buttonswpil_add_link_button+44 more
HTML Comments
<!-- Wpil_Init::register_services() --><!-- Check if the premium version is installed --><!-- autoloader --><!-- Main plugin file -->+76 more
Data Attributes
data-wpil-post-typedata-wpil-post-iddata-wpil-suggestion-iddata-wpil-editor-iddata-wpil-target-urldata-wpil-link-text+4 more
JS Globals
wpil_varsWpillodashVueVueMultiselectVuex+1 more
FAQ

Frequently Asked Questions about Link Whisper Free