Skip to main content

Nuclei CVE-2026-76802

| EUVDEUVD-2026-84556 MEDIUM
OS Command Injection (CWE-78)
2026-09-22 GitHub_M GHSA-jpf4-98qj-qr67
4.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft template with fuzzing + unsigned code block
  2. Delivery
    Deliver template to victim's DAST workflow
  3. Exploit
    Operator runs Nuclei with -dast
  4. Execution
    DAST branch skips code-signing check
  5. Persist
    Unsigned code queued into execution
  6. Impact
    Arbitrary shell commands run on scanner host

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK

2 techniques across 1 tactic: Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the operator (a) launch Nuclei with the -dast flag enabled (CLI DAST scan or an SDK integration that enables DAST), and (b) load an attacker-supplied, unsigned multiprotocol template that contains BOTH an http fuzzing: block AND a code: block - this specific pairing is what routed template loading through the vulnerable DAST branch that omitted the unsigned code-template signature check. No -code flag and no valid cryptographic signature are needed, which is the core of the bypass. Limiting factors: the attack is local/config-driven (AV:L) and needs operator action (UI:R) to run a scan against a malicious template, so it does not affect operators who scan only with trusted/signed first-party templates or who do not use DAST mode; unaffected in 3.10.0 and later.

Impact

This is a genuine remote-code-execution flaw (arbitrary shell commands, CWE-78) whose real-world risk is meaningfully constrained by its exploitation model, which is why the vendor CVSS of 4.7 is Medium rather than Critical. The vector CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N encodes the key limiters: AV:L and UI:R because the attack requires a Nuclei operator to actively run a DAST scan and feed it an attacker-supplied template; AC:H because two conditions must coincide (the -dast flag enabled AND a template pairing a fuzzing: block with an unsigned code: block). No EPSS score, no CISA KEV entry, and no public POC are present in the input, so exploitation status is: no public exploit identified at time of analysis - though the PR#7472 test case (dast-unsigned.yaml) is effectively a working reproducer of the bypass. One notable tension: the vendor scored impact as C:N/I:H/A:N, but the described capability is arbitrary shell command execution on the scanner host, which realistically implies full confidentiality and availability impact too - the score appears conservative and the true technical impact is closer to complete host compromise. This is a real priority for anyone running Nuclei DAST against untrusted or third-party templates, but a low priority for operators who only run signed/first-party templates without -dast.

Exploit ScenarioDerived

A CI pipeline or security team runs a Nuclei DAST scan (-dast) using a multiprotocol template pulled from an untrusted or community source. The template embeds a normal fuzzing: block alongside an unsigned code: block, and because the DAST loading branch skipped the code-signing check, the code block executes arbitrary shell commands on the scanning host despite no -code flag and no valid signature. No public exploit is identified, but the fix PR ships a template (dast-unsigned.yaml) that demonstrates the exact bypass.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 22, 2026

Arbitrary shell command execution is possible in ProjectDiscovery Nuclei versions 3.0.0 through 3.9.x when DAST mode (-dast) loads an attacker-supplied, unsigned multiprotocol template that combines an HTTP fuzzing: block with a code: block, allowing the embedded unsigned code request to bypass the code-template signature check and run shell commands on the scanning host. The flaw is a signature-verification bypass (CWE-78 command injection) and is constrained in practice: it requires the operator to enable DAST and to point the scanner at a malicious template, and it does not affect users who scan only with trusted, signed first-party templates or who do not use DAST. No public exploit code has been identified at time of analysis and the issue is not listed as confirmed actively exploited (CISA KEV); it is fixed in Nuclei 3.10.0. Note that the independent assessment rates the vector at CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H, treating confidentiality, integrity, and availability as fully impacted once the payload executes, which is a higher impact picture than the vendor-published 4.7 Medium score.

RemediationAI

Upgrade to Nuclei 3.10.0 or later, which is the vendor-released patched version (release notes: https://github.com/projectdiscovery/nuclei/releases/tag/v3.10.0; advisory: https://github.com/projectdiscovery/nuclei/security/advisories/GHSA-jpf4-98qj-qr67; fix PR: https://github.com/projectdiscovery/nuclei/pull/7472, commit 1c440e755a97471c56fb0276ee8a8c4132974645). If upgrade cannot be performed immediately, the most effective compensating control is to eliminate the trigger condition: do not run DAST scans (-dast) against untrusted, third-party, or community-contributed template sets, and do not enable DAST in SDK integrations that consume externally supplied templates - the trade-off is loss of DAST fuzzing coverage for those scans. Restrict template loading to a vetted, signed first-party template directory and treat any template that contains both a fuzzing: block and a code: block as untrusted until reviewed, since that pairing is the specific structure weaponized by this bypass; this requires template review effort and can break legitimate custom multiprotocol templates. Where DAST must be used, run scans in a disposable, least-privileged container or workspace with no access to host secrets, cloud credentials, or the internal network, so that successful command execution is contained at the cost of added environment overhead and reduced scan reach. Auditing for prior compromise should focus on template sources used with -dast and on child processes spawned by the Nuclei binary, since detection of the injected code: block is otherwise indistinguishable from legitimate template execution.

Affected VersionsENISA

nuclei 3.0.0, < 3.10.0

Affected Packages

go github.com/projectdiscovery/nuclei no fix
go github.com/projectdiscovery/nuclei/v2 no fix
go github.com/projectdiscovery/nuclei/v3 fix: 3.10.0
euvd nuclei_3_0_0 fix: 3.10.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 4 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Nuclei is a vulnerability scanner driven by a YAML-based DSL in which templates declare requests across protocols including http, network, and code. The code: protocol is the dangerous one: it hands a source string to an interpreter engine (the proof-of-concept template in the upstream fix uses py/python3) and executes it as a local process, which is why upstream gates it behind a cryptographic signature flag (the parsed template's Verified field) and normally requires an explicit -code opt-in. The vulnerable path sits in pkg/catalog/loader/loader.go inside LoadTemplatesWithTags: when DAST mode is active, template loading took a branch that accepted multiprotocol templates containing a fuzzing: block without reapplying the 'HasCodeRequest() && !Verified && !HasWorkflows()' skip logic, so a template that paired a fuzzable HTTP request with an unsigned code: block was queued for execution. The root cause class is CWE-78 (improper neutralization of special elements used in an OS command), realized here not by direct input concatenation but by bypassing the authorization check that is supposed to prevent untrusted template code from ever reaching the command-execution engine. The upstream fix (PR #7472, commit 1c440e755a97471c56fb0276ee8a8c4132974645) hoists the unsigned-code check so it runs before any loading path, including DAST, and adds a regression integration case (protocols/code/dast-unsigned.yaml plus dastUnsignedCode) asserting that the unsigned template must error out rather than execute. Affected installs are captured by the CPE cpe:2.3:a:projectdiscovery:nuclei:*:*:*:*:*:*:*:* covering the 3.0.0-to-pre-3.10.0 range.

Know when Nuclei gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 4.7 MEDIUM
AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N
vuln.today AI 7.0 HIGH

Attacker-supplied template must be loaded by an operator running -dast (AV:L, UI:R, AC:H); arbitrary shell execution yields full C/I/A on the scanner host, so I raise impact above the vendor's I:H-only.

3.1 AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
High
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

1
Patch available
Sep 22, 2026 - 18:02 EUVD

DescriptionCVE.org

Nuclei is a vulnerability scanner built on a simple YAML-based DSL. From 3.0.0 until 3.10.0, the DAST template loading branch does not apply the unsigned code-template signature check before accepting a template that contains both a fuzzing: block and an unsigned code: block. When an operator enables -dast, an untrusted multiprotocol template can place an unsigned code request into the execution queue and run arbitrary shell commands even without -code or a valid cryptographic signature. The issue affects CLI DAST scans and SDK integrations that enable DAST while accepting attacker-supplied templates. This issue is fixed in version 3.10.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
Widely-used open-source security scanner, but DAST mode with untrusted templates is a narrower slice
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

24
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy