← All hunts high TLP:CLEAR

InterSystems IRIS Cleartext Credential Exposure and Access

An attacker intercepts cleartext credentials from InterSystems IRIS superserver traffic on port 1972 to gain unauthorized access to the environment.

Based on research by CISA 2026-10-23 11 steps · 3 queries T1133 T1190 T1566

Brief

Why this hunt

InterSystems IRIS for Health is a backbone for healthcare data, managing electronic health records and laboratory information. CISA Advisory ICSMA-26-295-01 (https://www.cisa.gov/news-events/ics-medical-advisories/icsma-26-295-01) describes a significant vulnerability where the platform's superserver transmits credentials in cleartext by default on port 1972. While a simple detection might flag an old version, this hunt focuses on the behavioral bridge between that vulnerability and a successful breach. The process looks for unencrypted traffic and the subsequent unauthorized login that indicates an attacker exploited the exposure.

How the hunt flows

The hunt starts by scoping the estate. A query against software inventory identifies every host running affected versions of InterSystems IRIS for Health. This step creates a targeted list of systems to prevent running expensive global network queries across the entire network. If the inventory returns no results, the hunt concludes early to save analyst time and processing resources.

Once an analyst confirms the presence of vulnerable hosts, the hunt launches two parallel investigations. The first query examines network connections on the default IRIS superserver port 1972. It aggregates traffic volume, byte counts, and source IPs to find unusual unencrypted communication. The hunt baselines this traffic to find new or rare source IPs that have not historically managed these systems.

At the same time, a second query pulls successful sign-in logs from the security event surface for those specific IRIS hosts. This allows the team to see who logs in and from where during the period of unencrypted traffic. The hunt looks for interactive and network-level logons that occur shortly after or during the identified network traffic spikes.

Finally, the hunt uses an automated agent to synthesize these findings. The agent correlates the source IPs seen in the superserver traffic with the source IPs recorded in the authentication logs. This correlation identifies logins that likely used intercepted credentials. Instead of manual triage, the agent provides a per-host verdict. An analyst then reviews this synthesis to separate legitimate administrative management from malicious access. This ensures that only high-confidence leads move to the isolation and containment phase.

What this hunt cannot see

Visibility depends entirely on EDR coverage across the clinical environment. If a medical device or legacy server lacks an agent or does not report software inventory, the hunt misses that host entirely. Furthermore, the hunt focuses on OS-level authentication logs. Logins that occur strictly inside the InterSystems IRIS application database—and do not trigger a system-level sign-in event—stay invisible to the current OS-based queries. This is a common blind spot in specialized medical software where internal databases manage their own user sets. Finally, without network flow data or host-based network telemetry for port 1972, identifying the specific traffic spikes that precede a login is impossible.

Steps

  1. Identify vulnerable IRIS deployments

    Query · scoping

    Locate hosts running affected versions of InterSystems IRIS for Health to scope the investigative window.

    reads hb_software_inventorysql
    SELECT device_hostname, device_uid, package_name, package_version, install_path FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%intersystems iris%' AND instr(',' || '{{vulnerable_versions}}' || ',', ',' || package_version || ',') > 0

    What a hit looks like. A list of hosts running affected versions. Zero rows indicates no vulnerable versions are present in current inventory.

  2. Initial Lead Assessment

    Agent triage

    Assess whether vulnerable InterSystems IRIS instances exist before running expensive network telemetry queries.

  3. Continue to Traffic Analysis

    Decision

    Halt the hunt if no vulnerable software was found, preserving resources.

  4. Examine IRIS Superserver Traffic

    Query · baseline

    Identify hosts with significant traffic on the default unencrypted port 1972.

    reads hb_network_connectionsql
    SELECT device_hostname, src_endpoint_ip, COUNT(*) AS connection_count, SUM(traffic_bytes) AS total_bytes, MIN(time) AS first_seen, MAX(time) AS last_seen FROM hb_network_connection WHERE dst_endpoint_port = {{iris_port}} AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, src_endpoint_ip ORDER BY total_bytes DESC

    What a hit looks like. Source IPs communicating with the IRIS hosts on port 1972. Heavy usage from unexpected external IPs suggests potential interception risks.

  5. Correlate Sign-ins to IRIS Hosts

    Query · enrichment

    Detect successful logins to vulnerable hosts that might follow credential interception.

    reads hb_auth_signinsql
    SELECT dst_endpoint_hostname, actor_user_name, src_endpoint_ip, auth_protocol, logon_type, status, time FROM hb_auth_signin WHERE status_id = 1 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || dst_endpoint_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') ORDER BY time DESC

    What a hit looks like. Recent successful logins to the targeted hosts. Focus on logins where the source IP matches traffic patterns seen in the network step.

  6. Synthesize Evidence

    Agent triage

    Correlate vulnerability, traffic, and authentication data to identify suspected compromises.

  7. Route on Triage Verdict

    Decision

    Initiate containment for high-confidence compromises or move to manual verification.

  8. Isolate Compromised Host

    Response action

    Halt ongoing credential theft and prevent lateral movement from the suspected breachhead.

  9. Analyst Review and Verification

    Analyst task

    Verify the agent's logic and confirm if the traffic patterns correspond to legitimate management activity.

  10. Remediation and Close Out

    Analyst task

    Finalize the hunt and ensure remediation steps are documented.

Coverage

Scenario coverage

StageCoveredHow, or why not
Deployment of Affected InterSystems IRIS
T1190
Yes find-vulnerable-iris
Cleartext Transmission of Sensitive Information
T1190
Yes superserver-traffic
Unauthorized Access via Stolen Credentials
T1133
Yes iris-host-logins

Blind spots

  • Needs accurate hb_software_inventory from all medical devices. A host without EDR coverage or inventory reporting will be missed entirely, leaving unencrypted portals active. It would answer Are all InterSystems IRIS instances captured in the inventory?.
  • Needs hb_network_connection with flow data for port 1972. Lack of network flow data prevents identifying unencrypted traffic patterns that indicate credential exposure. It would answer Is superserver traffic visible at the host or network level?.
  • Needs application-level IRIS audit logs. Logins occurring inside the IRIS application that do not trigger OS-level authentication remain invisible to hb_auth_signin. It would answer Does the sign-in data include application-internal IRIS logins?.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
iris_portnumber1972The default InterSystems IRIS Superserver port.
lookback_daysnumber14Days of historical telemetry to examine.
scope_hostslist[host]—Restrict investigation to these hostnames; leave empty to use results from the scoping step.
vulnerable_versionslist[string]2026.2.0.221, 2026.1.0.235, 2025.3.0.226Affected InterSystems IRIS for Health versions.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Identity / sign-in telemetryidentityidentity
Network telemetrynetworknetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A standard rule might flag the software version or an anomalous login separately;
  this hunt pivots from the specific vulnerability to network behavior (cleartext
  superserver traffic) and then to the resulting outcome (unauthorized sign-in), correlating
  evidence across three distinct surfaces to distinguish legitimate administrative
  access from credential-theft intrusions.
blind_spots:
- id: no-inventory-data
  question: Are all InterSystems IRIS instances captured in the inventory?
  requires: accurate hb_software_inventory from all medical devices
  risk: A host without EDR coverage or inventory reporting will be missed entirely,
    leaving unencrypted portals active.
  stage: vulnerable-product-deployment
- id: no-network-telemetry
  question: Is superserver traffic visible at the host or network level?
  requires: hb_network_connection with flow data for port 1972
  risk: Lack of network flow data prevents identifying unencrypted traffic patterns
    that indicate credential exposure.
  stage: cleartext-transmission-exploitation
- id: iris-internal-auth
  question: Does the sign-in data include application-internal IRIS logins?
  requires: application-level IRIS audit logs
  risk: Logins occurring inside the IRIS application that do not trigger OS-level
    authentication remain invisible to hb_auth_signin.
  stage: unauthorized-remote-access
coverage:
- stage: vulnerable-product-deployment
  status: covered
  steps:
  - find-vulnerable-iris
- stage: cleartext-transmission-exploitation
  status: covered
  steps:
  - superserver-traffic
- stage: unauthorized-remote-access
  status: covered
  steps:
  - iris-host-logins
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: keep-as-periodic-hunt
  justification: InterSystems IRIS for Health is a critical healthcare infrastructure
    asset. CVE-2026-111594 allows for cleartext transmission of credentials by default,
    creating an immediate risk of unauthorized access to sensitive medical data.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An attacker intercepts cleartext credentials from InterSystems IRIS superserver
  traffic on port 1972 to gain unauthorized access to the environment.
labels:
- hunt
- attack.t1190
- attack.t1133
- attack.t1566
- credential access
- initial access
name: InterSystems IRIS Cleartext Credential Exposure and Access
parameters:
  iris_port:
    default: '1972'
    description: The default InterSystems IRIS Superserver port.
    from:
      kind: article
      observed: '2026-10-22'
      ref: ICSMA-26-295-01
    type: number
  lookback_days:
    default: '14'
    description: Days of historical telemetry to examine.
    from:
      kind: manual
      observed: '2026-10-22'
      ref: hunt-standard
    type: number
  scope_hosts:
    default: []
    description: Restrict investigation to these hostnames; leave empty to use results
      from the scoping step.
    from:
      kind: manual
      observed: '2026-10-22'
      ref: analyst-entry
    type: list[host]
  vulnerable_versions:
    default:
    - 2026.2.0.221
    - 2026.1.0.235
    - 2025.3.0.226
    description: Affected InterSystems IRIS for Health versions.
    from:
      kind: article
      observed: '2026-10-22'
      ref: ICSMA-26-295-01
    type: list[string]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.cisa.gov/news-events/ics-medical-advisories/icsma-26-295-01
    gates:
    - dry-run
    - lint
    - critic
    model: hb_google/gemini-3-flash-preview
rationale: Focus on the Healthcare and Public Health sector environments where InterSystems
  IRIS for Health is likely deployed. Start by identifying servers with IRIS installed
  and checking for port 1972 exposure.
references:
- name: 'CISA Advisory ICSMA-26-295-01: InterSystems Corporation InterSystems IRIS
    for Health'
  url: https://www.cisa.gov/news-events/ics-medical-advisories/icsma-26-295-01
related:
- hunt: unencrypted-management-protocols
  reason: This hunt targets IRIS specifically; a broader hunt for Telnet, HTTP, or
    other unencrypted protocols in medical environments is a sibling investigation.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Deployment of Affected InterSystems IRIS
    observables:
    - InterSystems IRIS for Health 2026.2.0.221
    - InterSystems IRIS for Health 2026.1.0.235
    - InterSystems IRIS for Health 2025.3.0.226
    - CVE-2026-111594
    slug: vulnerable-product-deployment
    tactic: initial-access
    techniques:
    - T1190
  - name: Cleartext Transmission of Sensitive Information
    observables:
    - TLS/SSL encryption turned off by default
    - Cleartext transmission of sensitive data
    - IRIS superserver communications
    slug: cleartext-transmission-exploitation
    tactic: credential-access
    techniques:
    - T1190
  - name: Unauthorized Access via Stolen Credentials
    observables:
    - Log into the device
    - Use intercepted data to authenticate
    slug: unauthorized-remote-access
    tactic: initial-access
    techniques:
    - T1133
  summary: CVE-2026-111594 describes a critical misconfiguration in InterSystems IRIS
    for Health where TLS/SSL encryption is disabled by default for the superserver.
    This enables attackers to intercept sensitive data transmitted in cleartext, including
    login credentials, and subsequently use those credentials to gain unauthorized
    access to the device.
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
  network:
    category: network
    name: Network telemetry
    telemetry:
    - network
tlp: clear
type: investigation
---


# InterSystems IRIS Cleartext Credential Exposure and Access

This hunt identifies vulnerable deployments of InterSystems IRIS for Health where TLS/SSL is disabled by default on the superserver. The hunt first scopes the estate for affected software versions using inventory data. It then examines network traffic on the default superserver port to detect unencrypted communication patterns. Finally, an agent correlates these traffic spikes with authentication logs to identify unauthorized logins using potentially intercepted credentials.

## find-vulnerable-iris
<!-- Identify vulnerable IRIS deployments -->
Locate hosts running affected versions of InterSystems IRIS for Health to scope the investigative window.

```sqlite target=endpoint role=scoping params=(vulnerable_versions=vulnerable_versions)
~~~yaml
expected: A list of hosts running affected versions. Zero rows indicates no vulnerable
  versions are present in current inventory.
reads:
- device_hostname
- package_name
- package_version
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-10-23'
~~~
SELECT device_hostname, device_uid, package_name, package_version, install_path FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%intersystems iris%' AND instr(',' || '{{vulnerable_versions}}' || ',', ',' || package_version || ',') > 0
```

## evaluate-lead
<!-- Initial Lead Assessment -->
```agent target=hunter
cite: required
context:
- find-vulnerable-iris
max_iterations: 3
objective: Identify the vulnerable IRIS hosts from the inventory results and determine
  if any warrant immediate prioritization.
success_criteria: A clear decision on whether to proceed and which hosts to target.
tools:
- endpoint
- identity
- network
```

## gate-decision
<!-- Continue to Traffic Analysis -->
if~: "at least one host running a vulnerable version of InterSystems IRIS" (confidence: high, judge=hunter)
then: → deep-investigation
indeterminate: → manual-review
unavailable: → manual-review (blind_spot: no-inventory-data)
else: → close-out

## deep-investigation
<!-- Analyze Traffic and Access -->
parallel:
- → superserver-traffic
- → iris-host-logins
join: → triage-findings

## superserver-traffic
<!-- Examine IRIS Superserver Traffic -->
Identify hosts with significant traffic on the default unencrypted port 1972.

```sqlite target=network role=baseline params=(iris_port=iris_port, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Source IPs communicating with the IRIS hosts on port 1972. Heavy usage from
  unexpected external IPs suggests potential interception risks.
prevalence:
  by: device_hostname
  key:
  - src_endpoint_ip
  rare_below: 3
reads:
- device_hostname
- src_endpoint_ip
- dst_endpoint_port
- traffic_bytes
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-10-23'
~~~
SELECT device_hostname, src_endpoint_ip, COUNT(*) AS connection_count, SUM(traffic_bytes) AS total_bytes, MIN(time) AS first_seen, MAX(time) AS last_seen FROM hb_network_connection WHERE dst_endpoint_port = {{iris_port}} AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, src_endpoint_ip ORDER BY total_bytes DESC
```

## iris-host-logins
<!-- Correlate Sign-ins to IRIS Hosts -->
Detect successful logins to vulnerable hosts that might follow credential interception.

```sqlite target=identity role=enrichment params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Recent successful logins to the targeted hosts. Focus on logins where the
  source IP matches traffic patterns seen in the network step.
reads:
- dst_endpoint_hostname
- actor_user_name
- src_endpoint_ip
- status_id
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-10-23'
~~~
SELECT dst_endpoint_hostname, actor_user_name, src_endpoint_ip, auth_protocol, logon_type, status, time FROM hb_auth_signin WHERE status_id = 1 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || dst_endpoint_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') ORDER BY time DESC
```

## triage-findings
<!-- Synthesize Evidence -->
```agent target=hunter
cite: required
context:
- evaluate-lead
- superserver-traffic
- iris-host-logins
max_iterations: 6
objective: Determine if any vulnerable IRIS host shows evidence of credential theft
  via unencrypted traffic and subsequent unauthorized sign-ins.
success_criteria: A final verdict of malicious, suspicious, or benign per host.
tools:
- endpoint
- identity
- network
```

## route-findings
<!-- Route on Triage Verdict -->
if~: "the triage-findings verdict is malicious for at least one host due to unauthorized logins correlating with superserver traffic" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → manual-review
unavailable: → manual-review (blind_spot: no-network-telemetry)
else: → manual-review

## isolate-host
<!-- Isolate Compromised Host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the compromised IRIS host and revoke any active sessions for accounts that logged in during the suspicious window.
```
→ manual-review

## manual-review
<!-- Analyst Review and Verification -->
```manual target=analyst
Review the correlated authentication and network traffic rows. Verify if the IRIS server uses TLS and confirm whether the source IP belongs to a known authorized administrator.
```
→ close-out

## close-out
<!-- Remediation and Close Out -->
```manual target=analyst
Document the findings. If systems are vulnerable but not compromised, recommend enabling TLS on the IRIS superserver. If evidence of compromise exists, follow standard IR procedures.
```
→ 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.