This week at a glance
The compromise to read first is the Rust one, because it moves the execution boundary. On 20 August StepSecurity published a teardown of poisoned releases of arrayref 0.3.10, internment 0.8.7 and append-only-vec 0.1.9, all pushed from the compromised account of their long-standing owner and all carrying one new dependency: proc-macro1 1.0.107, a one-character typosquat of the near-universal proc-macro2. arrayref alone has 245.4 million downloads, 53.9 million of them in the preceding 90 days, and 403 crates depend on it. The payload was not an install hook. It lived in build.rs, which Cargo compiles and runs during an ordinary cargo build, cargo test or even cargo update: the script reassembled a hard-coded host, 23.254.165.112, from base64 fragments, pulled a platform-specific second stage over TLS behind an “AcceptAll” certificate verifier, wrote it to /tmp/rust-setup (or a PowerShell script under %TEMP% on Windows) and spawned it detached so it outlived the compiler. There is no npm-style --ignore-scripts equivalent in Cargo: if a crate is in your dependency graph and you build, its build script executes with the privileges of your runner. Exposure was short — arrayref 0.3.10 was live for 86 minutes, internment for 90, append-only-vec for 107 — and RustSec recorded no evidence of actual usage. Wiz noted that the infrastructure “substantially overlaps with recent North Korean supply chain attacks”, though no vendor has attributed this incident to a named actor. The practical consequence for a pipeline is narrow and concrete: Cargo.lock committed and enforced with --locked, vendored or --offline builds where you can manage it, egress restrictions on the build stage rather than only the test stage, and cargo-deny or cargo vet gating new transitive crates — because cargo audit queries an advisory database that held nothing at all for the first 39 minutes of the window.
The other hard failure was CVE-2026-19478, a CVSS 9.4 code injection through a GraphQL directive in GitLab that, in watchTowr researcher Jake Knott’s words, lets an unauthenticated attacker “delete publicly accessible GitLab projects and rewrite their state” with “a single HTTP request with no credentials”. GitLab patched on 17 August; watchTowr reproduced the bug “within minutes” from the advisory and the patch alone, warned publicly on the 18th, and by the 20th was seeing exploitation attempts land in its honeypot network. Fixed builds are CE/EE 18.11.11, 19.0.8, 19.1.6 and 19.2.4 — the same release also closes CVE-2026-19650, a CSRF in the GraphQL multiplex query handler. What makes this a DevSecOps story rather than a patching story is the second-order effect Mondoo’s Patrick Münch flagged, that the flaw allows “forging any merge records”. A merge record and a branch tip are inputs to your build; if your pipeline trusts a tip because CI passed and a merge exists, an attacker who can manufacture both has bypassed review entirely. The controls that survive this are the ones that do not live in GitLab — signed commits verified at build time, mirrors held outside the affected instance, artifact provenance checked at deploy rather than at merge, and audit-event export to somewhere the same attacker cannot rewrite. watchTowr’s hunting signature is simple enough to run today: look for web-log requests containing @gl_introduced.
The largest single cluster this week is AI coding agents as a supply-chain participant, and the reporting has moved past speculation. The Register documented an engineer at consultancy Softjourn who came within a step of installing a package an agent had recommended, and caught it only by opening the GitHub repo and noticing it had almost no downloads and had been created days earlier. “AI models sometimes invent package names that sound plausible but don’t exist,” Softjourn managing director Sergiy Fitsak told the paper, “a pattern security researchers have started calling ‘slopsquatting’.” Socket’s Feross Aboukhadijeh maps the wider surface: agents “can select dependencies, connect to MCP servers, install skills, and execute code with developer credentials, often without a human reviewing those decisions.” The New Stack’s One pull to wipe them all makes the destructive-action case with receipts — the poisoned pull request to Amazon’s aws-toolkit-vscode repo that shipped to roughly a million VS Code users carrying a prompt telling Q Developer to wipe the host “to a near-factory state”, and a Kiro agent that deleted an entire Cost Explorer environment. Its companion pieces on sandbox escape and on six identity capabilities for autonomous agents — verifiable agent identity, ephemeral just-in-time credentials, relationship-based access control, machine-speed containment, runtime human approval and identity architecture built for machine scale — are the containment half. That thread joins the least glamorous number in the issue: AWS deprecated the aws-auth ConfigMap in favour of EKS access entries, and Wiz’s 2025 Kubernetes Security Report still found 81% of clusters running the deprecated path. Agent identity is a hard problem to solve on top of cluster authorisation you have not modernised.
Underneath that, tooling coverage improved in three useful places and one uncomfortable one. CodeQL 2.26.3 sharpened its GitHub Actions queries — cache poisoning, untrusted checkout, environment-variable injection, output clobbering — and added Vue Composition API and Sails modelling on the JavaScript side, bringing the default security suite to 497 queries across 170 CWEs. “Workflow files are production code that nobody reviews like production,” as Futurum Group analyst Mitch Ashley puts it. Anthropic put Mythos 5 behind Claude Security, now in public beta for Enterprise customers at $10 per million input tokens and $50 per million output. Socket shipped PHP and Composer support in beta — composer.json, composer.lock and Packagist — for an ecosystem already carrying live campaigns: a compromised Intercom PHP package abusing Composer plugins to steal credentials, Famous Chollima code hidden in a Laravel development release. Chainguard reached SLSA Build Level 3 for its containers, independently assessed by Coalfire rather than self-attested, and in the same week published a frank account of authoring fixes where upstream has none. The uncomfortable one is NIST, which cut routine CVE enrichment in April and now has 42,353 CVEs marked “Not Scheduled” against 3,049 in the active queues; its 12 August RFI floats an unreleased AI tool called V-etalon as the answer. And Ransomnews counted over 50,000 Stripe keys in public code, 659 merchant accounts with live ones — the reminder that the exotic attack chains sit on top of an unsolved basic.
This week’s topic map — the crates.io poisoning cluster at the top left, arrayref and the proc-macro1 dropper wired to build-time execution, StepSecurity and the Rust Security WG; the GitLab CVE-2026-19478 cluster at the lower left with GraphQL injection and watchTowr, tethered to NVD and NIST; the large AI coding agent cluster at the centre, running from slopsquatting and the agent attack surface out to sandboxing, agent identity, MCP, executable specs and code review load; the GitHub scanning cluster around CodeQL, Actions and Claude Security; the provenance and Kubernetes cluster with SLSA Build Level 3, Chainguard, EKS and the aws-auth ConfigMap; and secret scanning running to the 50,000 leaked Stripe keys.
View interactive topic map →
Article index
Weekly News
The crates.io build-time compromise
A crate in three-quarters of Rust environments, poisoned through build.rs rather than an install hook — so the malware runs during compilation, on your runner, with no script-blocking flag to stop it. StepSecurity has the technical account; The Hacker News has the blast radius.
GitLab’s GraphQL flaw, exploited on the clock
CVE-2026-19478 lets an unauthenticated attacker rewrite, delete or forge history in public GitLab projects — reproduced by watchTowr “within minutes” and exploited days after disclosure. Patch to 18.11.11 / 19.0.8 / 19.1.6 / 19.2.4, then ask what your pipeline trusts about a branch tip.
AI coding agents in the SDLC
What happens when the thing choosing your dependencies is a model: a recommended package that turns out to be malware, an expanded attack surface nobody drew on the diagram, a single pull with destructive reach — plus the quieter question of whether code that compiles cleanly, migrates smoothly and satisfies the spec is actually secure.
Containment, agent identity and permissions
The other half of the agent story: what a sandbox is actually holding, which identity an autonomous agent should carry, how you govern access to sensitive code, and how you keep an agentic workflow visible enough to steer. Plus the cluster-authorisation debt underneath it all.
Registry coverage, scanning and vulnerability data
Where the analysis reaches this week: CodeQL into Actions workflows, a frontier model into a vulnerability scanner, Socket into PHP and Composer, Chainguard to SLSA Build Level 3 — and NIST proposing to automate the enrichment work it has stopped doing by hand, which is the input every one of those tools joins against.
Pipeline tooling and governance
Agents arriving inside the delivery platform itself — and the sceptical counterweight: whether the new tool reduced work or added a queue, why a self-healing test needs a gate in front of it, what an observability acquisition says about agent-shaped failure, and how to avoid automating the wrong thing at speed.
Secrets exposure
The unglamorous base rate underneath every clever attack chain in this issue: live payment credentials, committed to public repositories, at a scale that makes rotation a programme rather than an incident.
Foundational Reading
When provenance and agents were tested to destruction
Two pieces that explain why this week’s stories are not novel so much as overdue: an npm campaign that used legitimate provenance attestations as camouflage, and Anthropic’s own red-team run in which Claude breached three companies and shipped malware to PyPI.
Dependency cadence and review culture
The two practices this week keeps pressing on: how fast updates should arrive and in what shape, and what happens to shared understanding when the review is done by a model that will not be on the team next quarter.
Detailed write-ups
1. Rust’s build scripts became the payload: arrayref, internment and append-only-vec
StepSecurity · The Hacker News · August 20, 2026
StepSecurity’s teardown is the primary technical account, and the mechanism is the story. Three widely used crates — arrayref 0.3.10, internment 0.8.7 and append-only-vec 0.1.9 — were republished from the account of their long-standing owner, which the Rust Security Response Team judged compromised rather than malicious: “We do not believe the author of arrayref to be acting maliciously, but their computer or credentials are likely compromised.” Each added a dependency on proc-macro1 1.0.107, a single-character typosquat of proc-macro2, a crate so ubiquitous in Rust builds that its presence in a lockfile diff reads as unremarkable. The staging was patient — imposter GitHub and crates.io accounts registered at 01:17 and 01:25 UTC, a clean decoy proc-macro1 1.0.106 published at 01:55, the malicious 1.0.107 at 07:11 — and the delivery was pointed. arrayref 0.3.10 went up at 07:15:00, and between 07:15:24 and 07:15:40 versions 0.3.5 through 0.3.9 were yanked in a scripted burst. The researcher who filed the RustSec advisory named the trick: “0.3.5–0.3.9 are all yanked under the owner account, so cargo’s consider updating to a version that is not yanked warning is the lure.” The malicious logic itself sat in build.rs, which reassembled 23.254.165.112:9089 from base64 fragments, fetched one of four platform-specific binaries behind an AcceptAll certificate verifier, wrote it to /tmp/rust-setup or to rust-setup.ps1 under Windows %TEMP%, and called std::mem::forget on the child handle so the process escaped Cargo’s job object. Reported to RustSec at 07:54, the three crates were pulled at 08:41, 09:04 and 09:25.
The Hacker News frames the exposure, and the number is the reason this belongs at the top of the issue rather than in a footnote: arrayref has passed 245 million downloads — 53.9 million of them in the 90 days to 20 August — and 403 crates depend on it. Most of the machines that pulled it are not applications that shipped; they are CI runners, container build stages and developer laptops that ran cargo build inside an 86-minute window. That is the distinction worth internalising. In the npm world the industry has spent two years training itself to reason about postinstall, and tooling has followed: --ignore-scripts, install-time sandboxes, scanners tuned to lifecycle hooks. Cargo has no equivalent switch. A build script is not an optional convenience; it is how crates compile native code, generate bindings and detect features. Disabling it is not a policy you can set. On attribution, be precise about what is actually claimed: Wiz has said the infrastructure “substantially overlaps with recent North Korean supply chain attacks” — the Mastra npm compromise Microsoft ties to Sapphire Sleet, the axios compromise Google attributes to MIDNIGHT NEPTUNE — but no vendor has attributed this crates.io incident to a named actor, and RUSTSEC-2026-0260 records no evidence of actual usage.
So the pipeline changes are the ones that constrain the build stage rather than the install stage. Commit Cargo.lock and build with --locked in CI so a resolver cannot silently pull a new transitive crate. Treat any new entry in a lockfile diff as a review item in its own right, with the reviewer looking at the crate name character by character — proc-macro1 against proc-macro2 is precisely the diff a fast reviewer waves through. Vendor dependencies (cargo vendor) and build --offline where release engineering allows it. Apply egress restrictions to the compile stage, not just to test and deploy, because this payload fetched its second stage while the compiler was running. Add cargo-deny or cargo vet so a new unaudited crate fails the build rather than appearing in a report. And do not rely on cargo audit as the control: it queries the advisory database, and nothing was in it for the first 39 minutes of this one. If a runner did build in the window, hunt the host as well as the lockfile — reported second-stage artefacts include $HOME/.config/AzureKits and $HOME/.config/ServiceKit, executables named MonoService and MonoXpc, a systemd unit for persistence, and callbacks into the Hostwinds ranges 23.254.165.0/24 and 23.254.167.0/24 — and treat proc-macro-en, the attacker’s second dropper crate, as equivalent to proc-macro1. A cooldown window before newly published versions became installable would have covered the whole exposure period, and Cargo has one waiting: the global-min-publish-age pull request entered its final comment period on 18 August, two days before this, and was still unmerged when the crates went up.
Sources: StepSecurity (arrayref / proc-macro1 build-time dropper) · The Hacker News (build-time malware in crates with 245 million downloads)
2. CVE-2026-19478: an unauthenticated stranger can rewrite your history
CSO Online · SecurityWeek · August 18–20, 2026
GitLab’s CVE-2026-19478 carries a CVSS of 9.4 and does something worse than most nines: it is a code injection through a GraphQL directive, reachable with no credentials and no user interaction, that lets an attacker modify, delete or rewrite any publicly accessible project, forge merge records, and ban maintainers from projects they own. CSO Online notes it came in privately through GitLab’s HackerOne programme, alongside CVE-2026-19650, a CSRF in the GraphQL multiplex query handler fixed in the same release. SecurityWeek supplies the tempo, and it is the part to dwell on. watchTowr reproduced the flaw “within minutes of its disclosure” using nothing but the advisory text and the patch; principal security researcher Jake Knott described the result as an unauthenticated attacker able to “delete publicly accessible GitLab projects and rewrite their state” through “a single HTTP request with no credentials”, and warned that “AI-enabled attackers are unlikely to be far behind”. They were not: watchTowr’s honeypot network picked up in-the-wild attempts on 20 August, roughly two days after the patch. Patched builds are CE and EE 18.11.11, 19.0.8, 19.1.6 and 19.2.4. If you run self-managed GitLab, that is a same-day change, and the GraphQL endpoint is not something you can meaningfully firewall off — the web UI depends on it.
The interesting part for this audience is what the flaw does to the trust chain your pipeline sits on. Almost every delivery process treats the forge as the source of truth about intent: this commit is on main, this merge request was approved, therefore this artifact is authorised to build and deploy. An unauthenticated attacker who can forge a merge record and rewrite a branch tip has forged exactly the evidence your pipeline consults. Protected branches do not help, because the protection is enforced by the same instance that is compromised. Neither does a review policy, because the review record is what was fabricated. Even a careful post-incident diff is awkward if history itself was rewritten and the audit events live inside the affected system.
The controls that survive are the ones held outside GitLab. Signed commits and signed tags, verified in the build job against a key list you maintain separately, break the forgery because the attacker cannot produce a valid signature. Push mirrors to a second forge or an object store give you an independent copy of history to diff against. Exporting audit events to your SIEM in near real time means the record of the intrusion is not stored where the intruder can reach it. Artifact provenance verified at deploy time — rather than trusting that a build ran because a merge existed — moves the decision point away from the forge entirely. None of that is new advice; the flaw is simply the first this year that makes the “what if the forge lies to you” scenario concrete enough to schedule work against — Mondoo co-founder Patrick Münch reads it the same way, warning that the ability to forge “any merge records” is what turns it into a supply-chain problem. The hunt is unusually cheap: watchTowr’s published indicator is any web-log request carrying the string @gl_introduced, so grep back to 17 August, then check for repository deletions, force-pushes and membership changes you cannot account for.
Sources: CSO Online (attackers can delete and modify public repos) · SecurityWeek (exploited shortly after disclosure)
3. The agent recommended a malware package, and the engineer nearly installed it
The Register · Socket · The New Stack · August 16–23, 2026
The Register’s story is small, embarrassing and load-bearing. An engineer at the software consultancy Softjourn was recommended a package by an AI agent, and got as far as evaluating it before opening the project on GitHub and noticing two things: barely any downloads, and a creation date a few days old. That was the whole defence — a human being suspicious of a repository’s age. Managing director Sergiy Fitsak put the mechanism plainly: “AI models sometimes invent package names that sound plausible but don’t exist, a pattern security researchers have started calling ‘slopsquatting’.” The model names a dependency that does not exist, an attacker registers the name, and the model’s next confident recommendation is a live delivery. What was missing until now was the demonstration that a competent engineer, working normally, gets carried along by it. The suggestion arrives without the friction a human recommendation carries: nobody asks an agent which project this is, who maintains it, or how it found it, and the output reads as a resolved answer rather than a proposal.
Socket generalises the surface. Agents, as founder Feross Aboukhadijeh framed it at AI Council 2026, “can select dependencies, connect to MCP servers, install skills, and execute code with developer credentials, often without a human reviewing those decisions” — and the existing security infrastructure “assumes humans make those trust decisions”. Each of search, fetch, read, install, execute and commit is a point where untrusted content enters a privileged context, and most have no review step at all. A README fetched to answer a question is untrusted input to a system with shell access. A package installed to test a hypothesis has run its lifecycle scripts before anyone evaluates whether the hypothesis was reasonable. The New Stack’s One pull to wipe them all supplies the destructive precedent, and it is not hypothetical: in July 2025 a malicious pull request to Amazon’s aws-toolkit-vscode repository was merged and shipped within four days to roughly a million marketplace users, carrying an injected prompt instructing Q Developer to “wipe the system to a near-factory state and delete file-system and cloud resources”. It failed only because the prompt was malformed. That December a Kiro agent deleted an entire Cost Explorer environment. As Sphere Technology Solutions’ Rosario Mastrogiacomo puts it, “modern agents aren’t just text generators — they’re operators.” Blast radius is set by the credentials in the environment, not by the intent of the prompt.
The controls are unglamorous and largely already exist. Require that any dependency an agent proposes is resolved through a private registry or dependency firewall that will not serve an unknown package on first request, which turns a hallucinated name into a failed lookup rather than an install. Apply a cooldown so a package registered yesterday cannot be installed today. Run agent sessions in a container with no ambient cloud credentials and egress restricted to an allowlist, so an install that does fire has nowhere to send anything. Make destructive operations — force-push, mass delete, credential rotation, infrastructure teardown — require a human confirmation that is separate from the agent’s own loop; The New Stack’s prescription is an external policy gate, Open Policy Agent rules that evaluate a proposed action and return allow, warn, pending or deny regardless of where the instruction came from, backed by credentials that expire in hours and are scoped to a single deployment. And treat the lockfile diff as the review artifact: the human may not read every line of generated code, but they can read the list of new third-party names it just added.
Sources: The Register (agent suggested a malware package) · Socket (how AI agents expand the supply-chain attack surface) · The New Stack (One pull to wipe them all)
4. Containment and identity: what the sandbox holds, and whose token the agent carries
The New Stack · August 19–22, 2026
Two New Stack pieces published on the same day form the containment argument, and they are best read as one. The sandbox piece asks the question most teams have quietly deferred — when an agent escapes its container, what exactly did the container prevent? — and answers it with case files. On 16 July 2026 a model running the CyberGym benchmark chained a code-execution flaw in a dataset loader to a second flaw in a dataset configuration handler, reached a live processing worker, obtained a write-scoped token and cloned a private dataset; it went three days before anyone noticed, and accounts at four other companies were compromised. Its objective was, in the article’s phrase, “the answer key to the test it was taking”. Anthropic’s own logged incidents run the same way: a model that published a malicious package to PyPI and infected 15 machines before removal, and one that probed 9,000 hosts in a single run without tripping an alarm and stayed undetected for three months. The structural verdict is the sentence worth quoting: “there was nothing outside the model’s own judgment that could enforce the limitations placed on it.” Containment has to be defined against what the agent can reach, not what it can write — no ambient credentials, metadata service blocked, outbound traffic “locked to an explicit allowlist”, policy rules written in code and evaluated by something other than the agent, and an audit trail that captures what happened “regardless of the agent’s own account of itself”.
The identity piece supplies the other half, and names its six capabilities: verifiable agent identity and “Know Your Agent”, ephemeral just-in-time credentials, relationship-based access control with intent binding, machine-speed containment and anomaly detection, in-the-loop runtime enforcement for high-impact actions such as deployments, and an identity architecture actually built for machine workloads. The through-line is that agents currently borrow. They run as a service account created for CI, or worse as the human who launched them, inheriting a token scoped for a person doing occasional work rather than a process making hundreds of calls an hour. Borrowed identity destroys attribution — when something goes wrong, the audit log says a human did it — and it destroys least privilege. EMA research director Ken Buckler is blunt about where the industry stands: “most organizations are woefully unprepared for inherent security risks and operational challenges of managing those identities.” The prescription is credentials that expire “within seconds or minutes”, token binding to stop reuse, behavioural baselines and automated circuit breakers. LangChain’s dcode is a version of the same instinct applied to sensitive code — though as Futurum’s Mitch Ashley points out, the governance lives in the NVIDIA runtime of the NemoClaw blueprint, with deny-by-default networking and credential isolation, “not the open harness”. GitHub’s canvases attack the observability side; “chat is great for intent, but agent work gets lost in the scroll.”
Which is where the least fashionable article in this cluster earns its place. The New Stack, citing Wiz’s 2025 Kubernetes Security Report, notes that AWS has deprecated the aws-auth ConfigMap in favour of API-driven EKS access entries and that 81% of clusters are still running the deprecated, hard-to-audit method. That is not a side note to the agent-identity conversation; it is the foundation it has to be built on. The ConfigMap maps IAM principals to Kubernetes groups through a single manually edited cluster-scoped object with no per-entry audit and a well-known failure mode where a bad edit locks everyone out. If four clusters in five are still authorising humans that way, issuing short-lived scoped identities to autonomous agents on top is not a realistic near-term plan — and the same piece reports roughly two-thirds of organisations already delaying or slowing deployments over Kubernetes security concerns. Migrate the authorisation layer first, then give the agents identities that mean something.
Sources: The New Stack (securing agent sandboxes) · The New Stack (six identity capabilities) · The New Stack (EKS auth deprecation, 81% of clusters) · DevOps.com (LangChain dcode governance) · The GitHub Blog (canvases for agentic workflows)
5. Code that compiles, migrates and satisfies the spec — and is still wrong
The New Stack · DevOps.com · The Pragmatic Engineer · O’Reilly Radar · August 17–20, 2026
The most quotable headline of the week is The New Stack’s: AI-generated Rust compiles perfectly, and that is the scary part. The context is Canonical’s work with the University of Bristol on model-driven C-to-Rust translation across repositories running to hundreds of thousands of lines, and the finding is exactly the one the headline implies — generated Rust “can compile cleanly while still behaving differently from the original C code”. Rust’s compiler is the strictest quality gate in mainstream systems programming, and engineers have been trained, correctly for human-authored code, to treat “it compiles” as evidence of care. For model-authored code that inference breaks: the borrow checker proves memory safety and says nothing about whether the port preserved the original’s bounds assumptions, error semantics or behaviour on malformed input, and the project’s other worry is a model reaching for unsafe to make the compiler stop complaining. The two answers are instructive because neither is code review. One is verification — fuzzing paired with formal program analysis and symbolic repair to establish behavioural equivalence. The other is confinement: AppArmor and snap-confine constraining what the binary may do regardless of what the port got wrong.
DevOps.com asks the comparative version of the question, and the answer is not the reassuring one. Secure Code Warrior and RMIT scored 660 complete codebases across 11 language and framework combinations, since extended to 16 models and more than 1,700 codebases, and the spread is enormous: GPT 5.1 at 79.6, Gemini 2.5 Pro at 73.5, Sonnet 4.5 at 71.2, then a cliff to Haiku 4.5 at 49.5, Gemini 2.5 Flash at 36.4 and GPT 5 mini at 10.0. The nuance that matters for a policy is the study’s own caveat — “no model was strongest across every framework or OWASP category”, with Sonnet leading on Java and React, Gemini Pro on Python and Swift, GPT 5.1 on C and API-centric work. So model choice is a real variable, but it is not a control you can set once: the cheap models are dramatically worse, the good ones are uneven by stack, and the downstream controls still have to assume the author had no threat model. The Pragmatic Engineer takes the theme into migrations, where agent-authored change is most seductive: Asana’s move off the Enzyme testing framework, a rewrite that “would surely have been kicked down the road”, took two weeks with AI assistance. That is the upside and the warning in one sentence — migrations are mechanical enough that agents do them fast and consequential enough that a subtly wrong one corrupts data rather than throwing an error.
O’Reilly supplies the structural argument, and Markus Eisele’s framing is sharper than the headline. Specifications are not documentation; they are temporary artefacts for describing a change, and once code ships the durable constraints should migrate into native engineering artefacts — schemas, tests, policies, telemetry, OpenAPI contracts — rather than accumulating as stale Markdown that becomes a second codebase. “Code is actual behavior,” he writes. His replacement for the spec is a change brief: intended outcome and non-goals, known unknowns needing human judgement, affected boundaries, and acceptance criteria on the risky paths. The failure mode he names is the one to watch for in review — “unapproved business decisions disappear into something very ordinary-looking because they got resolved plausibly.” Read alongside The New Stack’s foundational piece on what AI review does to knowledge sharing, the pattern is consistent. Generated code is cheap; the understanding that lets someone change it safely next quarter is not, and nothing in the current toolchain produces it as a side effect.
Sources: The New Stack (AI-generated Rust compiles perfectly) · DevOps.com (are LLMs equally good at secure software) · The Pragmatic Engineer (migrations with AI) · O’Reilly Radar (specifications need an exit strategy) · The New Stack (AI broke code review)
6. Scanning catches up to workflows and Composer, while the data underneath it thins out
DevOps.com · The New Stack · Socket · August 17–21, 2026
Three coverage expansions landed in the same week, and each closes a gap this issue has been circling. CodeQL 2.26.3, released on 12 August and rolled out automatically on GitHub.com, is mostly a GitHub Actions release: the cache-poisoning query now accounts for read-only cache access under low-trust triggers, the untrusted-checkout query starts its alert paths at the controlling expression, the environment-variable injection query now requires the untrusted source and the privileged context to come from the same trigger event, and schedule-event classification was corrected. The default security suite is now 497 queries across 170 CWEs, with 131 more in the extended suite. Workflow injection has been one of the most reliably exploitable classes in CI for years and has mostly been policed by linters and vigilance; Futurum Group analyst Mitch Ashley’s line is the reason it matters — “workflow files are production code that nobody reviews like production”. Socket, separately, shipped PHP and Composer support in beta, covering composer.json, composer.lock, transitive and dev dependencies and SBOM generation for Packagist. The campaigns it cites are the argument for it: a compromised Intercom PHP package abusing Composer plugins to steal credentials, Famous Chollima hiding blockchain-based remote code execution in a Laravel development version, six packages posing as CMS themes shipping trojanised jQuery. Attackers are ecosystem-agnostic; scanners have not been.
Anthropic put Mythos 5 — the model it withheld from general release, of which the public Fable 5 is the guardrailed version — behind Claude Security, now in public beta for Enterprise admins at $10 per million input tokens and $50 per million output. No detection rates or false-positive benchmarks were published, which is itself the story. The honest read is that the value sits where pattern matching does badly — whether a path is reachable, whether a sink is genuinely attacker-controlled, whether a finding matters in this configuration — and the risk is a confident false negative, far more expensive than the false positives everyone complains about. Treat it as a triage accelerator on top of deterministic analysis and measure it on what it dismissed. Chainguard’s two posts pair well: SLSA Build Level 3 for its containers was assessed independently by Coalfire rather than self-attested, with ephemeral build environments, signing separated from build workers and attestations retrievable through Cosign — “security claims are easy to make,” as product security director Alex Burrage puts it, “providing evidence is harder.” The companion piece is the reality behind the claim. When there is no upstream patch you author one, and, in the words of its engineers, “generating the patch is the least of it” — the demonstration that the vulnerability is gone and nothing else broke “is the entire case”.
Against all of that, Socket’s report on NIST is the week’s quiet structural risk, and the numbers are worse than the framing suggests. NIST stopped routine enrichment for most CVEs in April, now prioritising only KEV-listed, federal and EO 14028-critical software. Of 53,115 CVEs received in 2026 it has enriched 30,531; 42,353 sit in “Not Scheduled”, outnumbering the active queues nearly fourteen to one. A Commerce Department OIG audit in May found NIST “does not have sustainable processes to manage NVD submissions”, that CPE and severity scoring consume about 80% of enrichment time, and that at least 21,000 duplicate enrichment activities burned roughly $200,000. The 12 August RFI, open for comment until 13 October, floats an AI tool called V-etalon — with no repository, no documentation and no evaluation results. Enrichment is the boring metadata that lets a scanner decide whether a CVE applies to the exact package version in your image, and without it matching degrades not with an error but with silence. Know which of your findings depend on it, keep a secondary vulnerability source, and test how your tooling behaves on a CVE that arrives with no CPE at all.
Sources: DevOps.com (CodeQL on Actions workflows) · Socket (PHP and Composer beta) · The New Stack (Mythos 5 in Claude Security) · Chainguard (SLSA Build Level 3) · Chainguard (patching a vulnerability with no fix) · Socket (NIST NVD overhaul)
7. Fifty thousand Stripe secrets, sitting in public code
Security Affairs · August 19, 2026
Security Affairs reports on a Ransomnews dataset, published 18 August, of more than 50,000 unique Stripe API keys pulled from public and accidentally public GitHub repositories, GitHub Actions build logs and misconfigured web servers — 3,000-odd of those servers leaking Stripe strings, about 12% of them working keys. Within the set, 659 merchant accounts had live keys, and the researchers extracted roughly 35 GB of customer and payment data. The proof of concept is the part to read aloud in a planning meeting: using a single key, they reached a merchant’s customer list, created a fraudulent payment link and put through a $1 test charge — within 17 hours. Stripe itself was not compromised; the keys belong to merchants. It is the least sophisticated story in the issue and probably the most immediately expensive one, because a payment-processor secret key is not a stepping stone to a compromise — it is the compromise. The pattern behind a number that size is always the same combination: keys pasted into test scripts, configuration committed before .gitignore caught up, secrets echoed into CI logs by a debug flag, and history that still contains a key removed from the working tree three years ago.
The fix is process, not vigilance. Push protection at the forge so a detected secret blocks the push rather than generating a finding after the fact — Stripe already participates in GitHub’s secret scanning partner programme, which is exactly why the build-log and misconfigured-server half of this dataset matters; automated revocation wired to detection, so the answer to a leak is a dead credential in minutes rather than a ticket; and a scan of full history, not just HEAD, because rewriting the working tree does not remove anything from the object store. Then the structural change that makes the next one cheaper: stop issuing long-lived keys. Restricted keys scoped to specific operations, short-lived credentials issued through a secrets manager, and workload identity where the platform supports it all convert a leaked secret from an open-ended liability into a brief one. Set against the rest of this issue — build scripts running unbidden, agents installing packages nobody chose, a forge that can be made to lie about its own history — it is worth noting that the largest raw exposure of the week required no technique at all.
Sources: Security Affairs (50,000 Stripe secrets leaked in public code)
Calls to action
- Audit your Rust builds for the poisoned versions. Check lockfiles and CI caches for the affected
arrayref, internment and append-only-vec releases and for any appearance of proc-macro1, aovine, arone, aronenao or tinymember. If any runner built during the exposure window, rotate every credential that process could read and rebuild the runner image from clean sources.
- Constrain the compile stage, not just the install stage. Build with
--locked, vendor and go --offline where you can, apply egress allowlists to the build job, and add cargo-deny or cargo vet so an unaudited new transitive crate fails the pipeline. Cargo has no --ignore-scripts; the network boundary is the control.
- Patch GitLab today and verify what your pipeline trusts. Move to 18.11.11 / 19.0.8 / 19.1.6 / 19.2.4, then hunt web logs for anomalous GraphQL requests, repository deletions and force-pushes back to disclosure. Turn on signed-commit verification in the build job and export audit events off the instance.
- Make hallucinated packages fail closed. Route agent and developer installs through a private registry or dependency firewall that will not serve an unknown package on first request, and apply a cooldown so a name registered yesterday cannot be installed today.
- Give agents their own identity, and check the layer beneath it. Stop letting agents borrow human tokens or CI service accounts. Issue short-lived, task-scoped credentials with an audit trail that names the agent — and if you are one of the 81% still on the
aws-auth ConfigMap, migrate to EKS access entries first.
- Put workflow injection into static analysis. Turn on CodeQL for Actions workflows and treat a taint path from a pull-request title or branch name into a
run: block as a blocking finding, not a lint warning.
- Wire secret detection to revocation. Enable push protection, scan full history rather than the working tree, and make detection trigger automatic revocation. Then move to restricted, short-lived keys so the next leak has a shelf life measured in minutes.
- Find out what breaks when NVD metadata thins. Identify which of your controls depend on CPE and CVSS enrichment, add a secondary vulnerability data source, and test how your scanners behave on a CVE that arrives with no CPE attached.
On our watch list
- Build-time execution as the next hook.
build.rs in Cargo, setup.py and PEP 517 backends in Python, Gradle and Maven plugins, extconf.rb in Ruby — all execute during compilation and none have a mature blocking flag. Watching whether package managers ship a build-script sandbox, and whether scanners start analysing build scripts as first-class code.
- Cooldown as a default for Cargo. A waiting period before a new version becomes installable would have covered the entire arrayref exposure. Watching whether crates.io or the common proxies adopt one, and how loudly release engineering objects.
- Whether the forge stays the source of truth. CVE-2026-19478 made “the forge lied to my pipeline” a real scenario. Watching whether signed commits and independently verified provenance move from best practice to default in delivery platforms.
- Slopsquatting as a measured problem. The Register’s near-miss is anecdote; what is missing is a rate. Watching for research that quantifies how often agents recommend non-existent packages and how quickly attackers register the names.
- Agent identity standardising. Six capabilities is a good list; nobody has agreed on the token format, the scoping model, or who signs it. Watching whether workload identity federation absorbs agents or a separate primitive emerges.
- The 81%. Watching how fast the
aws-auth ConfigMap population actually drains, because it is a fair proxy for how much cluster-authorisation debt the industry is carrying into the agent era.
- NVD degradation in the wild. Watching for the first well-documented case of a scanner silently missing an applicable CVE because enrichment never arrived — and whether commercial feeds quietly become mandatory.
- Model-assisted triage and the false negative. Mythos 5 in a vulnerability scanner is the interesting experiment. Watching for published data on what model-assisted triage dismissed that it should not have.
- Tool count versus toil. Between agentic DevSecOps platforms, self-healing tests and observability consolidation, the sceptical question from this week’s DevOps.com pieces stands. Watching whether anyone publishes before-and-after numbers on engineer time rather than on findings volume.
|