JustAskJacky Node.js Trojan
Executive Summary
What happened: Red Canary documented JustAskJacky in its 2026 Threat Detection Report as a widespread family of functional-looking AI-helper and utility applications with hidden remote-command capability. Related samples extend to December 2024, activity crossed industries during 2025, and Red Canary reported the family as its most prevalent named threat for three months before a December decline. Unit 42 independently placed it in a broader ecosystem of signed productivity-app clusters while cautioning that certificate, code, and infrastructure differences do not prove a single operator.
How it works: a user launches a signed lure such as GoAskBobby, CheckWithGilbert, AskBettyHow, JustAskJacky, or ManualReaderPro. The installer places a Node.js runtime and GUID-named JavaScript below a lure-named AppData Local Programs directory, then imports task.xml to create a GUID-named scheduled task that relaunches node.exe with the script. The JavaScript reads MachineGuid and operating-system details, heartbeats to dynamic-looking API domains, decodes Base64 and single-byte-XOR tasking, and can evaluate received JavaScript in memory. Red Canary saw reconnaissance but did not observe a later payload objective, so this pack does not invent one.
Why detection belongs on behavior: valid signing is not a trust verdict, lure names can change, and the five published API domains are historical infrastructure. The durable intersection is unusual Node.js execution from an AppData application directory, XML task creation that points back to that runtime, and discovery children parented by node.exe. Four CQL queries cover those process and DNS pivots. Non-PE JavaScript writes, certificate subject/serial, decoded in-memory evaluation, proxy content, IPv6, and deeper wrapper lineage remain explicit gaps until the target tenant supplies evidenced fields.
Operational consequence: remote JavaScript tasking under a user context creates a flexible foothold even when no second-stage payload is visible. Analysts should preserve task XML, installed files, hashes, signer context, process lineage, DNS, and user/session evidence before disabling persistence. Application control should begin in audit mode because legitimate Node/Electron software and enterprise installers can resemble parts of this chain.
| Priority | Why now | Coverage delivered | Key limitation |
|---|---|---|---|
| Preserve task and process evidence, isolate corroborated infections, and restrict unapproved signed helper applications. | Current annual-report prominence plus independent technical corroboration | 4 CQL queries, 10 source-bound indicators, 3 explicit telemetry gaps | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
Source and Claim Review
Only sanitized plain-text evidence from the current run is retained. Source pages were treated as untrusted data; no embedded instructions, commands, scripts, credentials, or active content were used.
| ID | Publisher | Tier | Independence group | Accessed | Status |
|---|---|---|---|---|---|
| S01 | Red Canary | T1 | red-canary | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S02 | Palo Alto Networks Unit 42 | T1 | unit42 | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S03 | Red Canary | T1 | red-canary | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S04 | Microsoft Learn | AUTH | microsoft | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
Claim ledger
| Claim | Statement | Sources | Basis | Confidence | Caveat |
|---|---|---|---|---|---|
| C01 | JustAskJacky is a family of functional-looking AI helper and utility applications with hidden remote-command capability | S01 | direct | high | none |
| C02 | Related samples date to December 2024 and Red Canary observed widespread cross-industry activity in 2025 | S01 | direct | high | single telemetry provider |
| C03 | The installer deploys Node.js and a GUID-named JavaScript file beneath a lure-named AppData Local Programs directory | S01 | direct | high | paths vary by lure |
| C04 | Persistence imports an XML scheduled-task definition that relaunches node.exe with the JavaScript file | S01 | direct | high | task names and paths vary |
| C05 | The JavaScript reads MachineGuid and operating-system details and can evaluate Base64 and XOR encoded JavaScript received from C2 | S01 | direct | high | in-memory tasking may not create a file event |
| C06 | Red Canary observed reconnaissance but no later payload objective, leaving operator intent uncertain | S01 | direct | high | absence in one telemetry set is not proof of absence |
| C07 | Unit 42 places JustAskJacky in a broader signed productivity-app ecosystem while separating clusters by certificate, code, and infrastructure | S02 | direct | medium | ecosystem relationship does not prove one operator |
| C08 | A valid code signature does not establish benign intent when certificates sign unrelated lure brands | S02 | direct | medium | analytical guidance |
| C09 | Red Canary reported JustAskJacky as its most prevalent named threat for three months before a December 2025 volume decline | S03 | direct | high | same independence group as S01 |
| C10 | Microsoft application control supports staged audit and enforcement policies based on signer, publisher, path, and hash | S04 | direct | high | hardening authority only |
Hunt Brief and Attack Chain
The chain is evidence-led: product or lure execution, placement and persistence, command behavior, and remote communications are kept separate so an analyst can stop at the strongest corroborated step.
| Step | Claims | Behavior | Platform | Detection goal |
|---|---|---|---|---|
| 1 | C01, C07 | a signed helper or utility installer is downloaded and launched | windows | identify lure execution and signer/path context |
| 2 | C03 | the installer places Node.js and a GUID-named JavaScript file beneath AppData Local Programs | windows | identify unusual runtime and script placement |
| 3 | C04 | the installer imports an XML scheduled task that launches node.exe and the JavaScript file | windows | identify durable task persistence |
| 4 | C05 | node.exe collects host information and heartbeats to a dynamic-looking API domain | windows | correlate runtime, host discovery, and C2 |
| 5 | C05, C06 | the implant receives encoded JavaScript and evaluates it in memory | windows | record the diskless tasking visibility gap |
Hypotheses
| ID | Behavior | Events / repository | Use | Lookback | Validation |
|---|---|---|---|---|---|
| H01 | a newly introduced Node.js runtime executes JavaScript from an AppData Local Programs lure directory | ProcessRollup2 | hunt | 30d — captures infrequent persistence while bounding process volume | Run a harmless Node.js script from an isolated AppData test path, then baseline legitimate Node/Electron installations for 30 days. |
| H02 | schtasks imports task XML from a temporary installer directory and the task action points node.exe to AppData JavaScript | ProcessRollup2 | alert-candidate | 30d — persistence may remain long after installation | In a lab, import a benign task XML whose action launches a harmless Node.js script, verify the event, then measure authorized installer baselines. |
| H03 | a GUID-named JavaScript file is written below AppData Local Programs near a bundled runtime | PeFileWritten | gap | 30d — supports retrospective installation review | Map tenant file-write telemetry for non-PE JavaScript files; retain this as a gap until an evidenced event and filename field exist. |
| H04 | node.exe or a lure-named executable resolves a source-published JustAskJacky API domain | DnsRequest | hunt | 90d — historical IOC sweep only | Query a controlled DNS lookup in a lab and confirm DomainName and context-process attribution; never generate traffic to the malicious domains. |
| H05 | node.exe or a lure application spawns host reconnaissance commands shortly after install or task execution | ProcessRollup2 | hunt | 30d — supports low-frequency discovery correlation | Execute benign whoami and systeminfo children from a lab Node process, then baseline approved Node automation parents. |
| H06 | encoded JavaScript is received and evaluated entirely inside the Node.js process | #repo=base_sensor | gap | N/A — telemetry gap | Use proxy/TLS inspection or application instrumentation in a lab; do not infer in-memory eval from node.exe existence alone. |
Affected surface and telemetry
Coverage assumes managed Windows endpoints with ProcessRollup2, ScheduledTaskRegistered, and DnsRequest where populated, plus native task, browser, DNS, proxy, and application-control records. Direct-parent depth, non-PE file writes, signer certificate identity, HTTP content, IPv6, and tenant field population require environment-specific confirmation.
Consolidated IOC Table
Indicators below are source-bound historical hunt pivots, not proof of compromise or timeless block entries. Require behavior, host, user, process, and timing context; assign review/expiry dates to infrastructure.
| ID | Type | Value | Sources | Context | Confidence | Volatility | Action |
|---|---|---|---|---|---|---|---|
| I01 | path | GoAskBobby.exe | S01 | AI-helper lure filename | high | medium | hunt |
| I02 | path | CheckWithGilbert.exe | S01 | AI-helper lure filename | high | medium | hunt |
| I03 | path | JustAskJacky.exe | S01 | AI-helper lure filename | high | medium | hunt |
| I04 | path | AskBettyHow.exe | S01 | AI-helper lure filename | high | medium | hunt |
| I05 | path | manualreaderpro.exe | S01 | manual-reader lure filename | high | medium | hunt |
| I06 | domain | api.k2ioeasm874fnacr9x.com | S01 | historical C2 example | high | high | hunt |
| I07 | domain | api.j6vmldsufhwx8zn69z.com | S01 | historical C2 example | high | high | hunt |
| I08 | domain | api.vtqgo0729ilnmyxs9q.com | S01 | historical C2 example | high | high | hunt |
| I09 | domain | api.nk99s1s3zkutjlyodx.com | S01 | historical C2 example | high | high | hunt |
| I10 | domain | api.78kwijczjz0mcig0f0.com | S01 | historical C2 example | high | high | hunt |
ATT&CK Mapping
ATT&CK rows describe attacker behavior supported by named claims. Every mapping is explicitly an analyst inference; neither product inventory nor hardening is mislabeled as adversary behavior.
| Tactic | Technique | Name | Behavior | Basis | Sources | Claims |
|---|---|---|---|---|---|---|
| Initial Access | T1036 | Masquerading | installer masquerades as a useful AI or utility application | analyst_inference | S01 | C01 |
| Execution | T1059.007 | JavaScript/JScript | node.exe executes an obfuscated JavaScript implant | analyst_inference | S01 | C03 |
| Persistence | T1053.005 | Scheduled Task/Job: Scheduled Task | an imported XML task relaunches the implant | analyst_inference | S01 | C04 |
| Discovery | T1082 | System Information Discovery | implant collects MachineGuid and OS details | analyst_inference | S01 | C05 |
| Command and Control | T1071.001 | Web Protocols | implant heartbeats to web C2 and receives encoded tasking | analyst_inference | S01 | C05 |
Native / Non-CQL Hunts
These native pivots supply evidence that portable endpoint CQL cannot safely invent. Complete them alongside the query set and preserve original records before remediation.
| Hunt | Log source | Logic | Response |
|---|---|---|---|
| Scheduled-task evidence | Windows Task Scheduler Operational log; Event IDs 106, 140, 141 and Security 4698 where enabled | Find imported XML tasks whose action launches node.exe with JavaScript below AppData Local Programs; preserve task XML, creator, action, trigger, and timestamps. | Disable only after evidence capture and owner validation; re-hunt the referenced runtime and script. |
| Signer and installed-file review | Falcon file/process views plus Windows signature tooling and software inventory | Pivot from lure filenames and AppData install roots to publisher, certificate thumbprint, hash, first seen, prevalence, sibling brands, and node.exe/script placement. | Treat a valid signature as context, not clearance; quarantine only corroborated malicious files. |
| Proxy and DNS correlation | Secure web gateway, resolver, and TLS metadata | Correlate historical API domains and dynamic subdomains with node.exe lineage, host, user, timing, response volume, and newly installed helper software. | Block confirmed malicious destinations with review dates; preserve DNS and proxy evidence. |
CrowdStrike LogScale CQL Hunt Queries
All queries are static-only. Start with a one-hour manual window, confirm the repository, fields, and row semantics, then expand to the documented lookback.
Looks for: node.exe below an AppData Local Programs installation executing a JavaScript file. Accomplishes: catches the durable runtime-and-script shape across changing helper names while retaining process context for analyst review.
// HUNT: AppData Node.js launching JavaScript // HYPOTHESIS: H01 // USE: hunt // MITRE: T1059.007 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 30d — identify infrequent AppData runtime execution // REQUIRES: #event_simpleName=ProcessRollup2; ImageFileName, CommandLine, ParentBaseFileName // FALSE POSITIVES: legitimate Node or Electron applications // TUNING: exclude developer workstations and approved product install paths // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | ImageFileName = /\\node\.exe$/i | CommandLine = /\\appdata\\local\\programs\\/i | CommandLine = /\.js(?:"|\s|$)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: schtasks importing XML while its command line references AppData Local and node.exe. Accomplishes: catches JustAskJacky persistence at creation time, the highest-fidelity portable behavior in the reported chain.
// HUNT: Task XML launching Node.js from AppData // HYPOTHESIS: H02 // USE: alert-candidate // MITRE: T1053.005 // CONF: high // FP: medium // COST: low // TIMEFRAME: 30d — scheduled-task persistence remains durable // REQUIRES: #event_simpleName=ProcessRollup2; ImageFileName, CommandLine, ParentBaseFileName // FALSE POSITIVES: software installers that import scheduled-task XML // TUNING: exclude approved deployment tools and known task XML paths // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | ImageFileName = /\\schtasks\.exe$/i | CommandLine = /\/create/i | CommandLine = /\/xml/i | CommandLine = /appdata\\local/i | CommandLine = /node\.exe/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, SHA256HashData, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: endpoint DNS requests to five source-bound JustAskJacky API domains. Accomplishes: provides a precise retrospective pivot while preserving process context; a miss does not exclude newer infrastructure.
// HUNT: Historical JustAskJacky C2 DNS hits // HYPOTHESIS: H04 // USE: hunt // MITRE: T1071.001 // CONF: high // FP: low // COST: low // TIMEFRAME: 90d — historical indicator sweep only // REQUIRES: #event_simpleName=DnsRequest; DomainName, ContextBaseFileName, ContextProcessId_decimal // FALSE POSITIVES: security research or sinkhole lookups // VALIDATION: STATIC-ONLY #event_simpleName = DnsRequest | test(@timestamp >= now() - 7776000000) | in(DomainName, values=["api.k2ioeasm874fnacr9x.com","api.j6vmldsufhwx8zn69z.com","api.vtqgo0729ilnmyxs9q.com","api.nk99s1s3zkutjlyodx.com","api.78kwijczjz0mcig0f0.com"]) | table([@timestamp, ComputerName, DomainName, ContextBaseFileName, ContextProcessId_decimal, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: node.exe or a named helper spawning Windows discovery utilities. Accomplishes: connects the disguised application to host reconnaissance, increasing fidelity beyond a standalone runtime or generic command hit.
// HUNT: Node.js parented reconnaissance // HYPOTHESIS: H05 // USE: hunt // MITRE: T1082 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 30d — correlate low-frequency discovery with runtime context // REQUIRES: #event_simpleName=ProcessRollup2; ParentBaseFileName, ImageFileName, CommandLine // FALSE POSITIVES: Node-based management and inventory tooling // TUNING: exclude approved Node automation parents and managed inventory hosts // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | ParentBaseFileName = /^(node|justaskjacky|goaskbobby|checkwithgilbert|askbettyhow)\.exe$/i | ImageFileName = /\\(reg|systeminfo|whoami|ipconfig|nltest|net)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid]) | sort(@timestamp, order=desc, limit=1000)
Operationalization and IOA Candidates
Stage 4 is deliberately degraded: every candidate remains hunt-only and design-only because no tenant parse, positive test, benign baseline, suppression, volume, routing, owner, or SLA evidence exists. No Custom IOA or scheduled alert is shipped.
| Alert | Query | Design use | Decision | Readiness | Rationale |
|---|---|---|---|---|---|
| A01 | Q01 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A02 | Q02 | alert-candidate | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A03 | Q03 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A04 | Q04 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
Promotion gate
Confirm tenant parsing and populated fields; run safe positive and representative benign tests; measure prevalence and cost; define grouping, deduplication, suppressions, routing, owner, SLA, and rollback; then re-review independently.
Machine-Readable IOC Appendix
CSV-style copy blocks retain source IDs and context. Historical infrastructure is supplied for retrospective hunting only; validate ownership and expiry before any prevention action.
type,value,action,severity,expiration,description,tags path,GoAskBobby.exe,detect,medium,2027-09-04,AI-helper lure filename,source:S01 path,CheckWithGilbert.exe,detect,medium,2027-09-04,AI-helper lure filename,source:S01 path,JustAskJacky.exe,detect,medium,2027-09-04,AI-helper lure filename,source:S01 path,AskBettyHow.exe,detect,medium,2027-09-04,AI-helper lure filename,source:S01 path,manualreaderpro.exe,detect,medium,2027-09-04,manual-reader lure filename,source:S01 domain,api.k2ioeasm874fnacr9x.com,detect,medium,2026-12-04,historical C2 example,source:S01 domain,api.j6vmldsufhwx8zn69z.com,detect,medium,2026-12-04,historical C2 example,source:S01 domain,api.vtqgo0729ilnmyxs9q.com,detect,medium,2026-12-04,historical C2 example,source:S01 domain,api.nk99s1s3zkutjlyodx.com,detect,medium,2026-12-04,historical C2 example,source:S01 domain,api.78kwijczjz0mcig0f0.com,detect,medium,2026-12-04,historical C2 example,source:S01
GoAskBobby.exe,sources=S01,context=AI-helper lure filename,volatility=medium CheckWithGilbert.exe,sources=S01,context=AI-helper lure filename,volatility=medium JustAskJacky.exe,sources=S01,context=AI-helper lure filename,volatility=medium AskBettyHow.exe,sources=S01,context=AI-helper lure filename,volatility=medium manualreaderpro.exe,sources=S01,context=manual-reader lure filename,volatility=medium
api.k2ioeasm874fnacr9x.com,sources=S01,context=historical C2 example,volatility=high api.j6vmldsufhwx8zn69z.com,sources=S01,context=historical C2 example,volatility=high api.vtqgo0729ilnmyxs9q.com,sources=S01,context=historical C2 example,volatility=high api.nk99s1s3zkutjlyodx.com,sources=S01,context=historical C2 example,volatility=high api.78kwijczjz0mcig0f0.com,sources=S01,context=historical C2 example,volatility=high
Hardening — Tiered and Deployable
- Quarantine confirmed helper-trojan hosts after evidence capture (CTRL01) — After incident-command approval, network-contain only hosts with corroborated task, process, and C2 evidence; preserve the task XML, process tree, installed files, hashes, DNS, and user context first. deployable-design Verify: Confirm the host cannot reach unapproved destinations while the response channel and evidence collection remain available. Expected: Confirmed host is isolated without losing required evidence or response access. Rollback: Release containment only after eradication, credential review, approved-software reinstall, and a clean re-hunt. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
- Disable confirmed malicious scheduled tasks through a continuity gate (CTRL02) — Export the task definition and related files, identify the owner, then disable only the confirmed GUID task that launches the AppData Node.js implant. deployable-design Verify: Read the disabled task state, verify the implant no longer launches at logon, and confirm legitimate user applications still work. Expected: The malicious action does not run and normal approved applications remain healthy. Rollback: Re-enable the exported task only if ownership proves it legitimate; otherwise restore service through the approved application installer, never the suspect task. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
- Pilot application control for unapproved helper and utility installers (CTRL03) — Create an App Control policy in audit mode that allows managed software sources and reviewed publishers while logging unapproved lure applications, bundled Node.js runtimes, and scripts from user-writable install paths. deployable-design Verify: Review audit events with application owners and test approved AI, PDF, manual, and developer tools. Expected: Known business applications remain usable and unapproved helper installers are attributable before enforcement. Rollback: Remove or revert the pilot policy through the documented management channel and restore the prior signed policy. Authority: S04 · Microsoft App Control for Business; accessed 2026-09-04.
- Restrict and monitor Node.js on non-development endpoints (CTRL04) — Use managed application inventory to identify approved Node.js and Electron products; deny or review new Node runtimes and JavaScript execution from user-writable paths outside approved product directories. deployable-design Verify: Run approved product health tests and confirm a benign unauthorized lab runtime is logged or denied in the pilot. Expected: Approved apps pass while new user-path runtime execution produces reviewable evidence. Rollback: Restore the prior allow policy for the pilot cohort and retain audit evidence for rule refinement. Authority: S04 · Microsoft App Control for Business; accessed 2026-09-04.
- Provide a managed catalog for AI helpers and common utilities (CTRL05) — Publish approved AI, PDF, manual, and productivity tools through managed software distribution; remove local install rights where business-compatible and route exceptions through signer and source review. deployable-design Verify: Sample installs from the catalog and verify unmanaged lookalike installers are blocked or escalated. Expected: Users obtain approved tools without search-driven downloads and exceptions remain attributable. Rollback: Restore time-bounded install rights for a named user and package under approval while correcting catalog coverage. Authority: S04 · Microsoft App Control for Business; accessed 2026-09-04.
- Retain task, process, file, and DNS evidence for behavior-led detection (CTRL06) — Centralize scheduled-task registration, process command line, PE write, DNS, and application-control audit records with source-health monitoring and retention sufficient for a 90-day retrospective hunt. deployable-design Verify: Generate one owner-approved benign task and Node.js test, then verify complete linked records and source-health alerting. Expected: Expected fields arrive with synchronized timestamps and an intentional collection pause is detected. Rollback: Restore the previous forwarding configuration and retention while preserving collected records and documenting any coverage loss. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
Deployable playbook · CTRL01 + CTRL02
- Confirm incident authority, owner, business dependencies, evidence storage, and recovery path.
- Capture task definitions, process trees, files and hashes, DNS/network records, user/session state, and current policy before change.
- Pilot the containment or domain/task change on one confirmed endpoint or small cohort.
- Verify the expected malicious behavior stops and evidence remains accessible.
- Run application, authentication, network, and user workflow health checks.
- Expand only to confirmed matching systems after the pilot remains healthy.
- If a stop condition occurs, apply the documented narrow rollback and verify restored service without reintroducing suspect artifacts.
- Retain before/after exports, approvals, test evidence, and owner sign-off.
Deployable playbook · CTRL03 + CTRL05
- Inventory approved applications, publishers, install paths, owners, and exception requirements.
- Export current application-control policy and confirm a tested rollback channel.
- Deploy the new policy to an isolated audit-only pilot.
- Exercise approved applications and harmless representative tests; review every unexpected audit event.
- Verify business workflows, software updates, and developer exceptions.
- Promote narrowly only when audit data and owners support each allow/deny decision.
- Rollback to the previous signed policy if a critical application fails and verify endpoint health.
- Retain policy hashes, audit samples, approvals, exceptions, and review dates.
Containment Runbook
| Phase | Trigger | Authority | Owner | Evidence | Recovery |
|---|---|---|---|---|---|
| 1 · Validate | Corroborated process, task, file, or C2 evidence | SOC lead | SOC | query row, raw event, process tree, task XML, file/hash, DNS and user context | No disruptive action; close as benign only with documented owner evidence. |
| 2 · Preserve | Probable compromise after triage | Incident commander | Incident Response | volatile context, files, hashes, task/config exports, network/DNS, identity/session state | Preservation is additive; verify evidence hashes and custody before changes. |
| 3 · Contain | Confirmed persistence, remote tasking, or follow-on payload | Incident commander plus system owner | IR / Network Security | containment approval, endpoint/network controls, timestamps, exceptions | Maintain response access and business continuity; release only after eradication gates. |
| 4 · Eradicate and recover | Evidence secured and clean rebuild/reinstall path approved | Change authority | Endpoint Engineering | trusted package/image digest, removed persistence, credential review, health tests | Restore from known-good media/packages; never restore the suspect task or DLL. |
| 5 · Close and re-hunt | Recovery checks pass | Incident commander and owner | SOC / Endpoint Engineering | clean 24h and 7d re-hunts, source health, owner sign-off, lessons learned | Recontain and reopen if persistence, C2, or unexplained process activity returns. |
Continuity rule: preserve evidence first. Do not isolate critical systems, remove tasks/files, revoke credentials, or impose application-control enforcement without incident authority, the service owner, known dependencies, and a tested recovery path.
Detection Coverage and Validation Evidence
Validation state: STATIC REVIEW PASSED after local structure/safety, field/event, CQL syntax, and source-snapshot provenance gates. The offline dry run records extraction and profile readiness only; it does not contact Falcon or prove parsing, detection, canary success, or deployment.
| Technique | Coverage | Queries / handoff | Evidence | Limitation |
|---|---|---|---|---|
| T1036 | Gap | Native handoff | Evidence-backed design gap | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
| T1059.007 | Static | Q01 | Local structure/field/syntax/provenance review | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
| T1053.005 | Static | Q02 | Local structure/field/syntax/provenance review | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
| T1082 | Static | Q04 | Local structure/field/syntax/provenance review | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
| T1071.001 | Static | Q03 | Local structure/field/syntax/provenance review | Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. |
Recorded gaps and next evidence
- Every query remains tenant-unverified and design-only.
- Direct-parent lineage, field population, IPv6, proxy content, and environment-specific exclusions require tenant review.
- Historical atomics require context and expiry; no query result was generated by this build.
- Next step: run the named DO FIRST query manually for one hour, confirm fields and semantics, then record positive and benign tests before promotion.
Hunt Summary Ticket
TITLE: JustAskJacky Node.js Trojan hunt — v0.3 Draft SEVERITY: high — source-corroborated remote execution or persistence behavior warrants prioritized review SCOPE: managed Windows endpoints; Falcon process/task/DNS telemetry; native task, proxy, browser, and application-control evidence HYPOTHESIS: H01 a newly introduced Node.js runtime executes JavaScript from an AppData Local Programs lure directory; H02 schtasks imports task XML from a temporary installer directory and the task action points node.exe to AppData JavaScript; H03 a GUID-named JavaScript file is written below AppData Local Programs near a bundled runtime; H04 node.exe or a lure-named executable resolves a source-published JustAskJacky API domain; H05 node.exe or a lure application spawns host reconnaissance commands shortly after install or task execution; H06 encoded JavaScript is received and evaluated entirely inside the Node.js process QUERIES RUN: Q01 hunt; Q02 alert-candidate; Q03 hunt; Q04 hunt DO FIRST: Q02 over 30 days, then Q01 and Q04 on every matching host; do not contact historical malicious domains. FINDINGS: GAPS: Historical domains may be stale; in-memory evaluation and signer identity need non-portable telemetry. No tenant execution evidence exists. ACTIONS: SOC preserves and hunts evidence; IR contains corroborated infections; Endpoint and Network owners pilot controls with rollback OWNER: SOC / Incident Response / Endpoint Security / Network Security VERSION: v0.3 Draft · 2026-09-04 · STATIC REVIEW PASSED
Changelog
References
| ID | Publisher | Edition / date | Accessed | Use | URL |
|---|---|---|---|---|---|
| S01 | Red Canary | Current cited edition | 2026-09-04T11:35:00Z | C01, C02, C03, C04, C05, C06, I01, I02, I03, I04, I05, I06, I07, I08, I09, I10 | https://redcanary.com/threat-detection-report/threats/justaskjacky/ |
| S02 | Palo Alto Networks Unit 42 | Current cited edition | 2026-09-04T11:35:00Z | C07, C08 | https://unit42.paloaltonetworks.com/tracking-tampered-chef-clusters/ |
| S03 | Red Canary | Current cited edition | 2026-09-04T11:35:00Z | C09 | https://redcanary.com/blog/threat-intelligence/intelligence-insights-january-2026/ |
| S04 | Microsoft Learn | Current cited edition | 2026-09-04T11:35:00Z | C10 | https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/appcontrol |