Question Analysis

During a Linux investigation, you notice processes spawning curl and wget commands that pull a script from a remote GitHub raw URL and pipe it into bash. Identify the name of the script that was retrieved and executed.

d0c88567-803d-4dca-99b4-7ce65e7b257c
Question ID
4/16
Models Correct
1
Valid Answer
25%
Success Rate
Reference Answer

Human-validated correct answer for this question

echo-art-fish.sh
Model Performance Comparison

See how different AI models performed on this question

ModelAnswerKQL QueryStatusAttemptsTimeCost
gemini-2.5-flash-preview-04-17
No answer provided
No query generated
Incorrect
5
0.00s
0.0330
gpt-35-turbo
No answer provided
No query generated
Incorrect
5
0.00s
0.0114
gpt-4-turbo-2024-04-09
LinEnum.sh
DeviceProcessEvents | where ProcessCommandLine has_any('curl', 'wget') and ProcessCommandLine contains 'bash' | extend ScriptUrl = tostring(split(ProcessCommandLine, '|')[0]) | extend ScriptName = tostring(split(ScriptUrl, '/')[array_length(split(ScriptUrl, '/')) - 1]) | project DeviceName, FileName, ProcessCommandLine, ScriptUrl, ScriptName
Incorrect
1
14.74s
0.0732
gpt-4.1
No answer provided
No query generated
Incorrect
5
0.00s
0.0434
gpt-4.1-finetuned
No answer provided
No query generated
Incorrect
5
0.00s
0.0426
gpt-4.1-mini
pipe-to-shell.sh
DeviceProcessEvents | where ProcessCommandLine contains @"curl" or ProcessCommandLine contains @"wget" | where ProcessCommandLine contains @"raw.githubusercontent.com" | where ProcessCommandLine contains @"bash" or ProcessCommandLine contains @"| bash" | extend ScriptUrl = extract(@"https?://raw\.githubusercontent\.com[^\s|]+", 0, ProcessCommandLine) | extend ScriptName = extract(@"[^/]+$", 0, ScriptUrl) | project TimeGenerated, DeviceName, ProcessCommandLine, ScriptUrl, ScriptName | distinct ScriptName, DeviceName, TimeGenerated, ProcessCommandLine, ScriptUrl
Incorrect
1
20.65s
0.0029
gpt-4.1-nano
No answer provided
No query generated
Incorrect
5
0.00s
0.0017
gpt-4o
AutoSUID.sh
DeviceProcessEvents | where InitiatingProcessCommandLine contains "curl" or InitiatingProcessCommandLine contains "wget" | where InitiatingProcessCommandLine matches regex @"https:\/\/raw.githubusercontent.com\/.*\.sh" and InitiatingProcessCommandLine contains "bash" | extend ScriptName = extract(@"[\w-]+\.sh", 0, InitiatingProcessCommandLine) | project Timestamp, DeviceId, DeviceName, InitiatingProcessCommandLine, ScriptName
Incorrect
1
24.29s
0.0201
grok-3-beta
echo-art-fish.sh
DeviceProcessEvents | where ProcessCommandLine contains 'curl' or ProcessCommandLine contains 'wget' | where ProcessCommandLine contains 'github' | where ProcessCommandLine contains '| bash' | extend ScriptName = extract('.*\\/([^\\/\\?\\s]+)', 1, ProcessCommandLine) | project Timestamp, DeviceName, ProcessCommandLine, ScriptName | order by Timestamp desc
Correct
5
39.67s
0.0947
grok-3-mini-beta
pipe-to-shell.sh
DeviceProcessEvents | where ProcessCommandLine matches regex @'\bcurl\b.*\|\b.*\bbash\b' or ProcessCommandLine matches regex @'\bwget\b.*\|\b.*\bbash\b' | extend FullURL = extract(@'(https?://[^\s|]+)', 1, ProcessCommandLine) | extend arr = split(FullURL, '/') | extend ScriptName = arr[array_length(arr) - 1] | project TimeGenerated, DeviceName, ProcessCommandLine, ScriptName | summarize ScriptNames = make_set(ScriptName) by DeviceName
Incorrect
3
36.57s
0.0045
o1-high
LinEnum.sh
DeviceProcessEvents | where ActionType == "ProcessCreated" | where ProcessCommandLine has_any ("curl", "wget") | where ProcessCommandLine has "raw.githubusercontent.com" and ProcessCommandLine has "bash" | extend DownloadedUrl = extract(@"(https?:\/\/[^\s|]+)", 0, ProcessCommandLine) | extend ScriptName = extract(@"\/([^\/\?]+)(\?.*)?$", 1, DownloadedUrl) | project TimeGenerated, DeviceId, DeviceName, AccountName, ProcessCommandLine, DownloadedUrl, ScriptName | summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by DeviceId, DeviceName, AccountName, ScriptName | order by EndTime desc
Incorrect
2
115.36s
0.6308
o1-low
echo-art-fish.sh
DeviceProcessEvents | where ActionType == "ProcessCreated" | where tolower(InitiatingProcessCommandLine) has_any ("curl", "wget") and tolower(InitiatingProcessCommandLine) has "raw.githubusercontent.com" and tolower(InitiatingProcessCommandLine) has "| bash" | extend ScriptName = extract(@"raw\.githubusercontent\.com[^ ]+/(?<script>[^ ]+)", 1, tolower(InitiatingProcessCommandLine)) | project Timestamp, DeviceName, InitiatingProcessCommandLine, ScriptName | order by Timestamp desc
Correct
3
61.01s
0.5518
o3-mini-high
echo-art-fish.sh
DeviceProcessEvents | where ProcessCommandLine has_any ("curl", "wget") | where ProcessCommandLine contains "raw.githubusercontent.com" | where ProcessCommandLine contains "| bash" | extend ScriptName = extract(@"https?://raw\.githubusercontent\.com/[^/]+/[^/]+/[^/]+/([^ \|]+)", 1, ProcessCommandLine) | where isnotempty(ScriptName) | summarize Occurrences = count() by ScriptName, ProcessCommandLine | order by Occurrences desc
Correct
1
13.12s
0.0088
o3-mini-low
LinEnum.sh
DeviceProcessEvents | where ProcessCommandLine has_any ("curl", "wget") | where ProcessCommandLine contains "raw.githubusercontent.com" | where ProcessCommandLine contains "bash" | extend ScriptName = extract(@"raw\.githubusercontent\.com/\S+/([^/]+\.sh)", 1, ProcessCommandLine) | where isnotempty(ScriptName) | distinct ScriptName
Incorrect
1
61.96s
0.0116
o4-mini-high
echo-art-fish.sh
DeviceProcessEvents | where TimeGenerated between (startofday(ago(7d)) .. now()) // timerange will be set by the external control | where ProcessCommandLine has_any ("curl", "wget") | where ProcessCommandLine contains "raw.githubusercontent.com" | where ProcessCommandLine contains "bash" or ProcessCommandLine contains "|" // Extract the raw.githubusercontent.com URL | extend DownloadUrl = extract(@"(https?://raw\.githubusercontent\.com/[^\s|]+)", 1, ProcessCommandLine) | where isnotempty(DownloadUrl) // Parse out the script name (last segment of the URL) | extend ScriptName = tostring(split(DownloadUrl, "/")[array_length(split(DownloadUrl, "/")) - 1]) | project TimeGenerated, DeviceName, InitiatingProcessFileName, ProcessCommandLine, DownloadUrl, ScriptName | sort by TimeGenerated desc
Correct
1
30.30s
0.0134
o4-mini-low
pipe-to-shell.sh
DeviceProcessEvents | where ActionType == "ProcessCreated" // Only look for curl or wget invocations | where ProcessCommandLine contains "curl" or ProcessCommandLine contains "wget" // Focus on raw GitHub URLs | where ProcessCommandLine contains "raw.githubusercontent.com" // Extract the full URL being fetched | extend DownloadUrl = extract(@"(https?://raw\.githubusercontent\.com/[^\s'""\|]+)", 1, ProcessCommandLine) | where isnotempty(DownloadUrl) // Derive the script name from the URL by taking the last path segment | extend ScriptName = tostring(split(DownloadUrl, "/")[-1]) // Filter for typical shell script extensions | where ScriptName endswith ".sh" or ScriptName endswith ".bash" // Summarize by script name to see which scripts were pulled and executed | summarize Count = count() by ScriptName | sort by Count desc
Incorrect
4
108.17s
0.0301