Published
- 19 min read
The TeamCity Flaw Shows Why a Build Server Is a Release Identity
Stay Safe Online Without Making It Your Second Job
The Digital Fortress (Second Edition)
A warm, plain-English guide for people with real lives and finite patience. Learn the handful of habits that genuinely protect your money, accounts, and family, and get honest permission to ignore the rest.
For People Who Cannot Afford to Get Privacy Wrong
The Anonymity Playbook (Second Edition)
A practitioner’s field manual for journalists protecting sources, whistleblowers, and activists. It explains how the surveillance actually works, what each technique costs you, and exactly where it fails.
Write, Ship, and Maintain Code Without Shipping Vulnerabilities
Secure Software Development
A hands-on security guide for developers and IT professionals who ship real software. Build, deploy, and maintain secure systems without slowing down or drowning in theory.
Use AI Coding Agents Without Losing Control of Your Codebase
The Secure Harness
A calm, practical guide to letting agents do useful work inside boundaries you set, enforce, and audit. Ships with 15 copy-pasteable artifacts: hook scripts, permission configs, release gates, and MCP templates.
Stop Shipping Demos. Start Shipping Systems.
The AI Native Engineer
Sixteen hands-on chapters, one real product. Grow it from a single model call into a retrieved, tool-using, observable, production-grade system, with evaluation treated as a habit from the first feature.
A build server sits behind a plain web login and spends most of its day turning source code into files. That makes it easy to file under development tooling. Yet the same machine may hold repository tokens, start cloud workers, sign releases, publish packages, and send artifacts toward production.
On 5 August 2026, the US Cybersecurity and Infrastructure Security Agency added CVE-2026-63077, a critical flaw in JetBrains TeamCity On-Premises, to its Known Exploited Vulnerabilities catalog. The entry means CISA has evidence of real-world exploitation. Two days later, JetBrains said it had received reports of both successful and attempted exploitation against unpatched servers. (CISA, JetBrains)
The immediate instruction is simple. Operators of TeamCity On-Premises should update to 2025.11.7 or 2026.1.3, or install JetBrains’ security patch plugin if an upgrade cannot happen yet. TeamCity Cloud customers do not need to act on this specific flaw because JetBrains says the required measures were already applied there. (JetBrains)
Patching deserves urgency, but treating this as a patch-only story leaves the harder question unanswered. If an attacker reached the build server before the fix, what else became untrustworthy? The answer may include credentials, build agents, cached dependencies, project settings, and releases that already left the machine. A build server is a release identity with a web interface. Response plans should treat it that way.
What changed between disclosure and this week
JetBrains first disclosed CVE-2026-63077 on 27 July 2026. Its advisory said every version of TeamCity On-Premises was affected and that a person who could reach the server over HTTP or HTTPS might run operating-system commands without authenticating. At that point, JetBrains said it knew of no active exploitation. (JetBrains)
That last fact changed quickly. CISA placed the flaw in its Known Exploited Vulnerabilities catalog on 5 August. JetBrains followed on 7 August with its own statement that unpatched servers had faced attempted and successful exploitation. Rapid7 also updated its analysis to reflect the CISA decision, while The Hacker News added technical details from Rapid7 on 10 August. The public record now supports a firm conclusion: this is a flaw being used, rather than a theoretical weakness waiting for attention. (Rapid7, The Hacker News)
The known facts still have limits. As of 11 August 2026, the public advisories reviewed for this article do not identify the attackers, count compromised organizations, or describe one common objective. CISA’s catalog confirms exploitation, while JetBrains confirms reports from customers or investigators. Neither source turns that evidence into a complete campaign report. A calm response starts with what is proved and does not fill the gaps with an imagined threat group.
The vulnerability carries a Common Vulnerability Scoring System score of 9.8. More useful than the number is the path it describes. An unauthenticated caller who can reach a vulnerable TeamCity server can send data through the agent polling protocol, cross a failed trust check, and execute commands with the rights of the TeamCity server process. No stolen password or user click is required. (Rapid7)
JetBrains gave administrators two log patterns to review. An occurrence of com.thoughtworks.xstream.converters.ConversionException may indicate an attempted or successful exploit, though that message alone does not prove compromise. On a patched server, com.thoughtworks.xstream.security.ForbiddenClassException may show that the fix blocked an attempt. JetBrains also advised checking unauthorized build agents for unexpected names beginning with scan, while warning that the displayed agent date may differ from the time of the relevant request. (JetBrains)
Those indicators are useful triage aids, not an all-clear mechanism. Logs can be incomplete, altered, rotated, or collected for too short a period. JetBrains’ standing incident guidance explicitly warns that missing evidence in local logs does not prove a server stayed clean. A team that left a vulnerable instance reachable during the exploitation window should make its decision from exposure, available evidence, and the authority held by the service, rather than from one unsuccessful search. (JetBrains incident guidance)
How the agent channel became a command channel
TeamCity servers need to communicate with build agents. An agent asks for work, receives build settings and source details, runs jobs, then sends progress and results back. That relationship requires a protocol. CVE-2026-63077 turned part of that expected protocol surface into a route for hostile objects.
The technical term is unsafe deserialization. Serialization converts an in-memory object into data that can travel or be stored. Deserialization performs the reverse operation. A server receives bytes or structured text and reconstructs an object that its program can use. This is ordinary plumbing until the sender can influence which classes are rebuilt and those classes perform dangerous work while being created or used.
Rapid7’s analysis, summarized by The Hacker News on 10 August 2026, traced the problem to an XStream allowlist. XStream is the Java library handling the object conversion in this path. TeamCity added protocol classes that unauthenticated agent requests needed, but the configuration did not first remove XStream’s existing default permissions. The resulting list was more permissive than its name suggested. The patch adds NoTypePermission.NONE before TeamCity’s approved classes, clearing the defaults so the later entries become an exclusive list. (The Hacker News, Rapid7)
Picture a loading dock with a printed list of five approved suppliers. Staff add those five names to a visitor sheet but forget that the sheet already says, “all delivery drivers admitted.” The new names look restrictive when read alone. The older rule still controls the door. A proper allowlist begins from nobody, then grants the smallest set of entries needed.
The software failure matters because the endpoint sat before authentication. Agent communication has to begin somewhere, and some messages arrive before a full trust relationship exists. Code at that edge should parse the smallest possible data format and reject every object type outside a short, tested set. Here, an attacker could reach object construction before proving identity, then steer that process toward command execution.
The command ran with the TeamCity server process’s operating-system rights. That qualifier decides the size of the first blast radius. A server running as an administrator, SYSTEM, or root gives an exploit broad control of its host. A dedicated, low-privilege account narrows what the initial process can read and change. JetBrains recommends the latter and also recommends keeping the TeamCity server on a dedicated host, separate from build agents. (JetBrains)
Low privilege helps without making the event harmless. The application itself must read its configuration and coordinate builds. It may have access to project metadata, stored connections, artifacts, agent relationships, and secrets needed for external services. The server process can be correctly restricted at the operating-system layer and still possess enough application authority to alter what a team ships.
This is why a vulnerability description that ends at “remote code execution” is technically correct but operationally thin. The first command is only the entry point. The valuable outcome is control over a system trusted by developers, repositories, agents, registries, and deployment targets. The incident scope follows those trust relationships.
A build server can speak for the whole engineering team
A web application server usually proves its identity to a database and a few supporting services. A build server often sits at the meeting point of the software factory. It reads source repositories, downloads dependencies, handles credentials, starts workers, produces binaries, writes package registries, and sometimes deploys directly. Each connection lets automation act without waiting for a person.
JetBrains’ own compromise guidance lists the kinds of service credentials that TeamCity may hold: version-control systems, Slack or mail notifications, cloud profiles, package and container registries, issue trackers, and services that issue temporary credentials to agents. Custom project parameters may contain more. The exact inventory differs by installation, which is why incident response has to discover what the server could reach instead of relying on a generic checklist. (JetBrains incident guidance)
Consider a common release path. TeamCity checks out a private repository with a read token, retrieves a signing secret at build time, compiles a package on an agent, pushes that package to a registry, and calls a deployment API. The server may never hold every secret in clear text at once. It still chooses the job, the revision, the agent, and the commands that request those credentials.
Control of the coordinator can therefore cross several boundaries. A modified build configuration could ask an agent to package different code. A changed repository root could fetch from an attacker-controlled location. A hostile plugin could extend behavior on the server and agents. A stolen registry token could publish outside the normal process. A tainted cache might influence later builds after the obvious server change has been removed.
Release integrity becomes the central concern. A binary can pass through a familiar pipeline, receive a normal filename, and appear in the usual registry while containing code that was absent from the reviewed commit. The artifact’s location proves where it was stored. It does not prove that a trustworthy process produced it.
The same distinction applies to audit history. A green build means TeamCity recorded a successful job. If the system making that record was under hostile control, the status cannot independently attest to itself. Teams need evidence outside the compromised control plane, such as repository history, external logs, signing-service records, registry events, deployment records, and reproducible builds from a clean environment.
Build agents widen the question. JetBrains says any agent connected while the server was compromised may be at risk if it ran a modified build, received a plugin, or was reached through the Agent Terminal feature. Those agents may have their own system accounts, workspaces, caches, network routes, and temporary credentials. A clean-looking coordinator does not settle the state of workers that accepted instructions from it. (JetBrains incident guidance)
Older events show why this deserves care. In December 2023, CISA and partner agencies reported that Russia’s Foreign Intelligence Service had exploited a different TeamCity vulnerability, CVE-2023-42793, at scale since September of that year. The advisory said access to a TeamCity server could expose source code, signing certificates, and the ability to alter software compilation and deployment processes. That history does not identify the actors using the 2026 flaw. It does show that capable groups understand the strategic value of build infrastructure. (CISA 2023 advisory)
The durable model is straightforward: treat the build service as a non-human release identity. It has permissions, sessions, trusted peers, and a history of actions. Give it only the authority required for the current job. Record what it does somewhere it cannot rewrite. Prepare to revoke and rebuild it as deliberately as you would respond to a compromised administrator account.
Why installing the patch may be only the first step
An update prevents future use of the fixed path. It cannot undo a command that ran yesterday, remove a token copied last week, or prove that an artifact was built from the reviewed source. This difference between remediation and recovery is where many rushed responses stop too early.
For a server that was never reachable by an attacker, or one patched before the exposure window with strong evidence to support that timeline, updating may be most of the work. Exposure changes the decision. An internet-facing instance left on an affected version after public disclosure and during confirmed exploitation deserves investigation even if it appears normal now.
Start with preservation. Copy TeamCity server logs, operating-system logs, reverse-proxy records, identity-provider events, network telemetry, and relevant cloud or registry audit data into secured storage. Record clocks and retention limits. Avoid cleaning suspicious files before investigators have captured the evidence needed to understand when they appeared and what used them.
Then isolate a suspected server from internal and external networks. JetBrains recommends isolation as the first response when compromise is suspected because unknown processes or a backdoor may retain access. Connected agents that may have run modified work also warrant isolation or replacement. Disposable agents earn their keep here: deleting a short-lived worker and creating a known-clean one is much safer than trying to prove a long-lived, shared machine has no hidden changes. (JetBrains incident guidance, JetBrains security notes)
Credential rotation has to follow reachability. JetBrains tells responders to rotate credentials for external services available to TeamCity and audit those services for unfamiliar changes. That may include repository tokens, registry credentials, cloud roles, mail accounts, chat integrations, issue trackers, and user tokens. Rotate from a clean administrative workstation after containment, so fresh secrets do not flow straight back into a system still under investigation. (JetBrains incident guidance)
Scope every credential by what the service process could obtain or cause, not only by what appeared in a log file. A secret broker may issue short-lived credentials rather than storing a long-lived key on disk. If the compromised server could request those credentials, investigators still need to review issuance records and downstream actions. Short lifetime reduces how long a stolen value works; it does not erase actions already taken with it.
Project configuration deserves a separate review. Examine new users, changed authentication settings, created or deleted access tokens, unfamiliar projects, modified build steps, changed repository roots, internal properties, plugins, and tools. Compare versioned settings against a trusted repository state, but remember that an attacker with repository write access could change both sides of that comparison.
Artifacts require an explicit decision. JetBrains advises treating artifacts produced during the possible compromise period as unsafe when build agents or project configurations may have been altered. That includes ordinary release files and less visible outputs such as build caches. Rebuild affected releases from a trusted commit on clean infrastructure, compare outputs where reproducible builds permit it, and decide whether packages, containers, or deployments need replacement. (JetBrains incident guidance)
This may feel disproportionate when the only visible evidence is an error message. The alternative is allowing a compromised system to certify its own recovery. Investigation can reduce the scope as evidence improves. It should begin from the authority the server had during the exposed period.
A practical response sequence for TeamCity operators
The work becomes manageable when the team separates immediate containment from the longer release-integrity review. One incident owner should keep a dated record of decisions, affected systems, credentials, and release windows. That record prevents parallel responders from rotating the same token twice while missing the package registry entirely.
-
Confirm the product, version, and exposure window. Identify every TeamCity On-Premises server, including test, disaster-recovery, and forgotten migration instances. Record whether each login screen or agent endpoint was reachable from the internet or from untrusted networks. Compare installation and patch times with the 27 July disclosure, the 5 August CISA entry, and the 7 August JetBrains exploitation update.
-
Patch before returning service. Upgrade to TeamCity 2025.11.7 or 2026.1.3. If an upgrade is temporarily blocked, apply JetBrains’ security patch plugin for TeamCity 2017.1 or later and plan the full upgrade because the plugin fixes only CVE-2026-63077. Confirm the running version and successful patch state rather than trusting that an update job started. (JetBrains)
-
Preserve evidence and hunt for the published clues. Save logs outside the TeamCity host. Search for the XStream conversion and forbidden-class messages in their timestamped context. Review unauthorized agents, especially unexpected names beginning with
scan, and use log timestamps rather than the date shown on an agent record. Check reverse-proxy and firewall records for requests to the server during the exposed period. Treat a hit as a lead to investigate and an empty result as incomplete evidence. -
Contain systems that may have accepted hostile instructions. Isolate a suspected server. Identify agents connected during the relevant time and determine whether they ran builds, received plugins, or allowed terminal access. Replace disposable workers. Restore or rebuild persistent agents from a known-clean state when their integrity cannot be established.
-
Rotate reachable authority from clean systems. Inventory repository, registry, cloud, signing, notification, issue-tracker, database, and user credentials available to TeamCity or its agents. Revoke tokens before issuing replacements where operations allow. Review each external service for unfamiliar actions, new keys, changed permissions, or releases made during the incident window.
-
Review configuration and release output. Compare projects, build steps, version-control roots, plugins, tools, authentication modules, internal properties, users, and tokens against an earlier trusted state. Mark artifacts and caches produced during the suspect period. Rebuild important releases on clean infrastructure and replace outputs that cannot be trusted.
-
Narrow the rebuilt system. Put the server behind a virtual private network, access proxy, or trusted network boundary. Run the TeamCity service as a dedicated low-privilege account on a host separate from agents. Reduce stored credentials, prefer short-lived job credentials, and separate build permission from release permission. Preserve audit logs outside the server.
The sequence should bend around business reality without losing its dependencies. A public package registry may require immediate token revocation before a complete forensic image is available. A hospital or factory may need a controlled maintenance window before isolation. Record the exception, add a compensating control, and return to the skipped work. Quietly declaring the server clean because downtime is inconvenient creates an undocumented risk, not a recovery.
Small teams can still follow the model. One developer might own TeamCity, the cloud account, and the package registry. That makes a written inventory more valuable because there is no second operations group holding the missing map. Stop releases, preserve the available logs, patch, rotate the few powerful credentials, rebuild the latest release, and reduce network exposure before normal work resumes.
Design the pipeline so one server cannot silently become the release
CVE-2026-63077 will eventually disappear from scanners as teams update. The architecture that made the server valuable will remain. A safer pipeline assumes its coordinator can fail and limits which claims that coordinator can make alone.
Network reachability is the first boundary. JetBrains recommends limiting TeamCity to trusted networks and adding a virtual private network or another access layer for servers that would otherwise face the internet. That control would have prevented an arbitrary internet caller from reaching the vulnerable endpoint, even before the product patch existed. It also reduces exposure to the next pre-authentication bug. (JetBrains)
Service identity is the second. Run TeamCity under a dedicated account with minimum operating-system rights. Keep its server separate from build agents. Give repository credentials read access unless a job genuinely needs to write. Split package publication and production deployment into distinct identities. A compile job should not inherit a credential that can change a production environment merely because both operations live in one pipeline.
Secret delivery is the third boundary. Long-lived credentials stored in a coordinator turn every server compromise into a rotation project. Prefer a secret service that issues a narrow credential for one job, one environment, and a short period. Bind issuance to the repository, branch, workflow, and worker identity where the platform supports it. Keep the policy outside TeamCity so changing a build step does not automatically change who may obtain a production token.
Release approval needs an independent check. A useful design lets TeamCity build an artifact but requires a separate service to verify its source revision, test evidence, provenance, and approval before signing or deployment. The build coordinator can request a release. It cannot grant its own request simply by editing its configuration.
External logs provide another independent witness. Send authentication, configuration, token, build, registry, signing, and deployment events to storage the TeamCity service cannot erase. Correlate the commit selected for a build with the digest published to the registry and the digest deployed. The aim is a chain of evidence that survives the loss of any one control plane.
Disposable agents contain residue. JetBrains warns that builds on the same agent are not automatically isolated and recommends separated, throw-away agents for untrusted pull requests. A fresh worker per job reduces the value of a modified workspace, malicious process, or poisoned cache. Network policy should also stop a compile worker from reaching services unrelated to its job. (JetBrains security notes)
Reproducible builds add a different kind of assurance. When the same source and declared inputs produce the same output on clean infrastructure, a team can compare a suspect artifact with a rebuilt one. Full byte-for-byte reproducibility can be difficult, especially when timestamps or external dependencies enter the build. Even partial reproducibility, pinned dependencies, recorded toolchains, and content digests make an investigation less dependent on a green checkmark from the original server.
The Secure Harness applies the same principle to coding agents: autonomy becomes safer when identity, tools, network access, credentials, and release authority meet independent boundaries. Build servers have been autonomous for years. They deserve the same treatment.
The useful lesson is larger than this patch
CVE-2026-63077 is a serious software flaw with a clear vendor fix. As of 11 August 2026, exploitation is confirmed, while the public record does not yet provide a campaign size or named attacker. That is enough evidence for prompt action and not enough for dramatic guesses.
The deeper mistake would be classifying TeamCity as a replaceable web dashboard. Its server can direct workers and speak to systems that developers trust. Once an attacker may have controlled that voice, the response has to examine what it said: which jobs ran, which credentials were reachable, which settings changed, and which artifacts left the pipeline.
Patch the entry point. Then decide whether the release identity was exposed.
Teams that do this well will emerge with more than a fixed version. They will know where their build servers are, which networks can reach them, what each service account may do, how quickly credentials can be revoked, and whether a release can be verified without asking the machine that produced it. Those answers make the next flaw smaller before anyone assigns it a number.
If you want practical security analysis without a daily flood, the newsletter sends one email per month. The signup is on this site.
Sources
- JetBrains: Critical Security Issue Affecting TeamCity On-Premises (CVE-2026-63077), accessed 2026-08-11
- JetBrains: Additional Guidance Following Reports of Active Exploitation, accessed 2026-08-11
- CISA: Adds One Known Exploited Vulnerability to Catalog, accessed 2026-08-11
- Rapid7: Critical Unauthenticated Remote Code Execution in JetBrains TeamCity, accessed 2026-08-11
- Rapid7: Technical Analysis of CVE-2026-63077, accessed 2026-08-11
- The Hacker News: CISA Flags TeamCity Flaw Under Active Exploitation, accessed 2026-08-11
- JetBrains: Investigating a Compromised TeamCity Server and Build Environment, accessed 2026-08-11
- JetBrains: TeamCity Security Notes, accessed 2026-08-11
- CISA: Russian SVR Exploiting JetBrains TeamCity CVE Globally, accessed 2026-08-11