← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-41011 · CWE-78 · Disclosed 2026-06-04

PackagePersister

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a loaded nail gun left in the back room, not a rifle pointed at the front door

The vulnerable code builds a shell command as tar -tf #{tgz} 2>&1, where tgz is derived from File.join(release_dir, 'packages', "#{name}.tgz") and name comes from package_. If name can carry shell metacharacters, the shell sees attacker-controlled syntax instead of a plain filename, turning a package validation routine into arbitrary OS command execution. Based on the supplied CVSS vector, the reachable condition is local access with high privileges already in hand, which materially narrows the affected population even if the code path is genuinely unsafe.

The vendor's HIGH label reflects the theoretical impact once triggered, not the real-world reachability. In practice this is a post-initial-access, post-privilege flaw in a package-management workflow, so the operational risk is closer to a containment failure on already-sensitive hosts than a fleet-wide emergency. That keeps it important for release infrastructure and management servers, but not worthy of front-of-queue treatment unless your environment exposes this workflow to many delegated admins or untrusted automation.

"Dangerous code, but it sits behind local access and high privileges, so this is post-compromise blast-radius risk, not an edge fire."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Gain access to the package workflow

The attacker first needs a foothold that can reach the code path using PackagePersister.validate_tgz. The supplied vector says AV:L / PR:H, so this is not anonymous remote abuse; it requires an already-compromised host session or a highly privileged authenticated user inside the application or release pipeline.
Conditions required:
  • Local access to the target host or equivalent in-app execution context
  • High privileges in the vulnerable product's workflow
  • Ability to invoke package validation or a function that reaches validate_tgz
Where this breaks in practice:
  • This implies the attacker is already past initial access
  • High-privileged package-management roles are usually limited to a small admin set
  • Many enterprises segregate release tooling onto a narrow set of servers
Detection/coverage: VM scanners will rarely prove exploitability here. This is better caught by SAST, code review, or targeted app testing around shell invocation sinks.
STEP 02

Smuggle shell syntax through the package name

The attacker supplies a crafted package_ value so name becomes something like safe;id or similar shell-breaking input. Because the filename is interpolated into a command string instead of passed as an argument array, /bin/sh interprets metacharacters rather than treating them as literal filename content.
Conditions required:
  • The package name is attacker-influenced
  • Input validation does not strip shell metacharacters
  • The code path reaches a shell-backed execution primitive
Where this breaks in practice:
  • Some applications constrain package names to alphanumerics, which kills the exploit
  • Filesystem normalization or app-side validation may reject malformed names before execution
  • Some Ruby wrappers invoke commands without a shell, which would neutralize this class entirely
Detection/coverage: SAST rules for CWE-78 and semgrep/brakeman-style shell interpolation checks usually flag this pattern well; DAST coverage is poor unless the exact workflow is exposed.
STEP 03

Trigger tar via the shell

When validation runs, the application executes tar -tf #{tgz} 2>&1. The weaponized tool is the host shell, with tar merely acting as the legitimate command prefix; the real bug is unsafe shell construction, not a tar parsing weakness.
Conditions required:
  • The vulnerable code actually invokes a shell
  • The process has permission to execute tar
  • The crafted filename survives path joining intact
Where this breaks in practice:
  • Sandboxing or hardened service accounts can limit follow-on impact
  • Minimal containers or locked-down runtime images may not include GNU tar in expected paths
  • AppArmor/SELinux or seccomp profiles can reduce command execution utility
Detection/coverage: EDR can catch anomalous child-process trees such as app process -> shell -> tar or app process -> shell -> unexpected utilities.
STEP 04

Execute arbitrary OS commands in the app context

Successful injection yields code execution with the privileges of the vulnerable service account. On a release or package-management node, that can expose secrets, alter artifacts, or tamper with downstream deployment content, which is why this is still a real issue even though the entry conditions are narrow.
Conditions required:
  • Injected shell syntax executes successfully
  • The service account has access to sensitive files, build artifacts, or package directories
Where this breaks in practice:
  • Impact is bounded by the service account's privileges unless this host is already over-permissioned
  • Well-segmented build and release nodes reduce lateral movement potential
  • Tampering with artifacts may be caught by signing, provenance, or integrity verification
Detection/coverage: EDR, auditd, process accounting, and CI/CD integrity monitoring are the best bets. Network exposure scanners will not tell you who can actually exploit this.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo evidence provided of active exploitation, and not KEV-listed per the supplied intel and CISA KEV.
Public PoC availabilityNo public PoC was located during assessment-time searching; confidence is low-to-medium because niche vendor advisories and private repos may exist.
EPSSNo reliable EPSS score was located for this CVE during assessment. FIRST's EPSS dataset/API is the right place to confirm once populated: FIRST EPSS API.
KEV statusNot listed in the Known Exploited Vulnerabilities catalog as assessed; no KEV urgency override applies.
CVSS vector meaningCVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H means easy exploitation *once* the attacker already has local access and high privileges. That is the biggest downward pressure on real-world severity.
Affected conditionAny build containing PackagePersister.validate_tgz that interpolates name into tar -tf #{tgz} 2>&1 without strict validation or shell-safe argument passing should be considered affected.
Fixed conditionA safe fix is to remove shell interpolation entirely and call tar with argument arrays or a library API; a secondary hardening layer is strict allowlisting for package names. No authoritative fixed version was supplied.
Exposure realityThis is not internet-fingerprintable in any meaningful Shodan/Censys sense. Exposure depends on how many admins, operators, or automation jobs can drive package validation on the affected host.
Disclosure date2026-06-04 per the supplied advisory intel.
Researcher / sourceResearcher attribution was not supplied, and no authoritative public record was located during assessment.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (4.4/10)

The decisive factor is the attacker position: this requires local access plus high privileges already obtained before the vulnerable code path is even reachable. That makes it a post-compromise control-failure on a narrow set of management hosts, not a broad initial-access event across your estate.

HIGH Downward adjustment driven by AV:L and PR:H prerequisites
MEDIUM Assessment that exploitation population is limited to package-management or release workflows
LOW Public exploit and exploit-in-the-wild visibility due sparse public intel

Why this verdict

  • AV:L is a hard brake: exploitation starts from local access, which implies prior compromise or deliberate insider/admin reach, not internet-scale opportunistic abuse.
  • PR:H compounds the brake: requiring high privileges means the attacker must already hold a powerful application or host position before reaching the sink.
  • Narrow exposure population: package validation paths usually live on management, CI/CD, or release nodes, not across the general workstation/server fleet.
  • Impact is still real on the right host: if this sits on release infrastructure, arbitrary shell execution can tamper with artifacts or expose secrets, which keeps it above LOW.
  • No KEV and no solid public exploitation signal: absent active abuse, there is no justification to preserve the vendor's worst-case urgency.

Why not higher?

A higher bucket would require either broader reachability or strong exploitation evidence. Here the chain already assumes prior local access and high privileges, which means multiple real-world gates have already been cleared before the bug matters.

Why not lower?

This is still arbitrary command execution, not a harmless parser bug. On package-management or release hosts, the service account may hold sensitive material or downstream deployment influence, so ignoring it as pure hygiene would undersell the blast radius on the small number of systems where it does exist.

05 · Compensating Control

What to do — in priority order.

  1. Restrict package-validation rights — Limit who and what automation can invoke the package upload/validation workflow so the PR:H gate stays genuinely narrow. For a MEDIUM finding there is no mitigation SLA — go straight to the 365-day remediation window, but do this early on any release-management nodes because it is a cheap blast-radius reducer.
  2. Allowlist package names — Enforce a strict regex such as alphanumerics, dot, dash, and underscore only for package identifiers before they ever reach filesystem joins or shell-adjacent code. This is an immediate control that blocks common metacharacter payloads while engineering schedules the durable code fix inside the remediation window.
  3. Monitor child-process execution from the app — Use EDR or host telemetry to alert on the vulnerable service spawning /bin/sh, bash, tar, or unusual utilities from the application process tree. Do this now on high-value hosts to catch active abuse even if patching lands later in the remediation window.
  4. Harden release hosts — Keep the service account least-privileged, remove unnecessary shell tools from runtime images where practical, and segregate artifact signing/secrets from the app account. This reduces impact if exploitation succeeds before the vendor patch is applied within the 365-day remediation window.
What doesn't work
  • A perimeter WAF does not materially help if the attack path is local or hidden behind an authenticated package-management workflow.
  • Network exposure scanning does not prove safety here; the bug is in a code path and attacker role model, not a banner you can fingerprint from the internet.
  • MFA is good account hygiene but it does not neutralize a vulnerable shell sink once a privileged workflow is legitimately reached.
06 · Verification

Crowdsourced verification payload.

Run this on the target application host or on a checked-out source tree of the affected product. Invoke it as bash verify-cve-2026-41011.sh /path/to/app with read access to the codebase; root is not required unless the install directory is unreadable to your audit account.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# verify-cve-2026-41011.sh
# Checks a source tree for the vulnerable PackagePersister.validate_tgz command interpolation pattern.
# Exit codes:
#   0 = PATCHED
#   1 = VULNERABLE
#   2 = UNKNOWN / usage / unreadable path

set -u

TARGET="${1:-}"

if [ -z "$TARGET" ]; then
  echo "UNKNOWN: usage: $0 /path/to/app"
  exit 2
fi

if [ ! -e "$TARGET" ]; then
  echo "UNKNOWN: path does not exist: $TARGET"
  exit 2
fi

if [ ! -r "$TARGET" ]; then
  echo "UNKNOWN: path is not readable: $TARGET"
  exit 2
fi

# Narrow search to common Ruby file types.
mapfile -t files < <(find "$TARGET" -type f \( -name '*.rb' -o -name 'Gemfile' -o -name '*.rake' \) 2>/dev/null)

if [ "${#files[@]}" -eq 0 ]; then
  echo "UNKNOWN: no Ruby source files found under $TARGET"
  exit 2
fi

# Pattern 1: class or module reference exists.
class_hits=$(grep -RIl --include='*.rb' 'PackagePersister' "$TARGET" 2>/dev/null || true)

# Pattern 2: vulnerable shell interpolation around tar listing.
cmd_hits=$(grep -RInE --include='*.rb' 'tar[[:space:]]+-tf[[:space:]]+#\{tgz\}[[:space:]]+2>&1' "$TARGET" 2>/dev/null || true)

# Pattern 3: signs of safer remediation.
# Heuristics only: array-style exec/system/Open3 or allowlisted package name validation.
fix_hits=$(grep -RInE --include='*.rb' '(Open3\.(capture|popen)|system\s*\(|spawn\s*\(|exec\s*\().*(tar|"tar"|\'tar\')|\A?name\s*=~\s*/\^\[A-Za-z0-9._-\]\+\$/|\A?package_\s*=~\s*/\^\[A-Za-z0-9._-\]\+\$/' "$TARGET" 2>/dev/null || true)

if [ -n "$cmd_hits" ]; then
  echo "VULNERABLE"
  echo "Found shell-interpolated tar command pattern:"
  echo "$cmd_hits"
  exit 1
fi

if [ -n "$class_hits" ] && [ -n "$fix_hits" ]; then
  echo "PATCHED"
  echo "Found PackagePersister references and remediation-like patterns:"
  echo "$fix_hits" | head -n 10
  exit 0
fi

if [ -n "$class_hits" ]; then
  echo "UNKNOWN"
  echo "Found PackagePersister, but not the exact vulnerable pattern. Manual review recommended."
  echo "$class_hits" | head -n 10
  exit 2
fi

echo "UNKNOWN"
echo "No PackagePersister references found; product/version may not be present in this path."
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, identify whether this product actually exists on any release, package-management, or CI/CD-adjacent hosts and confirm who can invoke the validation path. Because the reassessed verdict is MEDIUM, there is noisgate mitigation SLA: no mitigation SLA — go straight to the 365-day remediation window, and the noisgate remediation SLA is apply the vendor fix within 365 days; in practice, prioritize the small set of high-value build/release systems first, apply package-name allowlisting and process monitoring there now, and leave general fleet urgency low unless you discover broad delegated admin exposure or suspicious child-process telemetry.

Sources

  1. CISA Known Exploited Vulnerabilities Catalog
  2. FIRST EPSS API documentation
  3. CWE-78: Improper Neutralization of Special Elements used in an OS Command
  4. OWASP Command Injection
  5. PortSwigger Web Security Academy: OS command injection
  6. CISA Secure by Design Alert: Eliminating OS Command Injection Vulnerabilities
  7. MITRE CVE record
  8. NVD record
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.