← Back to Feed CACHED · 2026-07-30 13:57:19 · CACHE_KEY CVE-2026-63077
CVE-2026-63077 · CWE-502 · Disclosed 2026-07-27

In JetBrains TeamCity before 2026.1.3

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Someone left the factory loading dock wide open and anyone can walk in and poison every product on the assembly line

CVE-2026-63077 is an unauthenticated remote code execution vulnerability in the agent polling protocol of all JetBrains TeamCity On-Premises versions prior to 2026.1.3 and 2025.11.7. The root cause is classic insecure deserialization (CWE-502): the server-side endpoint that build agents poll for work accepts serialized objects over HTTP(S) without verifying the caller's identity. An attacker who can reach the TeamCity web port sends a crafted payload to this endpoint and achieves arbitrary OS command execution under the TeamCity server process account — no credentials, no user interaction, no prior access required. Impact is total: source code, build secrets, environment variables, deployment keys, and the ability to inject malicious code into every downstream artifact.

JetBrains rated this CVSS 9.8 CRITICAL and noisgate agrees without reservation. The vendor severity is not inflated — it may even understate the strategic risk. TeamCity On-Premises is, by definition, a CI/CD build server. Every single installation sits squarely in the high-value-role catalog for supply-chain infrastructure. APT29 (CozyBear / SVR) exploited the prior TeamCity auth-bypass (CVE-2023-42793) at scale in late 2023 for exactly this class of supply-chain pivot, and CISA issued a joint advisory with NSA and FBI. The absence of a public PoC and in-the-wild exploitation *today* is a countdown timer, not a mitigant — deserialization bugs in Java-based CI/CD platforms have a track record of weaponization within days to weeks of disclosure.

"Unauth RCE on your CI/CD server is a supply-chain kill shot. Vendor score is correct."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Identify exposed TeamCity server

The attacker scans for TeamCity login pages or API endpoints on ports 80/443/8111. Shodan and Censys historically index ~2,200+ internet-facing TeamCity On-Premises instances. Internally, TeamCity servers are typically reachable by any host on the corporate network since build agents need HTTP(S) connectivity to poll for jobs.
Conditions required:
  • Network reachability to the TeamCity HTTP(S) port (commonly 8111, 80, or 443)
Where this breaks in practice:
  • Internet-facing instances represent a fraction of the total install base; many enterprises place TeamCity behind VPN or firewall
Detection/coverage: Shodan dork http.title:"TeamCity" or Censys query identifies exposed instances. Rapid7 InsightVM/Nexpose content release July 28 includes authenticated and remote checks.
STEP 02

Send crafted deserialization payload to agent polling endpoint

The attacker crafts a malicious serialized Java object targeting the agent polling endpoint (served on the same HTTP(S) port as the TeamCity web UI). No authentication token, session cookie, or API key is required. The server deserializes the payload without validating the sender's identity. Standard Java deserialization gadget chains (e.g., Commons Collections, Spring, or TeamCity-bundled libraries) are likely candidates for weaponization.
Conditions required:
  • HTTP(S) connectivity to the TeamCity server
  • Knowledge of the agent polling endpoint path
Where this breaks in practice:
  • No public PoC exists yet — the attacker must reverse-engineer the endpoint and identify a valid gadget chain
  • Deserialization filters (if any) in the target JVM version may block some chains
Detection/coverage: WAF rules inspecting POST bodies for Java serialization magic bytes (0xACED0005) on TeamCity paths. Network IDS signatures for anomalous agent polling requests from non-agent IPs.
STEP 03

Achieve OS command execution as TeamCity process

Successful deserialization triggers arbitrary code execution under the TeamCity server process account. On Linux this is typically a dedicated teamcity user; on Windows it may run as SYSTEM or a service account with broad privileges. The attacker now has full control of the TeamCity server host.
Conditions required:
  • Successful deserialization with a valid gadget chain
Where this breaks in practice:
  • Process-level sandboxing or containerization could limit blast radius (rare for TeamCity On-Premises)
  • EDR on the host may flag unexpected child processes spawned by the Java process
Detection/coverage: EDR alerts on cmd.exe/bash spawned by java.exe or the TeamCity wrapper process. Sysmon Event ID 1 with parent process matching TeamCity service.
STEP 04

Harvest credentials and secrets

TeamCity stores project-level credentials (VCS roots, deployment keys, cloud provider tokens, NuGet/npm registry tokens) in its internal database and configuration files. The attacker dumps database.properties, accesses the embedded HSQLDB or external DB, and extracts all stored secrets. Environment variables from build configurations are also accessible. These credentials provide lateral movement paths into source control (GitHub/GitLab/Bitbucket), cloud infrastructure (AWS/Azure/GCP), and artifact registries.
Conditions required:
  • OS-level access to TeamCity data directory and database
Where this breaks in practice:
  • Secrets stored with TeamCity's scrambling (not true encryption) are trivially reversible
  • External credential vaults (HashiCorp Vault, AWS Secrets Manager) may limit exposure if TeamCity uses short-lived tokens
Detection/coverage: Database query auditing, file integrity monitoring on TeamCity data directory, anomalous API calls to connected VCS/cloud services using TeamCity service accounts.
STEP 05

Inject malicious code into CI/CD pipelines

With control of TeamCity, the attacker modifies build configurations to inject malicious steps into compilation, testing, or deployment pipelines. Every subsequent build produces trojaned artifacts — installers, container images, libraries, firmware — that ship to customers or deploy into production. This is the SolarWinds playbook: a single compromised build server poisons the entire software supply chain.
Conditions required:
  • Administrative control of TeamCity (achieved via step 3)
  • Active CI/CD pipelines building and deploying software
Where this breaks in practice:
  • Build artifact signing with hardware-backed keys external to TeamCity would detect tampering post-build
  • Code review on build config changes (infrastructure-as-code) could catch modifications, but TeamCity UI changes bypass VCS
Detection/coverage: Reproducible build verification, artifact hash comparison against known-good baselines, build configuration change audit logs (if the attacker hasn't cleared them).
STEP 06

Lateral movement to production infrastructure

Using harvested deployment credentials and cloud provider tokens, the attacker pivots from the CI/CD plane into production environments — Kubernetes clusters, cloud accounts, database tiers, or on-premises servers. If TeamCity agents run on production hosts (a common anti-pattern), the attacker can leverage agent communication channels for additional persistence.
Conditions required:
  • Deployment credentials or cloud tokens stored in TeamCity
  • Network connectivity from TeamCity to production environments
Where this breaks in practice:
  • Network segmentation between CI/CD and production tiers
  • Least-privilege IAM policies on deployment service accounts
Detection/coverage: Cloud audit logs (CloudTrail, Azure Activity Log) showing TeamCity service account activity outside normal build windows. SIEM correlation of TeamCity-sourced credential usage.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNot observed. JetBrains stated on July 27 that they are not aware of active exploitation. No reports from CISA, Mandiant, or threat intel vendors as of July 30.
Proof-of-ConceptNo public PoC available. The vulnerability was privately disclosed by Antoni Tremblay on July 10, 2026. Given the CWE-502 (Java deserialization) class and full technical description in the advisory, weaponization by skilled researchers is expected within days to weeks.
EPSS Score0.00649 — low baseline, but EPSS lags disclosure by days. Expect a sharp increase once scanning activity or PoC code appears. Prior TeamCity RCEs (CVE-2023-42793, CVE-2024-27198) saw EPSS spike to >0.9 post-PoC.
KEV StatusNot listed on CISA Known Exploited Vulnerabilities catalog as of 2026-07-30. Given APT29's documented history with TeamCity, KEV addition upon first confirmed exploitation is near-certain.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). Every base metric is at maximum severity except Scope (Unchanged). The vector is accurate: network-accessible, no auth, no complexity, full CIA impact.
Affected VersionsAll TeamCity On-Premises versions prior to 2026.1.3 (2026.x branch) and 2025.11.7 (2025.11.x branch). The security patch plugin supports back to 2017.1. TeamCity Cloud is not affected (already patched by JetBrains).
Fixed Versions2026.1.3 and 2025.11.7. Security patch plugin available at download.jetbrains.com/teamcity/plugins/internal/fix_CVE_2026_63077.zip for v2017.1+. Versions 2018.2+ do not require restart for plugin activation.
Internet ExposureShodan/Censys historically index ~2,200+ internet-facing TeamCity On-Premises instances (2024 baseline). The true number of vulnerable instances is far higher when counting internally-accessible servers not indexed by internet scanners.
APT HistoryAPT29 (CozyBear/SVR) exploited CVE-2023-42793 at scale in late 2023, prompting a joint CISA/NSA/FBI advisory. North Korean actors (Lazarus, Andariel) also targeted TeamCity. This product is a proven APT target for supply-chain operations.
Researcher / DisclosureDiscovered by Antoni Tremblay, privately reported July 10, 2026. JetBrains advisory published July 27, 2026. Coordinated disclosure — 17-day patch window before public notification.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

The single most decisive factor is the role multiplier: TeamCity is canonically a CI/CD build server — 100% of On-Premises installs occupy the supply-chain high-value role by definition, and the documented chain (unauth RCE → credential harvest → pipeline poisoning) terminates in supply-chain compromise at fleet scale. APT29's proven operational playbook against prior TeamCity CVEs confirms this is not theoretical — it is a demonstrated adversary objective against this exact product.

HIGH Vulnerability exists and is exploitable as described (vendor-confirmed, researcher-verified, CWE-502 is well-understood)
HIGH Supply-chain blast radius assessment (TeamCity's architectural role is unambiguous)
MEDIUM Timeline to public PoC / in-the-wild exploitation (estimated days-to-weeks based on vuln class precedent, but not yet confirmed)

Why this verdict

  • Unauthenticated, zero-friction entry: The CVSS vector PR:N/UI:N/AC:L means any attacker with network access to the TeamCity HTTP port can exploit this with no credentials, no user interaction, and no race conditions. There is no authentication friction to discount.
  • All versions affected — maximum exposure window: Every TeamCity On-Premises installation ever deployed is vulnerable unless already updated to the July 27 release. The security patch plugin extends coverage back to 2017.1, but organizations must actively install it. The affected population is the entire On-Premises install base.
  • Role multiplier: CI/CD build server = supply-chain-scale blast radius. TeamCity On-Premises IS the CI/CD platform — 100% of installs occupy the high-value role by definition. Compromise yields stored credentials (VCS, cloud, registry tokens), the ability to inject malicious code into build pipelines, and lateral movement into production infrastructure. This is the SolarWinds attack pattern, and APT29 has already executed it against TeamCity via CVE-2023-42793.
  • APT29 operational precedent: Russian SVR actors exploited the prior TeamCity RCE (CVE-2023-42793) at scale within weeks of disclosure, targeting technology companies for supply-chain access. CISA, NSA, and FBI issued a joint advisory. The same threat actor will almost certainly evaluate this new vulnerability for the same operational objective.
  • Internet exposure is non-trivial: ~2,200+ TeamCity instances are directly internet-facing per historical Shodan data. But even internally-accessible TeamCity servers are high-value targets for any attacker with internal network access (post-phishing, post-VPN compromise). The 'requires network access' prerequisite provides minimal friction in practice.
  • Role multiplier detail — high-value role analysis: (a) *Low-value role:* N/A — TeamCity does not deploy as a workstation or sandbox component. (b) *Typical role:* standalone CI/CD server for a dev team — compromise yields that team's source, secrets, and artifacts. (c) *High-value role:* enterprise CI/CD platform building production software, container images, or customer-facing releases — compromise yields supply-chain pivot. ≥10% of installs (arguably the majority) serve production CI/CD, placing the verdict floor at CRITICAL per noisgate policy.

Why not higher?

CVSS 9.8 is already near-maximum. A 10.0 would require Scope:Changed, meaning the vulnerability breaks out of its security boundary to affect other components' authorization. While the supply-chain impact is devastating, the CVSS base score accurately reflects the server-scoped impact. The reassessed score stays at 9.8 — there is no higher to go within the CRITICAL band for this vector.

Why not lower?

Downgrading would require friction that materially reduces the reachable population or blast radius. There is none: authentication is absent, all versions are affected, the agent polling endpoint sits on the same port as the web UI (no separate port to firewall), and the affected component is definitionally a CI/CD server with supply-chain blast radius. The absence of a public PoC is a temporary condition, not a structural mitigant — deserialization bugs in Java CI platforms are a solved engineering problem for offensive researchers. Prior TeamCity CVEs went from disclosure to mass exploitation in under two weeks.

05 · Compensating Control

What to do — in priority order.

  1. Restrict network access to TeamCity to trusted build agent IPs and admin workstations only — The agent polling endpoint sits on the same HTTP(S) port as the web UI. Use host firewall rules (iptables/Windows Firewall) or network ACLs to whitelist only known build agent IPs and authorized administrator source IPs. This is the single highest-impact compensating control — it eliminates the unauthenticated remote attack vector for all non-whitelisted sources. Deploy within 3 days per noisgate CRITICAL mitigation SLA.
  2. Install the JetBrains security patch plugin immediately if full upgrade is not feasible — Download fix_CVE_2026_63077.zip from the JetBrains site and install via Administration → Plugins. TeamCity 2018.2+ activates without restart; 2017.1–2018.1 requires a restart. This patches the specific deserialization flaw without a full version upgrade. Deploy within 3 days per noisgate CRITICAL mitigation SLA.
  3. Place TeamCity behind a reverse proxy or VPN with authentication — If TeamCity must be reachable beyond the local subnet, front it with a reverse proxy (nginx, HAProxy) that requires client certificate or SSO authentication before traffic reaches TeamCity. Alternatively, require VPN access. This adds an authentication layer the vulnerability itself lacks.
  4. Deploy or tune EDR to alert on child processes from the TeamCity Java process — Create detection rules for cmd.exe, powershell.exe, bash, sh, curl, wget, or certutil spawned by the TeamCity wrapper or java.exe running as the TeamCity service. This provides post-exploitation detection if network controls fail.
  5. Rotate all credentials stored in TeamCity after patching — Assume stored secrets (VCS tokens, deployment keys, cloud credentials, registry passwords) may be compromised. After patching, rotate every credential referenced in TeamCity project configurations, build parameters, and environment variables. Audit cloud and VCS audit logs for unauthorized use of TeamCity service accounts.
  6. Audit TeamCity build configurations for unauthorized modifications — Review all build step definitions, meta-runners, and plugins for injected malicious commands. Compare current configurations against version-controlled baselines (if TeamCity configs are stored as Kotlin DSL in VCS). Check the TeamCity audit log for configuration changes from unexpected sources or times.
What doesn't work
  • WAF alone is insufficient. While a WAF can detect Java serialization magic bytes (0xACED0005), the agent polling endpoint may use custom framing or encoding that bypasses generic deserialization signatures. WAF is defense-in-depth, not a primary control.
  • Running TeamCity in a container does not mitigate this. The attacker gains code execution inside the container, which still has access to all TeamCity data, stored credentials, and build pipeline definitions. Container isolation limits host-level pivot but does not protect the CI/CD supply chain.
  • Disabling unused build agents does not help. The vulnerability is in the server-side agent polling endpoint handler, not in the agents themselves. The endpoint is exposed regardless of how many agents are registered or active.
  • IP-based rate limiting is ineffective. This is a single-request exploit, not a brute-force attack. One crafted HTTP request is sufficient for code execution.
06 · Verification

Crowdsourced verification payload.

Run this script on the TeamCity server host (Linux) as any user with read access to the TeamCity installation directory. Example: chmod +x check_cve_2026_63077.sh && ./check_cve_2026_63077.sh /opt/TeamCity. No root required unless the TeamCity installation directory has restrictive permissions.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_cve_2026_63077.sh — Detect CVE-2026-63077 vulnerability in TeamCity On-Premises
# Usage: ./check_cve_2026_63077.sh [TEAMCITY_HOME]
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

TC_HOME="${1:-/opt/TeamCity}"
VERSION_FILE="$TC_HOME/webapps/ROOT/WEB-INF/PluginData/info/teamcity-version.xml"
PLUGIN_DIR="$TC_HOME/webapps/ROOT/WEB-INF/plugins"
PATCH_PLUGIN="fix_CVE_2026_63077"

if [ ! -f "$VERSION_FILE" ]; then
  # Try alternative location
  VERSION_FILE="$TC_HOME/BuildServer/config/internal/version.dat"
fi

if [ ! -f "$VERSION_FILE" ] && [ ! -d "$TC_HOME" ]; then
  echo "UNKNOWN — TeamCity installation not found at $TC_HOME"
  echo "Usage: $0 /path/to/TeamCity"
  exit 2
fi

# Try to extract version from TeamCity startup log or version file
VERSION=""
if [ -f "$TC_HOME/webapps/ROOT/WEB-INF/PluginData/info/teamcity-version.xml" ]; then
  VERSION=$(grep -oP 'version="\K[^"]+' "$TC_HOME/webapps/ROOT/WEB-INF/PluginData/info/teamcity-version.xml" 2>/dev/null | head -1)
elif [ -f "$TC_HOME/BUILD_*" ] || ls "$TC_HOME"/BUILD_* 1>/dev/null 2>&1; then
  VERSION=$(ls "$TC_HOME"/BUILD_* 2>/dev/null | head -1 | grep -oP 'BUILD_\K.*')
fi

# Fallback: check catalina logs for version string
if [ -z "$VERSION" ]; then
  for logfile in "$TC_HOME/logs/catalina.out" "$TC_HOME/logs/teamcity-server.log"; do
    if [ -f "$logfile" ]; then
      VERSION=$(grep -oP 'TeamCity server version is \K[0-9.]+' "$logfile" 2>/dev/null | tail -1)
      [ -n "$VERSION" ] && break
    fi
  done
fi

if [ -z "$VERSION" ]; then
  echo "UNKNOWN — Could not determine TeamCity version at $TC_HOME"
  exit 2
fi

echo "Detected TeamCity version: $VERSION"

# Check if security patch plugin is installed
PATCH_INSTALLED=false
if [ -d "$PLUGIN_DIR" ]; then
  if ls "$PLUGIN_DIR"/ 2>/dev/null | grep -qi "$PATCH_PLUGIN"; then
    PATCH_INSTALLED=true
  fi
fi
# Also check external plugins directory
EXT_PLUGIN_DIR="$TC_HOME/../.BuildServer/plugins"
if [ -d "$EXT_PLUGIN_DIR" ]; then
  if ls "$EXT_PLUGIN_DIR"/ 2>/dev/null | grep -qi "$PATCH_PLUGIN"; then
    PATCH_INSTALLED=true
  fi
fi

# Version comparison function
version_gte() {
  printf '%s\n%s' "$2" "$1" | sort -V -C
}

# Determine if patched
# Fixed versions: 2026.1.3+ or 2025.11.7+
# Version format: YYYY.MM.PATCH or YYYY.X.PATCH
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)

if [ "$MAJOR" -gt 2026 ] 2>/dev/null; then
  echo "PATCHED — TeamCity $VERSION is newer than the affected range."
  exit 0
elif [ "$MAJOR" -eq 2026 ] 2>/dev/null; then
  if version_gte "$VERSION" "2026.1.3"; then
    echo "PATCHED — TeamCity $VERSION includes the fix for CVE-2026-63077."
    exit 0
  fi
elif [ "$MAJOR" -eq 2025 ] 2>/dev/null; then
  if [ "$MINOR" -eq 11 ] 2>/dev/null && version_gte "$VERSION" "2025.11.7"; then
    echo "PATCHED — TeamCity $VERSION includes the fix for CVE-2026-63077."
    exit 0
  elif [ "$MINOR" -gt 11 ] 2>/dev/null; then
    # 2025.12+ would be covered by 2026.x branch
    echo "UNKNOWN — Unexpected version $VERSION. Verify manually."
    exit 2
  fi
fi

# If we reach here, version is vulnerable — check for patch plugin
if [ "$PATCH_INSTALLED" = true ]; then
  echo "PATCHED — TeamCity $VERSION is vulnerable but security patch plugin ($PATCH_PLUGIN) is installed."
  exit 0
fi

echo "VULNERABLE — TeamCity $VERSION is affected by CVE-2026-63077. No security patch plugin detected."
echo "Action required: Upgrade to 2026.1.3 / 2025.11.7 or install the security patch plugin."
exit 1
07 · Bottom Line

If you remember one thing.

TL;DR
This is a drop-everything, patch-now vulnerability. Under the noisgate CRITICAL mitigation SLA, you have ≤ 3 days to apply compensating controls — restrict TeamCity network access to trusted build agent IPs and admin workstations, and install the JetBrains security patch plugin if a full upgrade can't happen immediately. The full remediation SLA is ≤ 90 days (upgrade to 2026.1.3 or 2025.11.7), but given TeamCity's supply-chain blast radius and APT29's documented interest in this product, treat the full upgrade as a same-week emergency. Monday morning: (1) confirm all TeamCity On-Premises instances are inventoried, (2) apply network ACLs blocking untrusted sources from the TeamCity port, (3) install the patch plugin or upgrade, (4) rotate every credential stored in TeamCity, and (5) audit build configurations and artifact integrity for signs of tampering. Do not wait for a public PoC or KEV listing — by the time those arrive, you need to already be patched.

Sources

  1. JetBrains Official Advisory
  2. Rapid7 Emergent Threat Response
  3. Help Net Security Coverage
  4. The Hacker News Coverage
  5. IONIX Threat Center
  6. CISA/NSA/FBI Joint Advisory on APT29 TeamCity Exploitation (CVE-2023-42793)
  7. Security Affairs Coverage
  8. Cybersecurity News Coverage
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.