Synthesized by Clarity (Claude) from 33 sources · May contain errors — spot one? mail@promitb.dev · Methodology →
Chrome's synced passkeys all decrypt under one 32-byte secret reachable in memor…
- Sources
- 33
- Words
- 1,694
- Read
- 8min
◆ The signal
The device identity key is generated as an exportable blob instead of being sealed in the TPM. That single choice is why ordinary non-privileged Windows malware can sign into passkey-protected Google accounts with no PIN, no biometric, nothing on screen. Unit 42 pulled the secret straight out of logs. There is no path to revoke it or re-wrap it, so any response playbook you maintain that assumes a compromised credential can be rotated does not apply to this one.
◆ INTELLIGENCE MAP
Intelligence map
01 npm Worm Turns Publish Tokens Into Its Own Transport
act nowJavaScript Weekly reports that keyv and cacheable were compromised with a credential-stealing worm, and hundreds more packages fell inside the first day. The worm steals npm publish tokens and republishes with them, so a version blocklist only describes the past. Separately, NuGet.org caps new API keys at 30 days from August 17, 2026 and hard-expires every older key on November 1, 2026 — and Trusted Publishing over OIDC covers only GitHub Actions and GitLab.
- New key lifetime
- Old key lifetime
- OIDC-covered CI
- Aug 17, 2026New NuGet keys capped at 30 days
- Nov 1, 2026All pre-existing NuGet keys hard-expire
02 Chrome Mints the Passkey Identity Key as an Exportable Blob
monitorUnit 42 detailed three techniques in which ordinary, non-privileged Windows malware signs into passkey-protected Google accounts with no PIN, no biometric, and nothing visible on screen. The cause is storage design: Chrome keeps synced passkey metadata in an unencrypted local database and generates the device identity key as an exportable blob instead of sealing it in the TPM. A 32-byte security domain secret, which Unit 42 found reachable in logs and memory, decrypts every synced passkey with no described revocation path.
- Attack techniques
- User prompts required
03 Agent Config Files Are Executable Content Nothing Scans
monitorCSO reports attackers seeding repositories with poisoned agent instruction files — AGENTS.md, CLAUDE.md, .cursor/rules, .mcp.json — that coding agents auto-load on repo open, before any human reads the diff. Software composition analysis does not parse markdown, so these files carry no signature, no lockfile entry, and usually no required review. In a related demonstration, Pillar Security drove Google's ADK triage agent from a single public GitHub issue into a privileged code-fixing workflow, and Google's response was deleting three workflows rather than hardening them.
- Vendor fix
- SCA coverage
04 Decode Latency Is a Bandwidth Bill, Not a FLOPs Bill
backgroundByteByteGo published the KV cache cost equation, and the arithmetic is worth running against your own fleet. Llama 3 70B at fp16 burns roughly 320KB of cache per token per request, because every decode step re-reads the whole cache out of HBM. Set cache traffic equal to the 140GB of weights streamed per step and the crossover lands near 440,000 aggregate in-flight tokens — past that, quantizing the cache buys more latency than quantizing weights.
- Crossover point
- 128K context
- DeepSeek-V3
05 The Router, Not the Token Price, Moved the Invoice
monitorCoinbase cut AI spend by roughly half while token volume kept rising, per Applied AI's reporting on its internal Forge agent. The mechanism was a multi-model router plus fresh-session context discipline. At the same time OpenAI cut GPT-5.6 Luna 80% to $0.20 per million input and $1.20 per million output. Two costs go unadvertised: switching models mid-session invalidates provider-side prompt caching, and max thinking effort inflates billed output tokens — so a per-token cut can coexist with a flat bill.
- Coinbase spend
- Coinbase tokens
- Engineers on AI tools
- Coinbase AI spend50%-~50%
- Coinbase token volume100%rising
◆ DEEP DIVES
Deep dives
01 The Publish Token Is the Transport, Not the Package Version
act now evidence: highSelf-propagation is the property that reorders triage. The mechanism matters: the payload harvests credentials, and the stolen npm publish tokens become the vector for the next wave. That is how two packages became hundreds inside a day. A blocklist of known-bad versions describes packages that were already republished. It says nothing about which tokens are currently in an attacker's hands.
"We don't depend on those" is the wrong first answer as well. keyv and cacheable sit in caching and HTTP-client territory, underneath
gotandcacheable-request, so they resolve transitively into trees nobody would describe as cache-dependent. Verify withnpm why keyvandnpm why cacheableacross every repo and every base container image, then cross-reference lockfile resolution timestamps against CI install logs. The exposure question is not whether the package appears in package.json. It is whether any CI job resolved dependencies during the window, and what was sitting in that job's environment.Publish no longer means installable
GitHub has started scanning every npm package for malware at publish time. That is genuinely good engineering, and it silently voids an assumption baked into thousands of release scripts: that
npm publishreturning 200 means the artifact is installable. It now means the artifact is queued for an asynchronous scan of unspecified duration.Release step Old assumption New reality Fix Publish, then install to verify Immediately available Available after scan completes Poll registry metadata with exponential backoff and a hard timeout Sequential monorepo publishes with interdependencies Each publish unblocks the next Later packages fail resolution Publish all, then gate on availability of the full set Emergency hotfix release Minutes Minutes plus scan latency Document the new floor in the incident runbook Alert on the timeout instead of failing silently. Otherwise the latency gets discovered during a 3am hotfix.
NuGet removes the option to keep doing this
The .NET side of the same problem now has a date. Per Devshot's reporting, new NuGet.org API keys cap at 30 days from August 17, 2026, and every key created before that hard-expires on November 1, 2026. Microsoft points at Trusted Publishing over OpenID Connect, citing the NX/NPM breach where stolen credentials produced 6,000 malicious activations in 36 minutes.
The coverage gap is being reported as a migration. Trusted Publishing supports GitHub Actions and GitLab only. If the publish step runs on Azure DevOps, Jenkins, TeamCity, or Buildkite, no migration exists. What exists is a rotation treadmill to build: a scheduled rotation job, a secret store that supports programmatic update, and an alert when a key ages past about 21 days.
A worm that steals publish tokens and republishes with them makes version triage the smaller job. The rotation should already be finished.
The structural fix is the same on both registries, and it is a workflow-identity change rather than an architecture change: OIDC short-lived credentials plus staged publishing, and delete the long-lived NPM_TOKEN and NuGet key secrets from CI entirely. A worm that steals a credential valid for minutes, scoped to one workflow, gets nothing worth having.
Action items
- Rotate every credential reachable from any CI job that installed dependencies during the compromise window — npm tokens, cloud access keys, Actions secrets, registry and database credentials — before confirming exposure, starting today.
- Inventory every NuGet.org API key across CI secret stores, developer machines, and release tooling by mid-September, classifying each as OIDC-eligible or rotation-required, and dry-run a publish from every pipeline by mid-October.
- Replace immediate post-publish installs in release pipelines with registry metadata polling using exponential backoff and a hard timeout that alerts, this sprint.
Sources:JavaScript Weekly · Devshot · Cyberpresso
02 Two Credential Stores on the Developer Laptop Nobody Gates
monitor evidence: highStart with the row that has no relying-party mitigation. Unit 42 describes a 32-byte security domain secret that sits in logs and in memory and decrypts every synced passkey, permanently, with no re-wrap and no revocation path described. A scheme where one stolen 32-byte value retroactively opens the entire vault is not a key hierarchy. It is a password. Secret material that transits log paths is greppable this afternoon: key-encryption keys in structured logs, tokens in crash dumps, heap snapshots shipped to third-party observability.
The other two techniques are more directly actionable. Chrome keeps passkey metadata in an unencrypted database, and it generates the device identity key as an exportable blob rather than TPM-sealed. Resident malware can therefore sign assertions exactly as Chrome would. WebAuthn's phishing resistance survives intact. Its possession guarantee does not.
Credential model Key drivable by local malware User verification enforceable Victim-visible signal Fit Software passkey in browser profile Yes, at non-admin privilege Bypassable in these attacks None Consumer, low-value accounts Platform passkey bound to TPM/secure enclave Key non-exportable; local abuse still possible Stronger, OS-mediated Depends on OS prompt Standard workforce accounts Discrete FIDO2 hardware key No — key never leaves the token Physical touch or on-device PIN Physical interaction required Tier-0: cloud root, CI/CD, signing, prod DB The operationally nasty part is that nothing renders on screen, so no user files a ticket. What is left is session anomaly detection at the identity provider plus endpoint telemetry. Those are the same laptops that matter for the second half of this.
The markdown file that ships with a credential set
The privilege escalation in a poisoned agent instruction file is not in the file. The file is text. It becomes remote code execution because the agent runs on a developer box with
~/.ssh,~/.aws/credentials, a GitHub PAT, an npm publish token, and a live kubeconfig in reach, frequently in auto-approve mode.Compare the gates. A package manifest diff gets scrutinized, hits SCA and a lockfile, and often requires review.
CLAUDE.md,.cursor/rules/**,.github/copilot-instructions.mdand.mcp.jsonauto-load on repo open, unsigned, absent from every lockfile, and get reviewed as documentation when they are reviewed at all. Concealment is worse than in code: hidden HTML comments, collapsed<details>blocks, and zero-width or bidirectional Unicode that render invisibly in the markdown a reviewer approves. In the token stream the model reads, all of it sits fully present. There is no stable signature to match on.Pillar Security's ADK demonstration shows where this ends once the agent holds real capability. A single public GitHub issue steered Google's triage agent into a privileged code-fixing workflow, and Google's fix was deleting three workflows rather than sanitizing input or scoping the token.
When a framework's own authors delete three workflows instead of patching them, the honest read is that agentic privilege design is unsolved — so scope the token, not the prompt.
Ordered by risk removed per hour spent: CODEOWNERS with an out-of-team reviewer on the agent-config path class, then a CI diff gate that flags zero-width and bidi Unicode, base64 blobs, external URLs and imperative directives, then stripping ambient credentials by running agents in a devcontainer or microVM with task-scoped short-TTL tokens. The last one converts an enterprise incident into a weird log line.
Action items
- Move every tier-0 account — cloud root, CI/CD, production database, package registries, code signing — off software-stored passkeys onto hardware-bound FIDO2 authenticators with enforced user verification this quarter.
- Glob the org for AGENTS.md, CLAUDE.md, .cursor/rules/**, .github/copilot-instructions.md and .mcp.json this sprint, add those paths to CODEOWNERS with a reviewer outside the requesting team, and enforce via branch protection.
- Walk the WebAuthn relying-party verification code next sprint and confirm privileged flows require uv=true, then reinstate step-up authentication on money movement, credential changes, and admin actions.
Sources:Cyberpresso · The Hacker News · CSO First Look · CSO Update
03 Your Tokens Per Second Is a Bytes-Per-Token Problem
background evidence: mediumEvery serving optimization maps to one term in one equation, so they rank before any benchmark runs. The equation is
2 × layers × KV heads × head_dim × bytes_per_number × tokens × batch. The 2 is key and value. Layers count because each layer keeps its own cache. Llama 3 70B at 80 layers, 8 KV heads, head_dim 128, fp16 gives 327,680 bytes, about 320KB per token per request. At 128K context that is roughly 41GB for one request.Prefill and decode pull against each other. Prefill runs all input tokens in one parallel pass and saturates the math units. Decode emits one token at a time and re-reads the entire cache from HBM every step, saturating the memory bus. On one homogeneous replica pool a phase is always leaving silicon idle, and long prefills head-of-line block other requests' decode steps. What settles prefill/decode disaggregation is inter-token latency degradation on decode-heavy requests while long prefills share the replica.
Where cache traffic overtakes weight traffic
Back-of-envelope, assumptions stated. An 8×H100 node has roughly 26.8 TB/s aggregate HBM. Llama 3 70B fp16 weights are 140GB, streamed once per decode step, about 5.2ms. Cache traffic scales with aggregate in-flight tokens. Set the two equal: 140GB ÷ 320KB is about 440,000 tokens. Past that, batch 4 at 110K each or batch 32 at 14K each, decode moves more cache bytes than weight bytes, and quantizing the cache buys more latency than quantizing weights.
Which levers are free and which are gambles
Paged attention and prefix caching change how the cache is stored and shared; quantization and eviction change what it contains. Only the first is quality-neutral by construction, and it is good engineering. Paged attention cuts fragmentation from 60–80% to under 4% for 2–3x throughput. Prefix caching saves 50–90% of cost and latency on hits. Eight-bit KV quantization is 2x at a quality cost well under 1%. Four-bit is 4x with measurable loss on multi-needle retrieval: fine for chat, wrong for RAG. Eviction with sliding windows and attention sinks is non-causal by construction, since whether a token matters depends on a query that has not arrived. Once evicted, the model behaves as if the token never existed.
Prefix caching fires only on byte-identical prefixes, so one
generated_attimestamp or session UUID high in a system prompt invalidates everything downstream. The order that survives is static system prompt, tool schemas, few-shots, retrieved chunks, volatile fields, user turn. Cached-token share is the SLI, since it maps to the bill. GPU utilization is not a decode health signal; KV pool utilization, preemption and recompute rate, prefix hit rate, and bytes moved per decode step are.ByteByteGo flags one caveat and declines to resolve it: cross-user cache sharing has opened timing side-channels that leak information about other tenants' prompts. The cheapest large cost reduction on the menu has the least-settled isolation story. Whether a provider shares blocks across tenants is usually undocumented, and worth asking before compliance does.
The KV cache is a bandwidth cost, not a storage cost. That is why shrinking it speeds up generation and adding FLOPs does not.
Action items
- Compute bytes-per-token for every model in the fleet from its config this sprint and wire it into admission control, queuing or rejecting when bytes_per_token × max_tokens × in_flight exceeds the KV pool minus headroom.
- Enable FP8 or INT8 KV cache behind a flag and gate promotion on a multi-needle retrieval eval at your P95 context length rather than MMLU-style aggregates.
Sources:ByteByteGo
◆ QUICK HITS
Quick hits
Gateway API v1.6.0 graduated TCPRoute and UDPRoute with a default-permissive binding rule
A petabyte-scale sharded Postgres backup design ships a 12-hour RPO wearing point-in-time clothes
Wealthfront needed multiple years to make AI code review precise enough to ship
71% of Flock license-plate alerts sent to police in one California town contained a misread plate
Texas paused new data center grid interconnection approvals while regulators audit power and water use
Zep's Observations finds cross-conversation dependencies with no embeddings at all
GitGuardian measured Claude Code-assisted commits leaking credentials at 3.2% against a 1.5% human baseline
◆ Bottom line
The take.
Today's items are one argument seen from four angles: the thing that spreads is never the code, it is the credential the code can reach — a publishing secret, a browser-held signing key, a laptop's ambient environment. Every control built for the code path assumes the artifact is the dangerous object, which is why a markdown file and a valid registry key both walk straight through review. That assumption does not hold. The replacement is short-lived, narrowly scoped, workflow-bound identity everywhere a machine authenticates. Enumerate every long-lived secret a machine can use to publish, sign, or authenticate this week, then give the two with the widest reach an expiry measured in minutes.
◆ Same day, different angle
Read this day as…
◆ Recent in engineer
Keep reading.
Spot an error? mail@promitb.dev