{"id":5921,"date":"2026-09-20T13:23:27","date_gmt":"2026-09-20T18:23:27","guid":{"rendered":"https:\/\/www.cybersecurityinstitute.com\/blog\/?p=5921"},"modified":"2026-09-20T13:23:27","modified_gmt":"2026-09-20T18:23:27","slug":"devsecops-weekly-september-20-2026","status":"publish","type":"post","link":"https:\/\/www.cybersecurityinstitute.com\/blog\/?p=5921","title":{"rendered":"DevSecOps Weekly \u2014 September 20, 2026"},"content":{"rendered":"<style>\n.single .entry-title,\n.single .entry-header .entry-title,\n.single .post-title,\n.single header.entry-header h1,\n.single h1.entry-title,\n.single .page-title,\n.post-template-default h1.entry-title,\n.post-template-default .entry-header,\narticle .entry-header,\narticle .entry-title { display: none !important; }\n.single .entry-header { margin: 0 !important; padding: 0 !important; }\n.single .entry-content { margin-top: 0 !important; padding-top: 0 !important; }\n<\/style>\n<table role=\"presentation\" class=\"wrapper\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n<tr>\n<td align=\"center\">\n<table role=\"presentation\" class=\"container\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"680\">\n<p>        <!-- Banner --><\/p>\n<tr>\n<td class=\"banner\" style=\"background-color:#082f49;background:linear-gradient(135deg,#082f49 0%,#0c4a6e 50%,#0891b2 100%);padding:36px 32px;color:#ffffff;\">\n<p class=\"date\" style=\"color:#ffffff !important;\">September 20, 2026 &middot; Weekly Edition<\/p>\n<h1 style=\"color:#ffffff !important;\">DevSecOps Weekly<\/h1>\n<p class=\"tagline\" style=\"color:#ffffff !important;\">Three separate intrusions this week ran on the same worm tooling: <strong>170<\/strong> private CrowdSec repositories copied off the back of a <strong>May<\/strong> npm compromise, <strong>Shai-Hulud<\/strong> deployed across roughly <strong>100<\/strong> internal repositories after an attacker took over a live AI coding-assistant session, and <strong>PolinRider<\/strong> force-pushing malicious history into a Packagist package with more than <strong>700,000<\/strong> downloads. <strong>Plugin4Shell<\/strong> lets a repository owner swap pinned plugin code under four AI coding agents &mdash; two still unpatched, no CVE. <strong>12%<\/strong> of credential slots in <strong>82,000<\/strong> public MCP configuration files hold a hardcoded secret. A mass-scanning campaign is reading cloud credentials out of internet-exposed <strong>Vite<\/strong> dev servers four months after the advisory. And <strong>623 million<\/strong> code changes say duplication is up <strong>81%<\/strong> while refactoring has collapsed. Twenty-one stories.<\/p>\n<\/td>\n<\/tr>\n<p>        <!-- At a glance --><\/p>\n<tr>\n<td class=\"content\">\n<h2>This week at a glance<\/h2>\n<p>The story to carry out of this week is that <strong>Shai-Hulud has stopped being a campaign and become tooling<\/strong>. Three intrusions reported in the space of four days share the self-spreading worm lineage and share almost nothing else &mdash; different ecosystems, different entry points, different operators &mdash; and the temptation to collapse them into one continuing attack is the mistake to avoid. <strong>CrowdSec<\/strong> disclosed on <strong>18 September<\/strong> that the <strong>May 2026 TanStack npm compromise<\/strong> &mdash; <strong>84<\/strong> malicious versions of <strong>42<\/strong> packages, tracked as <strong>CVE-2026-45321<\/strong> &mdash; harvested a GitHub OAuth token from a then-employee&rsquo;s laptop, and that on <strong>22 May<\/strong> the attacker used it to copy <strong>170<\/strong> private repositories, leaving no trace in any log CrowdSec could read. Separately, <strong>Mandiant<\/strong> published an incident report in which an attacker took control of a developer&rsquo;s <strong>live AI coding-assistant session<\/strong>, had the assistant recommend a poisoned <strong>PyPI<\/strong> package, stole GitHub OAuth tokens and deployed <strong>Shai-Hulud<\/strong> across roughly <strong>100<\/strong> internal repositories &mdash; entry via PyPI rather than npm, and Mandiant is explicit that the available evidence does not link this to the March 2026 or August 2026 npm worm activity, which it calls separate campaigns. And <strong>Socket<\/strong>&rsquo;s threat research team traced <strong>PolinRider<\/strong> into <strong>Packagist<\/strong>, where four dev-branch versions of a Laravel Nova two-factor component with more than <strong>700,000<\/strong> cumulative downloads were poisoned by force-pushing rewritten Git history through a compromised developer account. One shared lesson runs through all three: the registry was downstream. The credential and the Git account were the objective.<\/p>\n<p>The second thread is that the coding agent is now a component of the build chain with none of a build chain&rsquo;s controls. <strong>Plugin4Shell<\/strong>, from <strong>Air Security<\/strong>, exploits the fact that <strong>Git will resolve a requested commit SHA as a branch or tag name<\/strong>: a repository owner creates a ref that looks like a hash, points it at different code, and the agent installs that code while reporting the pin matched. It affects <strong>Claude Code<\/strong>, <strong>OpenAI Codex<\/strong>, <strong>GitHub Copilot<\/strong> and <strong>Gemini CLI<\/strong>; a working proof-of-concept existed in <strong>May 2026<\/strong> and vendors were told in <strong>June<\/strong>. As of <strong>18 September<\/strong> &mdash; roughly three months later &mdash; Claude Code is fixed in <strong>2.1.179<\/strong> and Codex in <strong>0.146.0<\/strong>, Copilot and Gemini CLI are not fixed, and <strong>no CVE has been assigned and no public vendor advisory issued<\/strong>. Underneath that sits the credential layer the agents run on: <strong>Hush Security<\/strong> located roughly <strong>82,000<\/strong> MCP configuration files in public GitHub repositories and found <strong>12%<\/strong> of credential slots holding a hardcoded secret, of which <strong>55%<\/strong> had no vendor-recognisable token format and <strong>31%<\/strong> were opaque bearer tokens for internal MCP servers &mdash; which is to say pattern-based secret scanners would miss most of them. <strong>53%<\/strong> granted organisation-, account-, workspace- or database-wide access, and of those with any expiration policy, <strong>80%<\/strong> did not expire by default. In a sample of <strong>7,681<\/strong> credential-bearing configurations read back through seven revisions, <strong>243<\/strong> still held secrets in history that had been deleted from the current file.<\/p>\n<p>The rest of the week divides between the surfaces we keep leaving exposed and the arithmetic of AI-assisted development. On the surfaces: <strong>F5 Labs<\/strong> observed mass scanning in <strong>August 2026<\/strong> against <strong>CVE-2026-39364<\/strong>, a <strong>CVSS 8.2<\/strong> flaw in the <strong>Vite<\/strong> dev server whose advisory landed in <strong>April<\/strong> &mdash; an HTTP GET to <code>\/@fs\/<\/code> with <code>?raw<\/code> appended defeats the <code>server.fs.deny<\/code> check and returns the file in plaintext, and the files being requested are <code>.env<\/code> configurations, AWS credential files, <code>terraform.tfstate<\/code> and Azure profiles. The exposed asset is a <em>development<\/em> server reachable from the internet, so the remediation is at least as much about what is listening as about the patch. On the arithmetic: <strong>GitClear<\/strong>&rsquo;s analysis of <strong>623 million<\/strong> code changes from 2023 to 2026 found block duplication up <strong>81%<\/strong> against a 2023 baseline, from <strong>40.3<\/strong> to <strong>73.0<\/strong> instances per million changed lines, while &ldquo;moved code&rdquo; &mdash; its proxy for refactoring &mdash; fell from <strong>21%<\/strong> of changed lines in 2022 to <strong>3.8%<\/strong> in 2026. Read the comparisons carefully, because the headline welds three of them together. Meanwhile the institutions moved: an <strong>OpenSSF<\/strong> Governing Board commitment signed by twelve organisations put enterprise funding for package registries on the table against <strong>1.8 million<\/strong> malicious packages flagged in 2026 and a projected <strong>3-5x<\/strong> rise in publish events, and the <strong>Ninth Circuit<\/strong> &mdash; not a district court, whatever the headlines said &mdash; held that AI-generated code lacking copyright management information does not by itself violate <strong>DMCA &sect;1202<\/strong>.<\/p>\n<div class=\"watchlist\">\n<h2>On our watch list<\/h2>\n<ul>\n<li><strong>Whether GitHub Copilot and Gemini CLI ship a Plugin4Shell fix, and whether anyone assigns a CVE.<\/strong> Disclosure was June 2026 and both were still unpatched on 18 September, with Gemini CLI being retired in favour of Antigravity &mdash; which raises the question of whether a retiring product gets fixed at all. No CVE and no public advisory means there is nothing for a scanner or a procurement questionnaire to key on.<\/li>\n<li><strong>Whether the plugin-pinning fix lands in Git clients or only in the agents.<\/strong> GitHub already blocks branch and tag names that look like commit hashes, which is why plugins hosted there are harder to attack; plugins on other Git hosts have no such protection. Watching whether other hosts adopt the same restriction, or whether the agents start verifying that a resolved ref is genuinely an object ID.<\/li>\n<li><strong>Whether Shai-Hulud tooling turns up in a fourth ecosystem.<\/strong> The lineage has now been seen operating through npm and, in the Mandiant intrusion, PyPI, while PolinRider has touched npm, PyPI, Go modules, Packagist and Chrome extensions. Watching which registry is next, and whether any of them can produce the publish-event telemetry to spot it early.<\/li>\n<li><strong>Whether CrowdSec&rsquo;s exposed consensus thresholds change anything downstream.<\/strong> The leak included the consensus algorithm and previously undisclosed thresholds used to build CrowdSec blocklists, which roughly 150,000 users consume. Watching for evidence of evasion tuned to those thresholds, and for whether CrowdSec publishes a rotation.<\/li>\n<li><strong>Whether registries move to scoped, short-lived publish credentials.<\/strong> Every one of this week&rsquo;s three intrusions turned on a long-lived token or account rather than a registry vulnerability, and the CrowdSec token use left no trace in logs the victim could access. Watching for publish tokens that expire by default and for org-level audit records the token holder cannot suppress.<\/li>\n<li><strong>Whether secret scanners learn to read MCP configuration.<\/strong> Hush Security found 55% of the hardcoded secrets had no vendor-recognisable format and 31% were opaque bearer tokens for internal servers. Watching whether scanning vendors ship MCP-aware and entropy-based detection, and whether anyone starts scanning Git history rather than only the working tree &mdash; 243 of 7,681 sampled configurations had secrets that survived deletion.<\/li>\n<li><strong>Whether F5 Labs or anyone else publishes an exposure count for Vite.<\/strong> The campaign is documented; the number of internet-reachable dev servers is not. Watching for a figure, and for the same query-parameter filter-bypass pattern being tried against other development servers, since the technique is about defeating a path-deny check rather than anything specific to Vite.<\/li>\n<li><strong>Whether GitHub Actions&rsquo; cache-mode gets adopted or stays an option.<\/strong> A setting that limits cache poisoning only helps where it is turned on. Watching whether it becomes a default for new workflows, and whether organisations start requiring it in their reusable workflow templates.<\/li>\n<li><strong>Whether the OpenSSF registry commitment produces money.<\/strong> The statement names no funding amounts. Signatories anticipate a 3-5x increase in publish events, partly from AI-discovered vulnerabilities generating more patch releases, against 1.8 million malicious packages flagged this year. Watching for the first enterprise-tier pricing announcement from any of the named registries, and whether free access for individuals survives it.<\/li>\n<li><strong>Whether the core copyright claims in <em>Doe v. GitHub<\/em> now move.<\/strong> The Ninth Circuit decided the DMCA &sect;1202 question only; it did not decide whether training on open-source code infringes, whether that is fair use, or whether matching output infringes. Those claims remain before the district court. Watching the district-court schedule, and resisting the reading that the case is over.<\/li>\n<li><strong>Whether GitClear&rsquo;s next edition separates its comparisons.<\/strong> The 25% output gain is heavy AI users against their own prior velocity; the 4-10x is against non-AI users; the 81% duplication rise is dataset-wide against a 2023 baseline. Watching whether the next report reports them apart, and whether the &ldquo;moved code&rdquo; proxy for refactoring gets defended against the methodology criticism it drew in 2024 and 2025.<\/li>\n<\/ul><\/div>\n<p>            <!-- Topic map --><\/p>\n<div class=\"topic-map\">\n              <img decoding=\"async\" src=\"https:\/\/www.cybersecurityinstitute.com\/blog\/wp-content\/uploads\/2026\/09\/topic-map-devsecops-2026-09-20.png\" alt=\"Topic map of this week's DevSecOps Weekly stories\" loading=\"eager\"><\/p>\n<p class=\"caption\">This week&rsquo;s topic map &mdash; the supply-chain spine through the centre joining registry and Git-account compromise, the Shai-Hulud worm, npm, PyPI, GitHub, stolen OAuth tokens and source and secret theft; the CrowdSec cluster to its left with TanStack and CVE-2026-45321; the PolinRider cluster at the lower left with Socket, Karlo Zanki, Packagist, Composer dev branches, force-pushed history, EtherHiding drops and North Korea; the agent cluster on the right around AI coding agents, Plugin4Shell, Air Security, commit-SHA pinning, Claude Code, OpenAI Codex, GitHub Copilot and Gemini CLI; the credential cluster around the Model Context Protocol, Hush Security, hardcoded credentials and secret-scanning gaps; the dev-surface cluster at the lower right joining the Vite dev server, CVE-2026-39364, F5 Labs, exposed dev servers, cloud credential theft, AWS and Terraform state; the pipeline group around the CI\/CD attack surface, GitHub Actions, cache poisoning, buildpacks, container controls and pipeline consolidation; the commons cluster around OpenSSF, registry sustainability, Maven Central, crates.io, malicious packages, AWS OSS credits, the EU Cyber Resilience Act and CRA readiness; the litigation cluster at the top with Doe v. GitHub, the Ninth Circuit, DMCA &sect;1202, open source licensing risk, the Software Freedom Conservancy and Bruce Perens; and the AI-coding-effects cluster at the upper right around AI productivity, GitClear, code duplication, refactoring collapse, AI reliance, review and comprehension, requirements-first working and software factories.<\/p>\n<p>              <!-- INTERACTIVE_MAP_LINK_START --><\/p>\n<p style=\"margin:10px 0 0;text-align:center;\"><a href=\"https:\/\/www.cybersecurityinstitute.com\/blog\/?p=5920\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;padding:8px 18px;background-color:#0f172a;color:#ffffff !important;text-decoration:none;border-radius:6px;font-size:13px;font-weight:600;\">View interactive topic map &rarr;<\/a><\/p>\n<p><!-- INTERACTIVE_MAP_LINK_END -->\n            <\/div>\n<p>            <!-- Article index --><\/p>\n<h2>Article index<\/h2>\n<h3>The worm lineage: three intrusions, one toolset<\/h3>\n<div class=\"cluster-intro\">Distinct operators, distinct ecosystems, shared self-spreading tooling. In all three the package registry was downstream of a stolen credential or a compromised Git account &mdash; not the objective, the delivery mechanism.<\/div>\n<table class=\"index-table\">\n<tr>\n<th>Article<\/th>\n<th>Source<\/th>\n<th>Published<\/th>\n<\/tr>\n<tr>\n<td>1. <a href=\"https:\/\/thehackernews.com\/2026\/09\/crowdsec-says-tanstack-npm-attack-led.html\">CrowdSec Says TanStack npm Attack Led to Copy of 170 Private GitHub Repositories<\/a><\/td>\n<td class=\"src\">The Hacker News<\/td>\n<td class=\"dt\">Sep 19, 2026<\/td>\n<\/tr>\n<tr>\n<td>2. <a href=\"https:\/\/thehackernews.com\/2026\/09\/attacker-hijacks-ai-coding-assistant.html\">Attacker Hijacks AI Coding Assistant Session, Spreads Shai-Hulud Across About 100 Repositories<\/a><\/td>\n<td class=\"src\">The Hacker News<\/td>\n<td class=\"dt\">Sep 16, 2026<\/td>\n<\/tr>\n<tr>\n<td>3. <a href=\"https:\/\/socket.dev\/blog\/polinrider-github-packagist\">PolinRider Spreads Through Compromised GitHub Accounts and Packagist<\/a><\/td>\n<td class=\"src\">Socket<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Vendor threat-research blog<\/span><\/td>\n<td class=\"dt\">Sep 17, 2026<\/td>\n<\/tr>\n<\/table>\n<h3>The coding agent is now part of the build chain<\/h3>\n<div class=\"cluster-intro\">Pinned plugins, live agent sessions and MCP configuration files all inherit developer privilege without inheriting developer review. Two of the four agents affected by Plugin4Shell were still unpatched three months after disclosure, and there is no CVE to track it by.<\/div>\n<table class=\"index-table\">\n<tr>\n<th>Article<\/th>\n<th>Source<\/th>\n<th>Published<\/th>\n<\/tr>\n<tr>\n<td>4. <a href=\"https:\/\/thehackernews.com\/2026\/09\/plugin4shell-lets-repository-owners.html\">Plugin4Shell Lets Repository Owners Swap Pinned Plugin Code Across Four AI Coding Agents<\/a><\/td>\n<td class=\"src\">The Hacker News<\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>5. <a href=\"https:\/\/www.helpnetsecurity.com\/2026\/09\/18\/hush-security-mcp-credential-exposure-report\/\">Hardcoded MCP credentials found in public GitHub files<\/a><\/td>\n<td class=\"src\">Help Net Security<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Vendor research, restated by the outlet<\/span><\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>6. <a href=\"https:\/\/socket.dev\/blog\/github-actions-cache-mode\">GitHub Actions Adds cache-mode to Limit Cache Poisoning Risk<\/a><\/td>\n<td class=\"src\">Socket<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">GitHub product news written up on a vendor blog<\/span><\/td>\n<td class=\"dt\">Sep 16, 2026<\/td>\n<\/tr>\n<\/table>\n<h3>The exposed dev surface, and the controls that run on the pipeline<\/h3>\n<div class=\"cluster-intro\">A development server was never meant to be a production-facing surface, and a CI\/CD pipeline holds more privilege than most of the systems it deploys to. The constructive half of this group is about where security controls actually live &mdash; in the build, not in a scan afterwards.<\/div>\n<table class=\"index-table\">\n<tr>\n<th>Article<\/th>\n<th>Source<\/th>\n<th>Published<\/th>\n<\/tr>\n<tr>\n<td>7. <a href=\"https:\/\/thehackernews.com\/2026\/09\/mass-scanning-campaign-exploits-vite.html\">Mass-Scanning Campaign Exploits Vite Flaw to Extract Cloud Credentials From Exposed Dev Servers<\/a><\/td>\n<td class=\"src\">The Hacker News<\/td>\n<td class=\"dt\">Sep 15, 2026<\/td>\n<\/tr>\n<tr>\n<td>8. <a href=\"https:\/\/devops.com\/why-your-ci-cd-pipeline-is-your-most-unprotected-attack-surface\/\">Why Your CI\/CD Pipeline Is Your Most Unprotected Attack Surface<\/a><\/td>\n<td class=\"src\">DevOps.com<\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>9. <a href=\"https:\/\/thenewstack.io\/buildpacks-container-security-scale\/\">How buildpacks help enterprises finally operate container security controls at scale<\/a><\/td>\n<td class=\"src\">The New Stack<\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>10. <a href=\"https:\/\/devops.com\/how-i-consolidated-duplicate-delivery-pipelines-with-parameters-and-build-tags\/\">How I Consolidated Duplicate Delivery Pipelines With Parameters and Build Tags<\/a><\/td>\n<td class=\"src\">DevOps.com<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Practitioner how-to<\/span><\/td>\n<td class=\"dt\">Sep 16, 2026<\/td>\n<\/tr>\n<\/table>\n<h3>Who funds the registries, and who governs the commons<\/h3>\n<div class=\"cluster-intro\">The institutional layer moved on three fronts at once this week: enterprise funding for the package registries everybody depends on, a readiness path for the EU Cyber Resilience Act, and an appellate ruling that narrows one legal theory open source developers had been counting on.<\/div>\n<table class=\"index-table\">\n<tr>\n<th>Article<\/th>\n<th>Source<\/th>\n<th>Published<\/th>\n<\/tr>\n<tr>\n<td>11. <a href=\"https:\/\/openssf.org\/blog\/2026\/09\/16\/were-in-enterprise-commitment-to-sustainable-package-registries\/\">We&rsquo;re In: Enterprise Commitment to Sustainable Package Registries<\/a><\/td>\n<td class=\"src\">OpenSSF<\/td>\n<td class=\"dt\">Sep 16, 2026<\/td>\n<\/tr>\n<tr>\n<td>12. <a href=\"https:\/\/openssf.org\/blog\/2026\/09\/14\/empowering-open-source-security-with-scalable-infrastructure\/\">Empowering Open Source Security with Scalable Infrastructure<\/a><\/td>\n<td class=\"src\">OpenSSF<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Guest post by an AWS program manager, on the AWS credit programme<\/span><\/td>\n<td class=\"dt\">Sep 14, 2026<\/td>\n<\/tr>\n<tr>\n<td>13. <a href=\"https:\/\/openssf.org\/blog\/2026\/09\/15\/grow-cra-readiness-find-your-path-through-the-european-union-cyber-resilience-act\/\">Grow CRA Readiness: Find Your Path Through the European Union Cyber Resilience Act<\/a><\/td>\n<td class=\"src\">OpenSSF<\/td>\n<td class=\"dt\">Sep 15, 2026<\/td>\n<\/tr>\n<tr>\n<td>14. <a href=\"https:\/\/devops.com\/us-district-court-decision-in-ais-favor-worries-open-source-developers\/\">US District Court Decision in AI&rsquo;s Favor Worries Open-Source Developers<\/a><\/td>\n<td class=\"src\">DevOps.com<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">The ruling is from the Ninth Circuit Court of Appeals, not a district court<\/span><\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>15. <a href=\"https:\/\/www.infosecurity-magazine.com\/news-features\/industry-coalitions-secure-open\/\">How Industry Coalitions Are Rallying to Secure Open Source Software for the AI Era<\/a><\/td>\n<td class=\"src\">Infosecurity Magazine<\/td>\n<td class=\"dt\">Sep 2, 2026<\/td>\n<\/tr>\n<\/table>\n<h3>What AI-assisted coding is doing to the codebase<\/h3>\n<div class=\"cluster-intro\">Output is up and the measurements of what that output costs are getting better. The useful move this week is away from velocity metrics and towards duplication, comprehension and what a human is actually still the gate on.<\/div>\n<table class=\"index-table\">\n<tr>\n<th>Article<\/th>\n<th>Source<\/th>\n<th>Published<\/th>\n<\/tr>\n<tr>\n<td>16. <a href=\"https:\/\/thenewstack.io\/ai-coding-duplication-rose\/\">Your AI coding spend bought 25% more output. Duplication rose 81%.<\/a><\/td>\n<td class=\"src\">The New Stack<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Author is employed by a CI\/CD vendor; research is GitClear&rsquo;s<\/span><\/td>\n<td class=\"dt\">Sep 14, 2026<\/td>\n<\/tr>\n<tr>\n<td>17. <a href=\"https:\/\/thenewstack.io\/study-developers-are-addicted\/\">Study: Developers are addicted to AI, and managers are making it worse<\/a><\/td>\n<td class=\"src\">The New Stack<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Coddy survey; n just over 300, self-selected<\/span><\/td>\n<td class=\"dt\">Sep 17, 2026<\/td>\n<\/tr>\n<tr>\n<td>18. <a href=\"https:\/\/thenewstack.io\/human-oversight-defining-requirements\/\">Why human oversight is shifting from writing code to defining requirements<\/a><\/td>\n<td class=\"src\">The New Stack<\/td>\n<td class=\"dt\">Sep 17, 2026<\/td>\n<\/tr>\n<tr>\n<td>19. <a href=\"https:\/\/www.oreilly.com\/radar\/software-factories-light-and-dark\/\">Software Factories, Light and Dark<\/a><\/td>\n<td class=\"src\">O&rsquo;Reilly Radar<\/td>\n<td class=\"dt\">Sep 18, 2026<\/td>\n<\/tr>\n<tr>\n<td>20. <a href=\"https:\/\/newsletter.pragmaticengineer.com\/p\/openai-software-factory\">Inside OpenAI&rsquo;s Agentic Software Factory<\/a><\/td>\n<td class=\"src\">The Pragmatic Engineer<\/td>\n<td class=\"dt\">Sep 15, 2026<\/td>\n<\/tr>\n<tr>\n<td>21. <a href=\"https:\/\/github.blog\/ai-and-ml\/generative-ai\/migrating-the-github-copilot-runtime-to-rust-using-copilot\/\">Migrating the GitHub Copilot runtime to Rust, using Copilot<\/a><\/td>\n<td class=\"src\">The GitHub Blog<br \/><span style=\"font-size:11px;color:#94a3b8;text-transform:none;letter-spacing:0;\">Vendor engineering blog<\/span><\/td>\n<td class=\"dt\">Sep 17, 2026<\/td>\n<\/tr>\n<\/table>\n<p>            <!-- Detailed write-ups --><\/p>\n<h2>Detailed write-ups<\/h2>\n<div class=\"article\">\n<h4>1. CrowdSec: a laptop compromised in May, 170 private repositories copied eleven days later<\/h4>\n<p class=\"meta\">The Hacker News &middot; September 19, 2026<\/p>\n<p>This is the cleanest published account this year of what a stolen developer credential is actually worth, and the timeline is the part to read closely. On <strong>11 May 2026<\/strong>, <strong>84 malicious versions of 42 TanStack npm packages<\/strong> were published &mdash; the compromise tracked as <strong>CVE-2026-45321<\/strong> &mdash; and those versions harvested credentials from developer machines: GitHub tokens, SSH keys, cloud credentials. One of the machines belonged to a <strong>CrowdSec<\/strong> employee, later a former employee. The attacker took a <strong>GitHub OAuth token<\/strong> from that account, and on <strong>22 May<\/strong> used it to copy <strong>170 private CrowdSec repositories<\/strong>. The account was removed from the CrowdSec GitHub organisation on <strong>25 May<\/strong> &mdash; three days after the copy, which is a perfectly respectable offboarding interval and made no difference whatsoever. Critically, <strong>the token use left no trace in any log CrowdSec could access<\/strong>. The company learned what had happened when the archive surfaced on an online forum on <strong>16 September<\/strong>, nearly four months later, and published its report on <strong>18 September<\/strong>.<\/p>\n<p>What was in the archive matters as much as how it left. Alongside web console code, data-science scripts and models and automation scripts sat <strong>the consensus algorithm CrowdSec uses to build its blocklists, including previously undisclosed thresholds<\/strong> &mdash; for a company whose product is a community-sourced blocklist consumed by roughly <strong>150,000<\/strong> users, that is the detection logic itself, not incidental source. The personal data is the other half: <strong>83 user email addresses<\/strong> and <strong>51 investor names, emails and investment context dating back to 2020<\/strong>. CEO <strong>Philippe Humeau<\/strong> took that one personally and said so: <strong>&ldquo;for this I personally apologize.&rdquo;<\/strong> The credential exposure, by contrast, held up better than most organisations should expect &mdash; the only usable credential in the dump was an <strong>AWS SNS token scoped to publishing to a single topic<\/strong>, and an unauthorised attempt to use it was observed on <strong>17 August<\/strong>. Narrow scoping is the control that worked here, and it worked because somebody had already done it.<\/p>\n<p>Two things not to over-read. First, the reporting ties the laptop compromise to the <strong>TanStack npm attack<\/strong>, and that campaign sits in the same npm worm lineage as the Shai-Hulud activity elsewhere in this issue, but it is not the same incident and nobody has claimed it is. Second, the <strong>170 repositories were copied, not published<\/strong> &mdash; this is an exfiltration, not a leak site. The same TanStack wave is reported to have touched <strong>Mistral AI<\/strong> and two <strong>OpenAI<\/strong> employee devices, which is the useful scale signal: one poisoned dependency wave reaching across organisations that have nothing to do with each other, because they all run <code>npm install<\/code> on developer laptops that hold organisation-wide tokens.<\/p>\n<p>The operational lesson is about detection surface, not about npm. A stolen OAuth token used against your own organisation produced <strong>no evidence you could see<\/strong>, and the gap between the copy and the discovery was four months and depended on a third party posting the archive publicly. If your GitHub organisation cannot answer &ldquo;which repositories did this identity read last month,&rdquo; you are in the same position CrowdSec was. Audit-log retention at the organisation tier, short-lived and scoped tokens, and treating a departing employee&rsquo;s credentials as compromised rather than merely revoked are the three controls this incident argues for.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/thehackernews.com\/2026\/09\/crowdsec-says-tanstack-npm-attack-led.html\">https:\/\/thehackernews.com\/2026\/09\/crowdsec-says-tanstack-npm-attack-led.html<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>2. Mandiant: the attacker took the agent session, and the agent recommended the poisoned package<\/h4>\n<p class=\"meta\">The Hacker News &middot; September 16, 2026<\/p>\n<p>This is the first widely reported intrusion in which a <strong>live AI coding-assistant session<\/strong> is the initial foothold rather than an incidental detail, and the chain is worth memorising in order. The attacker gained control of a developer&rsquo;s running assistant session. The assistant then <strong>recommended a poisoned package, and the recommendation was accepted<\/strong>. An infostealer was installed through a poisoned <strong>PyPI<\/strong> package using the developer&rsquo;s active session. GitHub <strong>OAuth tokens<\/strong> were stolen. And the self-spreading <strong>Shai-Hulud<\/strong> worm was deployed across roughly <strong>100 internal repositories<\/strong>. The attacker then poisoned a package inside the company&rsquo;s <em>own official namespace<\/em>, and a second employee pulled the compromised version &mdash; a secondary infection generated entirely inside the organisation, from its own trusted registry path.<\/p>\n<p>The research is a <strong>Mandiant<\/strong> (Google Cloud Security) incident report, and Mandiant has withheld a great deal: the victim is an unnamed SaaS provider, the intrusion date is not given, and <strong>neither the AI coding assistant product nor the poisoned PyPI package name nor any download counts are disclosed<\/strong>. Those gaps are worth respecting rather than filling. Claude Code and Visual Studio Code appear in the reporting as context for how agent sessions work, not as the compromised product, and no published evidence names which assistant was involved. What Mandiant does say plainly is what was taken: <strong>&ldquo;stole repository secrets and source code for the company&rsquo;s products.&rdquo;<\/strong><\/p>\n<p>The detail that changes the threat model is the ecosystem. Shai-Hulud is known from <strong>npm<\/strong>; here the entry was <strong>PyPI<\/strong>. That is tooling being retargeted, and it is the reason to stop treating this lineage as a single ongoing campaign. Mandiant is unusually explicit on the point: it describes the <strong>August 2026 Keyv-linked npm worm campaign<\/strong> and the <strong>March 2026<\/strong> activity as <em>separate campaigns<\/em>, and states that the available evidence does not link them to this intrusion. Three operators, one worm, several registries &mdash; that is the correct shape of the problem, and it means ecosystem-specific defences will keep arriving one ecosystem late.<\/p>\n<p>For anyone running coding agents in production, the actionable reading is that the agent session is a privileged execution context with a recommendation channel attached. It can install software, it holds whatever the developer holds, and a compromise of it converts directly into a supply-chain foothold in your own namespace. Treat an agent session like a shell with an opinion: scope its credentials separately from the developer&rsquo;s, require human confirmation for any dependency addition regardless of who suggested it, and make publishing to your own internal namespace a gated action rather than an authenticated one.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/thehackernews.com\/2026\/09\/attacker-hijacks-ai-coding-assistant.html\">https:\/\/thehackernews.com\/2026\/09\/attacker-hijacks-ai-coding-assistant.html<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>3. PolinRider: the registry entry was never the target, the Git account was<\/h4>\n<p class=\"meta\">Socket &middot; September 17, 2026<\/p>\n<p>Research by <strong>Karlo Zanki<\/strong> of the <strong>Socket<\/strong> threat research team, building on the team&rsquo;s July 2026 work on the same operators, and the central case is specific enough to act on. The package is <strong><code>visanduma\/nova-two-factor<\/code><\/strong> on <strong>Packagist<\/strong> &mdash; a Laravel Nova two-factor-authentication component with more than <strong>700,000 cumulative downloads<\/strong>. Four versions were poisoned, and all four are <strong>branch-tracking<\/strong>: <code>dev-nova4support<\/code>, <code>dev-main<\/code>, <code>dev-using-inertia<\/code> and <code>dev-nova5<\/code>. That is the whole mechanism in one line. <strong>Composer&rsquo;s dev-branch resolution means a consumer tracks a moving Git ref rather than an immutable release<\/strong>, so rewriting history changes what everybody installs, retroactively, with no new version number to notice.<\/p>\n<p>The entry point was the compromise of the developer GitHub account <strong><code>LaHiRu<\/code><\/strong> inside the <strong>Visanduma<\/strong> GitHub organisation, identified in <strong>mid-June 2026<\/strong>. From there the sequence is: compromise a developer&rsquo;s Git account; <strong>force-push rewritten history<\/strong> to insert the malicious code; conceal payloads in configuration files or in <code>.woff2<\/code> font files; trigger execution on build, or simply on opening the folder in an IDE; fetch staged payloads through dead-drop resolvers &mdash; <strong>EtherHiding<\/strong> and NullReceiver &mdash; and pull later-stage infostealers from command-and-control. Socket attributes the operators as <strong>North Korea-linked<\/strong>, and notes the campaign has touched <strong>npm, PyPI, Go modules, Packagist and Chrome extensions<\/strong>. How many accounts were compromised beyond <code>LaHiRu<\/code> is not established, because much of the activity took place in private repositories.<\/p>\n<p>Zanki&rsquo;s framing is the sentence to take into an architecture review: <strong>&ldquo;Package-registry compromise is often a consequence of a broader Git-based intrusion rather than the campaign&rsquo;s primary objective.&rdquo;<\/strong> Read alongside the CrowdSec and Mandiant incidents above, that is three for three this week &mdash; the registry was the distribution channel, and the credential or the account was the target. Defences aimed at the registry catch the last step of a chain that started somewhere you were not watching.<\/p>\n<p>The concrete control here is dependency resolution policy, and it is unglamorous. <strong>If your <code>composer.json<\/code> resolves any dependency to a dev branch, you have no immutability guarantee at all<\/strong> &mdash; pin to released versions, commit a lock file, and verify it in CI rather than regenerating it. The execution-on-IDE-open detail deserves its own note: a developer does not have to run a build to be compromised, which makes &ldquo;only open untrusted repositories in a container&rdquo; a real control rather than a nicety. And the <code>.woff2<\/code> payload trick is a reminder that font and asset files are executable content in a build context and belong in whatever scanning you already run over source.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/socket.dev\/blog\/polinrider-github-packagist\">https:\/\/socket.dev\/blog\/polinrider-github-packagist<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>4. Plugin4Shell: the pin says it matched, and it did not<\/h4>\n<p class=\"meta\">The Hacker News &middot; September 18, 2026<\/p>\n<p>Research by <strong>Air Security<\/strong>, and the underlying fact is a property of Git that has been true for years: <strong>Git can resolve a requested commit SHA as a branch or tag name<\/strong>. A repository owner creates a branch or tag whose name looks like a commit hash and points it at different code. An AI coding agent asked to install a plugin at that pinned SHA fetches and installs <em>that<\/em> code, and reports that the pinned version matched. The swapped plugin then runs <strong>with the same privileges as the user running the agent<\/strong>. Pinning, in other words, has been providing the appearance of immutability without the guarantee &mdash; and pinning is exactly the control most teams adopted to make agent plugins safe.<\/p>\n<p>Four agents are affected: <strong>Anthropic Claude Code<\/strong>, <strong>OpenAI Codex<\/strong>, <strong>GitHub Copilot<\/strong> and <strong>Google Gemini CLI<\/strong>. A working proof-of-concept was built in <strong>May 2026<\/strong> and disclosed to vendors in <strong>June 2026<\/strong>. As of publication on <strong>18 September<\/strong> the fix status is: <strong>Claude Code fixed in 2.1.179 and later; Codex fixed in 0.146.0 and later; GitHub Copilot unpatched; Gemini CLI unpatched<\/strong> and being retired in favour of Antigravity. <strong>No CVE identifier had been assigned and no public vendor advisories had been issued<\/strong> &mdash; roughly three months after disclosure. That last point is the one with programme consequences: with no CVE, this does not appear in a vulnerability feed, does not trip a scanner, and cannot be asked about in a supplier questionnaire by identifier. You have to track it by hand.<\/p>\n<p>There is a partial mitigation, and it comes from an unexpected direction. <strong>GitHub itself blocks branch and tag names that look like commit hashes<\/strong>, so plugins hosted on GitHub are materially harder to exploit. Plugins hosted anywhere else get no such protection. That is worth stating evenly: the platform whose own agent is currently unpatched is also the platform whose naming restriction blunts the attack for everything hosted on it. The practical read is that your exposure depends less on which agent you run than on where the plugins it installs are hosted.<\/p>\n<p>Do three things this week. Establish which agents your engineers run and get <strong>Claude Code to 2.1.179+ and Codex to 0.146.0+<\/strong>. For Copilot and Gemini CLI, inventory the plugins in use and restrict installation to GitHub-hosted sources until a fix ships. And treat a version pin in any agent configuration as an unverified claim until the agent can demonstrate the resolved ref was an object ID rather than a name &mdash; the same scepticism you would apply to an unsigned artifact whose manifest asserts its own integrity.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/thehackernews.com\/2026\/09\/plugin4shell-lets-repository-owners.html\">https:\/\/thehackernews.com\/2026\/09\/plugin4shell-lets-repository-owners.html<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>5. 82,000 MCP config files, and the secrets in them are the kind your scanner cannot see<\/h4>\n<p class=\"meta\">Help Net Security &middot; September 18, 2026<\/p>\n<p>The research is <strong>Hush Security<\/strong>&rsquo;s report <em>The State of MCP Configuration: The Identity Security Gaps<\/em>, written up by Anamarija Pogorelec at Help Net Security, and the attribution matters because the headline conclusion doubles as the vendor&rsquo;s thesis. With that said, the methodology is disclosed and the numbers are specific. Hush located roughly <strong>82,000 MCP configuration files in public GitHub repositories<\/strong> by searching known MCP config filenames, and found that <strong>12% of credential slots in those files held a hardcoded secret<\/strong> &mdash; predominantly vendor API keys, bearer tokens and database passwords. Note the denominator: that is 12% of <em>credential slots<\/em>, not of files and not of repositories.<\/p>\n<p>The finding with the most operational bite is about detectability rather than volume. <strong>55% of the secrets had no vendor-recognisable token format<\/strong>, and <strong>31% were opaque bearer tokens for internal MCP servers<\/strong>. Conventional secret scanning works by pattern-matching known provider formats &mdash; an AWS key looks like an AWS key &mdash; which means the majority of what is sitting in these files is invisible to the tooling most organisations already believe covers this. Hush used provider-specific patterns <em>plus<\/em> Shannon entropy to find them, which is the technique difference in one line. <strong>Micha Rave<\/strong>, Hush&rsquo;s CEO, puts the argument this way: <strong>&ldquo;The instinct every security team has trained for years &ndash; to scan for secrets, block the commit, and rotate what leaked &ndash; isn&rsquo;t nearly enough here.&rdquo;<\/strong> That is a product pitch and also, on these numbers, true.<\/p>\n<p>Blast radius is the third column of the report and the one to quote in a risk conversation. <strong>53% of the exposed credentials granted organisation-, account-, workspace- or database-wide access.<\/strong> <strong>24% were broad-scope and non-expiring by design.<\/strong> Of the credentials that had an expiration policy at all, <strong>80% did not expire by default<\/strong>. And the history finding closes the loop on remediation: in a sample of <strong>7,681<\/strong> credential-bearing configurations examined back up to seven revisions, <strong>243 contained secrets that had been deleted from the current file but remained in Git history<\/strong> &mdash; deleted, therefore assumed handled, therefore never rotated.<\/p>\n<p>The authors are careful about limits and so should we be: forks were excluded and GitHub search limits apply, so these are explicitly treated as <strong>lower bounds<\/strong>; no credential was tested against a live service, and raw secret values were not retained. None of that softens the conclusion. If your organisation has adopted MCP servers in the last year &mdash; and most engineering organisations have, often without a decision being taken &mdash; then the config files describing them are a credential store that nobody designated as one. Inventory them, move the credentials into whatever secret manager you already run, scope them to something narrower than the workspace, and scan history rather than the working tree.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/www.helpnetsecurity.com\/2026\/09\/18\/hush-security-mcp-credential-exposure-report\/\">https:\/\/www.helpnetsecurity.com\/2026\/09\/18\/hush-security-mcp-credential-exposure-report\/<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>6. The Vite dev server was never supposed to be on the internet, and it is being scanned at volume<\/h4>\n<p class=\"meta\">The Hacker News &middot; September 15, 2026<\/p>\n<p><strong>CVE-2026-39364<\/strong> is a <strong>CVSS 8.2<\/strong> flaw in the <strong>Vite<\/strong> development server, disclosed through a Vite GitHub security advisory in <strong>April 2026<\/strong>. The mechanism is a filter bypass and it is trivially simple: an HTTP GET to the <code>\/@fs\/<\/code> endpoint referencing a sensitive file path, with <code>?raw<\/code>, <code>?import&amp;raw<\/code> or <code>?import&amp;url&amp;inline<\/code> appended. <strong>The query-parameter suffix defeats the <code>server.fs.deny<\/code> check<\/strong>, and the file body comes back in plaintext. Three preconditions have to hold together: the dev server is exposed with <code>--host<\/code> or <code>server.host<\/code>; the target file sits under a <code>server.fs.allow<\/code> directory; and the file matches a <code>server.fs.deny<\/code> pattern. That last one is the unpleasant part &mdash; the protection list is the target list.<\/p>\n<p><strong>F5 Labs<\/strong> observed the mass-scanning campaign in <strong>August 2026<\/strong>, roughly four months after the advisory. Scanner traffic originated largely from <strong>Google Cloud Platform ranges (34.x and 35.x)<\/strong>, with additional sources in the United States, Belgium, the Netherlands, Singapore and Taiwan. The files being requested tell you exactly what this is for: <strong><code>.env<\/code> configurations, AWS credential and config files, AWS backups, <code>terraform.tfstate<\/code>, <code>serverless.yml<\/code>, Azure profiles<\/strong>, plus <code>\/etc\/passwd<\/code> and <code>\/proc<\/code> paths for good measure. This is credential harvesting at scale against development infrastructure, and no threat actor attribution has been made &mdash; &ldquo;mass-scanning campaign&rdquo; here means opportunistic scanning, not a named crew.<\/p>\n<p>Two numbers are missing from the reporting and should not be invented: <strong>the affected and fixed Vite version numbers are not given, and there is no count of exposed servers<\/strong>. Check your own versions against the Vite advisory rather than against a figure in a news article. What the reporting does establish is the shape of the exposure, and the shape is the story: <strong>a development-time tool reachable from the internet<\/strong>. A dev server is designed to read arbitrary files off the developer&rsquo;s disk on request, because that is what a dev server is for. There is no configuration of it that is safe to expose.<\/p>\n<p>So the remediation is two-sided and the second half is the durable one. Patch Vite, yes. But also go and find out why a dev server was listening on a routable address at all &mdash; that is usually a container published with <code>--host 0.0.0.0<\/code> for convenience, a cloud workstation with a permissive security group, or a preview environment that outlived its ticket. Put development servers behind authentication or a private network as a standing rule, and treat <em>any<\/em> dev-time tool reachable from the internet as a finding independent of whether it currently has a CVE. The four-month gap between advisory and mass exploitation is the window you are actually defending.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/thehackernews.com\/2026\/09\/mass-scanning-campaign-exploits-vite.html\">https:\/\/thehackernews.com\/2026\/09\/mass-scanning-campaign-exploits-vite.html<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>7. Enterprises say they will pay for the package registries. No amounts yet.<\/h4>\n<p class=\"meta\">OpenSSF &middot; September 16, 2026<\/p>\n<p>A joint enterprise commitment published by the <strong>OpenSSF Governing Board<\/strong>, and the signatory list is the news: <strong>Arm, Datadog, Dell Technologies, Ericsson, GitHub, Google, IBM, Kusari, Microsoft, Red Hat, the Rust Foundation and Sonatype<\/strong> &mdash; twelve organisations, several of them the largest consumers of the infrastructure in question. The registries named in scope include <strong>PyPI, Maven Central, crates.io, RubyGems, npm, NuGet, OpenVSX and Packagist<\/strong>. The scale figures explain why the conversation is happening now: those registries collectively serve <strong>trillions of downloads annually<\/strong>, with download volumes growing <strong>30-50% year over year<\/strong>, and <strong>1.8 million malicious packages<\/strong> were flagged across them in 2026 to date.<\/p>\n<p>The forward projection is the interesting number. Signatories anticipate a <strong>3-5x increase in publish events<\/strong>, driven in part by <strong>AI-discovered vulnerabilities generating more patch releases<\/strong>. That is a direct statement that AI-assisted security work is about to become an infrastructure cost borne by volunteer-funded registries &mdash; more scanning produces more findings produces more releases produces more bandwidth, storage and moderation load, and none of that lands on the organisation that ran the scanner. Set that beside the 1.8 million malicious packages and the registries are being asked to absorb both the legitimate and the hostile side of the same growth curve.<\/p>\n<p>The commitment itself is five points, and they are principles rather than cheques: keep free access for individual developers and small organisations; explore enterprise-based funding for high-volume consumers and premium capabilities; <strong>treat registry fees as a business and security investment rather than a cost to avoid<\/strong>; support registry-run funding experiments; and respect each registry&rsquo;s independence in choosing its own model. The Governing Board&rsquo;s framing is blunt enough: <strong>&ldquo;Registries cannot deliver the scale, availability, security, and observability enterprises need without sustainable funding.&rdquo;<\/strong> The piece follows open letters from 2025 and May 2026, so this is the third public step in a sequence.<\/p>\n<p><strong>No funding amounts are disclosed<\/strong>, which is the honest summary of where this has got to: a statement of intent from organisations that could fund it, with the mechanism left to each registry. The part worth planning around is the &ldquo;enterprise-based funding for high-volume consumers&rdquo; clause, because if it becomes real, someone in your organisation is going to be asked to pay for dependency downloads that currently appear on no budget line. Now is a good time to be able to answer how many packages you pull, from where, and how much of it is your CI pulling the same artifact repeatedly because nothing caches it &mdash; an internal proxy or mirror is the answer to both the cost question and, incidentally, a fair amount of the availability question.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/openssf.org\/blog\/2026\/09\/16\/were-in-enterprise-commitment-to-sustainable-package-registries\/\">https:\/\/openssf.org\/blog\/2026\/09\/16\/were-in-enterprise-commitment-to-sustainable-package-registries\/<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>8. The court was the Ninth Circuit, the ruling was narrow, and the case is not over<\/h4>\n<p class=\"meta\">DevOps.com &middot; September 18, 2026<\/p>\n<p>Start with the correction, because it changes how much weight the decision carries: <strong>the 16 September 2026 ruling in <em>Doe v. GitHub<\/em> came from the Ninth Circuit Court of Appeals, not a district court<\/strong>, whatever the headline says. An appellate ruling binds lower courts across the circuit; a district-court ruling does not. <strong>Judge Eric Miller<\/strong> held that <strong>AI-generated code lacking copyright management information does not by itself violate DMCA &sect;1202<\/strong>, reasoning that <strong>&ldquo;one who creates a new work and fails to include CMI cannot be said to have &lsquo;removed&rsquo; or &lsquo;altered&rsquo; anything.&rdquo;<\/strong> Read that sentence literally, because the whole holding lives in it: &sect;1202 is a provision about <em>stripping<\/em> attribution metadata, and the court found that generating a new work without attribution is not stripping.<\/p>\n<p>Now the limits, which are extensive and which the coverage has mostly under-reported. The ruling <strong>did not decide whether training on open-source code infringes copyright<\/strong>. It <strong>did not decide whether such training is fair use<\/strong>. It <strong>did not decide whether matching output infringes<\/strong>. And it <strong>did not decide whether AI vendors must honour licence obligations<\/strong>. The core copyright claims remain live before the district court. <strong>Karen Sadler of the Software Freedom Conservancy<\/strong> has specifically warned against overreading the decision, and she is right to: this removes one statutory theory from the plaintiffs&rsquo; toolkit and leaves the central question &mdash; what a licence means when a model has read it &mdash; entirely open.<\/p>\n<p>The worry from the open-source side is nonetheless real and worth taking seriously on its own terms. <strong>Duane O&rsquo;Brien<\/strong> of the OSI and <strong>Bruce Perens<\/strong> are the concerned voices in the reporting, and the concern is structural rather than legal: copyleft licences depend on attribution and notice travelling with the code, and a ruling that generated output carries no CMI obligation weakens the mechanism by which a licence announces itself downstream. If attribution does not propagate, enforcement becomes a matter of proving provenance after the fact &mdash; which is exactly the problem the rest of this issue is trying to solve with build attestation and SBOMs.<\/p>\n<p>What to do with it in an engineering organisation this quarter is modest but concrete. This does not change your obligations when you <em>use<\/em> open-source code &mdash; licence compliance for dependencies you pull is untouched by this ruling. It does mean that <strong>&ldquo;the model will surface the licence&rdquo; is not a control you can rely on<\/strong>: if your engineers use coding assistants, the output arrives without provenance and your compliance process has to establish it some other way. And if you have been tracking this case as the one that would settle AI training and open-source licensing, reset that expectation &mdash; the questions that matter are still in front of the district court.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/devops.com\/us-district-court-decision-in-ais-favor-worries-open-source-developers\/\">https:\/\/devops.com\/us-district-court-decision-in-ais-favor-worries-open-source-developers\/<\/a><\/p>\n<\/p><\/div>\n<div class=\"article\">\n<h4>9. 623 million code changes: duplication up 81%, refactoring down to 3.8%<\/h4>\n<p class=\"meta\">The New Stack &middot; September 14, 2026<\/p>\n<p>The underlying research is <strong>GitClear<\/strong>&rsquo;s <em>Maintainability Gap<\/em> report, published June 2026 and drawing on <strong>623 million analysed code changes spanning 2023 to 2026<\/strong> &mdash; a code-change-operation database that classifies each change and derives duplication, hotspot and refactoring signals, with duplication normalised as block-duplication instances per million changed lines. That is a large and consistently measured dataset, and it is the reason this is worth more of your attention than the average productivity survey. But the headline welds together three different comparisons, and separating them is the whole job of reading it properly.<\/p>\n<p>Comparison one: <strong>heavy AI users gained 25% against their own prior velocity<\/strong>. Not against a control group &mdash; against what those same developers used to produce. Comparison two, entirely separate: heavy AI users outproduced non-AI users by <strong>4x to 10x<\/strong>. Comparison three: <strong>block duplication rose 81% against a 2023 baseline, from 40.3 to 73.0 instances per million changed lines<\/strong> &mdash; and that is a <em>dataset-wide<\/em> figure measured against a point in time, not a measurement of the same cohort that produced the 25%. So the sentence &ldquo;AI made your code 81% more duplicated&rdquo; is not something this research establishes. What it does establish is that the corpus got substantially more duplicated over the period in which AI-assisted development became normal.<\/p>\n<p>The finding that would worry a staff engineer most is the refactoring collapse: <strong>&ldquo;moved code&rdquo; fell from 21% of changed lines in 2022 to 3.8% in 2026<\/strong>, and the behavioural read is that developers who previously chose refactoring over copy-and-paste at roughly <strong>two to one<\/strong> are now about <strong>five times likelier<\/strong> to copy and paste. That is a plausible mechanism &mdash; generating a near-duplicate is now cheaper than restructuring to avoid one &mdash; but apply the caveat the author of the report has earned: <strong>GitClear&rsquo;s 2024 and 2025 editions drew methodology criticism for equating &ldquo;moved code&rdquo; with refactoring quality<\/strong>, and the same limitation applies to the 3.8% figure. Moved code is a proxy, not a measurement of whether the codebase got better.<\/p>\n<p>The cost framing around it is thinner but points somewhere useful. <strong>Gary Cohn<\/strong>, IBM&rsquo;s Vice Chairman, says AI return on investment <strong>&ldquo;has not been nearly as high as people might think&rdquo;<\/strong>, and Rippling has shipped an AI spend console giving CFOs and CTOs visibility into per-seat AI tooling spend &mdash; which tells you the finance function has arrived and is going to ask for a number. The defensible answer is not throughput. Track duplication and change-failure rate alongside output, because those are the measures that will tell you whether the 25% is compounding or being repaid with interest later, and both are computable from the repository you already have.<\/p>\n<p style=\"font-size:13px;color:#6b7280;margin:0;\">Sources: <a href=\"https:\/\/thenewstack.io\/ai-coding-duplication-rose\/\">https:\/\/thenewstack.io\/ai-coding-duplication-rose\/<\/a><\/p>\n<\/p><\/div>\n<p>            <!-- Calls to action --><\/p>\n<div class=\"watchlist\">\n<h2>Calls to action<\/h2>\n<ul>\n<li><strong>Upgrade the two agents that have a fix, and constrain the two that do not.<\/strong> Claude Code is fixed in 2.1.179 and later, Codex in 0.146.0 and later. GitHub Copilot and Gemini CLI are unpatched for Plugin4Shell &mdash; inventory the plugins those agents install and restrict them to GitHub-hosted sources, which blocks branch and tag names that look like commit hashes. There is no CVE, so nothing in your scanning stack will raise this for you.<\/li>\n<li><strong>Find every development server listening on a routable address, today.<\/strong> Patch Vite against CVE-2026-39364, then go after the cause: containers published with <code>--host 0.0.0.0<\/code>, cloud workstations with permissive security groups, preview environments that outlived their ticket. A dev server reads arbitrary files off disk by design; there is no safe configuration of it on the internet, patched or not.<\/li>\n<li><strong>Inventory your MCP configuration files and treat them as a credential store.<\/strong> 12% of credential slots in 82,000 public configs held a hardcoded secret, 53% of those granted organisation-, account-, workspace- or database-wide access, and 55% had no vendor-recognisable format &mdash; so pattern-based scanning will not find them. Move the values into the secret manager you already run, scope them below workspace level, and add entropy-based detection.<\/li>\n<li><strong>Scan Git history, not just the working tree.<\/strong> In a sample of 7,681 credential-bearing configurations, 243 held secrets deleted from the current file but still present in history. A deleted secret that was never rotated is a live secret with a false sense of closure. Rotate on discovery rather than on exposure.<\/li>\n<li><strong>Eliminate dev-branch dependency resolution.<\/strong> If anything in your <code>composer.json<\/code> &mdash; or the equivalent in any ecosystem &mdash; resolves to a moving Git ref, a force-push changes what you install with no version bump to notice. Pin to released versions, commit the lock file, and verify it in CI instead of regenerating it on every build.<\/li>\n<li><strong>Turn on cache-mode in GitHub Actions.<\/strong> It limits cache-poisoning exposure and it does nothing until it is set. Put it in your reusable workflow templates so new pipelines get it by default rather than by memory.<\/li>\n<li><strong>Make sure you could answer &ldquo;which repositories did this identity read last month?&rdquo;<\/strong> The stolen OAuth token that copied 170 CrowdSec repositories left no trace in any log the company could access, and the breach surfaced four months later because someone posted the archive. Enable organisation-tier audit logging with retention you control, and alert on bulk clone or read activity from a single identity.<\/li>\n<li><strong>Treat a departing employee&rsquo;s credentials as compromised, not merely revoked.<\/strong> The CrowdSec account was removed from the organisation three days after the copy and it made no difference. Offboarding should revoke OAuth grants and personal access tokens at the identity provider and the forge, not just remove org membership.<\/li>\n<li><strong>Scope every publish and service token to one action.<\/strong> The only usable credential in the CrowdSec dump was an AWS SNS token limited to publishing to a single topic &mdash; an unauthorised attempt to use it in August went nowhere because of that limit. Narrow scoping is the control that demonstrably worked this week; apply it to registry publish tokens first.<\/li>\n<li><strong>Gate dependency additions that originate from an agent.<\/strong> In the Mandiant intrusion the assistant recommended the poisoned package and the recommendation was accepted. Require human confirmation for any new dependency regardless of who proposed it, give agent sessions credentials scoped separately from the developer&rsquo;s, and make publishing into your own internal namespace a gated action rather than an authenticated one.<\/li>\n<li><strong>Add duplication and change-failure rate to whatever you report on AI coding.<\/strong> Throughput is the number your finance function will ask for and the least informative one available. Block duplication rose from 40.3 to 73.0 instances per million changed lines across 623 million changes; both duplication and change-failure rate are computable from the repository you already have, and they are what tells you whether a velocity gain is compounding or accruing debt.<\/li>\n<li><strong>Work out what you pull from the public registries, and put a proxy in front of it.<\/strong> Enterprise funding for high-volume consumers is now an explicit OpenSSF Governing Board position, so someone will eventually ask what your download volume is. A caching mirror answers the cost question, removes a class of availability incident, and gives you a chokepoint to enforce policy at.<\/li>\n<\/ul><\/div>\n<\/td>\n<\/tr>\n<p>        <!-- Footer --><\/p>\n<tr>\n<td class=\"footer\">\n<p class=\"brand\">DevSecOps Weekly<\/p>\n<p>A weekly intelligence bulletin from Security Radar LLC.<br \/>\n            Curated by Paul Davis &middot; <a href=\"mailto:paul.davis@security-radar.com\">paul.davis@security-radar.com<\/a><\/p>\n<p>&copy; 2026 Security Radar LLC. All rights reserved.<\/p>\n<p>Article titles and summaries are excerpted for review and commentary; all linked articles remain the copyright of their respective publishers and authors.<\/p>\n<p>*|LIST:ADDRESS|*<\/p>\n<p><a href=\"*|ARCHIVE|*\">View this email in your browser<\/a> &middot; <a href=\"*|UNSUB|*\">Unsubscribe<\/a><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<\/td>\n<\/tr>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>September 20, 2026 &middot; Weekly Edition DevSecOps Weekly Three separate intrusions this week ran on the same worm tooling: 170 private CrowdSec repositories copied off the back of a May npm compromise, Shai-Hulud deployed across roughly 100 internal repositories after an attacker took over a live AI coding-assistant session, and&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,11],"tags":[],"class_list":["post-5921","post","type-post","status-publish","format-standard","hentry","category-secure","category-trends"],"_links":{"self":[{"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5921"}],"version-history":[{"count":1,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5921\/revisions"}],"predecessor-version":[{"id":5936,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5921\/revisions\/5936"}],"wp:attachment":[{"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cybersecurityinstitute.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}