समुदाय चेतावनी XSS श्रेणी विवरण में (CVE20260693)

क्रॉस साइट स्क्रिप्टिंग (XSS) वर्डप्रेस में श्रेणी विवरण प्लगइन में HTML की अनुमति देता है
प्लगइन का नाम श्रेणी विवरण में HTML की अनुमति दें
कमजोरियों का प्रकार क्रॉस-साइट स्क्रिप्टिंग (XSS)
CVE संख्या CVE-2026-0693
तात्कालिकता कम
CVE प्रकाशन तिथि 2026-02-13
स्रोत URL CVE-2026-0693

Urgent: Stored XSS in “Allow HTML in Category Descriptions” (<= 1.2.4) — वर्डप्रेस साइट मालिकों को अब क्या करना चाहिए

सारांश: A stored Cross-Site Scripting (XSS) vulnerability (CVE-2026-0693) has been disclosed in the WordPress plugin “Allow HTML in Category Descriptions” (versions ≤ 1.2.4). An authenticated user with Administrator-level privileges can inject malicious HTML/JavaScript into category descriptions that can later execute in visitors’ or other administrators’ browsers. There is currently no official patch for the vulnerable versions. This advisory explains technical details, threat scenarios, immediate mitigations, detection and clean-up steps, and longer-term hardening from the perspective of a Hong Kong security expert.

नोट: यदि आप इस प्लगइन को चलाते हैं और एक प्रभावित संस्करण स्थापित है, तो इसे एक उच्च प्राथमिकता वाली साइट सुरक्षा कार्य के रूप में मानें — भले ही भेद्यता के लिए प्रशासक विशेषाधिकार की आवश्यकता हो, प्रभाव व्यावहारिक रूप से महत्वपूर्ण हो सकता है।.


यह कमजोरी क्या है?

  • प्रकार: स्टोर किया गया क्रॉस-साइट स्क्रिप्टिंग (XSS)।.
  • Affected component: WordPress plugin “Allow HTML in Category Descriptions” — versions ≤ 1.2.4.
  • CVE: CVE-2026-0693।.
  • CVSS: 5.9 (मध्यम), वेक्टर: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L।.
  • Root cause: The plugin allows administrators to save unfiltered HTML in taxonomy descriptions without proper sanitization or output encoding. Malicious JavaScript stored in a category description can be executed in the context of a page that renders that description (front-end or certain admin views), enabling cookie theft, privilege abuse, or actions performed with the victim’s browser session.

यह क्यों महत्वपूर्ण है: प्रशासक विश्वसनीय खाते होते हैं। एक हमलावर जो एक प्रशासक खाते से समझौता करता है (या एक प्रशासक को एक तैयार विवरण सहेजने के लिए धोखा देता है) वह अन्य प्रशासक उपयोगकर्ताओं या साइट आगंतुकों को लक्षित करने वाले स्क्रिप्ट को स्थायी रूप से रख सकता है। परिणामों में साइट का विकृति, क्रेडेंशियल संग्रहण, दुर्भावनापूर्ण रीडायरेक्ट, या श्रृंखलाबद्ध हमलों के माध्यम से पूरी साइट का अधिग्रहण शामिल हैं।.


एक हमलावर इसे कैसे भुनाता है

  1. हमलावर एक प्रशासक खाता प्राप्त करता है या समझौता करता है (फिशिंग, पासवर्ड पुन: उपयोग, अंदरूनी), या एक प्रशासक को एक पेलोड सहेजने के लिए धोखा देता है।.
  2. Through the plugin interface (category edit screen) or another entry point that updates taxonomy descriptions, the attacker injects a payload into the category description field — e.g., , an SVG with an onload/onerror handler, or attribute-based payloads such as onmouseover, srcset, or javascript: URIs.
  3. पेलोड डेटाबेस (term_taxonomy.description) में संग्रहीत होता है।.
  4. When an admin or visitor views the category page (or any admin page rendering that description), the script runs in their browser within the site’s origin.
  5. संभावित हमलावर क्रियाएँ शामिल हैं:
    • कुकीज़/localStorage एकत्र करना और उन्हें एक दूरस्थ सर्वर पर भेजना।.
    • यदि nonce या क्षमता जांच कमजोर हैं, तो पीड़ित के प्रमाणित ब्राउज़र सत्र का उपयोग करके वर्डप्रेस REST/AJAX एंडपॉइंट्स को कॉल करना (संभवतः उपयोगकर्ता बनाना, प्लगइन्स स्थापित करना, विकल्पों को संशोधित करना)।.
    • आगे दुर्भावनापूर्ण सामग्री (विज्ञापन, रीडायरेक्ट, क्रेडेंशियल संग्रहण फ़ॉर्म) इंजेक्ट करना या प्रशासनिक पृष्ठों को संशोधित करना।.

महत्वपूर्ण बारीकी: कई वर्डप्रेस इंस्टॉलेशन auth कुकीज़ को HttpOnly के रूप में सेट करते हैं, जिससे JS द्वारा सीधे कुकी तक पहुंच रोक दी जाती है। हालाँकि, यदि समान-स्रोत और नॉनस सुरक्षा अनुपस्थित हैं या यदि नॉनस चुराए गए हैं, तो जावास्क्रिप्ट अभी भी प्रमाणित XHR/fetch अनुरोध कर सकती है। हमलावर XSS को अन्य कमजोरियों के साथ जोड़कर प्रभाव को बढ़ा सकते हैं।.

उपयोगकर्ता इंटरैक्शन: हालांकि कुछ रिपोर्ट इसे उपयोगकर्ता इंटरैक्शन की आवश्यकता के रूप में वर्गीकृत करती हैं (जैसे, एक व्यवस्थापक द्वारा एक तैयार पृष्ठ पर जाना), संग्रहीत XSS स्थायी है और जब पृष्ठ लोड होते हैं तो स्वचालित रूप से निष्पादित हो सकता है।.


तात्कालिक, प्राथमिकता वाले कार्य (अगले घंटे के भीतर)

  1. अब प्लगइन को निष्क्रिय करें

    Go to wp-admin → Plugins and deactivate “Allow HTML in Category Descriptions” immediately. If you cannot access the admin panel, disable via FTP or hosting file manager by renaming the plugin folder: wp-content/plugins/allow-html-in-category-descriptions → जोड़ें -अक्षम.

  2. साइट को रखरखाव मोड में डालें (यदि उपयुक्त हो)

    यदि आप सक्रिय शोषण का संदेह करते हैं (दृश्यमान रीडायरेक्ट, विकृति, स्पैम), तो जांच करते समय अस्थायी रूप से सार्वजनिक पहुंच को ब्लॉक करें।.

  3. प्रशासनिक क्रेडेंशियल्स का ऑडिट और रोटेट करें

    सभी व्यवस्थापक खातों के लिए पासवर्ड रीसेट करने के लिए मजबूर करें। सत्रों और टोकनों को रद्द करें (Users → All Users → प्रत्येक व्यवस्थापक के लिए, “Log out everywhere” या सत्र-समाप्ति उपकरणों का उपयोग करें)। मजबूत पासवर्ड लागू करें और व्यवस्थापक खातों के लिए दो-कारक प्रमाणीकरण (2FA) सक्षम करें।.

  4. XSS पेलोड्स को सहेजने का प्रयास करने वाले नए अनुरोधों को ब्लॉक करें

    यदि आप होस्ट, CDN, या वेब एप्लिकेशन फ़ायरवॉल (WAF) के माध्यम से अनुरोध फ़िल्टरिंग लागू कर सकते हैं, तो उन POST अनुरोधों को ब्लॉक करें जो स्क्रिप्ट-जैसे पैटर्न वाले श्रेणी विवरणों को सहेजने का प्रयास करते हैं। इस लेख में बाद में सुझाए गए WAF नियम देखें।.

  5. अपनी साइट का बैकअप लें (फाइलें + DB)

    साइट को संशोधित या साफ़ करने से पहले एक पूर्ण बैकअप बनाएं। डेटाबेस का निर्यात करें और फोरेंसिक प्रतियों के लिए wp-content और uploads डाउनलोड करें।.

  6. तुरंत समझौते के संकेतों के लिए स्कैन करें

    अप्रत्याशित उपयोगकर्ताओं, अज्ञात फ़ाइलों, अनुसूचित कार्यों (wp_cron नौकरियां), बदले गए विकल्प मानों, और पोस्ट, पृष्ठों, और वर्गीकरण विवरणों में इंजेक्ट की गई सामग्री की तलाश करें।.


जांच: दुर्भावनापूर्ण श्रेणी विवरण खोजें और नुकसान का दायरा निर्धारित करें

श्रेणी विवरण डेटाबेस में संग्रहीत होते हैं; स्क्रिप्ट-जैसे सामग्री के लिए जल्दी से खोजें।.

WP-CLI का उपयोग करना (यदि आपके पास शेल एक्सेस है तो अनुशंसित):

wp db query "SELECT term_taxonomy_id, term_id, description FROM wp_term_taxonomy WHERE description LIKE '%
wp db query "SELECT term_taxonomy_id, term_id, description FROM wp_term_taxonomy WHERE description REGEXP '(script|onerror|onload|javascript:|data:|iframe|svg|img)';"

If you don’t have WP-CLI, run equivalent SQL in phpMyAdmin or your hosting database tool.

Also check:

  • Posts and pages: search post_content for similar patterns:
    SELECT ID, post_title FROM wp_posts WHERE post_content REGEXP '(
  • Widgets and theme options: check wp_options for injected HTML.
  • Plugin/theme files for unfamiliar or obfuscated code.

If you find suspicious descriptions, export them for forensics before making mass modifications.


Cleaning infected descriptions safely

Option A — Manual removal (small number of entries)

Use wp-admin → Posts/Terms editor and manually edit descriptions to remove payloads: Posts → Categories → edit each suspect category description.

Option B — Database cleanup (large or automated cleanup)

Test on a backup first. Example SQL to remove blocks from term descriptions UPDATE wp_term_taxonomy SET description = REGEXP_REPLACE(description, ']*>.*?', '', 'si') WHERE description REGEXP ']*>';

Stripping event handler attributes like onload/onerror is more complex; prefer a PHP-based sanitizer to avoid breaking legitimate markup.

Option C — Sanitize through a PHP script using WordPress functions (safer)

Create a one-off PHP script and run via WP-CLI eval-file or an admin-only execution path:

 'category',
  'hide_empty' => false,
) );

$allowed_tags = array(
  'a' => array('href' => true, 'title' => true, 'rel' => true, 'target' => true),
  'b' => array(),
  'strong' => array(),
  'i' => array(),
  'em' => array(),
  'p' => array(),
  'br' => array(),
  'ul' => array(),
  'ol' => array(),
  'li' => array(),
  'span' => array('class' => true),
  // add only tags/attributes you trust
);

foreach ( $terms as $term ) {
    $clean = wp_kses( $term->description, $allowed_tags );
    if ( $clean !== $term->description ) {
        wp_update_term( $term->term_id, 'category', array('description' => $clean) );
        echo "Cleaned term {$term->term_id}
";
    }
}
?>

Run with:

wp eval-file sanitize-term-descriptions.php

Notes: Using wp_kses with a minimal allowlist is safer than regex-only approaches. Test on a staging site or backup first.


Suggested defensive WAF rules and short-term virtual patching

If you have the ability to configure a WAF, CDN rules, or host request filtering, add rules to block attempts to store suspicious payloads or to block rendering of known-suspicious content. These measures are temporary mitigations while you remove the vulnerable plugin or fully remediate the site.

Simple detection heuristics

  • Block POST requests to /wp-admin/term.php or REST endpoints used to save term descriptions that contain , onerror=, onload=, javascript:, data:text/html, svg/onload, iframe, or suspicious src attributes with data:/javascript:.
  • Block requests that include with event handlers, or style="background:url(javascript: style injections.

Example ModSecurity-style rule (pseudocode — tune for your environment):

# Block attempts to save category descriptions containing