Insights

What Automated Reverse Engineering Finds Before Anything Executes

A verdict tells you whether to worry. It doesn’t tell you why.

We wrote about this before in Inside the Malware: What Reverse Engineering Insights Reveal, which walked through what reverse engineering exposes once a threat is already in front of an analyst: how it keeps a foothold on a machine, what conditions it’s waiting for before it acts, and how its tactics map back to known adversary behavior. That’s still the right list of questions. What’s changed is when they get answered.

Same questions, earlier in the timeline

The original piece was written from the position most of the SOC work still starts from: something already ran, and now someone must figure out what it did. That’s a real and necessary discipline. It’s also the more expensive version of the same analysis, because by the time it happens, the artifact has already had its chance to act.

The more useful version of that question is: what would this do if we let it run? Answering that doesn’t require waiting for execution. It requires taking the artifact apart before execution and reading its capability directly out of the code.

What the analysis looks for

Strip away the word “malware” and the underlying questions are the same ones any artifact deserves before it’s trusted:

  • Does it try to survive a reboot (a scheduled task, a registry change, a service that re-launches it later)?
  • Is it waiting on a condition before it acts (a specific file, a command, an environment check) rather than doing something the moment it runs?
  • What does its behavior look like once it’s mapped against known adversary tactics and techniques, rather than judged in isolation?

These are the same categories as the earlier piece covered: persistence, trigger conditions, and technique mapping. The difference is that none of it depends on detonating the artifact first. CodeHunter’s engine disassembles the binary, structures it, and checks that structure against a behavior library built from MITRE ATT&CK and the Malware Behavior Catalog: a sequential, rule-based process, not a probability score from a model guessing at intent. Probabilistic plus probabilistic still doesn’t equal deterministic. This is.

Why this still needs to be automated

The earlier post made the case that manual reverse engineering doesn’t scale, it takes specialized skill and time most teams don’t have to spare on every flagged artifact. That’s just as true when the analysis moves earlier. The only way to get a persistence check, a trigger analysis, and a technique mapping on everything that shows up, not just the artifacts a senior analyst has time to get to, is to do it automatically, on every artifact, before any of it gets the chance to run.

The original piece is still the more detailed read of how TTPs, persistence mechanisms, and payload triggers surfaced in the first place. This one is about what happens when you stop waiting to ask those questions until after it’s too late to matter.

Sources

Inside the Malware: What Reverse Engineering Insights Reveal — CodeHunter, October 16, 2025. The post this piece directly builds on and links back to for the TTP/persistence/payload-trigger deep dive.

Zero Trust for Code — CodeHunter. Source for the deterministic-engine description (disassembly, behavior library, MITRE ATT&CK + Malware Behavior Catalog mapping) and the verdict-as-output framing.

The Question Black Hat Keeps Circling This Week: What Will This Code Actually Do? — CodeHunter, August 10, 2026. Source for the “probabilistic plus probabilistic doesn’t equal deterministic” framing.

The Question Black Hat Keeps Circling This Week: What Will This Code Actually Do?

Black Hat USA 2026 has a number attached to it this year that is hard to ignore: 35 of the 121 Briefings on the schedule, close to 29 percent, are directly about AI security, AI red teaming, or AI-assisted offensive research (Straiker, “AI Agents Take Center Stage at Black Hat USA 2026”). That is not a niche track anymore. It is close to a third of the entire conference.

The number tracks with what is happening inside engineering organizations, including the ones building the AI tools themselves. Anthropic reported in June that more than 80 percent of the code merged into its own codebase is now written by Claude rather than by engineers, up from low single digits before Claude Code’s 2025 launch, with engineers merging roughly eight times as much code as they were two years earlier (Anthropic, “When AI Builds Itself,” June 2026). When code volume grows that fast, human review capacity does not grow with it. That gap is exactly where SOC triage backlogs come from.

Every Tool in Your Stack Still Guesses

Here is what none of those 35 Briefings changes: the tools most SOCs rely on to evaluate a suspicious artifact are still probabilistic.

An EDR platform scores a file against known patterns and behavior signatures and returns a confidence level, not a decision. A sandbox has to execute the file to observe what it does, which takes time and can be evaded by anything built to detect sandbox conditions or wait them out. A threat intelligence feed is only as good as what has already been seen and cataloged somewhere, which is exactly the coverage AI-generated and polymorphic code is designed to fall outside of.

Signature-based controls carry the same ceiling for a simple reason: when every payload is unique, there is no hash to check and no prior observation to match against, and AI-assisted tooling now generates malware variants on demand, built for a single target and never repeated.

Each of these tools is useful. None of them answers the question a SOC analyst actually has to answer before closing a ticket: what will this artifact do if it is allowed to run?

Probabilistic Plus Probabilistic Does Not Equal Deterministic

The instinct when one probabilistic tool is not enough is to add another one. Stack an AI-driven alert summarizer on top of the EDR. Add a second threat intel source. Layer in an autonomous triage assistant.

Every one of those additions makes the queue faster to move through. None of them changes the underlying math. Averaging or chaining together several confidence scores still produces a confidence score. It does not produce a fact, and it does not produce evidence an auditor or a regulator will accept as a documented decision.

That distinction is not a technicality. It is a timing problem as much as a math problem. By the time a high-confidence alert reaches a SOC queue, the artifact has often already run. Detection is working, it is just positioned at the wrong moment in the workflow, downstream of the risk instead of upstream of it.

What a Deterministic Verdict Changes

Pre-execution behavioral analysis evaluates what an artifact is capable of doing before it runs, without detonation, and without relying on a signature or a prior sighting. That behavioral finding gets mapped to MITRE ATT&CK and the Malware Behavior Catalog. The verdict, allow, block, restrict, quarantine, or require review, is what that evidence produces, not a starting assumption.

This matters most on exactly the files this year’s Briefings are worried about: code with no prior observation history, because it was generated by an LLM an hour ago, or code that mutates on every build so no two copies share a signature. Those files are precisely where probabilistic tools have the least to say and where a behavioral verdict has the most value. It is also where composition-based trust signals run out of road. SBOMs, signing, and provenance answer what is inside a build and where it came from, not what it can do once it executes, and an AI coding agent can generate code that works exactly as intended while still introducing consequences nobody authorized.

This Is a Workflow Question, Not Just a Tooling Question

The practical effect on a SOC is that the artifacts driving this year’s Black Hat AI coverage, AI-generated code, agent-produced scripts, autonomously mutating payloads, stop being special cases that need a senior analyst and a sandbox queue. They get evaluated the same way, and the same way, as every other artifact in triage: analyzed for behavior first, verdict second, documented automatically either way.

Black Hat will keep publishing bigger numbers on AI security every year for a while. The number that should matter more to a SOC Manager is not how much of the conference is about AI risk. It is how many of this week’s flagged artifacts your team can answer for with certainty, and how many are still sitting on a probability score.

Behavioral Risk Brief: Arch AUR Repository

The Claim

Governance frameworks that treat package adoption as a routine maintenance mechanism create systemic risk when that same mechanism can transfer control of a trusted package name to an attacker. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what a package does after any change in control, rather than extending trust indefinitely once a package has been established.

The Incident

Attackers began adopting orphaned packages in the Arch User Repository and pushing malicious follow-up commits. The campaign began with the package “openconnect-sso” and expanded to over 120 confirmed malicious packages, including established tools such as boringssl-git, icloudpd, and windscribe-cli-v2-bin. Arch Linux first used disabled package adoption on July 30 to slow the takeovers, then disabled all AUR pushes entirely on August 1 after the activity continued through newly created accounts. The payload is a Rust-based infostealer that exfiltrates browser data, credentials, and cryptocurrency wallets, and spreads further by harvesting SSH access from infected machines. This is the third wave to hit the repository this year, involving over 400 malicious packages and eventually reaching 1,500 by the time the cleanup was complete.

The Governance Failure

The governance failure is not that attackers targeted an open community-maintained repository, but that the mechanism designed to keep abandoned packages alive carries no verification of what that new maintainer intends to do with the trust they are inheriting. A package’s history, download count, and prior clean commits all belong to a previous maintainer whose relationship to the package has already ended.

This is compounded by how naturally this activity blends into the platform’s own design. Adopting an orphaned package and pushing an update is exactly what the system was built to allow, which means the attack does not require any exploit or credential theft, only patience in waiting for packages to go unmaintained and a willingness to register new accounts once old ones are banned. An organization scanning package contents for known malware signatures would find nothing to flag until after a malicious update had already landed.

The underlying breakdown is the absence of a trust decision at the point of when maintainership actually changes hands. This is now the third such wave in a single year, and each occurrence has been addressed by suspending the adoption mechanism itself rather than by verifying what any given maintainer transition introduces. As long as trust transfers automatically with the act of adoption, disabling the feature is the only lever available once an attack is already underway.

The Regulatory and Business Exposure

  • Credential, browser data, and cryptocurrency theft delivered through packages with established, previously trusted histories.
  • Lateral spread across networks through harvested SSH access on infected developer machines.
  • Repeated incidents addressed only by suspending a core platform feature.

What Your Auditors Will Ask

  • How do you validate a package’s behavior after a change in maintainer or ownership, independent of its prior history?
  • What controls detect malicious activity introduced through a legitimate platform mechanism rather than an exploit?
  • How do you account for risk in third-party or community repositories your developers use outside sanctioned channels?
  • What evidence do you maintain that a package was evaluated again after control of it changed hands?
  • How do you respond when a repeated pattern of compromise is addressed by disabling a feature rather than verifying trust directly?

A consistent signal is the disconnect between a package’s accumulated history and what its current maintainer is doing with it. A clean record under a previous owner says nothing about the version published by whoever holds that access now.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point a package is about to execute, evaluating what it does independent of its maintainership history or how long it has existed in a repository. This means a package earns permission to run based on its current behavior, not on trust accumulated under a maintainer who may no longer control it.

This directly addresses the governance weakness exposed by the AUR campaign: the assumption that a package’s established history remains meaningful after maintainership changes hands. By requiring a pre- xecution trust decision independent of ownership history, organizations can evaluate what a newly adopted or updated package actually does, rather than relying on a platform feature being disabled as the only available response.

The result is a governance model where trust is re-established every time a package changes hands or executes, closing the space a repeated attack pattern has relied on across three separate incidents this year.

Governance Action Brief

  • Establish governance controls that evaluate package behavior independently of accumulated history or prior maintainer reputation.
  • Require a pre-execution trust decision whenever a package’s maintainer or ownership changes.
  • Treat community-maintained repositories as requiring the same execution-level scrutiny as official package sources.
  • Monitor for SSH-based lateral spread originating from developer machines running third-party packages.
  • Maintain a record of package trust decisions evaluated at each maintainership transition, not only at initial adoption.

Sources

Analysis based on reporting from BleepingComputer and Cybernews on the Arch Linux AUR supply chain campaign, CodeHunter Labs evaluation of governance gaps in maintainership-transfer execution trust, and alignment with NIST 800-53 and NIST SSDF.

Download the PDF

Behavioral Risk Brief: Joyfill npm Packages

The Claim

Governance frameworks that treat install-script restrictions as sufficient protection create systemic risk when malicious code is embedded to execute at import rather than install. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what a package does when it runs, regardless of which lifecycle stage triggers that behavior.

The Incident

Malicious beta releases of two legitimate npm packages, “@joyfill/components” and “@joyfill/layouts”, were published to the registry. Rather than relying on a postinstall or preinstall hook, the implant was embedded directly into the compiled distribution bundle. This means it executes the moment the module is imported into a project, not when it is installed. This bypasses the standard defensive flag that disables install scripts since that protection has no effect on code that runs at import time. Once active, the implant resolves its command-and-control address by reading a blockchain transaction, first on Tron and then pivoting to Binance Smart Chain, before deploying a remote access trojan and a separate credential stealer targeting browser data, cryptocurrency wallets, and developer tokens.

The Governance Failure

The governance failure is not that a trusted package was compromised, but that the defensive posture many organizations rely on assumes malicious behavior arrives through a specific, well-known lifecycle stage. Disabling install scripts has become a standard mitigation precisely because so many prior campaigns relied on that mechanism. This implant was built around the assumption that organizations would rely on exactly that control and then move to a stage that the control does not cover.

This is compounded by the choice to resolve command infrastructure through blockchain transactions rather than a fixed address. A hardcoded command-and-control server can be identified, blocklisted, and starved of new instructions once discovered. A transaction-based lookup gives the attacker a way to redirect the payload at any time without publishing a new package version, meaning a security team’s confidence in having identified and blocked the infrastructure may already be outdated the moment it is recorded.

The underlying breakdown is the absence of a trust decision that evaluates what a package does regardless of which lifecycle stage triggers it. Any control anchored to a single execution point, install, import, or otherwise, leaves every other point unexamined, and this campaign demonstrates that attackers will simply relocate to whichever stage current defenses do not reach.

The Regulatory and Business Exposure

  • Bypass of a widely deployed install-script mitigation through code that executes only at import.
  • Command-and-control infrastructure that can be silently redirected without any new package version or registry activity.
  • Exposure of developer credentials, tokens, and cryptocurrency wallets across affected workstations.

What Your Auditors Will Ask

  • How do you validate package behavior at every lifecycle stage, not only at install?
  • What controls would detect an implant that activates specifically because a package is imported?
  • How do you account for command-and-control infrastructure that can change without any new software release?
  • What evidence do you maintain that a package’s behavior was evaluated after import, not only at publication?
  • How do you verify that mitigations built around one execution stage are not simply displacing risk to another?

A consistent signal is the disconnect between where a mitigation was built to work and where an attacker chooses to operate. A control anchored to one execution stage says nothing about what happens at the next one.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point a package actually executes, evaluating its behavior regardless of whether that execution happens at install, at import, or at any other lifecycle stage. This means a package earns permission to run based on what it does in the moment, not based on which stage a defensive control happens to cover.

This directly addresses the governance weakness exposed by the Joyfill compromise: the assumption that disabling install scripts closes the relevant risk. By requiring a pre-execution trust decision independent of lifecycle stage, organizations can evaluate import-time behavior with the same rigor applied to installation, removing the incentive to simply relocate a payload to an uncovered stage.

The result is a governance model where every execution point carries the same trust requirement, closing the space attackers rely on when one stage is defended and another is not.

Governance Action Brief

  • Establish governance controls that evaluate package behavior at mport, not only at installation.
  • Require a pre-execution trust decision independent of which lifecycle stage triggers execution.
  • Treat install-script restrictions as one control among several, not a complete mitigation on their own.
  • Monitor for command-and-control resolution methods, including blockchain-based lookups, that evade static infrastructure blocking.
  • Maintain a record of package behavior evaluated per execution stage rather than assumed covered by a single control.

Sources

Analysis based on The Hacker News and StepSecurity (July 28-29, 2026) on the Joyfill npm supply chain compromise, CodeHunter Labs evaluation of governance gaps in lifecycle-stage execution trust, and alignment with NIST 800-53 and NIST SSDF integrity control objectives.

Download the PDF. 

Behavioral Risk Brief: Notepad ++

The Claim

Governance frameworks that treat a legitimate, signed application as inherently safe create systemic risk when that application can be paired with malicious components it will execute automatically. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what an application actually loads and runs, rather than extending trust to everything bundled alongside a recognized binary.

The Incident

CERT-UA disclosed a campaign attributed to the threat cluster UAC-0099 that delivers a fake Notepad++ plugin to compromise Windows systems. A phishing email leads victims through a shortened link to a ZIP archive containing a VBScript disguised as a PDF, which displays a decoy document while silently retrieving a second archive. That archive contains a complete and legitimate copy of Notepad++, a malicious DLL named NppExport.dll, and supporting tools. The script launches the genuine Notepad++ binary, which automatically loads the malicious DLL as a plugin. That DLL unpacks additional components and establishes persistence through a scheduled task running every three minutes, ultimately delivering a loader called “BURNYBEAR” and a modified payload tracked as “MATCHBOIL.V2”.

The Governance Failure

The governance failure is not that Notepad++ was impersonated, but that the actual application delivered to the victim is the real legitimate Notepad++ binary that is unmodified and fully functional. Any control built around verifying the identity or signature of the executable being launched would find nothing to object to. The compromise lives entirely in what that legitimate binary is permitted to load and execute once it runs and a layer signature verification is never reached.

This is compounded by how plugin architectures function. A trusted application loading a DLL from its own plugins directory is completely ordinary behavior. It is indistinguishable at launch from any legitimate extension a user might install. Trust granted to the parent executable extends implicitly to whatever it loads next, without a separate decision evaluating what that plugin does once it holds the parent process’s privileges.

The underlying breakdown is the absence of a trust decision at the moment a loaded component begins executing, as distinct from when the parent application launches. This pattern is not unique to Notepad++. Any application with a plugin or module-loading architecture creates the same exposure, and as long as trust is assigned only to the parent process, this technique remains available regardless of which application it is built around.

The Regulatory and Business Exposure

  • Persistent access established through a scheduled task disguised as routine application behavior.
  • Resource exhaustion triggered as a fallback if the malicious loader runs outside expected conditions.
  • Reliance on signature checks that verify the parent application while loaded plugins go unexamined.

What Your Auditors Will Ask

  • How do you validate the behavior of plugins or modules loaded by applications your organization already trusts?
  • How do you distinguish a legitimate binary from the components it is permitted to load once running?
  • What controls detect a scheduled task established through an otherwise trusted application?
  • How do you verify that application allowlisting accounts for what a binary executes after launch?
  • What evidence do you maintain that a loaded plugin’s behavior was evaluated independently of the parent application’s trust status?

A consistent signal is the disconnect between the executable that was verified and the code that actually ran. A legitimate binary passing every identity check says nothing about what it will load once permitted to execute.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point a loaded component is about to execute, evaluating what that plugin or module will do independently of whether the parent application is legitimate or already allowlisted. A plugin is assessed on its own behavior, not granted the trust status of the executable that loads it.

This directly addresses the governance weakness exposed by UAC-0099: the assumption that verifying a parent application is sufficient because everything it loads inherits that same trust. By requiring a pre-execution decision for loaded components specifically, organizations can stop a
malicious plugin even when the application launching it is entirely legitimate.

The result is a governance model where trust is evaluated at every layer, the parent binary and everything it loads, rather than assumed to flow automatically from one to the other.

Governance Action Brief

  • Establish governance controls that evaluate plugin behavior independently of the parent application’s trust status.
  • Require a pre-execution trust decision for any component loaded dynamically by an approved application.
  • Enforce execution policies covering plugin directories for widely used developer and productivity applications.
  • Monitor for scheduled tasks or persistence mechanisms established through processes descending from trusted applications.
  • Maintain a record of loaded components evaluated separately from the parent binary’s approval.

Sources

Analysis based on reporting from The Hacker News (July 24, 2026) on CERT-UA’s disclosure of the UAC-0099 campaign, CodeHunter Labs evaluation of governance gaps in plugin execution trust, and alignment with NIST 800-53 and NIST SSDF integrity control objectives.

Download the PDF. 

The Fourth Question in Software Supply Chain Security

Software supply chain security has matured fast. Most enterprises can now answer what is inside their software, where it came from, and how it was built far better than they could five years ago. SBOMs, code signing, and build provenance made that possible, and Executive Order 14028 pushed agencies, contractors, and enterprises to invest in all three.

In a new byline for Help Net Security, CodeHunter CEO Ken Ammon argues those three answers still leave the most important question open: what can this software do once it runs?

Composition is not behavior

An SBOM tells you the ingredients. It does not predict the meal. As Ken writes, a package can have a clean dependency tree and still attempt credential access, persistence, lateral movement, or data exfiltration. Context decides whether a behavior is routine or dangerous. File deletion is expected in a disk cleanup utility and alarming in an office macro. Credential access belongs in a password manager, not in a package dependency.

Signing and provenance run into the same limit. They verify who published the software and how it was built, which strengthens integrity, accountability, and auditability. They do not verify trustworthiness. Signed software can behave maliciously. A trusted vendor update can be compromised. An AI coding agent can generate code that works exactly as intended and still introduces consequences nobody authorized.

Most security programs still treat origin as the final trust decision. Ken’s argument is that origin is a reasonable first filter and a dangerous last word.

AI is forcing the timing question

The piece points to University of Toronto research demonstrating an AI-powered worm that adapts its attack strategy as it moves through a network, reasoning through new attack paths rather than exploiting a fixed vulnerability. When attackers can generate variants instantly, the observable surface of malicious code becomes unstable, and waiting for recognizable signatures or post-execution alerts to make trust decisions arrives too late.

The June 2026 AI executive order on cybersecurity reflects the same federal concern. The trust model built for slow-moving software does not hold when code is generated, modified, and deployed faster than human review can keep up.

From software identity to software behavior

Ken’s conclusion extends a principle security teams already know. Zero Trust rejected implicit trust in networks, devices, and identities. The same standard now needs to apply to software execution: no artifact should be trusted solely because of its origin, signature, or reputation.

That is the foundation of Zero Trust for Code. Supply chain controls remain essential, but the practical question changes from “do we recognize this?” to “is this behavior authorized?” Answering it means evaluating what an artifact is capable of doing, before execution, against enterprise policy, with evidence a security team can stand behind.

Read Ken’s full byline at Help Net Security: Why SBOMs, signing, and provenance still don’t tell you if software is safe

Behavioral Risk Brief: SleeperGem

The Claim

Governance frameworks that treat package name recognition and maintainer history as ongoing proof of safety create systemic risk when a compromised artifact can behave differently
depending on where it executes. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what a package will do in a specific environment, rather than relying

The Incident

Researchers identified malicious versions of three RubyGems packages published to RubyGems.org in a campaign named SleeperGem. One package, “git_credential_manager”, impersonated Microsoft’s official Git Credential Manager, while the other two were Dendreo and a fastlane plugin. Dendreo and the fastlane plugin were legitimate but dormant packages last updated in 2019 and 2020 before malicious updates were pushed from reactivated maintainer accounts. Each release acted as a loader that checked for roughly 30 CI-related environment variables associated with platforms such as GitHub Actions, GitLab, CircleCI, Jenkins, and Vercel. If any were detected, the payload exited; otherwise, it downloaded a second-stage payload from an attacker-controlled host and installed a persistent native daemon on the developer’s machine.

The Governance Failure

The governance failure is not that malicious versions reached the registry, but that the trust in these packages was based on signals that assumed behavior stays constant once established: a recognizable name, a maintainer with account history, and in two cases, years of clean, dormant existence. None of those signals accounted for what a specific installed version would actually do,
and none of them accounted for the possibility that the artifact itself would behave differently depending on the environment it reached.

This is compounded by how the malware was built to defeat exactly the kind of monitoring most organizations rely on. By checking for CI environment variables before acting, the payload was designed to pass cleanly through any build system where automated scanning or sandboxing might catch it and only reveal its actual behavior on a developer’s own machine, typically where that scrutiny is far lighter. An organization that validated this package inside a CI pipeline and considered that it was sufficient would have observed an artifact that did nothing at all.

The underlying breakdown is the absence of a trust decision that accounts for where and how an artifact executes, not just whether it was scanned somewhere at some point. Dependency inheritance made this worse, since developers who never made an explicit decision to install “git_credential_manager” were still exposed to it through other packages that quietly pulled it in. Trust extended once, at the point a dependency was declared, without any mechanism to re-evaluate what that dependency introduced later.

The Regulatory and Business Exposure

  • Persistent, unauthorized access to developer machines through a native daemon installed outside CI-monitored environments.
  • Compromise inherited through dependency relationships, exposing organizations that never directly installed the malicious package.
  • Reliance on maintainer history and package dormancy as safety signals, providing no evidence of current version behavior.

What Your Auditors Will Ask

  • How do you validate what a package will do differently across CI environments versus developer workstations?
  • How do you account for risk introduced through transitive dependencies your teams never directly selected?
  • What controls detect a long-dormant package receiving updates after years of inactivity?
  • How do you verify that a package’s behavior in a monitored build environment reflects its behavior everywhere else it runs?
  • What evidence do you maintain that execution was evaluated on developer machines specifically?

A consistent signal is the disconnect between where an organization’s monitoring is strongest and where an artifact actually executes. Confidence built entirely on CI-level scrutiny leaves developer machines, where this payload was designed to activate unexamined.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point where a package is about to execute, evaluating what it will do in that specific environment rather than relying on a name, a maintainer’s history, or a scan performed somewhere else entirely. This means a package is assessed for what it does on the machine where it actually runs, whether that machine is a CI
runner or a developer’s own workstation.

This directly addresses the governance weakness exposed by SleeperGem: the assumption that an artifact behaves the same way everywhere, and that reputation signals such as account age or
years of dormancy are evidence of safety rather than simply an absence of prior scrutiny. By requiring a pre-execution trust decision independent of environment, organizations can evaluate
what a package attempts to do on a developer machine even when that same package does nothing at all inside a monitored CI pipeline.

The result is a governance model where trust is assessed at every point of execution rather than inherited once from a dependency declaration or a clean publishing history. This closes the
distance between where an organization is confident and where an artifact is actually running.

Governance Action Brief

  • Establish governance controls that evaluate package behavior separately for CI environments and developer workstations.
  • Require a pre-execution trust decision for transitive dependencies, not only for packages directly declared by a project.
  • Enforce execution policies on developer machines with the same rigor currently applied to CI/CD pipelines.
  • Treat maintainer account age, package dormancy, and prior clean history as insufficient evidence of current version safety.
  • Maintain a record of what a package was permitted to execute, evaluated per environment rather than assumed uniform across all of them.

Download the PDF

Sources

Analysis based on reporting from The Hacker News (July 20, 2026) and CodeHunter Labs evaluation of governance gaps in environment-dependent execution trust, and alignment with NIST 800-53 and NIST SSDF integrity control objectives.

Why Machine-Speed Development Needs Machine-Speed Security Decisions

When Code Installs Itself, Trust Decisions Have to Move Upstream

CodeHunter CEO Ken Ammon has a new piece in the Forbes Technology Council, “Supply Chain Attacks Are Forcing Threat Detection To Focus On What Code Can Do.” His argument: the way most enterprises decide whether software should run was built for a slower world, and automated development has left it behind.

The trust model changed underneath us

Ken opens with the structural weakness the Shai-Hulud 2.0 supply chain attacks exposed. Attackers did not need a phishing email or a developer willing to run something manually. They compromised trusted packages so malicious code executed automatically during dependency installation. The delivery mechanism was the normal development workflow itself.

That matters because of how much of that workflow no longer involves a human. Autonomous coding assistants and agentic development tools now download, resolve, and execute dependencies in seconds. Code moves through pipelines, third-party packages are imported automatically, and containers deploy across cloud infrastructure at machine speed. Software can be installed and running before anyone has looked at it.

Prior observation is too slow a filter

Traditional controls like signature detection and reputation scoring depend on having seen a threat before. By the time a malicious artifact is identified and cataloged, automated systems may already have pulled the dependency, executed the loader, and exposed API tokens or cloud access keys. As Ken puts it, machine-speed development workflows are colliding with human-speed security processes.

Enterprise security has historically invested far more in observing suspicious behavior after execution than in deciding whether untrusted code should execute at all. When alerts arrive after the fact, they explain damage rather than prevent it.

Evaluating what code can do, before it does it

The piece makes the case for behavioral intent analysis as the practical way to move the decision upstream. Instead of asking whether code resembles known malware, intent analysis examines what an artifact is capable of doing: its execution paths, system interactions, privilege use, network communication, and persistence behavior. Those behaviors get evaluated against security policy before the code runs.

Ken maps out where those decision points belong: development pipelines where build artifacts are generated, CI/CD systems, artifact repositories and package ingestion points where third-party software enters the environment, and runtime environments where executables launch. At each stage, the surfaced behaviors drive a deterministic policy decision the system can enforce automatically: allow, block, quarantine, or require review. The same artifact evaluated under the same policy produces the same outcome, which is what governance, compliance, and audit work actually require.

The operational payoff

This is Zero Trust for Code in practice: execution treated as a gated decision rather than an assumed outcome. And the piece is clear-eyed about what that does to security operations. When artifacts are evaluated before execution, many routine investigations disappear. Analysts spend less time triaging ambiguous alerts and more time on genuine threats. Late-discovery incidents, where malicious activity surfaces only after code has been running in production, become less common. In many cases delivery gets faster, because decisions that once required manual investigation happen automatically.

The question Ken leaves readers with is the right one for any organization running automated development workflows: not whether an artifact has been seen before, but whether its behavior should be trusted to run.

Read the full article on Forbes. 

Behavioral Risk Brief: Disguised npm Packages

The Claim

Governance frameworks that scan for malicious behavior only at install time create systemic risk when registries are used as free hosting for artifacts that never touch a build pipeline. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what an artifact does when it runs, regardless of whether it runs during installation, in a browser, or anywhere else code is permitted to execute.

The Incident

Researchers at JFrog identified 141 npm packages in May, later growing to 148 by July, published under names branded as student tools to bypass school web filters. The packages carried no install scripts or lifecycle hooks and were never meant to be imported into a project, instead hosting a client-side proxy web app that visiting browsers loaded directly, using npm purely as a content delivery mechanism. Underneath the proxy sat two hidden modules: one fetched remote JavaScript from a mutable, unpinned GitHub branch and executed it with the site’s full origin privileges, while the other opened up to 1,024 WebSocket connections per browser tab targeting a proxy protocol server, exhausting its resources rather than the visiting student’s own device. A second wave of packages published in July restored the adware
functionality while leaving the remote loader in place, still pointed at the same branch.

The Governance Failure

The governance failure is not that malicious packages reached the registry, but that the entire model of software trust assumed a package’s risk lives at install time. Dependency scanners, install-time sandboxes, and lifecycle hook monitoring are built around a single execution surface: what happens when a package is pulled into a project and run through “npm install”. These packages never triggered that surface at all, because they were never designed to be installed as dependencies in the first place.

This exposes a second, more persistent gap. The remaining packages still load a script from a mutable branch with no integrity verification. Whoever controls that branch can change what every visiting browser executes at any time, without publishing a new package version, without triggering a new npm scan, and without leaving any trace in a lockfile or manifest that a security team would think to review. The registry’s admission process, and any monitoring built around package versions, has no visibility into a artifact that can be silently re-armed downstream of the point where every existing control is watching.

The underlying breakdown is the assumption that an artifact’s trustworthiness is fixed at the moment it is scanned and published. Trust granted to a package version does not account for content the package points to but does not contain, and it does not account for a second execution surface, the browser, that operates entirely outside the tooling built to govern developer environments. As long as an artifact can behave one way during review and a different way once deployed, scanning at any single point in time cannot be the control that decides what is allowed to run.

This gap keeps showing up in different forms across different ecosystems. For a broader look at why origin-based trust controls keep falling short, see Taking Down the Botnet Doesn’t Answer the Harder Question.

The Regulatory and Business Exposure

  • Execution of unreviewed, remotely mutable code within enterprise or school network browser sessions.
  • Resource exhaustion and denial-of-service impact carried out through end-user browsers rather than compromised infrastructure.
  • Continued exposure to artifacts that can be altered after publication without triggering any package-level review or re-scan.

What Your Auditors Will Ask

  • How do you validate the behavior of artifacts that execute in a browser rather than at install time?
  • How do you account for registries or repositories being used to host content outside their intended package format?
  • What controls detect a referenced script changing after the artifact that points to it was last reviewed
  • How do you determine whether an approved artifact can still alter its own behavior post-publication
  • What evidence do you maintain that execution behavior was evaluated at the point it runs, not only at the point it was published?

A consistent signal is the disconnect between where an organization’s controls are looking and where an artifact actually executes. Trust concentrated entirely at install time leaves every other execution surface unexamined.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point where an artifact is about to execute, regardless of whether that execution happens during installation, inside a browser, or through any other surface a registry or repository makes available. This means a package is assessed on what it does when it runs, not on whether it matches the narrow category of behavior a scanner was built to catch.

This directly addresses the governance weakness exposed by the student proxy campaign: the assumption that install-time review is sufficient because it is the only execution surface most controls were designed to watch. By requiring a pre-execution trust decision independent of where or how code runs, organizations can evaluate a referenced script’s behavior at the moment it executes, even when that script can change after the artifact pointing to it was last reviewed.

The result is a governance model where execution is evaluated wherever it occurs, closing the distance between what was published and what actually runs on any given day, rather than assuming the two remain the same after the fact.

Governance Action Brief

  • Establish governance controls that evaluate artifact behavior at every execution surface, not only at install time.
  • Require a pre-execution trust decision for any code an artifact references or loads dynamically, including content served from mutable or unpinned sources.
  • Enforce execution policies for browser-based sessions on managed networks, not solely for developer workstations and CI/CD environments.
  • Monitor for registries or repositories being used as hosting infrastructure for artifacts outside their intended package format.
  • Maintain a record of what an artifact was permitted to execute, independent of whether its underlying content has since changed.

Download the PDF

Sources

Analysis based on reporting from The Hacker News (July 14, 2026) and CodeHunter Labs evaluation of governance gaps in post-publication execution trust.

 

Behavioral Risk Brief: Ghostcommit

The Claim

Governance frameworks that treat automated code review as sufficient validation create systemic risk when trust is granted based on what a scanner can see rather than what an artifact
will do once an agent acts on it. Zero Trust for Code addresses this by requiring a pre-execution trust decision on what a merged artifact actually does, not on whether it passed a review process
built to catch a narrower category of risk.

The Incident

A pull request attack shows how an AI-authored convention file can smuggle instructions past code review by hiding them inside an image. The technique, called Ghostcommit, embeds
exfiltration instructions as plain text inside a PNG referenced by an AGENTS.md file, the kind of file coding agents read automatically and treat as standing project policy. Because tools like
CodeRabbit exclude image files from review by default, and Cursor’s Bugbot does not process image files, the pull request merges without objection. Nothing happens at merge time. The
payload only activates later, when a developer asks the coding agent to complete an unrelated, routine task in a separate session. The agent reads the merged convention file, follows its
reference to the image, opens the repository’s .env file, and writes the contents into a new code constant disguised as a build value.

The Governance Failure

The governance failure is not that a review tool missed a malicious pull request, but that trust was granted to a merged artifact based on the narrow set of risks a reviewer was built to catch, rather than on what that artifact would do once an agent later acted on it. A pull request that passes review is treated as safe going forward, even though the review only evaluated text content and never assessed what would happen when a different tool, operating under different assumptions, executed instructions the artifact contained.

This is compounded by how convention files function inside agentic development workflows. Files like AGENTS.md are designed to be read automatically and treated as authoritative project policy, which means anything referenced from them inherits that same standing without a separate trust decision. An image cited as a build specification carries the same authority as an explicit line of code, despite never being evaluated as one.

The underlying breakdown is the absence of a trust decision at the moment an agent actually acts on repository content. Review at merge time answers whether a reviewer objected to what it could see. It does not answer whether an agent, executing days or weeks later under an entirely different toolchain, will trust and act on content the original review never evaluated in that context.

The Regulatory and Business Exposure

  • Exfiltration of credentials, API keys, and connection strings through routine agent activity unrelated to the original pull request.
  • Merge-time review certifying an artifact as safe without evaluating what an agent will later execute against it.
  • Inconsistent outcomes across coding tools and models, undermining any assumption that review status is a durable safety signal.

What Your Auditors Will Ask

  • How do you validate what an AI coding agent will do with a merged artifact, independent of whether that artifact passed code review?
  • How do you account for content types, such as images or binary files, that your review tooling does not evaluate?
  • What controls detect an agent reading and acting on repository content outside the task the developer actually requested?
  • How do you verify that review approval reflects an evaluation of execution behavior, not just visible text content?
  • What evidence do you maintain that a merged artifact’s behavior was assessed at the point an agent acts on it, not only at the point it was reviewed?

A consistent signal is the disconnect between what a review process was built to catch and what an artifact is later permitted to do. Passing review answers a narrower question than the one that determines actual risk.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point an agent is about to act on repository content, evaluating what that action will do against defined policy rather than relying on whether
the underlying artifact previously passed code review. This means an image, a configuration file, or any other referenced content is assessed on the behavior it produces when acted upon, not on
whether a reviewer built for a different purpose objected to it.

This directly addresses the governance weakness exposed by Ghostcommit: the assumption that merge-time review is a durable safety signal for actions an agent takes long after that review
occurred. By requiring a pre-execution trust decision, organizations can prevent an agent from exfiltrating credentials through a routine task, regardless of what a prior review process did or did
not evaluate.

The result is a governance model where an agent’s actions are evaluated against policy at the moment they occur, closing the distance between what was reviewed and what is later executed
rather than assuming the two remain aligned indefinitely.

Governance Action Brief

  • Establish governance controls that evaluate agent behavior at the point of execution, independent of prior code review outcomes.
  • Require a pre-execution trust decision for any action an agent takes based on repository content, including convention files and referenced media.
  • Enforce execution policies across coding agents and IDE tooling that read project files automatically as standing instructions.
  • Treat merge-time review as one input among several, not as a durable safety determination for future agent actions.
  • Maintain a record of what an agent was permitted to act on, even if that content was previously reviewed.

Download the PDF

Sources

Analysis based on reporting from BleepingComputer (July 11, 2026) on the Ghostcommit technique disclosed by the University of Missouri-Kansas City’s ASSET Research Group

Behavioral Risk Brief: PolinRider Campaign

The Claim

Governance frameworks that treat software supply chains as trusted by default create systemic risk when trust can be transferred, inherited, or re-established without independent validation. Zero Trust for Code addresses this by enforcing behavioral controls at execution, ensuring that trust is continuously verified rather than carried forward from prior assumptions.

The Incident

North Korean threat actors linked to the Contagious Interview campaign have published 108 malicious packages and extensions across npm, Packagist, Go modules, and Chrome ecosystems as part of an operation known as PolinRider. The campaign combines maintainer account compromise, repository modification, malicious package releases, and developer-focused delivery techniques to establish access within development environments. Researchers identified 162 malicious release artifacts and nearly 2,000 compromised GitHub repositories associated with the activity. In some cases, malicious VS Code tasks executed automatically when a project folder was opened, enabling code execution through trusted development workflows.

The Governance Failure

The governance failure is not the publication of malicious packages, but the absence of controls that continuously validate software trust throughout the development lifecycle. Organizations often rely on repository reputation, maintainer history, package popularity, or prior approval decisions as indicators of integrity. These signals establish trust once but rarely verify that trust remains valid as ownership changes, updates are released, or dependencies evolve.

This challenge is amplified by modern development practices that automate software consumption at scale. Packages, modules, extensions, and project dependencies frequently enter environments through trusted workflows without meaningful review of the actions that they are capable of performing. As software ecosystems become increasingly interconnected, a single compromise can appear through development environments, build systems, and downstream applications while appearing operationally normal.

The underlying breakdown is the lack of enforceable policy governing what imported code is allowed to do after execution begins. Once software is accepted into the environment, organizations often have limited control over how it accesses credentials, interacts with repositories, modifies configurations, or executes additional payloads. This creates a condition where trust decisions become persistent, while risk remains dynamic and capable of evolving over time.

This pattern has played out before across different ecosystems and threat actors. For a related look at how trusted developer access becomes the primary attack vector, see Taking Down the Botnet Doesn’t Answer the Harder Question.

The Regulatory and Business Exposure

  • Compromise of developer environments through trusted software supply channels.
  • Exposure of credentials, source code, and intellectual property assets.
  • Increased risk of downstream software contamination across build and deployment pipelines.
  • Loss of assurance in trusted models.

What Your Auditors Will Ask

  • How do you detect unexpected maintainer changes or ownership transfers in trusted software packages?
  • How do you identify development tools performing actions outside established development and deployment workflows?
  • What controls detect repository updates that introduce obfuscated code or concealed execution paths?
  • How do you validate that package behavior aligns with its documented purpose and intended functionality?
  • How do you verify software provenance and ensure trusted artifacts are not exhibiting anomalous or unauthorized behavior?

A consistent signal is the disconnect between software provenance and software behavior. Artifacts that appear legitimate based on source or history begin performing actions that exceed their expected operational scope.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point before software is allowed to execute, this ensures that imported code, dependencies, and development tooling are evaluated against policy before any action is taken, rather than monitored for intent as events unfold. Rather than relying on maintainer reputation or package history, it validates whether an artifact should be permitted to run at all.

This directly addresses the governance weakness exposed by PolinRider: the assumption that trusted software ecosystems remain trustworthy over time. By requiring a pre-execution trust decision, organizations can prevent compromised packages from ever reaching the point of accessing sensitive data, modifying environments, or launching secondary actions, regardless of the channel they arrived through.

The result is a governance model where trust is decided before code runs rather than inferred from provenance, reducing reliance on software history alone and ensuring that supply chain compromise does not translate into permitted execution.

Governance Action Brief

  • Establish governance controls that validate software behavior independently of repository trust.
  • Require continuous verification of package updates, maintainer changes, and dependency lineage.
  • Enforce execution policies for development environments, IDEs, and build systems.
  • Monitor for hidden execution paths triggered through project configuration and automation features.
  • Treat developer workstations as high-value environments requiring behavioral enforcement controls.

Sources

Analysis based on BleepingComputer reporting (July 3, 2026) on the North Korea-linked PolinRider campaign, and CodeHunter Labs evaluation of governance gaps in post-compromise execution and persistence control.

Download the PDF. 

Behavioral Risk Brief: New Avalon Framework

The Claim

When credential theft, lateral movement, persistence, and ransomware deployment are governed as isolated risks, organizations lose sight into how those activities play into
business-impacting outcomes. Zero Trust for Code addresses this by enforcing behavioral policy across execution sequences, ensuring that software actions remain constrained regardless of where they occur within the attack chain.

The Incident

Researchers have identified a modular malware framework known as Avalon that consolidates credential harvesting, reconnaissance, lateral movement, remote access, recovery disruption, and ransomware deployment into a single integrated platform. Distributed through a sophisticated phishing campaign, Avalon uses trusted system utilities, in-memory execution techniques, and defense evasion mechanisms to reduce visibility while progressively expanding attacker control. Its ransomware component, CrownX, represents the final stage of a larger operational workflow designed to move from initial access to enterprise-wide impact with minimal interruption.

The Governance Failure

The governance failure is not that ransomware was deployed, but that organizations continue to manage execution risk as a collection of disconnected controls. Security programs often establish separate ownership for phishing prevention, credential protection, endpoint security, and recovery operations, while lacking unified enforcement over how actions progress between those stages. This creates opportunities for attackers to chain together authorized system behaviors into unauthorized business outcomes.

The issue becomes more significant when malware frameworks are designed to adapt their behavior based on environmental conditions, rather than relying on a single exploit or payload. Avalon evaluates defensive controls, adjusts execution patterns, collects credentials, and expands access over time before ultimately delivering ransomware. The attack succeeds because each step appears operationally manageable in isolation, while the cumulative impact remains insufficiently governed.

The underlying breakdown is the absence of policy enforcement over execution progression. Once code begins operating within the environment, there are limited controls preventing it from transitioning between phases of the attack lifecycle. As a result, organizations may identify individual indicators of compromise without preventing the overall sequence of events that lead to operational disruption, data loss, and ransomware deployment.

Frameworks like Avalon are built around this assumption. For a broader look at how sophisticated malware exploits disconnected controls across the attack lifecycle, see Advanced Threat Actors: How Sophisticated Malware Behaves Differently.

The Regulatory and Business Exposure

  • Consolidation of multiple attack functions into a single operational framework.
  • Increased likelihood of enterprise-wide compromise before detection thresholds are reached.
  • Reduced effectiveness of siloed security controls designed for individual attack stages.

What Your Auditors Will Ask

  • How do you correlate credential access, reconnaissance, and remote-control activity into a single investigation?
  • How do you detect abuse of legitimate administrative tools?
  • How do you identify simultaneous reductions in security controls and increases in privilege?
  • How do you detect ransomware preparation before encryption begins?
  • How do you recognize when low-risk events become a coordinated attack sequence?

A consistent signal is the disconnect between software provenance and software behavior. Artifacts that appear legitimate based on source or history begin performing actions that exceed their expected operational scope.

Zero Trust for Code Value

Zero Trust for Code introduces a trust decision at the point before each software action is allowed to execute, evaluating whether that action should run against defined policy rather than observing how it behaves once permitted. This means each stage of an intrusion, credential harvesting, lateral movement, or persistence, is subject to its own pre-execution evaluation rather than inheriting permission from prior activity.

This directly addresses the governance weakness exposed by Avalon, the ability to combine numerous authorized activities into a coordinated attack chain. Instead of correlating behavior after execution begins, Zero Trust for Code requires that each action clear a pre-execution trust decision, preventing a single permitted step from becoming the foundation for the next stage of compromise.

The result is a governance model where advancing from initial access to ransomware deployment requires clearing a distinct trust decision at every step, ensuring that no stage of the attack chain is permitted to execute on the strength of a decision made earlier in the sequence.

Governance Action Brief

  • Establish governance controls that evaluate execution sequences rather than standalone events.
  • Define behavioral boundaries for credential use, system discovery, and privilege expansion activities.
  • Implement enforcement points capable of interrupting attack progression before impact is reached.
  • Align security operations around lifecycle-wide risk rather than individual control categories.
  • Regularly validate that recovery, credential, and execution policies cannot be chained into unauthorized outcomes.

Sources

Analysis based on BleepingComputer reporting (July 3, 2026) on the Avalon and CodeHunter Labs evaluation of governance gaps in post-compromise execution and persistence control.

Download the PDF.