Synthesized by Clarity (Claude) from 33 sources · May contain errors — spot one? mail@promitb.dev · Methodology →
TeamCity Unauth RCE Makes Rotation the Job, Not the Patch
- Sources
- 33
- Words
- 1,733
- Read
- 9min
Topics Agentic AI AI Regulation LLM Inference
◆ The signal
No login means no failed-auth entry, and that log line is the one you'd normally use to bound the exposure window. Without it, the window is the whole install. Registry push tokens, cloud OIDC trust, signing material, full source read: every credential resident on that server has to be treated as exposed, which makes rotation the work item, not the upgrade.
◆ INTELLIGENCE MAP
Intelligence map
01 Unauthenticated RCE Landed on Self-Hosted Control Planes
act nowJetBrains disclosed a critical TeamCity on-prem flaw allowing unauthenticated OS command execution and is telling everyone to update now, per The Hacker News's roundup. Three more control-plane bugs landed the same week: Arista VeloCloud Orchestrator On-Prem (CVE-2026-16812, CVSS 10.0) under active exploitation, Check Point Security Management (CVE-2026-16232, CVSS 9.3) added to CISA's KEV list with a July 25 federal deadline, and a public vBulletin pre-auth exploit reaching PHP eval(). Anything that rewrites config for many systems and answers untrusted networks is the same bug waiting for a different CVE.
- TeamCity
- Arista VCO
- Check Point
- KEV deadline
02 A Local Kernel Race Is Now a Container Boundary Bug
monitorCVE-2026-53264 is a use-after-free race in the Linux traffic-control (net/sched) subsystem that takes a local user to root, and STAR Labs published a working exploit against CentOS Stream 9. CVSS scores it 7.8 because it assumes the attacker already has a shell — but a CI runner executing PR-triggered code is exactly that, by design. The longer-lived detail: a researcher credits AI assistance with turning the race into a reliable root exploit, which removes "hard to weaponize" from your triage math for memory-safety bugs.
- Bug class
- Subsystem
- Exploit
03 Agent-Written Code Moved the Bottleneck Into CI
monitorJarred Sumner ported 535,496 lines of Bun from Zig to Rust in 11 days using 64 parallel agents and a reported $165,000 of tokens, and that Rust build now powers Claude Code, per The Pragmatic Engineer's interviews inside Anthropic. Translation was roughly 15% of the effort; compiling, fixing tests and verifying took the other 85%. That split is a capacity statement about your build farm, not your model budget — 64 agents each run compile-and-test loops, so flake rate becomes an active hazard. The $165K figure is being publicly questioned, so treat it as directional.
- Lines ported
- Wall clock
- Parallel agents
04 The JavaScript Toolchain Forks at the Compiler API
monitorAnders Hejlsberg demoed TypeScript 7's Go-based compiler hitting a 10x speedup on VS Code's own 1.3-million-line codebase, per JavaScript Weekly. The cost is architectural: TS 7 drops direct compiler API access in favour of a new LSP server, so Vue, Astro and Svelte tooling stays pinned to TypeScript 6 until those projects migrate. In the same window React shipped 19.0.8, 19.1.9 and 19.2.8 to patch a denial-of-service in server function endpoints, and Oxlint's type-aware linting went stable — removing the one capability that justified typescript-eslint's cost.
- Benchmark size
- React patches
- Blocked tooling
- tsc (TS 6)1x
- tsgo (TS 7)10x+10x
05 Your Serving Engine, Not Your GPU, Sets Inference Cost
backgroundvLLM statically pre-allocates about 90% of a device's memory at process start and has no awareness that another vLLM instance shares the card; HuggingFace's TEI takes one model-id per process. So an embedder, reranker, extractor and generator land on four cards that one card could physically hold. Teams that adopted small models to save money are renting 4x the GPUs, and nvidia-smi hides it because the allocation looks like real load. The fix is a server that owns the whole device and treats models as a working set — NVIDIA Triton's EXPLICIT model control and Ray Serve multiplexing already do this.
- vLLM default
- TEI limit
◆ DEEP DIVES
Deep dives
01 Patch the Build Server, Then Assume It Lied to You
act nowWhy the rotation matters more than the patch
Pre-auth OS command execution on a CI server has a property most bugs don't: there is no way to prove the box was clean before the fix landed. The exploit path never touches a login, so there is no failed-auth trail, and no session to correlate anything against. If the instance accepted webhooks from the internet during the disclosure window, the defensible posture is to treat that entire window as an incident.
Blast radius is the mechanism. TeamCity agents typically hold registry push tokens, cloud OIDC trust relationships, signing material and full source read. Command execution there does not require persistence on the server. The attacker mints an artifact and leaves. So the ordering is fixed: patch to the latest build, rotate registry tokens, cloud keys and VCS PATs, re-verify custody of signing keys, then read the server audit log for OS command execution predating the patch.
The same shape, four times
Flaw Auth needed Blast radius Exploit status JetBrains TeamCity (on-prem) None Source, build secrets, signing, downstream artifacts Advisory, patch out Arista VCO CVE-2026-16812 (CVSS 10.0) Unclear; 10.0 implies none Config plane for the whole WAN estate Active exploitation Check Point CVE-2026-16232 (CVSS 9.3) Auth bypass Policy engine — attacker inherits admin authority On CISA KEV, July 25 deadline Linux CVE-2026-53264 (CVSS 7.8) Local user Host root, then every co-tenant container Public PoC (STAR Labs) The pattern generalises past these four products. Anything that can rewrite configuration for many systems and is reachable from an untrusted network is the highest-leverage target in a distributed architecture. That list includes ArgoCD, Atlantis, Vault, mesh control planes, IaC runners and internal admin consoles. Build the exposure map once, because it outlives every individual CVE on this list.
Why the 7.8 is worse than the 7.8
CVSS scores local privilege escalation conservatively because it assumes the attacker already has a foothold. On a container platform, that assumption is the product. A runner executing PR-triggered code is an attacker with a local shell by design, and so is a customer-supplied job. The
net/schedsubsystem has historically been reachable from unprivileged user namespaces and from anything holdingCAP_NET_ADMINinside its own netns: service-mesh init containers, CNI plugins, VPN sidecars, traffic-shaping tooling. Verify that reachability against the running configuration rather than assuming it. What is confirmed is the bug class and a working exploit, not any specific exposure path.Where the sources converge
The security reporting, CISA's deadline and the vBulletin case all point the same way. The reporting says exploit difficulty is no longer a mitigating control, because a researcher credits AI assistance with developing the tc race into a full root exploit. The federal side agrees implicitly: CISA gave civilian agencies a three-day mitigation deadline on the Check Point bug, which is a published opinion about exploitation rate. vBulletin is the counterexample that proves the point. Upstream had already patched, so the public exploit is now scanner payload aimed at everyone who skipped the update.
A pre-auth RCE on a build server is not a vulnerability to schedule. It is a disclosure window, and every artifact shipped inside it is unproven.
Action items
- Patch every on-prem TeamCity instance to the latest build today, then rotate registry tokens, cloud keys, VCS PATs and re-verify signing key custody before reopening the server to webhooks.
- Inventory CAP_NET_ADMIN grants and unprivileged user-namespace availability across node pools this sprint, and schedule out-of-band kernel patching for any pool running untrusted or multi-tenant workloads.
- Remove exploit complexity as a deprioritisation factor from your vulnerability SLA policy for memory-safety and race-condition classes by the next policy review.
02 535,496 Lines in 11 Days Because the Tests Didn't Know the Language
monitorThe precondition nobody puts in the headline
One detail carries this whole project: Bun's test suite is written in TypeScript. It asserts runtime behaviour, not internals, so it does not care whether the runtime underneath is Zig or Rust. The exact same suite graded both builds. The port itself was mechanical, with the minimum number of behavioural changes, and Sumner wrote a migration plan and style guide before any agent ran.
Invert that and the method collapses. Tests written in the service's own language, mocking concrete internal types, give you no oracle for a port. The ask becomes rewriting the implementation and the verification at the same time, then trusting the output. That is hoping, not engineering. Cheap diagnostic for any repo: score the top three services on black-box contract coverage against white-box unit coupling, then ask whether the suite would still be valid if the implementation language changed.
What the 15/85 split actually budgets
Translation was about 15% of elapsed time. Compiling, fixing tests and verifying correctness was the other 85%. Thariq Shihipar reports the same shape independently: few tokens go to implementation, most go to discovery, prototyping, mocking, verification and testing. Read it as a capacity plan. Sixty-four agents each run compile-and-test loops, so CI becomes the rate limiter and flake rate turns into an active hazard. A nondeterministic test teaches an agent to contort correct code until the assertion goes green.
The gates that make unreadable code mergeable
Sumner's operating question was how to merge 100+ PRs a day and know the code works. The pipeline is the transplantable part:
- Issue filed, an agent attempts reproduction; if it reproduces, a second container attempts a fix.
- A mandatory test that fails on the current build and passes with the patch, written before the PR may open.
- No test means auto-reject. No exceptions, no human negotiation.
- Linters, then two independent reviewers, Claude review and CodeRabbit, then agents argue on the thread.
- Human merge once gates are green.
Steps 2 and 3 cost CI minutes rather than tokens, and they hit the precise failure mode of high-volume machine output. Cheapest item on the list. Adopt it first.
Where the evidence is thinner than the story
Two caveats. The $165,000 token figure is being actively questioned in public, which is useful signal by itself, because headline engineering-cost claims are now getting audited. And much of Bun's repository activity is, in the author's phrase, "Claude talking to Claude." The same model family writes the code, the tests, the fuzzers and the review. Correlated blind spots, textbook. Running CodeRabbit next to Claude review reads as deliberate decorrelation. A language port also has a free independent oracle sitting right there: differential fuzzing against the old binary. Same inputs, both implementations, diff the outputs. The legacy Zig build is the one oracle no model authored.
What did not compress
The same reporting covers Claude Managed Agents: six months against a pre-AI estimate of roughly two years. The head of engineering names planning as the single biggest element, in a process that "looked more like a typical pre-AI planning process," Google Doc PRD included. Execution compressed roughly 4x. Cross-org alignment across a sandboxing team and three cloud providers did not. The filter that survives all of this: run the 64-agent play on work that would otherwise never get done at all.
Cheap code generation moves the bottleneck into CI, and what decides throughput after that is whether the test suite can be trusted without being read.
Action items
- Score your top three services this sprint on implementation-agnostic test coverage — can the suite validate behaviour if the language changed? — and record black-box contract coverage versus white-box unit coupling per service.
- Adopt the failing-then-passing test gate for all agent-authored PRs by the next sprint boundary: the PR must include a test that fails on the current build and passes with the patch, with no-test PRs auto-rejected.
- Instrument CI for agent load before raising concurrency: capture p50/p95 build-plus-test wall time, per-test flake rate and cache hit rate, and set a flake quarantine policy this quarter.
03 TypeScript 7's 10x Has a Toll Gate, and Vue, Astro and Svelte Are Standing at It
monitorThe version number is not the problem; the dependency graph is
Accurate model: anything in your toolchain that imports the TypeScript compiler API is a hard pin to TypeScript 6. TS 7's Go compiler drops direct compiler API access and replaces it with a new LSP language server. Microsoft externalised the coordination cost onto downstream framework maintainers. Vue, Astro and Svelte tooling all reach into that API today.
The unglamorous failure mode is a caret range on
typescriptin a workspace whose framework plugin touches the compiler. TS 7 lands inside that range. The build breaks with an error that points nowhere useful. Pinning explicitly is cheap now and painful later.Consumer Uses compiler API? TS 7 path Your move App code type-checked by tsc/tsgo No Direct — full 10x Adopt early; biggest CI win Editor / IDE integration Via language server New LSP server Verify extension compatibility Vue / Astro / Svelte tooling Yes Blocked until LSP migration Pin TS 6 explicitly, no floating ranges Codemods / AST tooling you own Yes Rewrite against LSP or stay on 6 Scope the rewrite before it's urgent Check what the benchmark actually was: VS Code's own 1.3-million-line codebase, with real pathological types, not a synthetic suite. The number is credible. Its availability to you is conditional.
The cheaper CI win that shipped quietly alongside it
Type-aware linting is usually the longest single step in a TypeScript monorepo's pipeline. It requires a full type-check, so you pay for tsc twice. Oxlint's type-aware linting is stable, which matches the one capability that justified typescript-eslint's cost. The incumbent's remaining moat is plugin ecosystem breadth, not capability.
Do not plan a cutover. Plan a parallel run. Oxlint in report-only mode alongside the existing config, then diff both the findings and the wall-clock. The steady state is two linters, Oxlint for the hot path and ESLint for the long tail of custom org rules, and that is fine. It is still a large net win. It is the highest ratio of CI time saved to engineering effort available in this ecosystem.
Two security items
React shipped 19.0.8, 19.1.9 and 19.2.8 to patch a denial-of-service in server function endpoints. Three simultaneous backports means exposure spans the whole 19.x line. Patch, then confirm that server function routes are rate-limited at the edge. A DoS patch with no rate limit is one fix short. Nuxt shipped 4.5.1 and 3.21.10 as security patches a week after 4.5, which is the textbook argument against being first to adopt any
x.y.0.Separately, Matteo Collina of Node.js core published the argument that prototype pollution cannot be hardened at the runtime level. That reclassifies a whole vulnerability class from "wait for a Node patch" to permanent application-layer responsibility. Three concrete moves follow: schema-validate at the edge instead of deep-merging request bodies, use
Object.create(null)for any user-keyed lookup map or config bag, and test--disable-protoin a staging container. The recursive config merge is the canonical sink. A targeted grep usually finds it.The trade-off the celebration skips
Native rewrites have reached the type checker itself, alongside Rspack, Biome, Turbopack, Bun and Oxlint. Most of it is genuinely good engineering. The cost is narrower, more sanctioned extension surfaces and a smaller pool of people who can fix your bug. The TS 7 LSP boundary is that trade-off, made explicit and paid for by framework maintainers. The selection rule that holds: native for hot paths you consume but never extend, escape hatches preserved wherever custom rules, transforms or AST access are required.
Speed is table stakes in this toolchain now. Extensibility is the scarce resource, and TypeScript 7 prices it explicitly.
Action items
- Patch React to 19.2.8 / 19.1.9 / 19.0.8 this week and confirm server function routes are rate-limited at the edge.
- Inventory which devDependencies import the TypeScript compiler API directly and pin those workspaces to TS 6 explicitly this sprint, replacing floating caret ranges.
- Run Oxlint with type-aware linting in report-only mode alongside typescript-eslint in CI this quarter and measure the wall-clock delta plus the rule-coverage gap before changing anything.
◆ QUICK HITS
Quick hits
DoorDash made retrieval define the output space so query labels cannot be hallucinated
OpenRouter now executes tools server-side, and Stripe is reportedly bidding about $10B for it
Cursor renewal quotes are landing at 5x to 7.5x for identical usage
.NET 11 Preview 6 auto-rejects unsafe cross-origin requests at runtime
Go 1.26's Green Tea collector is still non-moving, so fragmented pages stay resident
MCP shipped stateless mode, formal extensions and an actual deprecation policy
Google is collapsing Mandiant and in-house threat-actor names into a two-word scheme
Google's refreshed crawl guidance names HTTP 304 as the way to conserve crawl capacity
◆ Bottom line
The take.
Fund the thing that grades machine output — black-box tests, a golden task set, a per-request cost meter — because it is the only asset that scales with code nobody reads.
Frequently asked
- What should I rotate after patching TeamCity, and in what order?
- Upgrade to the latest build, then rotate registry push tokens, cloud OIDC keys and VCS PATs, re-verify signing key custody, and only then reopen the server to webhooks. Because unauthenticated command execution leaves no auth trail, every credential resident on that server has to be treated as exposed — so rotation is the real work item, not the upgrade.
- Which recently disclosed flaws are already being exploited in the wild?
- Three carry active-exploitation signals: Arista VCO (CVE-2026-16812, CVSS 10.0) is under active exploitation, Check Point (CVE-2026-16232) is on CISA's KEV list with a July 25 mitigation deadline, and the Linux net/sched bug (CVE-2026-53264) has a public PoC from STAR Labs. TeamCity has a patch and advisory out but no confirmed in-the-wild exploit yet.
- Why is the Linux CVE-2026-53264 more dangerous than its 7.8 score implies?
- CVSS scores local privilege escalation conservatively because it assumes the attacker already holds a foothold — but on a container platform, that foothold is the product. A runner executing PR-triggered code or a customer-supplied job is a local shell by design, so the net/sched bug turns into a container escape on exactly the nodes running untrusted or multi-tenant workloads.
- What actually enabled the Bun rewrite in 11 days — was it just model capability?
- The enabler was a verification asset built years earlier: Bun's test suite is written in TypeScript and asserts runtime behaviour rather than internals, so the exact same suite graded both the Zig and Rust builds. Without an implementation-agnostic oracle, an agent-driven port means rewriting the code and its verification at once and trusting the output, which is hoping, not engineering.
- How do I keep TypeScript 7 from breaking my build unexpectedly?
- Pin any workspace whose tooling imports the TypeScript compiler API to TS 6 explicitly, replacing floating caret ranges. TS 7's Go compiler drops direct compiler API access in favour of a new LSP server, and Vue, Astro and Svelte tooling all reach into that API today — so TS 7 landing inside a caret range breaks the build with an error that points nowhere useful.
◆ Same day, different angle
Read this day as…
◆ Recent in engineer
Keep reading.
- Chrome's synced passkeys all decrypt under one 32-byte secret reachable in memory.
- 221,303 Verified Live Credentials in Hugging Face Datasets
- 3 Eval Escapes in 141,006 Runs Reach Others' Production
- SRI Can't Pin the Adform Ad Tag Rewriting Wallet Addresses
- Cursor Hit 50% of PRs by Fixing Environments, Not the Model
Spot an error? mail@promitb.dev