← All hunts high TLP:CLEAR Part 1 of 2

E-Commerce Edge Exploitation and API Abuse

Adversaries are exploiting e-commerce vulnerabilities like CosmicSting to gain initial access, followed by credential stuffing against customer APIs and the injection of digital skimmers into checkout flows.

Based on research by Unit 42 2026-10-29 12 steps · 4 queries T1041 T1110.004 T1190 T1195 T1505.003

Brief

Why this hunt?

Retailers face significant threats during peak seasons. The source "Unwrapping Retail Peak Season Cyber Threats" (https://unit42.paloaltonetworks.com/unwrapping-retail-cyber-threats/) describes how adversaries exploit vulnerabilities like CosmicSting (CVE-2024-34102) for initial access. This hunt provides a structured way to find these intrusions before they result in mass data theft.

How the Hunt Flows

The hunt begins with a scoping phase using the hb_vulnerability_finding surface. It identifies internet-facing Adobe Commerce and Magento instances with active CosmicSting exposure. This gate ensures that the subsequent, more resource-intensive queries focus only on high-risk assets rather than the entire estate.

Once the hunt confirms a vulnerable host, it initiates a parallel triage phase across three telemetry surfaces. The first thread examines hb_http_activity for exploitation probes. It looks for XML-specific keywords like "entity" or "doctype" in requests targeting known commerce API paths. This detects the XXE techniques used to bypass authentication or read sensitive files.

The second thread monitors hb_auth_signin for credential stuffing. It identifies source IPs attempting to access multiple customer accounts with high failure rates. During holiday sales, this query distinguishes automated account takeover attempts from the background noise of legitimate users' forgotten passwords.

The third thread tracks hb_file_activity to find digital skimmers. It specifically targets web server processes such as Nginx or PHP-FPM modifying JavaScript files in the web root. Because legitimate code updates should occur via deployment accounts, these process-driven modifications indicate that an adversary is injecting malicious scripts to steal payment data.

Final Verdict and Remediation

The final step aggregates findings from the HTTP, auth, and file surfaces. An analyst reviews the correlated evidence to determine if a server shows signs of active exploitation. If the verdict is malicious—indicating a confirmed skimmer or successful account stuffing—the playbook routes to immediate host isolation. This action halts data exfiltration while the team removes malicious scripts and revokes compromised credentials.

Blind Spots

The hunt relies on the accuracy of vulnerability scans. A shadow-IT server or an unmanaged instance that lacks scanning coverage will not trigger the lead query. Furthermore, while the hunt identifies suspicious HTTP activity, it cannot see the full XML request body in the telemetry. An analyst must manually verify the payload to confirm if an exploitation attempt was successful.

In this series

Steps

  1. Identify vulnerable e-commerce assets

    Query · scoping

    Find servers with active CosmicSting (CVE-2024-34102) findings to narrow the hunt scope.

    reads hb_vulnerability_findingsql
    SELECT resource_uid, severity, title, first_seen FROM hb_vulnerability_finding WHERE cve_uid = '{{target_cve}}' AND status != 'suppressed'

    What a hit looks like. Rows identify specific vulnerable resources. Silence means no known exposure exists for this CVE, allowing the hunt to stop early.

  2. Analyze lead findings

    Agent triage

    Assess the severity and duration of the identified vulnerabilities to determine if the behavioral hunt should proceed.

  3. Gate: Proceed on vulnerability

    Decision

    Control whether expensive behavioral telemetry is examined based on the vulnerability lead.

  4. HTTP exploitation probes

    Query · triage

    Examine web traffic for XXE payload patterns targeting known commerce API paths.

    reads hb_http_activitysql
    SELECT device_hostname, url_path, url_query, src_endpoint_ip, status_code, time FROM hb_http_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND (instr(',' || '{{commerce_paths}}' || ',', ',' || LOWER(url_path) || ',') > 0) AND (LOWER(url_query) LIKE '%entity%' OR LOWER(url_query) LIKE '%doctype%' OR LOWER(url_query) LIKE '%xml%') AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Requests containing XML-specific keywords or entity definitions in the URL query parameters.

  5. API credential stuffing patterns

    Query · baseline

    Identify source IPs targeting commerce APIs with high failure rates followed by successful logins.

    reads hb_auth_signinsql
    SELECT device_hostname, src_endpoint_ip, COUNT(*) AS attempts, COUNT(DISTINCT actor_user_name) AS accounts, SUM(CASE WHEN status_id = 2 THEN 1 ELSE 0 END) AS fails, SUM(CASE WHEN status_id = 1 THEN 1 ELSE 0 END) AS successes FROM hb_auth_signin WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, src_endpoint_ip HAVING fails > 20 AND accounts > 5 ORDER BY fails DESC

    What a hit looks like. A single IP address attempting many accounts with high failure rates, indicating automated stuffing activity.

  6. JavaScript skimmer modifications

    Query · detection candidate

    Find unauthorized modifications to JS files on the web server, which indicates skimmer injection or backdoor persistence.

    reads hb_file_activitysql
    SELECT device_hostname, file_path, process_name, actor_user_name, time FROM hb_file_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND LOWER(file_path) LIKE '%.js' AND (LOWER(process_name) LIKE '%httpd%' OR LOWER(process_name) LIKE '%nginx%' OR LOWER(process_name) LIKE '%php-fpm%' OR LOWER(process_name) LIKE '%apache%') AND activity_id IN (1, 3, 5) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Web server processes modifying JavaScript files in the web root. Normal maintenance should use deployment accounts, not the server processes themselves.

  7. Final evidence triage

    Agent triage

    Consolidate results from exploitation probes, auth abuse, and file modifications to determine the scope and impact of an intrusion.

  8. Route remediation

    Decision

    Route to immediate isolation if a compromise is confirmed, otherwise to a manual review.

  9. Isolate commerce server

    Response action

    Halt active data theft by isolating the compromised web server.

  10. Detailed incident review

    Analyst task

    Perform manual verification of the fanned-out evidence and verify if any customer data was exfiltrated.

  11. Close out hunt

    Analyst task

    Record a negative result or close the hunt for non-vulnerable assets.

Coverage

Scenario coverage

StageCoveredHow, or why not
Adobe Commerce XXE Exploitation
T1190
Yes identify-vulnerable-commerce, http-exploitation-probes
Automated Credential Stuffing
T1110.004
Yes api-auth-stuffing
Digital Skimming and Backdoor Installation
T1505.003 · T1195
Yes js-file-modifications
Employee Phishing and Smishing
T1566
Out of scope Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats' series.
Autonomous AI Agent Activity
T1059
Out of scope Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats' series.
Cloud Gift Card Fraud and Data Theft
T1486 · T1041
Out of scope Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats' series.

Blind spots

  • Needs comprehensive coverage in hb_vulnerability_finding. A shadow-IT e-commerce site could be compromised without being caught by the lead query. It would answer whether an unmanaged e-commerce server exists that is not scanned for CVE-2024-34102. Remediation: Cross-reference hb_software_inventory with hb_exposed_assets to identify unmanaged web servers.
  • Needs hb_http_activity with full request body. We can see the target path but cannot confirm the exploitation attempt without the XML body content. It would answer the specific XML payload sent in a suspected XXE attack. Remediation: Enable WAF request-body inspection for critical commerce API endpoints.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
commerce_pathslist[path]/rest/all/v1/guest-carts/, /rest/default/v1/guest-carts/, /checkout/, /customer/account/login/Common Adobe Commerce and e-commerce API paths targeted for exploitation and credential stuffing.
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]—Hostnames identified as vulnerable in the lead step; leave empty to hunt across the entire estate.
target_cvestringCVE-2024-34102The CosmicSting XXE vulnerability ID.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Identity / sign-in telemetryidentityidentity
Web server / proxy logssiemnetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A simple rule might fire on a single XXE payload, but this hunt correlates
  vulnerability exposure with auth spikes and file-system integrity across multiple
  surfaces to find persistent skimmers that evasion-focused attackers hide.
blind_spots:
- id: missing-vulnerability-scans
  owner: Vulnerability Management
  question: whether an unmanaged e-commerce server exists that is not scanned for
    CVE-2024-34102
  remediation: Cross-reference hb_software_inventory with hb_exposed_assets to identify
    unmanaged web servers.
  requires: comprehensive coverage in hb_vulnerability_finding
  risk: A shadow-IT e-commerce site could be compromised without being caught by the
    lead query.
  stage: initial-access-commerce-exploit
- id: http-request-body-blindness
  owner: Security Engineering
  question: the specific XML payload sent in a suspected XXE attack
  remediation: Enable WAF request-body inspection for critical commerce API endpoints.
  requires: hb_http_activity with full request body
  risk: We can see the target path but cannot confirm the exploitation attempt without
    the XML body content.
  stage: initial-access-commerce-exploit
coverage:
- stage: initial-access-commerce-exploit
  status: covered
  steps:
  - identify-vulnerable-commerce
  - http-exploitation-probes
- stage: credential-access-api-stuffing
  status: covered
  steps:
  - api-auth-stuffing
- stage: persistence-digital-skimmer-injection
  status: covered
  steps:
  - js-file-modifications
- reason: Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats'
    series.
  stage: initial-access-employee-social-engineering
  status: out_of_scope
- reason: Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats'
    series.
  stage: execution-autonomous-agent
  status: out_of_scope
- reason: Belongs to another part of the 'Unwrapping Retail Peak Season Cyber Threats'
    series.
  stage: impact-cloud-fraud-exfiltration
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: Protecting e-commerce availability and customer payment trust is
    critical during the peak holiday season; CosmicSting exploitation leads directly
    to large-scale data theft and loss of revenue.
  methodology: model-assisted
  trigger: intel-report
hypothesis: Adversaries are exploiting e-commerce vulnerabilities like CosmicSting
  to gain initial access, followed by credential stuffing against customer APIs and
  the injection of digital skimmers into checkout flows.
labels:
- hunt
- attack.t1190
- attack.t1110.004
- attack.t1505.003
- attack.t1195
- attack.t1041
- credential access
- execution
- impact
- initial access
- persistence
name: E-Commerce Edge Exploitation and API Abuse
parameters:
  commerce_paths:
    default:
    - /rest/all/v1/guest-carts/
    - /rest/default/v1/guest-carts/
    - /checkout/
    - /customer/account/login/
    description: Common Adobe Commerce and e-commerce API paths targeted for exploitation
      and credential stuffing.
    from:
      kind: article
      observed: '2024-10-28'
      ref: Unit 42
    type: list[path]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    from:
      kind: manual
      observed: '2026-10-28'
      ref: hunt-standard
    type: number
  scope_hosts:
    default: []
    description: Hostnames identified as vulnerable in the lead step; leave empty
      to hunt across the entire estate.
    from:
      kind: manual
      observed: '2026-10-28'
      ref: analyst-scoping
    type: list[host]
  target_cve:
    default: CVE-2024-34102
    description: The CosmicSting XXE vulnerability ID.
    from:
      kind: article
      observed: '2024-10-28'
      ref: Unit 42
    type: string
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://unit42.paloaltonetworks.com/unwrapping-retail-cyber-threats/
    gates:
    - dry-run
    - lint
    - critic
    model: hb_google/gemini-3-flash-preview
rationale: Start with internet-facing Adobe Commerce or Magento instances. Use the
  resource_uid from the lead query to identify hostnames for the scope_hosts parameter.
  If vulnerability scan data is missing, the analyst should run the hunt without scoping.
references:
- name: "Unit 42 \u2014 Unwrapping Retail Peak Season Cyber Threats"
  url: https://unit42.paloaltonetworks.com/unwrapping-retail-cyber-threats/
related:
- hunt: employee-phishing-to-cloud-fraud
  reason: This hunt focuses on public-facing edge exploitation, whereas gift card
    fraud often involves phishing employees for cloud console access.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Adobe Commerce XXE Exploitation
    observables:
    - CVE-2024-34102
    - CosmicSting
    - Adobe Commerce
    - XML External Entity (XXE) crafted documents
    - unpatched e-commerce servers
    slug: initial-access-commerce-exploit
    tactic: initial-access
    techniques:
    - T1190
  - name: Employee Phishing and Smishing
    observables:
    - Storm-0539
    - phishing messages
    - smishing messages
    - social engineering of retail employees
    slug: initial-access-employee-social-engineering
    tactic: initial-access
    techniques:
    - T1566
  - name: Automated Credential Stuffing
    observables:
    - automated scripts targeting mobile app APIs
    - web login API traffic spikes
    - stolen credential databases
    - login failures followed by success
    slug: credential-access-api-stuffing
    tactic: credential-access
    techniques:
    - T1110.004
  - name: Digital Skimming and Backdoor Installation
    observables:
    - JavaScript payment skimming scripts
    - checkout flow modification
    - persistent server backdoors
    - unauthorized client-side script manipulation
    slug: persistence-digital-skimmer-injection
    tactic: persistence
    techniques:
    - T1505.003
    - T1195
  - name: Autonomous AI Agent Activity
    observables:
    - Cairn autonomous penetration testing agent
    - Bling Libra AI reconnaissance
    - Claude AI accelerated exfiltration
    - autonomous penetration testing harnesses
    slug: execution-autonomous-agent
    tactic: execution
    techniques:
    - T1059
  - name: Cloud Gift Card Fraud and Data Theft
    observables:
    - unauthorized gift card issuance
    - loyalty account balance draining
    - Storm-0539 cloud infrastructure exploitation
    - exfiltration of payment card records
    - ALPHV inventory replenishment disruption
    slug: impact-cloud-fraud-exfiltration
    tactic: impact
    techniques:
    - T1486
    - T1041
  summary: Retailers during peak shopping season face a diverse threat landscape including
    digital skimming via CVE-2024-34102, AI-accelerated autonomous intrusions, and
    cloud-based gift card fraud following employee phishing. These campaigns prioritize
    operational disruption through ransomware or direct financial gain via credential
    stuffing and payment record exfiltration.
series:
  index: 1
  slug: unwrapping-retail-peak-season-cyber-threats
  title: Unwrapping Retail Peak Season Cyber Threats
  total: 2
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
  identity:
    category: identity
    name: Identity / sign-in telemetry
    telemetry:
    - identity
  web:
    category: siem
    name: Web server / proxy logs
    telemetry:
    - network
tlp: clear
type: investigation
---


# E-Commerce Edge Exploitation and API Abuse

The hunt follows a gated flow: it first identifies exposed servers through vulnerability scans, and only fans out to behavioral telemetry when a risk is confirmed. This ensures that the hunt prioritizes expensive data loss and authentication telemetry for known-vulnerable assets. By narrowing the focus to hosts with active CosmicSting exposure, the hunt effectively separates high-volume API traffic and file activity from the background noise of holiday retail operations.

## identify-vulnerable-commerce
<!-- Identify vulnerable e-commerce assets -->
Find servers with active CosmicSting (CVE-2024-34102) findings to narrow the hunt scope.

```sqlite target=endpoint role=scoping params=(target_cve=target_cve)
~~~yaml
expected: Rows identify specific vulnerable resources. Silence means no known exposure
  exists for this CVE, allowing the hunt to stop early.
reads:
- resource_uid
- severity
- title
- first_seen
silence: not_evidence_of_absence
source: hb_vulnerability_finding
verified: dry-run
verified_at: '2026-10-29'
~~~
SELECT resource_uid, severity, title, first_seen FROM hb_vulnerability_finding WHERE cve_uid = '{{target_cve}}' AND status != 'suppressed'
```

## analyze-lead
<!-- Analyze lead findings -->
```agent target=hunter
cite: required
context:
- identify-vulnerable-commerce
max_iterations: 3
objective: Determine if the vulnerability finding is significant enough to trigger
  intensive behavioral queries.
success_criteria: A decision to proceed to behavioral queries or terminate the hunt.
tools:
- endpoint
- identity
- web
```

## gate-vulnerability
<!-- Gate: Proceed on vulnerability -->
if~: "the analyze-lead verdict identified at least one high-risk vulnerable resource" (confidence: high, judge=hunter)
then: → parallel-triage
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: missing-vulnerability-scans)
else: → close-out

## parallel-triage
<!-- Parallel evidence gathering -->
parallel:
- → http-exploitation-probes
- → api-auth-stuffing
- → js-file-modifications
join: → final-verdict

## http-exploitation-probes
<!-- HTTP exploitation probes -->
Examine web traffic for XXE payload patterns targeting known commerce API paths.

```sqlite target=web role=triage params=(scope_hosts=scope_hosts, commerce_paths=commerce_paths, lookback_days=lookback_days)
~~~yaml
expected: Requests containing XML-specific keywords or entity definitions in the URL
  query parameters.
reads:
- device_hostname
- url_path
- url_query
- src_endpoint_ip
- status_code
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-29'
~~~
SELECT device_hostname, url_path, url_query, src_endpoint_ip, status_code, time FROM hb_http_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND (instr(',' || '{{commerce_paths}}' || ',', ',' || LOWER(url_path) || ',') > 0) AND (LOWER(url_query) LIKE '%entity%' OR LOWER(url_query) LIKE '%doctype%' OR LOWER(url_query) LIKE '%xml%') AND time >= datetime('now', '-{{lookback_days}} days')
```

## api-auth-stuffing
<!-- API credential stuffing patterns -->
Identify source IPs targeting commerce APIs with high failure rates followed by successful logins.

```sqlite target=identity role=baseline params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: new_this_window
  window: '{{lookback_days}}d'
expected: A single IP address attempting many accounts with high failure rates, indicating
  automated stuffing activity.
prevalence:
  by: device_hostname
  key:
  - src_endpoint_ip
  rare_below: 5
reads:
- device_hostname
- src_endpoint_ip
- actor_user_name
- status_id
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-10-29'
~~~
SELECT device_hostname, src_endpoint_ip, COUNT(*) AS attempts, COUNT(DISTINCT actor_user_name) AS accounts, SUM(CASE WHEN status_id = 2 THEN 1 ELSE 0 END) AS fails, SUM(CASE WHEN status_id = 1 THEN 1 ELSE 0 END) AS successes FROM hb_auth_signin WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, src_endpoint_ip HAVING fails > 20 AND accounts > 5 ORDER BY fails DESC
```

## js-file-modifications
<!-- JavaScript skimmer modifications -->
Find unauthorized modifications to JS files on the web server, which indicates skimmer injection or backdoor persistence.

```sqlite target=endpoint role=detection-candidate params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Web server processes modifying JavaScript files in the web root. Normal
  maintenance should use deployment accounts, not the server processes themselves.
reads:
- device_hostname
- file_path
- process_name
- actor_user_name
- activity_id
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-10-29'
~~~
SELECT device_hostname, file_path, process_name, actor_user_name, time FROM hb_file_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND LOWER(file_path) LIKE '%.js' AND (LOWER(process_name) LIKE '%httpd%' OR LOWER(process_name) LIKE '%nginx%' OR LOWER(process_name) LIKE '%php-fpm%' OR LOWER(process_name) LIKE '%apache%') AND activity_id IN (1, 3, 5) AND time >= datetime('now', '-{{lookback_days}} days')
```

## final-verdict
<!-- Final evidence triage -->
```agent target=hunter
cite: required
context:
- analyze-lead
- http-exploitation-probes
- api-auth-stuffing
- js-file-modifications
max_iterations: 6
objective: Confirm if a vulnerable commerce server shows behavioral signs of active
  exploitation, account takeover, or skimmer persistence.
success_criteria: A per-host verdict citing specific rows from the behavioral queries.
tools:
- endpoint
- identity
- web
```

## route-remediation
<!-- Route remediation -->
if~: "the final-verdict is malicious for at least one host, particularly involving confirmed skimmer injection or successful stuffing" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → analyst-review
unavailable: → analyst-review
else: → analyst-review

## isolate-host
<!-- Isolate commerce server -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the identified host; remove the injected JavaScript scripts; revoke compromised application credentials.
```
→ analyst-review

## analyst-review
<!-- Detailed incident review -->
```manual target=analyst
Review the identified HTTP payloads and skimmer scripts; identify which customer accounts were successfully stuffed; verify if payment card details were captured by the skimmer.
```
→ end

## close-out
<!-- Close out hunt -->
```manual target=analyst
Record the examined systems; note any vulnerability remediation required; close the hunt for systems with no behavioral anomalies.
```
→ 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, critic, then reviewed by a person.

Locked pack

Sign up to unlock

Pack contents are available to Huntbase users.