Join our Newsletter — 33% off our NHI Course

What are the signs that malicious code is slipping through software delivery controls?

Warning signs include unexpected package behaviour, unexplained outbound connections, unusual file changes, suspicious scripts executing during build or install, and performance drops that do not match the code change. Teams should also watch for rapid propagation across repositories or environments, because supply chain malware often spreads after a single compromised dependency is introduced.

What the warning signs actually tell you

The strongest signs are not just “something looks odd,” but that code, dependencies, or build steps are behaving in ways the change request does not explain. If a package suddenly reaches out to unexpected domains, modifies files outside its normal scope, or runs scripts during install that were not part of the intended release path, treat that as delivery-control failure, not just a noisy alert.

A useful way to interpret these signals is to separate benign complexity from controlled behavior drift. Supply chain malware often hides in places teams already trust, especially package install hooks, build tooling, and transitive dependencies, so the question is whether the observed action is justified by the release artifact and its declared provenance.

When teams see code changes accompanied by unexplained performance drops, unexpected filesystem writes, or cross-repository propagation, the concern is usually broader than a single bad package. That pattern can indicate dependency compromise, tampered build artefacts, or malicious automation that is designed to blend into normal developer workflows.

One practical reference point is the pattern described in NHIMG’s Reviewdog GitHub Action supply chain attack, where malicious behaviour emerged through a delivery component that teams were inclined to trust. The broader lesson is that the warning signs often appear where automation is given execution authority, not just where the final application is deployed.

Which delivery-control failures make these signs more likely

These warning signs usually surface when release controls are too permissive, too automated, or too detached from the package’s real behaviour. Weak dependency review, unsigned or poorly verified artifacts, broad CI/CD permissions, and install-time script execution all increase the chance that malicious code will run long before anyone sees a formal security alert.

The most common failure mode is over-trust in package metadata, maintainer reputation, or routine pipeline success. If the control set focuses only on whether the build passed, and not on what the package actually did during build or install, malicious code can move through the pipeline while still appearing “green.”

Secret exposure often amplifies the damage. NHIMG’s Guide to the Secret Sprawl Challenge shows how hardcoded credentials and CI/CD exposure turn a suspicious package into a much larger incident, because malware in the delivery path frequently aims to steal tokens, keys, or session material as soon as it lands.

That is why the delivery layer needs to be treated as an active security boundary, not a passive software logistics step. If the pipeline can install, execute, or publish on behalf of developers without tight limits, malicious code may only need one successful insertion point to spread across repositories, environments, or downstream consumers.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

MITRE ATT&CK and OWASP Non-Human Identity Top 10 address the attack and risk surface, while CIS Controls v8 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.

Framework Control / Reference Relevance
CIS Controls v8 CIS 4 — Secure Configuration of Enterprise Assets and Software Malicious code slipping through delivery controls is directly tied to software hardening and secure build governance.
CIS 10 — Malware Defenses Unexpected execution, propagation, and suspicious scripts are classic malware-detection concerns.
CIS 16 — Application Software Security The question concerns software delivery controls and how malicious code evades review and testing.
Recommendation — Harden software delivery paths and enforce secure baselines for build and deployment assets. Deploy malware defenses that detect and block suspicious code execution in delivery workflows. Build security checks into the software lifecycle to catch malicious or tampered code before release.
NIST CSF 2.0 PR.IP — Information Protection Processes and Procedures Release verification, dependency review, and software assurance are core process controls for this risk.
Recommendation — Strengthen software assurance procedures to verify artifacts, dependencies, and release integrity.
MITRE ATT&CK T1195 — Supply Chain Compromise The subject is explicitly about malicious code entering through delivery and dependency paths.
Recommendation — Map observed delivery anomalies to supply chain compromise techniques and investigate the insertion point.
OWASP Non-Human Identity Top 10 NHI-01 — Secrets and Credential Exposure Delivery-path malware often seeks secrets once it lands in CI/CD or package tooling.
Recommendation — Reduce credential exposure in delivery systems so malicious code cannot immediately harvest reusable secrets.

Practitioner Guidance

What to prioritise: Focus first on unexplained execution and scope creep. A package that runs scripts, writes outside its expected tree, reaches the network, or alters build outputs should be investigated before you spend time on whether the code “looks malicious” in source form.

What to verify: Check whether the observed behaviour matches the declared release artifact, dependency graph, and install path. If the package behaves differently in CI than in a local review, or if the behaviour only appears after dependency resolution, treat that mismatch as the primary signal.

What good looks like: A healthy delivery control set makes package origin, executed scripts, and outbound connections observable enough that a reviewer can explain why each action occurred. If you cannot easily answer that question, the control is too weak for modern supply chain risk.

Practitioner takeaway: The decisive question is not whether a package is popular or recently updated, but whether its runtime behaviour is bounded, attributable, and consistent with the change you approved.