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
-
Vulnerable host scoping
Query · scopingIdentify hosts with active vulnerability findings for the CVEs mentioned in the research to justify further behavioral analysis.
reads hb_vulnerability_findingsqlSELECT 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.
-
Assess vulnerability exposure
Agent triageDecide if the vulnerable host population is significant enough to open behavioral queries.
-
Gate on vulnerability presence
DecisionConserve resources by only running behavioral queries if the environment is confirmed to be vulnerable.
-
Rare suspicious child processes
Query · baselineDetect 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_activitysqlSELECT 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 < 3What 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.
-
Installer search-path DLL anomalies
Query · detection candidateDetect DLL creation by the Adobe installer in unexpected locations, specifically targeting search-path hijacking (CVE-2026-48388).
reads hb_file_activitysqlSELECT 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.
-
Suspicious kernel driver load paths
Query · baselineIdentify loads of sensitive system drivers from non-standard directories using hb_module_activity as a proxy for kernel-mode loads.
reads hb_module_activitysqlSELECT 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.
-
Final evidence triage
Agent triageCorrelate vulnerability presence with the findings across processes, files, and kernel drivers to provide a single verdict per host.
-
Route on triage verdict
DecisionRoute malicious findings to containment and suspicious ones to manual review.
-
Isolate host
Response actionContain confirmed exploitation to prevent lateral movement.
-
Analyst review
Analyst taskConduct manual investigation of suspicious or indeterminate findings.
-
Close out
Analyst taskDocument findings and update vulnerability remediation records.
Coverage
Scenario coverage
| Stage | Covered | How, 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
| Parameter | Type | Default | What it is |
|---|---|---|---|
lookback_days | number | 14 | Days of history to examine for behavioral evidence. |
scope_hosts | list[host] | — | List of hostnames to focus the behavioral investigation; defaults to all hosts if empty. |
suspicious_interpreters | list[string] | cmd.exe, powershell.exe, pwsh.exe, wscript.exe, cscript.exe, bash.exe, python.exe | Common shells or interpreters often spawned during successful exploitation. |
target_cves | list[string] | CVE-2026-48388, CVE-2026-49177, CVE-2026-50475, CVE-2026-57256, CVE-2026-58613, CVE-2026-80093, CVE-2026-91799 | List of CVE IDs from the Talos research paper. |
target_drivers | list[string] | netio.sys, tcpip.sys, cldflt.sys | System drivers named in the research to monitor for non-standard loads. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
Source
---
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.