← All hunts high TLP:CLEAR

Client-side and Kernel Vulnerability Monitoring

Adversaries are exploiting unpatched vulnerabilities in client applications like Foxit Reader and Adobe Photoshop, or Windows kernel drivers like netio.sys and tcpip.sys, to execute code or elevate privileges.

Based on research by Cisco Talos 2026-10-08 12 steps · 4 queries T1068 T1190 T1203 T1574.001

Brief

Why now

Recent research from Cisco Talos — Microsoft, Adobe, Apple, and Foxit vulnerabilities — details a series of 2026 vulnerabilities across widely used client applications and the Windows kernel. These flaws allow for both remote code execution and local privilege escalation. Because client-side software like Foxit Reader and Adobe Photoshop often persists in environments with fragmented patching cycles, they remain high-value targets for initial access.

How the Hunt Flows

The hunt begins with a scoping phase that queries vulnerability management data. We list every host currently reporting an active, unsuppressed finding for the CVEs identified in the research. This prevents the high-volume behavioral queries from running against the entire fleet, focusing the investigation only on the exposed population.

If the environment contains vulnerable hosts, the hunt launches three parallel behavioral searches. The first search examines process activity to find rare shells or interpreters — such as cmd.exe or powershell.exe — spawned by Foxit Reader or the Adobe Photoshop installer. We use fleet-wide prevalence to filter out legitimate administrative tools, highlighting only the anomalies.

The second behavioral search targets search-path hijacking. It monitors the Adobe installer for any DLL files written to user-writable paths or the installer's own directory, rather than standard temporary locations. This specifically addresses the risks of DLL side-loading during the installation or update process.

The final behavioral search looks for kernel-mode anomalies. It identifies instances where sensitive system drivers, such as netio.sys or tcpip.sys, load from directories other than the standard Windows drivers path. While kernel exploitation can be difficult to see through process telemetry, unusual driver load paths often indicate that an adversary is attempting to replace or spoof a system component.

An analyst then correlates these behavioral signals with the initial vulnerability data. If a vulnerable host displays any of these anomalies, it receives a malicious verdict for immediate containment.

What this Hunt Cannot See

This hunt has three primary blind spots. First, it relies on recent vulnerability scans; if scan data is stale, the hunt may skip hosts that are actually vulnerable. Second, kernel-mode exploitation that does not involve spawning a process or loading a driver from a new path — such as direct memory manipulation of the IRP stack — is invisible to this telemetry. Finally, the hunt only covers managed devices with active endpoint agents.

Steps

  1. Vulnerable host scoping

    Query · scoping

    Identify hosts with active vulnerability findings for the CVEs mentioned in the research to justify further behavioral analysis.

    reads hb_vulnerability_findingsql
    SELECT device_uid, cve_uid, affected_package_name, affected_package_version, severity, status FROM hb_vulnerability_finding WHERE instr(',' || '{{target_cves}}' || ',', ',' || cve_uid || ',') > 0 AND status != 'suppressed'

    What a hit looks like. A list of device_uids that currently possess the vulnerabilities. Silence means no known vulnerable software is reporting to the vulnerability surface.

  2. Assess vulnerability exposure

    Agent triage

    Decide if the vulnerable host population is significant enough to open behavioral queries.

  3. Gate on vulnerability presence

    Decision

    Conserve resources by only running behavioral queries if the environment is confirmed to be vulnerable.

  4. Rare suspicious child processes

    Query · baseline

    Detect shells or interpreters spawned by Foxit Reader or the Adobe installer that are rare across the fleet and help distinguish exploitation from legitimate activity.

    reads hb_process_activitysql
    SELECT device_hostname, process_name, process_cmd_line, parent_process_name, parent_process_cmd_line, COUNT(DISTINCT device_hostname) AS hosts, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%foxitreader.exe' OR LOWER(parent_process_name) LIKE '%photoshop_set-up.exe') AND (instr(',' || '{{suspicious_interpreters}}' || ',', ',' || LOWER(process_original_file_name) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, process_name, process_cmd_line, parent_process_name, parent_process_cmd_line HAVING hosts < 3

    What a hit looks like. Processes like cmd.exe appearing as children of Foxit Reader on very few hosts. Silence means no suspicious child processes were detected.

  5. Installer search-path DLL anomalies

    Query · detection candidate

    Detect DLL creation by the Adobe installer in unexpected locations, specifically targeting search-path hijacking (CVE-2026-48388).

    reads hb_file_activitysql
    SELECT device_hostname, process_name, file_path, file_name, activity_name, time FROM hb_file_activity WHERE LOWER(process_name) LIKE '%photoshop_set-up.exe' AND activity_id = 1 AND LOWER(file_name) LIKE '%.dll' AND LOWER(file_path) NOT LIKE '%\\appdata\\local\\temp\\%' AND LOWER(file_path) NOT LIKE '%\\windows\\temp\\%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)

    What a hit looks like. DLL files created by the installer in its own directory or other non-temporary, user-writable locations. Silence indicates standard installer behavior.

  6. Suspicious kernel driver load paths

    Query · baseline

    Identify loads of sensitive system drivers from non-standard directories using hb_module_activity as a proxy for kernel-mode loads.

    reads hb_module_activitysql
    SELECT device_hostname, module_name, module_path, module_signature_status, time FROM hb_module_activity WHERE instr(',' || '{{target_drivers}}' || ',', ',' || LOWER(module_name) || ',') > 0 AND LOWER(module_path) NOT LIKE 'c:\\windows\\system32\\drivers\\%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)

    What a hit looks like. Sensitive system drivers loading from locations other than the standard drivers directory. Silence means these drivers are only loading from their expected paths.

  7. Final evidence triage

    Agent triage

    Correlate vulnerability presence with the findings across processes, files, and kernel drivers to provide a single verdict per host.

  8. Route on triage verdict

    Decision

    Route malicious findings to containment and suspicious ones to manual review.

  9. Isolate host

    Response action

    Contain confirmed exploitation to prevent lateral movement.

  10. Analyst review

    Analyst task

    Conduct manual investigation of suspicious or indeterminate findings.

  11. Close out

    Analyst task

    Document findings and update vulnerability remediation records.

Coverage

Scenario coverage

StageCoveredHow, or why not
Foxit Reader RCE via JavaScript
T1203
Yes vulnerability-lead, rare-suspicious-child-processes
Adobe Photoshop Installer Search Path Hijacking
T1574.001
Yes vulnerability-lead, installer-dll-anomalies
Windows Kernel Driver Exploitation
T1068
Yes vulnerability-lead, unusual-driver-activity

Blind spots

  • Needs hb_vulnerability_finding or hb_software_inventory. A host may appear safe because of a stale scan, causing the gate to close prematurely. It would answer whether a host is vulnerable if it has not been scanned recently.
  • Needs Kernel-level IRP or API monitoring. Kernel exploitation may occur without spawning new processes, making it invisible to process telemetry unless a driver is replaced. It would answer whether malformed packets were sent to netio.sys or tcpip.sys.
  • Needs Endpoint agent on all targeted OS versions. Gaps in agent deployment mean large portions of the estate are unmonitored for behavior. It would answer whether exploitation is occurring on unmanaged devices.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
lookback_daysnumber14Days of history to examine for behavioral evidence.
scope_hostslist[host]—List of hostnames to focus the behavioral investigation; defaults to all hosts if empty.
suspicious_interpreterslist[string]cmd.exe, powershell.exe, pwsh.exe, wscript.exe, cscript.exe, bash.exe, python.exeCommon shells or interpreters often spawned during successful exploitation.
target_cveslist[string]CVE-2026-48388, CVE-2026-49177, CVE-2026-50475, CVE-2026-57256, CVE-2026-58613, CVE-2026-80093, CVE-2026-91799List of CVE IDs from the Talos research paper.
target_driverslist[string]netio.sys, tcpip.sys, cldflt.sysSystem drivers named in the research to monitor for non-standard loads.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A single detection rule may flag the software version or the shell execution,
  but this hunt combines vulnerability exposure with fleet-wide behavioral baselining
  to distinguish legitimate installer activity from malicious hijacking.
blind_spots:
- id: missing-vulnerability-data
  question: whether a host is vulnerable if it has not been scanned recently
  requires: hb_vulnerability_finding or hb_software_inventory
  risk: A host may appear safe because of a stale scan, causing the gate to close
    prematurely.
- id: kernel-irp-telemetry
  question: whether malformed packets were sent to netio.sys or tcpip.sys
  requires: Kernel-level IRP or API monitoring
  risk: Kernel exploitation may occur without spawning new processes, making it invisible
    to process telemetry unless a driver is replaced.
  stage: privilege-escalation-windows-kernel
- id: no-agent-coverage
  question: whether exploitation is occurring on unmanaged devices
  requires: Endpoint agent on all targeted OS versions
  risk: Gaps in agent deployment mean large portions of the estate are unmonitored
    for behavior.
coverage:
- stage: client-execution-foxit-pdf
  status: covered
  steps:
  - vulnerability-lead
  - rare-suspicious-child-processes
- stage: privilege-escalation-adobe-installer
  status: covered
  steps:
  - vulnerability-lead
  - installer-dll-anomalies
- stage: privilege-escalation-windows-kernel
  status: covered
  steps:
  - vulnerability-lead
  - unusual-driver-activity
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: keep-as-periodic-hunt
  justification: Exploiting unpatched client-side and kernel-mode vulnerabilities
    are primary vectors for initial access and privilege escalation. Confirming whether
    vulnerable software is present and actively being exploited is essential for risk
    prioritization.
  methodology: model-assisted
  trigger: intel-report
hypothesis: Adversaries are exploiting unpatched vulnerabilities in client applications
  like Foxit Reader and Adobe Photoshop, or Windows kernel drivers like netio.sys
  and tcpip.sys, to execute code or elevate privileges.
labels:
- hunt
- attack.t1190
- attack.t1203
- attack.t1574.001
- attack.t1068
- execution
- privilege escalation
name: Client-side and Kernel Vulnerability Monitoring
parameters:
  lookback_days:
    default: '14'
    description: Days of history to examine for behavioral evidence.
    from:
      kind: manual
      observed: '2026-10-07'
      ref: standard-lookback
    type: number
  scope_hosts:
    default: []
    description: List of hostnames to focus the behavioral investigation; defaults
      to all hosts if empty.
    from:
      kind: manual
      observed: '2026-10-07'
      ref: analyst-scoping
    type: list[host]
  suspicious_interpreters:
    default:
    - cmd.exe
    - powershell.exe
    - pwsh.exe
    - wscript.exe
    - cscript.exe
    - bash.exe
    - python.exe
    description: Common shells or interpreters often spawned during successful exploitation.
    from:
      kind: manual
      observed: '2026-10-07'
      ref: common-shells
    type: list[string]
  target_cves:
    default:
    - CVE-2026-48388
    - CVE-2026-49177
    - CVE-2026-50475
    - CVE-2026-57256
    - CVE-2026-58613
    - CVE-2026-80093
    - CVE-2026-91799
    description: List of CVE IDs from the Talos research paper.
    from:
      kind: article
      observed: '2026-10-07'
      ref: talos-2026-10-07
    type: list[string]
  target_drivers:
    default:
    - netio.sys
    - tcpip.sys
    - cldflt.sys
    description: System drivers named in the research to monitor for non-standard
      loads.
    from:
      kind: article
      observed: '2026-10-07'
      ref: talos-2026-10-07
    type: list[string]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://blog.talosintelligence.com/microsoft-adobe-apple-and-foxit-vulnerabilities/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start with workstations running Foxit Reader and Adobe Photoshop. Focus
  on hosts identified by the lead query as having unpatched CVEs. Widen the scope
  to include any server running vulnerable Windows kernel builds if the driver behavioral
  query yields results.
references:
- name: "Cisco Talos \u2014 Microsoft, Adobe, Apple, and Foxit vulnerabilities"
  url: https://blog.talosintelligence.com/microsoft-adobe-apple-and-foxit-vulnerabilities/
related:
- hunt: unusual-dll-load-events
  reason: Search path hijacking can also be detected by hb_module_activity, but that
    surface is higher volume.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Foxit Reader RCE via JavaScript
    observables:
    - Foxit Reader version 2026.1.1.36485
    - malformed PDF document
    - JavaScript checkbox CBF_Widget operations
    - Array object memory corruption
    slug: client-execution-foxit-pdf
    tactic: execution
    techniques:
    - T1203
  - name: Adobe Photoshop Installer Search Path Hijacking
    observables:
    - Photoshop_Set-Up.exe version 2.11.0.30
    - malicious library file placement in installer directory
    - CVE-2026-48388
    slug: privilege-escalation-adobe-installer
    tactic: privilege-escalation
    techniques:
    - T1574.001
  - name: Windows Kernel Driver Exploitation
    observables:
    - netio.sys
    - tcpip.sys
    - Windows Cloud Files Mini Filter Driver version 10.0.26100.8457
    - Cloud Filter API calls
    - crafted I/O request packets (IRP)
    - dedicated application to trigger driver vulnerability
    slug: privilege-escalation-windows-kernel
    tactic: privilege-escalation
    techniques:
    - T1068
  summary: This research details multiple critical vulnerabilities in Adobe Photoshop,
    Foxit Reader, and Windows kernel components that enable remote code execution
    and local privilege escalation. Attackers can exploit these flaws through malformed
    PDF files containing JavaScript, hijacked search paths during software installation,
    or crafted I/O request packets targeting system drivers.
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
tlp: clear
type: investigation
---


# Client-side and Kernel Vulnerability Monitoring

This hunt identifies potential exploitation of several 2026 vulnerabilities in Foxit Reader, Adobe Photoshop, and Windows kernel drivers. It uses a gated flow, first identifying hosts with known vulnerable versions before launching behavioral queries to find rare child processes, unauthorized DLL writes in installer paths, and system drivers loading from non-standard directories. By correlating vulnerability state with behavioral anomalies, the hunt distinguishes between general software presence and active exploitation attempts.

## vulnerability-lead
<!-- Vulnerable host scoping -->
Identify hosts with active vulnerability findings for the CVEs mentioned in the research to justify further behavioral analysis.

```sqlite target=endpoint role=scoping params=(target_cves=target_cves)
~~~yaml
expected: A list of device_uids that currently possess the vulnerabilities. Silence
  means no known vulnerable software is reporting to the vulnerability surface.
reads:
- device_uid
- cve_uid
- affected_package_name
- affected_package_version
- severity
- status
silence: not_evidence_of_absence
source: hb_vulnerability_finding
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_uid, cve_uid, affected_package_name, affected_package_version, severity, status FROM hb_vulnerability_finding WHERE instr(',' || '{{target_cves}}' || ',', ',' || cve_uid || ',') > 0 AND status != 'suppressed'
```

## gate-assessment
<!-- Assess vulnerability exposure -->
```agent target=hunter
cite: required
context:
- vulnerability-lead
max_iterations: 3
objective: Determine if any enrolled hosts are at high risk due to the target CVEs.
success_criteria: A per-host vulnerability summary citing the scoping rows.
tools:
- endpoint
```

## exposure-gate
<!-- Gate on vulnerability presence -->
if~: "The gate-assessment indicates at least one host has an active, unsuppressed target CVE." (confidence: high, judge=hunter)
then: → behavioral-fanout
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: missing-vulnerability-data)
else: → close-out

## behavioral-fanout
<!-- Behavioral evidence fan-out -->
parallel:
- → rare-suspicious-child-processes
- → installer-dll-anomalies
- → unusual-driver-activity
join: → triage-verdict

## rare-suspicious-child-processes
<!-- Rare suspicious child processes -->
Detect shells or interpreters spawned by Foxit Reader or the Adobe installer that are rare across the fleet and help distinguish exploitation from legitimate activity.

```sqlite target=endpoint role=baseline params=(suspicious_interpreters=suspicious_interpreters, lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Processes like cmd.exe appearing as children of Foxit Reader on very few
  hosts. Silence means no suspicious child processes were detected.
prevalence:
  by: device_hostname
  key:
  - process_name
  - parent_process_name
  rare_below: 3
reads:
- device_hostname
- process_name
- process_original_file_name
- process_cmd_line
- parent_process_name
- parent_process_cmd_line
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_hostname, process_name, process_cmd_line, parent_process_name, parent_process_cmd_line, COUNT(DISTINCT device_hostname) AS hosts, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%foxitreader.exe' OR LOWER(parent_process_name) LIKE '%photoshop_set-up.exe') AND (instr(',' || '{{suspicious_interpreters}}' || ',', ',' || LOWER(process_original_file_name) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, process_name, process_cmd_line, parent_process_name, parent_process_cmd_line HAVING hosts < 3
```

## installer-dll-anomalies
<!-- Installer search-path DLL anomalies -->
Detect DLL creation by the Adobe installer in unexpected locations, specifically targeting search-path hijacking (CVE-2026-48388).

```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: DLL files created by the installer in its own directory or other non-temporary,
  user-writable locations. Silence indicates standard installer behavior.
reads:
- device_hostname
- process_name
- file_path
- file_name
- activity_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_hostname, process_name, file_path, file_name, activity_name, time FROM hb_file_activity WHERE LOWER(process_name) LIKE '%photoshop_set-up.exe' AND activity_id = 1 AND LOWER(file_name) LIKE '%.dll' AND LOWER(file_path) NOT LIKE '%\\appdata\\local\\temp\\%' AND LOWER(file_path) NOT LIKE '%\\windows\\temp\\%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```

## unusual-driver-activity
<!-- Suspicious kernel driver load paths -->
Identify loads of sensitive system drivers from non-standard directories using hb_module_activity as a proxy for kernel-mode loads.

```sqlite target=endpoint role=baseline params=(target_drivers=target_drivers, lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Sensitive system drivers loading from locations other than the standard
  drivers directory. Silence means these drivers are only loading from their expected
  paths.
reads:
- device_hostname
- module_name
- module_path
- module_signature_status
- time
silence: not_evidence_of_absence
source: hb_module_activity
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_hostname, module_name, module_path, module_signature_status, time FROM hb_module_activity WHERE instr(',' || '{{target_drivers}}' || ',', ',' || LOWER(module_name) || ',') > 0 AND LOWER(module_path) NOT LIKE 'c:\\windows\\system32\\drivers\\%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```

## triage-verdict
<!-- Final evidence triage -->
```agent target=hunter
cite: required
context:
- gate-assessment
- rare-suspicious-child-processes
- installer-dll-anomalies
- unusual-driver-activity
max_iterations: 6
objective: Determine if any vulnerable hosts show signs of successful exploitation
  based on rare child processes, DLL hijacking, or unusual kernel driver activity.
success_criteria: A final verdict citing specific rows and the vulnerability status
  of each host.
tools:
- endpoint
```

## route-verdict
<!-- Route on triage verdict -->
if~: "The triage-verdict is malicious for at least one host." (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: no-agent-coverage)
else: → close-out

## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host via the EDR. Remove any identified malicious DLLs or installer binaries after collection.
```
→ analyst-review

## analyst-review
<!-- Analyst review -->
```manual target=analyst
Review the process tree for the identified Foxit or Adobe events. Determine if the file created by the installer is a known DLL name (e.g. version.dll, dwmapi.dll) in an unexpected path.
```
→ close-out

## close-out
<!-- Close out -->
```manual target=analyst
Record identified vulnerable hosts. If exploitation was not found, pass the vulnerable host list to the patching team.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.