OpenAI ChatGPT Enterprise Slack Query Burst
Detects a ChatGPT Enterprise user issuing ten or more distinct Slack app search queries in a five-minute bucket. Adversaries who abuse a linked Slack connector after session compromise often run rapid multi-query searches across channels and messages to locate sensitive content before collection or exfiltration.
Elastic rule (View on GitHub)
1[metadata]
2creation_date = "2026/10/08"
3integration = ["openai_chatgpt_enterprise"]
4maturity = "production"
5updated_date = "2026/10/09"
6
7[rule]
8author = ["Elastic"]
9description = """
10Detects a ChatGPT Enterprise user issuing ten or more distinct Slack app search queries in a five-minute bucket.
11Adversaries who abuse a linked Slack connector after session compromise often run rapid multi-query searches across
12channels and messages to locate sensitive content before collection or exfiltration.
13"""
14false_positives = [
15 """
16 Incident responders, support engineers, or community managers who run many Slack search refinements in a short
17 window. Validate the query values and business context before escalating.
18 """,
19 """
20 Approved automation that uses ChatGPT's Slack connector for triage or knowledge lookup. Raise the distinct-query
21 threshold if those roles remain noisy.
22 """,
23]
24from = "now-30m"
25interval = "5m"
26language = "esql"
27license = "Elastic License v2"
28name = "OpenAI ChatGPT Enterprise Slack Query Burst"
29note = """## Triage and analysis
30
31### Investigating OpenAI ChatGPT Enterprise Slack Query Burst
32
33One user ran ten or more distinct Slack app searches in five minutes. That pattern can indicate using ChatGPT's Slack
34connector to enumerate channels or messages at volume for collection.
35
36Escalate when queries look like bulk discovery (many channels, sequential refinements, sensitive keywords), downloads
37or shares follow, or the actor is unexpected. Close as a false positive for approved incident-response or support
38search bursts.
39
40#### Possible investigation steps
41
42- Review `Esql.query_values`, `Esql.query_count_distinct`, and `Esql.event_count` on the alert.
43- Correlate with nearby conversation messages asking ChatGPT to search Slack or retrieve messages or files.
44- Check subsequent file downloads, conversation shares, or Codex MCP Slack tool calls from the same user.
45- Confirm whether the Slack connector is approved for that user and whether the search volume matches their role.
46
47### False positive analysis
48
49- Support and incident-response teams commonly refine Slack searches many times in one session.
50- Raise `Esql.query_count_distinct` (default 10) above your baseline if heavy Slack-connector users remain noisy.
51
52### Response and remediation
53
54- If unauthorized, revoke Slack connector access for the user, review retrieved messages and files, and treat exposed
55 content per your data-incident process.
56- Hunt for follow-on downloads, shares, or external forwarding of the matched content.
57"""
58references = [
59 "https://www.elastic.co/docs/reference/integrations/openai_chatgpt_enterprise",
60 "https://platform.openai.com/docs/compliance",
61]
62risk_score = 47
63rule_id = "b3785d4f-ce8a-4c36-bdd6-5e652d26a8ca"
64setup = """## Setup
65
66This rule requires the OpenAI ChatGPT Enterprise integration to collect `app_log` events for the Slack app, including
67request logs with `openai_chatgpt_enterprise.app_log.query` populated.
68
69https://www.elastic.co/docs/reference/integrations/openai_chatgpt_enterprise
70"""
71severity = "medium"
72tags = [
73 "Domain: GenAI",
74 "Platform: OpenAI",
75 "Data Source: OpenAI ChatGPT Enterprise",
76 "Service: OpenAI ChatGPT Enterprise",
77 "Use Case: Threat Detection",
78 "Resources: Investigation Guide",
79 "Rule Type: ES|QL",
80 "Tactic: Collection",
81 "Tactic: Discovery",
82 "Mitre Atlas: AML.T0053",
83 "Mitre Atlas: AML.T0085",
84]
85timestamp_override = "event.ingested"
86type = "esql"
87
88query = '''
89from logs-openai_chatgpt_enterprise.app_log-*
90| where
91 data_stream.dataset == "openai_chatgpt_enterprise.app_log" and
92 openai_chatgpt_enterprise.app_log.app_name == "Slack" and
93 openai_chatgpt_enterprise.app_log.log_type == "request" and
94 openai_chatgpt_enterprise.app_log.query is not null and
95 user.email is not null
96| eval Esql.time_bucket = date_trunc(5 minutes, @timestamp)
97| stats
98 Esql.query_count_distinct = count_distinct(openai_chatgpt_enterprise.app_log.query),
99 Esql.event_count = count(*),
100 Esql.query_values = values(openai_chatgpt_enterprise.app_log.query),
101 Esql.timestamp_first_seen = min(@timestamp),
102 Esql.timestamp_last_seen = max(@timestamp)
103 by
104 user.email,
105 organization.id,
106 Esql.time_bucket
107| where Esql.query_count_distinct >= 10
108| keep
109 user.email,
110 organization.id,
111 Esql.time_bucket,
112 Esql.query_count_distinct,
113 Esql.event_count,
114 Esql.query_values,
115 Esql.timestamp_first_seen,
116 Esql.timestamp_last_seen
117'''
118
119
120[[rule.threat]]
121framework = "MITRE ATT&CK"
122[[rule.threat.technique]]
123id = "T1213"
124name = "Data from Information Repositories"
125reference = "https://attack.mitre.org/techniques/T1213/"
126
127
128[rule.threat.tactic]
129id = "TA0009"
130name = "Collection"
131reference = "https://attack.mitre.org/tactics/TA0009/"
132[[rule.threat]]
133framework = "MITRE ATT&CK"
134[[rule.threat.technique]]
135id = "T1083"
136name = "File and Directory Discovery"
137reference = "https://attack.mitre.org/techniques/T1083/"
138
139
140[rule.threat.tactic]
141id = "TA0007"
142name = "Discovery"
143reference = "https://attack.mitre.org/tactics/TA0007/"
144[[rule.threat_mappings]]
145framework = "MITRE ATLAS"
146version = "2026.08"
147[[rule.threat_mappings.threat]]
148framework = "MITRE ATLAS"
149[[rule.threat_mappings.threat.technique]]
150id = "AML.T0053"
151name = "AI Agent Tool Invocation"
152reference = "https://atlas.mitre.org/techniques/AML.T0053/"
153
154
155[rule.threat_mappings.threat.tactic]
156id = "AML.TA0005"
157name = "Execution"
158reference = "https://atlas.mitre.org/tactics/AML.TA0005/"
159[[rule.threat_mappings.threat]]
160framework = "MITRE ATLAS"
161[[rule.threat_mappings.threat.technique]]
162id = "AML.T0085"
163name = "Data from AI Services"
164reference = "https://atlas.mitre.org/techniques/AML.T0085/"
165
166
167[rule.threat_mappings.threat.tactic]
168id = "AML.TA0009"
169name = "Collection"
170reference = "https://atlas.mitre.org/tactics/AML.TA0009/"
171
172[rule.alert_suppression]
173group_by = ["user.email", "organization.id", "Esql.time_bucket"]
174missing_fields_strategy = "suppress"
175
176[rule.investigation_fields]
177field_names = [
178 "user.email",
179 "organization.id",
180 "Esql.time_bucket",
181 "Esql.query_count_distinct",
182 "Esql.event_count",
183 "Esql.query_values",
184 "Esql.timestamp_first_seen",
185 "Esql.timestamp_last_seen",
186]
187
188[rule.alert_suppression.duration]
189unit = "h"
190value = 1
Triage and analysis
Investigating OpenAI ChatGPT Enterprise Slack Query Burst
One user ran ten or more distinct Slack app searches in five minutes. That pattern can indicate using ChatGPT's Slack connector to enumerate channels or messages at volume for collection.
Escalate when queries look like bulk discovery (many channels, sequential refinements, sensitive keywords), downloads or shares follow, or the actor is unexpected. Close as a false positive for approved incident-response or support search bursts.
Possible investigation steps
- Review
Esql.query_values,Esql.query_count_distinct, andEsql.event_counton the alert. - Correlate with nearby conversation messages asking ChatGPT to search Slack or retrieve messages or files.
- Check subsequent file downloads, conversation shares, or Codex MCP Slack tool calls from the same user.
- Confirm whether the Slack connector is approved for that user and whether the search volume matches their role.
False positive analysis
- Support and incident-response teams commonly refine Slack searches many times in one session.
- Raise
Esql.query_count_distinct(default 10) above your baseline if heavy Slack-connector users remain noisy.
Response and remediation
- If unauthorized, revoke Slack connector access for the user, review retrieved messages and files, and treat exposed content per your data-incident process.
- Hunt for follow-on downloads, shares, or external forwarding of the matched content.
References
Related rules
- OpenAI ChatGPT Enterprise Google Drive Sensitive Query Burst
- OpenAI ChatGPT Enterprise Suspicious Gmail Discovery
- OpenAI ChatGPT Enterprise High Codex MCP Tool Diversity
- OpenAI ChatGPT Enterprise Google Drive Download Burst
- OpenAI ChatGPT Enterprise Unusual Codex Plugin Installed