Threat Overview
CVE-2026-63077 is a critical unauthenticated remote-code-execution vulnerability in JetBrains TeamCity On-Premises. JetBrains patched it in July and confirmed active exploitation in August, so the vulnerability itself is not new. The September 24 intelligence change is that current CISA reporting now associates the vulnerability with known ransomware campaign use. The flaw is reachable over HTTP(S) through the TeamCity agent polling protocol and can execute operating-system commands with the privileges of the TeamCity server process.
References
- BleepingComputer, September 24, 2026 – https://www.bleepingcomputer.com/news/security/cisa-ransomware-gangs-now-exploiting-critical-teamcity-flaw/
- JetBrains – https://blog.jetbrains.com/teamcity/2026/08/cve-2026-63077-update/
- JetBrains – https://blog.jetbrains.com/teamcity/2026/07/cve-2026-63077/
Impacted Systems
JetBrains TeamCity On-Premises versions earlier than 2025.11.7 and 2026.1.3. A security patch plugin is available for TeamCity 2017.1 and later when upgrade is not immediately possible. TeamCity Cloud is not affected. Exposure requires HTTP(S) network reachability to the TeamCity server.
Why this matters
The new ransomware association raises the operational priority of any remaining unpatched TeamCity exposure. TeamCity often holds source code, build secrets, deployment credentials, and access to downstream environments, making it a high-impact initial-access target.
Exploitation Status
Active exploitation has been confirmed since August. The September 24 update is the ransomware-use escalation, not a newly disclosed vulnerability. JetBrains reports attempted and successful exploitation of unpatched servers. Patched servers can still show blocked exploit artifacts such as unauthorized agents named scan-<random digits> with ForbiddenClassException entries.
What this hunt looks for
Unauthorized TeamCity agents, scan-<digits> names, XStream ForbiddenClassException or ConversionException activity, TeamCity Java processes spawning shells, new scripts or JSP files, service persistence, credential-access tooling, and new outbound destinations.
Required logs
TeamCity application logs forwarded to Syslog or another Sentinel table, Defender XDR DeviceProcessEvents, DeviceFileEvents and DeviceNetworkEvents when the host is onboarded, and Windows SecurityEvent where TeamCity runs on Windows.
First Pass – TeamCity Exploit Log Indicators
Syslog
| where TimeGenerated >= ago(30d)
| where SyslogMessage has_any ("ForbiddenClassException","ConversionException","scan-")
| project TimeGenerated,Computer,HostName,ProcessName,SeverityLevel,SyslogMessage
| order by TimeGenerated descUnauthorized scan- Agent Pattern
Syslog
| where TimeGenerated >= ago(30d)
| where SyslogMessage matches regex @"scan-[0-9]+"
| project TimeGenerated,Computer,HostName,ProcessName,SeverityLevel,SyslogMessage
| order by TimeGenerated descTeamCity Java Spawning Shells
DeviceProcessEvents
| where Timestamp >= ago(30d)
| where InitiatingProcessFileName in~ ("java","java.exe")
| where InitiatingProcessCommandLine has "TeamCity"
| where FileName in~ ("sh","bash","dash","cmd.exe","powershell.exe","pwsh.exe","python","python3","curl","wget")
| project Timestamp,DeviceName,AccountName,InitiatingProcessCommandLine,FileName,ProcessCommandLine,SHA256
| order by Timestamp descTeamCity-Created JSP and Script Files
DeviceFileEvents
| where Timestamp >= ago(30d)
| where InitiatingProcessFileName in~ ("java","java.exe")
| where InitiatingProcessCommandLine has "TeamCity"
| where FileName endswith ".jsp" or FileName endswith ".war" or FileName endswith ".sh" or FileName endswith ".ps1" or FileName endswith ".bat"
| project Timestamp,DeviceName,ActionType,FileName,FolderPath,SHA256,InitiatingProcessCommandLine
| order by Timestamp descTeamCity Host Outbound Network Activity
DeviceNetworkEvents
| where Timestamp >= ago(30d)
| where InitiatingProcessFileName in~ ("java","java.exe")
| where InitiatingProcessCommandLine has "TeamCity"
| project Timestamp,DeviceName,InitiatingProcessCommandLine,RemoteUrl,RemoteIP,RemotePort
| order by Timestamp descNew TeamCity Outbound Destinations
let Known=DeviceNetworkEvents
| where Timestamp between (ago(30d)..ago(7d))
| where InitiatingProcessFileName in~ ("java","java.exe")
| where InitiatingProcessCommandLine has "TeamCity"
| summarize by DeviceId,RemoteIP,RemoteUrl;
DeviceNetworkEvents
| where Timestamp >= ago(7d)
| where InitiatingProcessFileName in~ ("java","java.exe")
| where InitiatingProcessCommandLine has "TeamCity"
| join kind=leftanti Known on DeviceId,RemoteIP,RemoteUrl
| project Timestamp,DeviceName,InitiatingProcessCommandLine,RemoteUrl,RemoteIP,RemotePort
| order by Timestamp descPost-Exploitation Credential Tooling
DeviceProcessEvents
| where Timestamp >= ago(30d)
| where ProcessCommandLine has_any ("sekurlsa","lsass","comsvcs.dll","procdump","reg save hklm\\sam","ntdsutil","rclone","7z ","7za ")
| project Timestamp,DeviceName,AccountName,FileName,ProcessCommandLine,InitiatingProcessFileName,InitiatingProcessCommandLine
| order by Timestamp descWindows Service Persistence
SecurityEvent
| where TimeGenerated >= ago(30d)
| where EventID == 7045
| project TimeGenerated,Computer,Account,Activity,EventData
| order by TimeGenerated descDetection Notes
A scan-<digits> agent plus ForbiddenClassException on a patched server can represent a blocked exploit attempt rather than compromise. Application logs should be correlated with child processes, file creation, and network activity. The TeamCity string in Defender process command lines depends on deployment details and may need local adjustment.