← Back to Feed CACHED · 2026-06-22 11:02:29 · CACHE_KEY CVE-2026-44914
CVE-2026-44914 · CWE-862 · Disclosed 2026-06-22

Apache NiFi: Missing Authorization of Restricted Permissions when Replacing Flow Contents

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A junior dataflow editor walks into the secrets vault because the lock only checked the front door

Apache NiFi enforces an extra authorization tier called *Restricted* on components that can execute code, touch the filesystem, or otherwise reach outside the dataflow sandbox — think ExecuteProcess, ExecuteScript, GetFile. In versions 1.12.0 through 2.9.0, the framework forgot to re-check Restricted status when a user replaced an entire Process Group. A principal with ordinary write access on a Process Group could swap in a flow definition containing Restricted processors and the framework would happily accept it, even though the same user could not have added those processors individually. Once instantiated, Restricted processors run with the NiFi service account's privileges — which on most deployments means access to every database, S3 bucket, Kafka topic, and SFTP credential NiFi holds.

Vendor severity of HIGH (7.5) is defensible but slightly generous given the PR:H requirement — the attacker must already hold authenticated write access. We're holding the verdict at HIGH because the blast radius offsets the friction: NiFi is canonically a credential-rich data orchestrator, and the escalation path goes from *trusted contributor* to *full code execution as the NiFi service principal*. That's a classic insider-privesc footgun, not a perimeter RCE.

"Authenticated write-user escalates to Restricted components — and NiFi sits on every credential in your data pipeline."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Obtain authenticated NiFi write access

Attacker authenticates to NiFi UI/API with a principal that holds write on at least one Process Group but lacks access restricted components policy. This is the *power user / dataflow developer* persona — common in shared NiFi clusters used by multiple data teams. Credentials are typically obtained via phishing, stolen SSO tokens, or insider abuse.
Conditions required:
  • Valid NiFi credentials
  • Write permission on a target Process Group
  • Network reach to NiFi REST API (8443)
Where this breaks in practice:
  • NiFi REST API rarely internet-exposed (Shodan shows ~2k hosts globally)
  • SSO + MFA on the IdP fronting NiFi blocks credential replay
  • Read-only or scoped policies eliminate this pre-req entirely
Detection/coverage: NiFi audit log records authentication; SIEM rule on anomalous user agent or off-hours flow edit
STEP 02

Craft a malicious flow definition containing Restricted components

Attacker builds a flow template (JSON / flow definition export) containing a Restricted processor such as ExecuteStreamCommand, ExecuteScript, or ExecuteProcess with a payload — typically a reverse shell, credential exfil to webhook, or cat /etc/nifi/conf/login-identity-providers.xml. NiFi's flow-definition format is well documented and templates can be authored offline.
Conditions required:
  • Knowledge of NiFi flow JSON schema
  • Choice of Restricted processor that executes attacker code
Where this breaks in practice:
  • None — flow authoring is public knowledge
Detection/coverage: Flow registry diff if NiFi Registry is in use will show the added Restricted component
STEP 03

Invoke Process Group replace API

Attacker calls POST /nifi-api/process-groups/{id}/flow-contents (the replace-contents endpoint) with the malicious flow. Pre-patch framework checks only the caller's write permission on the Process Group, not the Restricted policy on the embedded processors. The replacement succeeds and the Restricted processors are instantiated.
Conditions required:
  • Step 1 + 2 satisfied
  • Target Process Group exists and is writable
Where this breaks in practice:
  • Custom authorizers (e.g., Ranger-NiFi plugin) that enforce per-component-class policies will still block this
  • Multi-tenant clusters with strict Process Group ACLs limit reach
Detection/coverage: nifi-user.log records the API call; the Restricted component appears in the flow without a corresponding policy grant — easy correlation rule
STEP 04

Trigger execution, achieve code exec as NiFi service account

Attacker starts the new processor (or relies on auto-start) and the Restricted processor runs as the NiFi JVM service principal — typically nifi on Linux or a domain service account on Windows. From here: harvest the encrypted-properties decryption key from nifi.properties, read every flow secret, pivot to any database/cloud creds NiFi holds.
Conditions required:
  • Restricted processor successfully instantiated
  • Ability to start the processor or wait for scheduled tick
Where this breaks in practice:
  • NiFi running as unprivileged user with locked-down filesystem perms limits lateral reach
  • Network egress filtering blocks reverse shell callbacks
  • Sensitive properties protected with HSM/external KMS resist offline decryption
Detection/coverage: EDR on the NiFi host should flag java spawning bash/cmd; outbound connections from NiFi to unusual destinations
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed as of 2026-06-22. No public IOCs, no campaign reporting.
Public PoCNone published at disclosure. Construction is trivial for anyone familiar with NiFi flow JSON — expect a Metasploit module or standalone PoC within weeks.
EPSSNot yet scored (fresh CVE published 2026-06-22); historical NiFi authz CVEs trend <1% / <50th percentile.
KEV statusNot listed.
CVSS:4.0 vectorAV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:H/VA:HPR:H is the decisive friction: attacker must already hold authenticated write access.
Affected versionsApache NiFi 1.12.0 through 2.9.0 inclusive.
Fixed versionApache NiFi 2.10.0 (framework no longer enforces Restricted authorization in this code path; equivalent guardrails moved into the authorizer layer). Confirm against the project's official advisory before relying on this.
Exposure / scanning dataShodan reports ~2,100 NiFi instances with web UI reachable from the internet (most behind auth). The vast majority of NiFi deployments are *internal* data-platform components.
Disclosure date2026-06-22
ReporterRoberto Suggi Liverani, NATO Cyber Security Centre (NCSC)
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.0/10)

Verdict held at HIGH because the affected component is a canonical credential-rich data orchestrator — successful exploitation yields code execution as the NiFi service principal, which typically holds keys to every downstream database, object store, and message bus. The PR:H requirement narrows the attacker population to authenticated insiders or credential-phish victims, which prevents an upgrade to CRITICAL but does not justify a downgrade given the blast radius.

HIGH Vulnerability mechanics and affected version range
HIGH PR:H friction assessment
MEDIUM Real-world exploitation likelihood (no PoC yet, but trivial to weaponize)

Why this verdict

  • Authentication required (PR:H) — this is a privilege-escalation primitive, not a perimeter break. Attackers need a valid NiFi account with at least Process Group write, which limits the attacker pool to insiders, contractors, and credential-theft victims. That eats roughly −1.5 off the vendor score versus an unauthenticated RCE.
  • Role multiplier — NiFi as canonical data-pipeline orchestrator: in the typical deployment NiFi holds DB credentials, S3 access keys, Kafka SASL secrets, and SFTP creds. The Restricted-processor escalation grants RCE as the service principal, and from there *mass data egress* is one ExecuteStreamCommand away. Blast radius is tenant- to data-domain-scale, holding the floor at HIGH.
  • Role multiplier — multi-team shared NiFi clusters (common at large enterprises) are the worst case: a low-trust dataflow author pivots to flows owned by adjacent teams. Outcome: cross-team credential theft inside one cluster.
  • No KEV, no public PoC — keeps the verdict from being upgraded; weaponization is trivial but not yet observed.
  • Custom authorizer deployments (Apache Ranger plugin, file-based authorizer with explicit Restricted policies) may already block the exploit chain. That nudges the effective score down for hardened shops but does not change the bucket — most shipped configs use the default authorizer.

Why not higher?

CRITICAL requires either unauthenticated reachability or fleet-scale blast radius on a universally deployed component. PR:H eliminates the unauthenticated path, NiFi is not ubiquitous like Exchange or vCenter, and there is no active exploitation or KEV listing. The chain ends at the NiFi service principal — meaningful, but not domain-wide.

Why not lower?

MEDIUM would require either narrow affected range, low-value blast radius, or strong inherent friction beyond authentication. None apply: the affected range covers ~14 years of releases (1.12.0–2.9.0), the blast radius reaches every secret NiFi holds, and authenticated *write* access is a common power-user level in multi-team data platforms — not an admin-only choke point.

05 · Compensating Control

What to do — in priority order.

  1. Audit and tighten Process Group write policies — Inventory every principal with write access on every Process Group via the NiFi /policies API. Remove standing write from anyone who doesn't actively author flows; move occasional editors to just-in-time access. Deploy within 30 days per the noisgate mitigation SLA.
  2. Enable an authorizer that enforces Restricted policies independently — Configure file-based or Ranger authorizer with explicit access restricted components policies separate from generic write. The framework patch removes the in-framework check; the authorizer is now the only line of defense — make sure it's actually enforcing. Deploy within 30 days.
  3. Front NiFi with SSO + MFA, block direct password auth — Most attack paths to step 1 are credential reuse or phishing. Force PingFederate / Okta / Azure AD in front of NiFi with conditional-access MFA. Disable single-user provider in production. Deploy within 30 days.
  4. Run NiFi as an unprivileged service account with egress filtering — Reduces step-4 blast radius even if the chain lands. NiFi JVM should not have outbound internet by default; allowlist only required downstream endpoints. Apply immediately as a defense-in-depth standard.
  5. Enable NiFi audit logging into SIEM and alert on flow-replace API calls — Add a detection on POST /nifi-api/process-groups/*/flow-contents correlated with new Restricted component instantiation by a principal that doesn't hold the access restricted components policy. Deploy within 30 days.
What doesn't work
  • WAF / IPS signatures on the REST endpoint — the request looks like a legitimate flow update from an authenticated session; payload is JSON flow definition that varies infinitely.
  • Network segmentation alone — the attacker is already inside the trust boundary as an authenticated user; firewall rules don't stop authorized API calls.
  • Disabling specific Restricted processors at the bundle level — attackers can ship their own NAR or pick from dozens of Restricted classes; whack-a-mole.
  • Read-only mirror / DR cluster patching first — those don't accept flow writes; the production active cluster is the exposed surface.
06 · Verification

Crowdsourced verification payload.

Run on each NiFi node as the nifi service user (or any user with read access to the install directory). Invoke as ./check_nifi_44914.sh /opt/nifi/nifi-current. No elevated privileges required — just reads NOTICE / version metadata.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate check for CVE-2026-44914 (Apache NiFi Restricted authz bypass)
# Usage: ./check_nifi_44914.sh <NIFI_HOME>
# Exit 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u
NIFI_HOME="${1:-/opt/nifi/nifi-current}"

if [ ! -d "$NIFI_HOME" ]; then
  echo "UNKNOWN: NIFI_HOME '$NIFI_HOME' not found" >&2
  exit 2
fi

# Try to extract version from bootstrap or lib jars
VERSION=""
if [ -f "$NIFI_HOME/conf/bootstrap.conf" ]; then
  VERSION=$(grep -hoE 'nifi[-_]framework[-_]nar[-_][0-9]+\.[0-9]+\.[0-9]+' "$NIFI_HOME/lib/" 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
fi

if [ -z "$VERSION" ]; then
  JAR=$(ls "$NIFI_HOME"/lib/nifi-framework-nar-*.nar 2>/dev/null | head -1)
  if [ -n "$JAR" ]; then
    VERSION=$(echo "$JAR" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
  fi
fi

if [ -z "$VERSION" ]; then
  echo "UNKNOWN: could not determine NiFi version in $NIFI_HOME" >&2
  exit 2
fi

echo "Detected NiFi version: $VERSION"

# Semver compare: vulnerable if 1.12.0 <= version <= 2.9.0
IFS='.' read -r MAJ MIN PAT <<< "$VERSION"
ver_num=$((MAJ*1000000 + MIN*1000 + PAT))
low=$((1*1000000 + 12*1000 + 0))    # 1.12.0
high=$((2*1000000 + 9*1000 + 0))    # 2.9.0
fix=$((2*1000000 + 10*1000 + 0))    # 2.10.0 (fixed)

if [ "$ver_num" -ge "$low" ] && [ "$ver_num" -le "$high" ]; then
  echo "VULNERABLE: NiFi $VERSION is in affected range 1.12.0-2.9.0 for CVE-2026-44914"
  exit 1
elif [ "$ver_num" -ge "$fix" ]; then
  echo "PATCHED: NiFi $VERSION is at or above fix 2.10.0"
  exit 0
else
  echo "PATCHED: NiFi $VERSION predates affected range"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: pull a list of every NiFi instance and its version from your CMDB or nifi.properties, flag everything in 1.12.0–2.9.0. For those instances, per the noisgate mitigation SLA for HIGH, within 30 days audit Process Group write policies and confirm your authorizer enforces access restricted components as a distinct policy — those two controls neuter the exploit chain without a code change. Per the noisgate remediation SLA, schedule the upgrade to Apache NiFi 2.10.0 (or later) within 180 days; bundle it with your next quarterly platform maintenance window since there's no KEV and no public PoC pressuring a fire-drill. If your NiFi is internet-exposed *or* shared across teams without per-team Process Group isolation, treat both deadlines as half — 15 days mitigation, 90 days patch.

Sources

  1. Vulnerability-Lookup (CIRCL) — CVE-2026-44914
  2. Cyberpress — Critical Apache NiFi Vulnerabilities Enable Authorization Bypass
  3. GBHackers — Apache NiFi Vulnerabilities Expose Systems to Authorization Bypass
  4. Cybersecurity News — Apache NiFi Authorization Bypass
  5. Apache NiFi Security Reporting & Advisories
  6. stack.watch — Apache NiFi Security Vulnerabilities 2026
  7. CVE Details — Apache NiFi vulnerability list
  8. Related CVE-2026-25903 mailing list announcement (sibling NiFi authz bug)
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.