← Back to Feed CACHED · 2026-10-16 21:19:39 · CACHE_KEY CVE-2026-103849
CVE-2026-103849 · CWE-1336 · Disclosed 2026-10-13

Adobe Commerce / Magento Open Source BlockStrap Template Engine Injection Unauthenticated RCE

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

Like leaving the vault door open at 132,000 banks while the crew that robbed the last one watches from across the street

CVE-2026-103849 (BlockStrap) is a second-pass template-engine injection in Adobe Commerce, Magento Open Source, and Adobe Commerce B2B. An unauthenticated attacker sends crafted input that reaches Magento's email-template rendering pipeline; attacker-controlled content in a child template gets signed and rescanned at the root level, allowing a smuggled {{block}} directive to execute arbitrary PHP code on the server. Affected versions span Adobe Commerce 2.4.4-2026-sep through 2.4.9-2026-sep, Magento Open Source 2.4.6-2026-sep through 2.4.9-2026-sep, and Adobe Commerce B2B 1.3.3-2026-sep through 1.5.3-2026-sep (plus Mage-OS ≤ 3.5.0). The flaw is a bypass of the September 2026 StyleSmuggler hotfix (CVE-2026-75650), which attempted to prevent template injection by signing trusted directives — BlockStrap shows that signing is insufficient because child-template data can be smuggled past it. Fixed versions: 2.4.9-2026-oct, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15, 2.4.5-p17, 2.4.4-p18.

Adobe rates this CVSS 10.0 / CRITICAL with a Priority 2 update — and for once, the base score is accurate but the *operational urgency* is understated. Priority 2 implies a 30-day patching window, yet the predecessor StyleSmuggler reached mass exploitation within 72 hours of its hotfix, breaching 4,275+ stores including Whirlpool, Ray-Ban, National Geographic, Segway, and Cisco. Sansec reproduced four distinct code-execution routes within 24 hours of APSB26-153's release, confirming that BlockStrap is straightforward to weaponize. Every affected Magento instance is internet-facing by design, handles PCI-DSS-scoped payment card data, and stores customer PII. There is no workaround — the only remediation is the vendor patch. The CVSS 10.0 is not hyperbole; it is an accurate reflection of zero-prerequisite, scope-changed RCE against an internet storefront.

"Unauth RCE on 132K internet-facing stores. StyleSmuggler went mass-exploit in 72 hrs. Patch now."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify exposed Magento storefront

The attacker fingerprints internet-facing Magento / Adobe Commerce instances using ZoomEye, Shodan, or FOFA queries. As of September 2026, ZoomEye identified 132,158 observable Magento services globally (US: 61,553; DE: 12,101; UK: 7,612). Common fingerprints include the Mage.Cookies JavaScript object, /pub/static/ asset paths, and X-Magento-* response headers. CDN-fronted stores may be harder to identify but the PHP backend is still reachable through normal storefront URLs.
Conditions required:
  • Target runs Adobe Commerce or Magento Open Source ≤ 2.4.9-2026-sep
Detection/coverage: External attack surface management (ASM) tools identify Magento instances. GreyNoise has not published a BlockStrap-specific tag as of Oct 17, 2026. Shodan/Censys dorks for Magento are well-known.
STEP 02

Inject payload into template-reachable data path

The attacker crafts an unauthenticated HTTP request that writes attacker-controlled content — including a smuggled {{block}} directive — into a data store that feeds Magento's email-template rendering pipeline. No credentials, no session, no user interaction required. Sansec identified four distinct injection routes within 24 hours; the specific entry points have not been publicly detailed to delay weaponization. The predecessor StyleSmuggler used form/API inputs that triggered transactional email templates (e.g., 'Payment Transaction Failed Reminder'). The attack complexity is low — these are normal HTTP POST/PUT requests to storefront endpoints.
Conditions required:
  • Network access to the storefront (HTTP/HTTPS)
  • No authentication required
  • No user interaction required
Detection/coverage: WAF rules targeting {{block, {{var, or {{template directives in POST/PUT bodies may catch naive payloads. Note: Acunetix scanners produce false positives with Twig-style registerUndefinedFilterCallback payloads — these are NOT BlockStrap probes. Monitor Magento application logs for anomalous template rendering errors.
STEP 03

Child-template signing bypass triggers root-level rescan

The September StyleSmuggler hotfix (VULN-39341) added directive signing to prevent injection. BlockStrap bypasses this: attacker-controlled data in a child template is signed during processing and then rescanned at the root template level. During this rescan, the smuggled {{block}} directive is treated as trusted and processed by vendor/magento/framework/Filter/Template.php. This is the core vulnerability — the signing mechanism was designed to validate directives but inadvertently validates attacker-injected directives arriving through the child-template data path. The October patch replaces this generic rescan with registered placeholders, eliminating the bypass.
Conditions required:
  • BlockStrap patch (APSB26-153) NOT applied
  • StyleSmuggler hotfix may or may not be present — the bypass works either way
Detection/coverage: No runtime detection for the signing bypass itself. Post-patch verification: grep -c resolveDeferredDirectives vendor/magento/framework/Filter/Template.php — a result of 0 means vulnerable.
STEP 04

Arbitrary PHP code execution as web server user

The smuggled {{block}} directive executes within Magento's template rendering context, giving the attacker arbitrary PHP execution as the web server user (typically www-data or apache). This yields immediate access to app/etc/env.php containing the database credentials, encryption key, admin URL secret, Redis/Elasticsearch config, and payment gateway API keys. The attacker can read, write, and execute arbitrary code on the server with the same privileges as the Magento application — which on most deployments includes write access to the entire web root and read access to the database.
Conditions required:
  • Successful template injection from step 3
Detection/coverage: Monitor for unexpected child processes spawned by PHP-FPM/Apache. File integrity monitoring on app/etc/env.php, pub/, and var/ directories. Sansec eComscan detects known Magento backdoor patterns. EDR on the web server should flag anomalous shell/process activity from the web server user.
STEP 05

Persistence, skimming, and lateral movement

With PHP execution, the attacker deploys a persistent backdoor (StyleSmuggler campaigns used a compiled Rust binary that survived patching and standard cleanup), injects Magecart-style JavaScript skimmers on checkout pages for ongoing card harvesting, dumps the customer database (PII, order histories, hashed passwords), and extracts payment gateway credentials for direct fraud. From the web server, lateral movement targets include the database tier (credentials in env.php), Redis/Elasticsearch clusters, and B2B partner API integrations. The CVSS scope-change (S:C) reflects this cascade beyond the web application boundary.
Conditions required:
  • PHP execution achieved from step 4
Detection/coverage: PCI-DSS File Integrity Monitoring (Req 11.5) should detect checkout template modifications. Network monitoring for unusual outbound connections from the web server (data exfiltration). Database query anomaly detection for bulk SELECT on customer/order tables. Hunt for unknown compiled binaries in the web root and /tmp.
03 · Compensating Control

1
CRITICAL 10.0→IGNORE 0.0
SEVERITY REDUCED
Apply APSB26-153 patch immediately — within 72 hours — Install the October 2026 security update for your Adobe Commerce / Magento version: 2.4.9-2026-oct, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15, 2.4.5-p17, or 2.4.4-p18. Verify BOTH BlockStrap AND StyleSmuggler (VULN-39341) hotfixes are applied — they are not cumulative. Per the noisgate CRITICAL mitigation SLA, deploy within 3 days. Test in staging but do not let testing delay production patching beyond 72 hours — the StyleSmuggler precedent proves this window is real. Note: the initial 2.4.8-p5 package was corrected on Oct 14 with missing EmailAddress.php changes — ensure you have the updated package.
2
CRITICAL 10.0→HIGH 8.0
SEVERITY REDUCED
Deploy WAF rules blocking template directives in request bodies NOW — As a stopgap before patching (deploy within hours, not days), configure your WAF (Cloudflare, AWS WAF, Fastly, Akamai, ModSecurity) to block or flag HTTP request bodies containing Magento template directives: {{block, {{var, {{template, {{config. Create rules for both URL-encoded and raw forms. This is defense-in-depth only — sophisticated payloads may encode, fragment, or use alternate injection paths to bypass pattern matching. Sansec found four distinct routes, and WAF rules likely do not cover all of them. Residual severity remains HIGH because the WAF is bypassable.
3
CRITICAL 10.0→CRITICAL 9.0
Enable Magento-specific malware scanning (Sansec eComscan or equivalent) — Deploy server-side malware scanning tuned for Magento threats. Sansec's eComscan detects known Magento backdoors, skimmers, and post-exploitation artifacts including the compiled Rust backdoors used in StyleSmuggler campaigns. This does not prevent exploitation but enables rapid detection and incident response if the store is compromised before patching completes. Deploy alongside the patch effort per the noisgate CRITICAL mitigation SLA (≤ 3 days).
4
CRITICAL 10.0→MEDIUM 5.0
SEVERITY REDUCED
Rotate all secrets in app/etc/env.php after patching — After applying the patch, assume pre-patch compromise is possible and rotate: the Magento encryption key, database credentials, admin URL secret, Redis/Elasticsearch passwords, and all payment gateway and third-party integration API keys stored in env.php. Revoke and reissue admin sessions and integration tokens. This limits blast radius from any potential compromise during the unpatched window. Perform within the noisgate CRITICAL remediation SLA (≤ 90 days) — ideally within the first week post-patch.
5
CRITICAL 10.0→CRITICAL 9.5
Implement FIM on checkout, payment, and email template directories — Deploy File Integrity Monitoring (OSSEC, Wazuh, Tripwire, or your PCI-mandated equivalent) on app/design/, pub/static/, var/view_preprocessed/, and generated/ directories. Alert on any unauthorized modification to checkout, payment, and email template files. This is PCI-DSS Requirement 11.5 and directly detects Magecart-style skimmer injection — the most common and most damaging post-exploitation action for e-commerce RCE. Residual severity remains CRITICAL because FIM is detective, not preventive.
What doesn't work
  • Magento maintenance mode — Takes the store offline, causing immediate revenue loss. Does not prevent exploitation if admin panel or REST/GraphQL API endpoints remain accessible. Not a practical mitigation for revenue-generating stores.
  • IP-based blocking / geo-fencing — BlockStrap has no known attacker IPs yet, exploitation comes through normal HTTPS storefront requests, and Magento stores must accept connections from arbitrary customers worldwide. Geo-fencing may reduce attack surface marginally but breaks international commerce.
  • Disabling transactional email templates — While the vulnerability is in the email-template rendering pipeline, disabling emails (order confirmations, password resets, etc.) breaks critical store functionality and customer trust. Furthermore, Sansec identified four exploitation routes — not all may require email template rendering to trigger.
  • PHP disable_functions / open_basedir restrictions — May limit post-exploitation lateral movement but does not prevent the template injection itself. The {{block}} directive operates within Magento's framework context using Magento's own class autoloader, not raw exec() or system() calls. These PHP hardening measures are good hygiene but are not a compensating control for this specific vulnerability.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNot yet observed as of Oct 17, 2026. Sansec confirmed no BlockStrap attacks on live stores. However, the predecessor StyleSmuggler (CVE-2026-75650) reached mass exploitation within 72 hours of its Sept 7 hotfix, with 4,275+ stores breached including Whirlpool, Ray-Ban, National Geographic, Segway, and Cisco. CrowdSec tracked 500+ attacker IPs during StyleSmuggler campaigns. The exploitation clock is ticking.
Proof-of-Concept AvailabilityNo public PoC on GitHub, ExploitDB, or pocindex.io as of Oct 17. However, Sansec reproduced four distinct code-execution routes within 24 hours of the patch release (Oct 14). The technical mechanism — child-template signing bypass via {{block}} directive smuggling in Filter/Template.php — is published by Sansec. Diff-based reverse engineering of the patch is straightforward. Weaponization is days away, not weeks.
EPSS Score0.78% probability / 54.9th percentile. The moderate EPSS reflects the 4-day-old disclosure window. StyleSmuggler's EPSS climbed sharply after mass exploitation began. Given the identical attack surface and lower barrier to entry (patch-diff availability), expect rapid EPSS escalation.
CISA KEV StatusNot listed. StyleSmuggler (CVE-2026-75650) was added to KEV following confirmed mass exploitation. BlockStrap KEV listing is probable if exploitation materializes. Two other Adobe Commerce CVEs were added to KEV in 2026: CVE-2026-75650 and CVE-2026-71362 (incorrect authorization / account takeover).
CVSS Vector AnalysisCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — A perfect 10.0. Every dimension is at maximum severity: network-reachable, low complexity, no privileges, no user interaction, scope change (web server → database → payment systems → partner integrations), and maximum impact across confidentiality, integrity, and availability. There are no temporal or environmental modifiers that reduce this for internet-facing commerce deployments.
Affected Version RangesAdobe Commerce: 2.4.4-2026-sep through 2.4.9-2026-sep · Magento Open Source: 2.4.6-2026-sep through 2.4.9-2026-sep · Adobe Commerce B2B: 1.3.3-2026-sep through 1.5.3-2026-sep · Mage-OS: ≤ 3.5.0. Version identification requires the dated suffix (e.g., 2026-sep) — major version numbers alone cannot determine patch status.
Fixed Versions2.4.9-2026-oct, 2.4.8-p5 (corrected Oct 14 — initial release was missing EmailAddress.php changes), 2.4.7-p10, 2.4.6-p15, 2.4.5-p17, 2.4.4-p18. CRITICAL: Both BlockStrap AND StyleSmuggler (VULN-39341) patches must be applied — they are not cumulative. New Composer installs remain vulnerable until patches are manually applied.
Exposure / Attack Surface132,158 observable Magento services per ZoomEye (Sept 2026). Top countries: US (61,553), DE (12,101), UK (7,612), CN (4,982), BE (4,916). This count excludes CDN-fronted stores. All instances are internet-facing by design — Magento IS a storefront. Sansec estimates the underlying template engine bug touches ~75% of all Adobe Commerce and Magento installations worldwide.
Disclosure TimelineOct 13: Adobe publishes APSB26-153 (Priority 2) · Oct 14: Sansec reproduces 4 exploit routes, deploys Shield protection; Adobe corrects 2.4.8-p5 package · Oct 15: Sansec publishes BlockStrap analysis · Oct 17 (today): No in-the-wild exploitation observed yet. For context, StyleSmuggler went from hotfix → mass exploitation in 72 hours (Sept 7–10, 2026).
Reporting ResearcherDiscovered by vozec (credited by Adobe in APSB26-153). Exploit reproduction and threat analysis by Sansec (Willem de Groot and team), the leading Magento/e-commerce security research firm. Vulnerability nicknamed BlockStrap by Sansec.

Sources.

  1. Sansec — BlockStrap: Magento and Adobe Commerce RCE (CVE-2026-103849)
  2. Adobe Security Bulletin APSB26-153
  3. BleepingComputer — Critical BlockStrap flaw lets hackers run code on Magento servers
  4. CyCognito — Emerging Threat: CVE-2026-103849 Adobe Commerce Template Injection RCE
  5. Sansec — StyleSmuggler: Magento 0-day RCE (CVE-2026-75650) under active attack
  6. 132,158 Observable Magento Stores — ZoomEye population analysis
  7. Strix.ai — CVE-2026-103849 Intelligence Card
  8. Meetanshi — Adobe Commerce Security Update APSB26-153: October 2026
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (10.0/10)

Why this verdict

  • Zero friction in the entire attack chain. Unauthenticated, no user interaction, low complexity, network-reachable via normal HTTPS. There is not a single prerequisite that narrows the reachable population or assumes prior compromise. Every step succeeds against any unpatched, internet-facing Magento instance in default configuration. The attacker needs nothing but an HTTP client and a URL.
  • Proven 72-hour weaponization pattern on the identical codebase. StyleSmuggler (CVE-2026-75650) — same CWE-1336, same Filter/Template.php component, same unauthenticated RCE impact — went from patch release to mass exploitation in 72 hours with 4,275+ stores breached and 500+ attacker IPs tracked. Sansec reproduced four BlockStrap exploitation routes within 24 hours of APSB26-153. This is not theoretical risk — it is a demonstrated, repeatable pattern for this exact attack surface.
  • 132K+ internet-facing targets that CANNOT be network-segmented. Unlike most enterprise software where internet exposure is a misconfiguration, Magento stores are internet-facing by design. ZoomEye counts 132,158 observable instances. The attack surface is the storefront itself — WAF, VPN, and network segmentation do not change the fundamental reachability. Every store accepts unauthenticated HTTP requests as a core business function.
  • Role multiplier: Adobe Commerce is canonically a production e-commerce data tier. (a) *Dev/staging instances:* chain succeeds; blast radius is data-clone exposure and lateral movement — HIGH. (b) *Production storefront (the typical and dominant role, representing ≥90% of installs):* chain succeeds; blast radius is payment card theft (Magecart), mass customer PII exfiltration, persistent compiled backdoor deployment — CRITICAL. (c) *B2B hub / marketplace / multi-tenant deployments:* chain succeeds; blast radius extends to supply-chain compromise of partner integrations, wholesale payment fraud, multi-merchant data breach. Since the canonical deployment role for Adobe Commerce IS an internet-facing PCI-scoped production storefront, the verdict floor is CRITICAL. This is not a component that sometimes occupies a high-value role — it IS the high-value role by definition.
  • No workaround or mitigation short of the patch. Adobe provides no configuration-based mitigation. WAF rules targeting template directives are a speed bump, not a barrier — Sansec's four exploitation routes likely include vectors that resist simple pattern matching. The only path to safety is the vendor patch, and both BlockStrap and StyleSmuggler patches must be applied together.

Why not higher?

There is no severity level above CRITICAL and no CVSS score above 10.0. Every dimension of the attack — access vector, complexity, privileges, user interaction, scope, and all three impact pillars — is already at the maximum severity position. The only theoretical escalation would be confirmed mass exploitation or KEV listing, which would change the *urgency* but not the *severity classification*.

Why not lower?

Every argument for downgrading collapses under scrutiny. *'No exploitation yet'* is a temporal condition with a proven 72-hour shelf life from the identical predecessor on the identical codebase (StyleSmuggler). *'EPSS is only 54.9th percentile'* reflects the 4-day disclosure window, not structural difficulty — EPSS is a lagging indicator for fresh CVEs. *'No public PoC'* is irrelevant when Sansec published the mechanism and four routes were reproduced in 24 hours; the patch diff is the PoC. There are zero friction points anywhere in the chain — no authentication barrier, no network restriction, no configuration dependency, no user interaction requirement — and the canonical deployment role (internet-facing PCI-scoped storefront) maximizes blast radius to payment-card-scale impact. Downgrading this would be malpractice.

06 · Verification

Crowdsourced verification payload.

Run this script on the Magento application server from the Magento installation root directory (e.g., /var/www/magento2). Requires read access to the vendor/ directory. No root privileges needed — the web server user is sufficient. Usage: bash check_blockstrap.sh /var/www/magento2

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_blockstrap.sh — Verify BlockStrap (CVE-2026-103849) and StyleSmuggler (CVE-2026-75650) patch status
# Usage: bash check_blockstrap.sh [/path/to/magento/root]
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -uo pipefail

MAGE_ROOT="${1:-.}"
TEMPLATE_PHP="${MAGE_ROOT}/vendor/magento/framework/Filter/Template.php"
PATCH_CMD="${MAGE_ROOT}/vendor/bin/magento-patches"
RESULT="PATCHED"

echo "=== CVE-2026-103849 (BlockStrap) + CVE-2026-75650 (StyleSmuggler) Patch Checker ==="
echo "Magento root: $(cd "${MAGE_ROOT}" 2>/dev/null && pwd || echo "${MAGE_ROOT}")"
echo "Date: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""

# Pre-check: confirm Magento installation
if [ ! -f "${MAGE_ROOT}/app/etc/env.php" ]; then
    echo "[UNKNOWN] Cannot find app/etc/env.php — is this a Magento root directory?"
    exit 2
fi

# Check 1: BlockStrap patch (CVE-2026-103849)
# The October 2026 patch adds resolveDeferredDirectives() to Template.php
if [ -f "${TEMPLATE_PHP}" ]; then
    BS_COUNT=$(grep -c 'resolveDeferredDirectives' "${TEMPLATE_PHP}" 2>/dev/null || echo "0")
    if [ "${BS_COUNT}" -gt 0 ]; then
        echo "[PASS] BlockStrap (CVE-2026-103849): PATCHED"
        echo "       resolveDeferredDirectives found in Template.php (${BS_COUNT} occurrence(s))"
    else
        echo "[FAIL] BlockStrap (CVE-2026-103849): VULNERABLE"
        echo "       resolveDeferredDirectives NOT found in Template.php"
        RESULT="VULNERABLE"
    fi
else
    echo "[UNKNOWN] Template.php not found at: ${TEMPLATE_PHP}"
    exit 2
fi

# Check 2: StyleSmuggler hotfix (CVE-2026-75650 / VULN-39341)
# Both patches are required — they are NOT cumulative
if [ -x "${PATCH_CMD}" ]; then
    SS_STATUS=$("${PATCH_CMD}" -n status 2>/dev/null | grep -i '39341' || true)
    if [ -n "${SS_STATUS}" ]; then
        echo "[PASS] StyleSmuggler (CVE-2026-75650 / VULN-39341): hotfix detected"
    else
        echo "[FAIL] StyleSmuggler (CVE-2026-75650 / VULN-39341): hotfix NOT detected"
        RESULT="VULNERABLE"
    fi
else
    echo "[INFO] magento-patches CLI not available — checking Template.php for signing logic"
    SS_SIGN=$(grep -c 'validateDirectiveSignature\|signDirective' "${TEMPLATE_PHP}" 2>/dev/null || echo "0")
    if [ "${SS_SIGN}" -gt 0 ]; then
        echo "[PASS] StyleSmuggler signing logic detected in Template.php (${SS_SIGN} occurrence(s))"
    else
        echo "[WARN] StyleSmuggler signing logic NOT found — verify VULN-39341 hotfix manually"
        RESULT="VULNERABLE"
    fi
fi

# Check 3: Version identification
echo ""
if [ -f "${MAGE_ROOT}/composer.lock" ]; then
    FW_VER=$(grep -A4 '"magento/framework"' "${MAGE_ROOT}/composer.lock" 2>/dev/null | grep '"version"' | head -1 | sed 's/.*"version".*"\(.*\)".*/\1/')
    PROD_VER=$(grep -A4 '"magento/product-community-edition\|magento/product-enterprise-edition"' "${MAGE_ROOT}/composer.lock" 2>/dev/null | grep '"version"' | head -1 | sed 's/.*"version".*"\(.*\)".*/\1/')
    echo "[INFO] magento/framework version: ${FW_VER:-unknown}"
    echo "[INFO] Product edition version:   ${PROD_VER:-unknown}"
    echo "[INFO] Look for dated suffix '2026-oct' or patch level p5/p10/p15/p17/p18 to confirm fix"
fi

# Check 4: Quick post-exploitation artifact scan
echo ""
echo "=== Quick Post-Exploitation Artifact Scan ==="
# Spurious lock file from patch process
if [ -f "${MAGE_ROOT}/976bc24c" ]; then
    echo "[INFO] File '976bc24c' found in root (benign — created by patch process, safe to delete)"
fi
# Unknown compiled binaries (Rust backdoor indicator from StyleSmuggler campaigns)
SUSPECT_BINS=$(find "${MAGE_ROOT}/pub" "${MAGE_ROOT}/var" -type f -executable -newer "${MAGE_ROOT}/app/etc/env.php" 2>/dev/null | head -5 || true)
if [ -n "${SUSPECT_BINS}" ]; then
    echo "[ALERT] Executable files found in pub/ or var/ (possible backdoor):"
    echo "${SUSPECT_BINS}"
fi
# Basic skimmer keyword scan in static assets
SKIM_HITS=$(grep -rl 'exfil\|skimmer\|cc_number\|cvv_field' "${MAGE_ROOT}/pub/static/" 2>/dev/null | head -3 || true)
if [ -n "${SKIM_HITS}" ]; then
    echo "[ALERT] Possible skimmer keywords found in pub/static/:"
    echo "${SKIM_HITS}"
fi
[ -z "${SUSPECT_BINS}${SKIM_HITS}" ] && echo "[OK] No obvious post-exploitation artifacts found."

# Final verdict
echo ""
echo "=============================="
echo "${RESULT}"
echo "=============================="
if [ "${RESULT}" = "VULNERABLE" ]; then
    echo "ACTION: Apply APSB26-153 patches immediately. Both BlockStrap and StyleSmuggler fixes required."
    exit 1
else
    echo "Both BlockStrap and StyleSmuggler patches detected."
    exit 0
fi