| 插件名稱 | Fonts Manager | Custom Fonts |
|---|---|
| 漏洞類型 | SQL 注入 |
| CVE 編號 | CVE-2026-1800 |
| 緊急程度 | 高 |
| CVE 發布日期 | 2026-03-23 |
| 來源 URL | CVE-2026-1800 |
Urgent: SQL Injection in “Fonts Manager | Custom Fonts” (≤ 1.2) — What WordPress Site Owners Must Do Now
Published: 23 Mar, 2026 | Severity: High — CVSS 9.3 (CVE-2026-1800) | Affected versions: plugin versions ≤ 1.2 | Required privilege: Unauthenticated
As a Hong Kong-based security practitioner with experience in incident response and web application protection, I am issuing this advisory to help WordPress site owners and administrators respond rapidly to a high-severity SQL injection vulnerability in the Fonts Manager | Custom Fonts plugin (versions up to and including 1.2). The vulnerability can be triggered via the fmcfIdSelectedFnt parameter and allows unauthenticated attackers to interact with the WordPress database.
執行摘要(您現在需要知道的事情)
- The plugin contains an unauthenticated SQL injection vector via the HTTP parameter
fmcfIdSelectedFnt. - An unauthenticated attacker can inject SQL into a query that interacts with the WordPress database.
- Potential impacts: data disclosure, data modification, user account compromise, and full site takeover depending on site configuration.
- At the time of publication there may be no vendor-supplied patch for versions ≤ 1.2. Immediate mitigation is required.
- If you run this plugin: remove or disable it if possible. If not possible, apply virtual patching (WAF rule) or other access restrictions until an official fix is available.
- Treat any site that exposes this plugin to the public internet as high priority for mitigation.
What is this vulnerability? Technical overview
This is an SQL injection (SQLi) vulnerability exploitable without authentication. The vulnerable input is the HTTP parameter named fmcfIdSelectedFnt, which the plugin incorporates into a SQL statement without sufficient sanitisation or parameterisation.
為什麼這很重要:
- SQL injection enables attackers to manipulate database queries. Depending on context, attackers may read arbitrary rows, alter or delete data, create administrative accounts, or perform actions that lead to full site compromise.
- Unauthenticated exploitation means any internet visitor can attempt the attack — no login required.
- The CVSS score reflects the high criticality of unauthenticated SQLi on web applications.
Technical notes (high level):
- The attack surface is an HTTP parameter passed to a plugin endpoint (GET or POST).
- The plugin fails to sanitise or parameterise the provided value before using it in a database query.
- A malicious input can change the intended SQL query logic and return or modify sensitive data.
This advisory avoids sharing exploit payloads or detailed query strings to reduce the risk of misuse. The focus is detection, mitigation and safe handling.
How an attacker can exploit it — realistic attack scenarios
Understanding likely attack patterns helps prioritise response:
- 數據盜竊: Attackers may read contents of
wp_users,wp_usermetaor other tables. Stolen password hashes can be brute-forced offline. - Privilege escalation / account creation: Injected SQL can be used to create an administrative user in
wp_usersand set corresponding meta entries inwp_usermeta, leading to site takeover. - Site modification / persistence: SQLi allows modification of options, insertion of malicious posts or changing plugin/theme settings to persist access.
- 大規模利用: Because the vulnerability is unauthenticated and the plugin is distributed, automated scanners and exploit bots will likely probe and attack many sites.
Treat sites with the vulnerable plugin as high-risk and act immediately.
Detection — what to look for in logs and behaviour
Monitor logs for these patterns (notes are detection suggestions, not exact signatures):
- Requests to plugin endpoints where
fmcfIdSelectedFntis present, especially with unusual characters (quotes, comments, SQL keywords). - Repeated 4xx/5xx responses to the same URL from the same IP or many low‑reputation IPs (scanning behaviour).
- Rapid POST/GET requests with varying
fmcfIdSelectedFntvalues (probing attempts). - Database errors in PHP/WordPress logs referencing SQL syntax errors after plugin endpoints are accessed.
- Unexpected admin users, new posts, modified options, or scheduled tasks appearing after suspicious requests.
- 伺服器的異常外部連接。.
Sample detection log fingerprints (sanitised):
[access-log] 192.0.2.123 - - [23/Mar/2026:10:04:12 +0000] "GET /wp-admin/admin-ajax.php?action=fmcf_action&fmcfIdSelectedFnt=... HTTP/1.1" 200 512 "-" "Mozilla/5.0"
[error-log] PHP Warning: mysqli::query(): (23000/1064): You have an error in your SQL syntax... in /wp-content/plugins/fonts-manager-custom-fonts/includes/class-db.php on line 128
Set monitoring alerts for SQL error patterns (e.g. “SQL syntax”) after calls to plugin endpoints and for unexpected creation of administrative users.
立即緩解步驟(在接下來的 1–2 小時內該怎麼做)
- 確定受影響的網站
- Check the WordPress admin plugin list or scan file systems to confirm the plugin is installed and version ≤ 1.2.
- Consider taking the site offline briefly or enable maintenance mode
- Optional but useful for high-risk or high-traffic sites while performing remediation.
- Check for an official vendor update
- If an update is available, test it in staging and apply it to production. Do not assume a patch exists without verification.
- If no patch is available, disable or remove the plugin
- Deactivate via WP admin or remove the plugin folder via SFTP. If the plugin is essential and cannot be removed immediately, proceed to apply access restrictions or virtual patching.
- Apply access controls or virtual patching
- Block or sanitise the vulnerable parameter, restrict access to the plugin endpoints, or limit requests to trusted IPs/admins.
- Credential rotation and review
- If compromise is suspected, reset passwords for WordPress admin accounts, SFTP/FTP, hosting control panel accounts and the database user.
- Inspect for indicators of compromise
- See the “How to check for compromise” section below.
Recommended WAF mitigation (virtual patching) — examples and guidance
If you cannot remove the plugin immediately, virtual patching through a WAF or hosting control panel is the fastest way to block exploit traffic. The following are conceptual rules; exact syntax depends on your WAF:
1. Block suspicious parameter content
拒絕請求,當 fmcfIdSelectedFnt contains characters commonly used for SQL injection (single quote, double quote, semicolon, comment tokens, SQL keywords) from unauthenticated sources.
假代碼邏輯:
IF request contains parameter fmcfIdSelectedFnt
AND parameter value matches regex: [\x27\x22;#/*\b(UNION|SELECT|INSERT|UPDATE|DELETE|DROP)\b] (case-insensitive)
THEN block request (return 403)
Note: If the plugin normally expects a single integer ID, only allow digits and reject everything else.
2. Restrict access to plugin endpoints
- Limit endpoints to authenticated admin sessions or to specific IP ranges used by your administrators.
- Block anonymous GET/POST requests to those endpoints if they are not intended for public use.
3. Rate limiting and behaviour checks
- Rate limit access to the plugin endpoints to slow automated scanning and exploitation attempts.
- Block IPs that exhibit repeated probing behaviour.
4. Hide database error messages
- Prevent detailed SQL errors from being returned to clients; return a generic error page instead to avoid information leakage.
These virtual patches reduce exposure but do not fix the underlying code. Combine them with removal or an official update when available.
How to check for compromise — indicators, files, and queries
Conduct a focused investigation if you saw suspicious traffic or think the site may have been targeted:
- Check access and error logs
- 搜索包含的請求
fmcfIdSelectedFntfrom unknown IPs and for SQL error messages tied to plugin files.
- 搜索包含的請求
- 檢查
wp_users和wp_usermeta- Look for newly created administrator users or unexpected changes to existing accounts.
- Scan for modified files
- Use file integrity checks, Git diffs, or file modification timestamps to find recently changed PHP files in
wp-contentand the site root.
- Use file integrity checks, Git diffs, or file modification timestamps to find recently changed PHP files in
- 搜尋數據庫
- 檢查
wp_optionsfor unexpected autoloaded options and check posts for injected iframes, obfuscated JavaScript or base64-encoded payloads.
- 檢查
- Review scheduled tasks and cron
- List active cron events for unknown or suspicious hooks.
- 檢查出站連接
- Monitor for unusual connections from the server, which may indicate data exfiltration or callbacks.
If you find indicators of compromise, isolate the site immediately and follow containment and recovery procedures.
Incident response checklist (step by step)
- 隔離
- Put impacted site(s) into maintenance mode and, if necessary, restrict network access.
- 保留證據
- Backup logs, database and filesystem snapshots for forensic analysis. Avoid overwriting evidence.
- 隔離
- Disable or remove the vulnerable plugin and apply WAF rules to block exploit attempts.
- 根除
- Remove web shells, unauthorised admin users and malicious files. Restore clean files from known-good backups where necessary.
- 恢復
- Update or reinstall plugins/themes/core, reissue credentials and rotate keys, and harden the site configuration.
- 審查並學習
- Perform a post-mortem to identify how the breach occurred and improve controls (monitoring, backups, virtual patching).
Hardening checklist (before and after remediation)
- 保持 WordPress 核心、主題和插件的最新版本。.
- Limit plugin usage to essential, actively maintained plugins.
- Enforce strong passwords and multi-factor authentication (MFA) for administrator accounts.
- Use least privilege for database users — avoid using a DB user with excessive rights.
- 限制訪問
wp-admin和wp-login.phpby IP where practical or add additional authentication layers. - 實施文件完整性監控和定期惡意軟件掃描。.
- Maintain offsite backups and test restore procedures periodically.
- Monitor logs and alerts continuously and subscribe to reliable vulnerability intelligence feeds.
Practical protections and services
For site owners without in-house security capability, consider these protective measures:
- Use a reputable WAF or hosting-level request filtering to apply virtual patches quickly.
- Engage a trusted incident response or managed security provider to perform forensic analysis if compromise is suspected.
- Deploy continuous monitoring and automated scans that can detect vulnerable plugin versions and anomalous activity.
- Ensure your hosting provider can assist with network-level isolation and log retrieval during an incident.
Virtual patching and access controls buy time while you obtain an official vendor fix and perform a full remediation.
受損指標(IoCs) — 需要追蹤的範例
- HTTP requests including the parameter name
fmcfIdSelectedFnt. - Requests with high-entropy or unusual characters in
fmcfIdSelectedFnt. - SQL error messages in server logs near plugin file paths.
- Elevated 4xx/5xx responses to plugin endpoints.
- New admin users, unexpected changes in
wp_options(siteurl/home), or active_plugins entries. - PHP files containing obfuscated code (e.g.
base64_解碼+評估), or .php files in upload directories.
Any of the above should be treated as high priority and investigated immediately.
網站擁有者和管理員的溝通指導
When notifying stakeholders, be clear and factual:
- State that the plugin has a high-severity unauthenticated SQL injection vulnerability and list affected versions.
- Recommend immediate steps: disable/remove the plugin or apply access restrictions/virtual patches until a vendor patch is available.
- Provide expected timelines and next steps, including investigation and potential credential rotation if compromise is suspected.
- Offer points-of-contact for technical assistance and ensure logs/backups are preserved for forensic review.
常見問題
- Q: Should I delete the plugin or just deactivate it?
- A: If you can afford to remove the functionality, delete the plugin. If removal breaks critical functionality, deactivate it temporarily and apply virtual patching or access restrictions until a safe update is available.
- Q: What if an official vendor patch is released after this advisory?
- A: Test the vendor patch in staging before applying it to production. After updating, scan the site for signs of compromise and verify file and database integrity.
- Q: Are backups taken while the plugin was active safe to restore from?
- A: Be cautious. Backups made while the plugin was active could contain malicious modifications if the site was compromised. Verify and scan backups before restoring.
Checklist: Immediate actions (one-page summary)
- Inventory sites and locate plugin instances (versions ≤ 1.2).
- If plugin present: deactivate or remove immediately, or apply WAF virtual patch / access restrictions.
- Apply rules to block suspicious
fmcfIdSelectedFnt值。. - Inspect logs for suspicious requests and SQL errors.
- Scan for new admin users, changed files, and scheduled tasks.
- Rotate credentials (admin, FTP/SFTP, DB) if suspicious activity is found.
- Backup evidence and initiate incident response if compromise is suspected.
- Monitor vendor advisories for an official patch and apply it when available.