← Back to Feed CACHED · 2026-11-03 22:12:16 · CACHE_KEY CVE-2026-99153
CVE-2026-99153 · CWE-476 · Disclosed 2026-10-28

Linux kernel libiscsi insufficient validation of reflected ITT in Reject PDU

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

A rogue storage target can point at a random task on the initiator and make the kernel clean it up like a concierge discarding the wrong guest's luggage

The Linux kernel's libiscsi handler for iSCSI Reject PDUs copies the rejected header verbatim and trusts the ITT (Initiator Task Tag) inside it. iscsi_itt_to_task() only bounds the index against cmds_max; it does not verify that the slot holds an active task or that task->conn is non-NULL. A malicious iSCSI target can therefore name any pool slot: an unused slot dereferences a NULL task->conn, a freed slot underflows a refcount, and an in-flight SCSI command is marked successful even though its buffer was never written. Affected versions include Linux kernel through 6.18.58 and 7.2.12; fixes are in 6.18.59 and 7.2.13 (and distro backports).

Vendor severity says CRITICAL 9.8, but that vector models a remote unauthenticated attacker with full CIA impact. The actual boundary is a client-side initiator parsing a malicious response from the storage server; impact tops out at host crash and silent read corruption on that initiator, not code execution or data theft. The severity should be reassessed HIGH for high-value iSCSI consumers rather than blanket CRITICAL for every Linux host.

"A malicious iSCSI target can make the kernel complete the wrong task—crash the host or silently 'succeed' reads with uninitialized buffers."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Attacker gains control of, or position to MITM, an iSCSI target

The target is the remote endpoint in an iSCSI session. An attacker can run a rogue target if the victim is pointed at attacker-controlled storage, or can inject rejects if traffic is visible. In enterprise deployments, storage arrays are usually dedicated, segmented, and CHAP-protected, so this is the main friction.
Conditions required:
  • Attacker can respond to iSCSI initiator as the target
  • Victim has a libiscsi iSCSI session to that endpoint
Where this breaks in practice:
  • Enterprise iSCSI normally runs on dedicated storage networks and trusts only known arrays
  • CHAP (especially mutual CHAP) may prevent unknown targets from completing login
  • Physical/network access to storage path is restricted
Detection/coverage: Not a single-scanner protocol; network IDS would need iSCSI dissectors to flag malformed Reject PDU.
STEP 02

Victim creates an iSCSI session and sends SCSI commands

The initiator logs in and builds a task pool. Slots are zeroed; conn is set only for allocated tasks. The bug matters after the session is up and tasks are allocated or in flight.
Conditions required:
  • Linux host runs vulnerable libiscsi
  • At least one iSCSI command is in flight or pool has returned slots
Where this breaks in practice:
  • iSCSI initiators are common on Linux but not typically exposed to untrusted storage
Detection/coverage: Vulnerability scanners identify affected kernel versions via package inventory; network scan won't see libiscsi state.
STEP 03

Attacker sends an iSCSI Reject PDU with a reflected ITT it controls

A Reject PDU includes a copy of the original header in the data segment. iscsi_handle_reject() copies that and extracts the ITT without checking whether it points to a valid in-flight task.
Conditions required:
  • Attacker can craft a Reject PDU and deliver it during the session
  • Target is allowed to send protocol-level PDU rejects
Where this breaks in practice:
  • Trigger requires deliberate malicious target behavior; normal storage arrays don't send crafted rejects
Detection/coverage: Protocol anomaly detection can spot unexpected Reject PDUs with ITT pointing outside in-flight range, but deployment is rare.
STEP 04

iscsi_itt_to_task() resolves an arbitrary pool slot

The reflected ITT indexes the command pool. If the slot was never used, task->conn is NULL. If the task was returned to the free pool, its state is free. The code proceeds to complete the task anyway.
Conditions required:
  • Victim kernel lacks the validating patch
  • Crafted ITT selects an unused, free, or in-flight task
Where this breaks in practice:
  • No additional attacker capability required once target can send the PDU
Detection/coverage: Kernel crash/WARN output may indicate iscsi_nop_out_rsp but usually after impact.
STEP 05

Kernel null deref / refcount underflow or silent success of an in-flight read

For unused slot, iscsi_nop_out_rsp() dereferences task->conn leading to general protection fault. For freed task, WARN_ON and refcount underflow occur. For an in-flight SCSI read, the task is completed as successful without writing the buffer, so the read returns 1048576 with uninitialized data.
Conditions required:
  • Crafted ITT matches one of the problematic states
Where this breaks in practice:
  • The most severe silent corruption requires an in-flight command to be targeted; crash states are easier to hit but still require malicious target
Detection/coverage: Filesystem corruption, application read anomalies, or host crash may be observed; integrity monitoring on storage clients can uncover silent data errors.
STEP 06

Repeated Reject PDUs pull down or corrupt connected initiators

An attacker that controls a storage target can iterate over ITT values and repeat Reject PDUs to crash all vulnerable initiators connected to that target or corrupt reads. This turns a single malicious storage path into fleet-wide availability/integrity impact.
Conditions required:
  • Multiple hosts mount the same malicious iSCSI target
  • Target persists and continues sending rejects
Where this breaks in practice:
  • Requires storage fabric compromise or rogue target that many systems use
  • Most iSCSI deployments have limited fan-out to a single untrusted target
Detection/coverage: Storage-side egress anomaly/PDU logging; client kernel logs from crashes.
03 · Compensating Control

1
HIGH 7.2→IGNORE 0.0
SEVERITY REDUCED
Apply the kernel update from your distro within 30 days — Deploy the fixed libiscsi kernel or distro backport. For HIGH, noisgate mitigation SLA is ≤30 days and remediation is ≤180 days; patching earlier removes the parser flaw entirely.
2
HIGH 7.2→MEDIUM 5.5
SEVERITY REDUCED
Restrict iSCSI initiators to known storage targets with mutual CHAP — Where patching is delayed, ensure initiators only log in to explicitly configured portals and require mutual CHAP so an unknown target cannot complete session setup. Breaks the attacker-controlled target condition. Residual risk remains if the legitimate target is compromised and has valid credentials.
3
HIGH 7.2→MEDIUM 6.0
SEVERITY REDUCED
Segment iSCSI storage traffic from general IT and internet exposure — Place initiators and targets on a dedicated storage VLAN with firewall rules that drop malformed or unexpected iSCSI PDU traffic not from authorized arrays. Raises the bar for MITM and rogue targets but does not fix the parser.
4
HIGH 7.2→HIGH 7.2
Monitor initiator hosts for iscsi_nop_out_rsp WARNs and silent read anomalies — Enable kernel log collection for WARN_ON_ONCE and filesystem/application checksum failures on iSCSI-backed volumes to detect exploitation attempts. This is detection, not prevention.
What doesn't work
  • Generic network firewalls/WAFs do not parse iSCSI Reject PDUs deeply and won't catch a crafted ITT from an authorized storage endpoint.
  • Initiator-only CHAP does not authenticate the target; it only proves the initiator to the target, so it does not stop a rogue target unless mutual CHAP is explicitly configured.
  • EDR/antivirus signature scanning on the host is unlikely to intercept a kernel malformed storage protocol parser flaw before crash/corruption.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo active exploitation observed; not in CISA KEV as of provided data.
Proof-of-concept availabilityKernel patch/commit contains enough detail to reproduce; no standalone public exploit PoC observed in VulDB/Tenable/CIRCL results.
EPSS score0.00552 (very low 30-day predicted exploit probability); percentile not retrieved from source.
KEV statusNot listed in CISA KEV.
CVSS v3.1 vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — vendor vector; overstates attacker position and impact.
Affected versionsLinux kernel libiscsi before fix; VulDB lists vulnerable through 6.18.58 and 7.2.12.
Fixed versions6.18.59 and 7.2.13 upstream; distro backports expected.
Exposure dataNo public Shodan/Censys/GreyNoise exposure data in the supplied search results; iSCSI is normally internal.
Disclosure date2026-10-28 (CVE assigned 2026-09-25).
Reporting researcher/orgResolved in Linux kernel (patch 7215a69b6456fda79c0935c2959045dff3fcaac8 or backports); no external reporter named in VulDB.

Sources.

  1. Ubuntu security CVE-2026-99153
  2. VulDB CVE-2026-99153
  3. VulDB vulnerability entry 427839
  4. Tenable CVE listing
  5. CIRCL vulnerability-lookup CVE-2026-99153
  6. Linux kernel fix commit
05 · The Call

Final Verdict
↓ DOWNGRADED to HIGH (7.2/10)

Why this verdict

  • Role multiplier: Linux hypervisors, database servers, and backup appliances using iSCSI block storage can be killed or forced to accept corrupted reads by a malicious target; that high-value data-plane share keeps the floor at HIGH.
  • Attacker position: The attacker must be the iSCSI target or positioned to MITM the storage session. That is not an internet-facing unauthenticated remote path—it implies a compromised storage array, insider, or network-level interception.
  • Vendor severity mismatch: The supplied 9.8 CRITICAL vector assigns full confidentiality/integrity/availability impact, but the bug provides no code execution, credential theft, or confidentiality loss; it is an initiator-side availability/data-integrity fault.
  • Friction audit: Default segmentation, trusted storage arrays, CHAP/mutual CHAP, and lack of arbitrary iSCSI target connections all shrink the reachable population.

Why not higher?

It doesn't reach CRITICAL because libiscsi is not a canonical security boundary like an IdP, hypervisor, or edge platform by definition, and the attacker must already control the storage target or intercept storage traffic. No code execution or lateral movement is documented, so a fleet-wide domain/persistence impact isn't supported.

Why not lower?

It can't fall to MEDIUM with the high-value iSCSI consumers in view: a single malicious target can simultaneously crash or silently corrupt reads on multiple hypervisors/database servers connected to it. That chokepoint, once controlled, turns a client-side flaw into a fleet availability/data-integrity event, so the floor remains HIGH.

06 · Verification

Crowdsourced verification payload.

Run on each Linux host that may mount or boot from an iSCSI target. Invoke as root: bash /tmp/check_CVE-2026-99153.sh. Requires root to read lsmod; if libiscsi is not loaded, the result is UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# Check for CVE-2026-99153 (libiscsi ITT validation) on a Linux host.
# Run as root on each iSCSI initiator host.
set -u

if ! lsmod | grep -q '^libiscsi\b'; then
  echo "UNKNOWN: libiscsi module not loaded; iSCSI initiator may not be active"
  exit 2
fi

KREL=$(uname -r)
KVER=${KREL%%-*}

ver_ge() {
  # Returns 0 if $1 >= $2 using version sort
  high=$(printf '%s\n%s\n' "$1" "$2" | sort -V | tail -n1)
  [ "$high" = "$1" ]
}

patched=no
case "$KVER" in
  7.*)
    ver_ge "$KVER" "7.2.13" && patched=yes
    ;;
  6.*)
    ver_ge "$KVER" "6.18.59" && patched=yes
    ;;
  [8-9]*|1[0-9]*)
    patched=yes
    ;;
  *)
    patched=no
    ;;
esac

if [ "$patched" = "yes" ]; then
  echo "PATCHED: kernel $KREL is at or above a fixed upstream stable version"
  exit 0
fi

echo "VULNERABLE: kernel $KREL is below fixed upstream versions (6.18.59 / 7.2.13); verify distro backport for CVE-2026-99153"
exit 1