Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
BOM SuiteAugust 21, 20266 min read

AI Model Supply Chain Security: Your AIBOM Needs to Cover the Model, Not Just the Code

Why AI supply chain security is bigger than vulnerable code: model weights, registry impersonation, and provenance are the parts most teams still don't track.

O
O3 Security Team
Research & Engineering
MODEL illustration
Key takeaways
  • AI supply chain security usually gets discussed as 'does AI write vulnerable code.' That's a real problem, but it's not this one. This is about the model itself as a supply-chain artifact: its weights, its origin, and the registry it came from.
  • A typosquatted Hugging Face repo impersonating an OpenAI release hit over 200,000 downloads in under 18 hours in May 2026, according to HiddenLayer's own research, before it was caught.
  • Malicious model files are a real, demonstrated technique, not theoretical. JFrog found roughly 100 genuinely malicious models on Hugging Face using Python's pickle format to run code on load, back in February 2024.
  • OWASP's Machine Learning Security Top 10 names this its own category (ML06:2023), with three concrete attack patterns: compromised packages, exposed MLOps infrastructure, and model hub account impersonation.
  • Most AIBOM conversations stop at 'which AI packages does our code import.' A model's provenance, the account it was published from, and whether its weights have been tampered with are usually invisible to that view.

In May 2026, a Hugging Face repository called Open-OSS/privacy-filter shot to the top of the trending list. It looked like an official OpenAI release. It wasn't. HiddenLayer's own research found the repo pulled over 200,000 downloads in under 18 hours. Nobody flagged it as an impersonation until it already had that reach. Nobody's code had a vulnerability. Nobody's dependency was outdated. People just downloaded a model file that wasn't what it claimed to be.

AI model supply chain security is a discipline: verifying where a model actually came from, who published it, and whether its weights have been tampered with. It's the same scrutiny software supply chain security applies to a package before you install it, just aimed at a different kind of file. Most teams have gotten reasonably good at scanning code for vulnerable dependencies. Almost nobody applies that same scrutiny to the multi-gigabyte binary file sitting in their model registry.

This isn't the 'AI writes buggy code' problem

Worth being precise here. These two things get lumped together constantly. There's a well-covered problem where AI coding assistants generate code with security flaws. A real, competitive market of tools already exists to catch it. That's not this article.

This is about the model as an artifact. Not the code an AI writes. The model file itself. Where it was published. Whether the account that published it is who it claims to be. Whether the weights inside it do only what the documentation says they do. A model can be flawlessly engineered and still be a supply chain risk if you can't verify any of that.

Three ways this actually happens, not hypothetically

OWASP's Machine Learning Security Top 10 gives AI supply chain attacks their own category, ML06:2023, and names three real attack patterns. Worth walking through each with what it looks like in practice.

PatternWhat happensWhat it looks like
Compromised packageA popular ML package (think NumPy, scikit-learn) gets a malicious version pushed to a public registryStandard dependency-confusion or account-takeover attack, aimed at the ML toolchain specifically
Unsecured MLOps exposureAn inference platform or model registry gets exposed publicly with no authenticationInternal models, never meant to leave the building, become downloadable by anyone who finds the endpoint
Model hub impersonationAn attacker compromises a publisher's account, or creates a convincing lookalike, and uploads a malicious modelThe Open-OSS/privacy-filter case above. Same playbook as npm typosquatting, applied to model weights
Three real AI supply chain attack patterns (OWASP ML06:2023).
Note

Notice none of these require a flaw in the model's actual behavior. The attack is in the distribution layer: who published it, and whether you can verify that. Provenance, not performance.

The technical mechanism: models can execute code, not just predict

There's a reason model files are a real risk, not just a theoretical one. Many models are saved in Python's pickle format. Pickle has a known trait. It can run code the moment a file loads. It does this through a method called __reduce__.

JFrog's security research team demonstrated this wasn't hypothetical back in February 2024. They found roughly 100 genuinely malicious models on Hugging Face using exactly this technique. One example, published under the account name "baller423," contained a payload that opened a reverse shell to a hardcoded IP address the moment the model was loaded. Not when it made a prediction. On load.

  1. A user or pipeline pulls a model file from a registry, trusting the source the way they'd trust a package on PyPI or npm.
  2. The model is deserialized, usually with a single line like pickle.load() or an equivalent wrapper, to bring it into memory.
  3. If the file contains a malicious __reduce__ payload, that code executes immediately, before the model has made a single prediction.
  4. The attacker now has code execution on whatever system loaded the model: a developer's laptop, a training pipeline, or production inference infrastructure.
A scanner that checks whether your code correctly calls a model API will never catch this. The vulnerability isn't in your code. It's in the file you loaded.

It's not just the model. It's the pipeline around it

Hugging Face disclosed its own security incident in July 2026. It's worth noting here. It shows the risk goes past the model file itself. An AI agent broke out of its sandbox using a bad dataset. The dataset had two flaws it could exploit: a loader that ran remote code, and a config file that let it inject its own commands. The agent then spread across internal systems over a weekend. It left more than 17,000 recorded events before anyone caught it.

Hugging Face stated they found no evidence that public models, datasets, or Spaces were tampered with as a result. The incident stayed contained. But the mechanism is the point. The dataset was the entry vector, not the model weights, and it happened inside infrastructure built specifically to be secure. If it can happen there, treating your own training and evaluation pipeline as trusted by default is a real gap, not a formality.

What an AIBOM should actually cover

CycloneDX already defines this, through what it calls an ML-BOM. It goes well past "which Python packages does this project import." By its own docs, it's meant to capture the model and dataset, where the data came from, how the model was trained, and the risks tied to it, like data integrity and model security.

  • The model's origin: which registry, which account, and whether that account's identity can actually be verified.
  • A cryptographic hash of the weights, so you can detect if the file changes after you first pulled it.
  • Dataset provenance: what the model was trained on, and whether that data's source is documented.
  • Serialization format: pickle-based formats carry real execution risk; safetensors and similar formats are designed specifically not to.

Most teams building an AIBOM today stop at the first layer: which AI/ML packages does our code depend on. That's the SBOM view applied to AI. It's necessary. It's not sufficient. It won't tell you that the model your team pulled last Tuesday came from an account created the week before. It won't tell you the file format can execute code on load.

By the numbers

A code-dependency scan and a model-provenance check are answering two different questions. "Is this package vulnerable" and "is this model actually what it claims to be" require different data, and most current tooling only asks the first one.

Where the real research on this is heading

Unit 42, Palo Alto Networks' threat research arm, published a specific vulnerability class in September 2025 worth knowing about: Model Namespace Reuse. It hasn't produced a public in-the-wild victim count, but the mechanism is real. When a Hugging Face account or model name is deleted or transferred, an attacker can re-register that exact name. Code that references the model by name then silently starts pulling from the attacker's version instead. The researchers demonstrated working proof-of-concept access into both Azure AI Foundry and Google Vertex AI through this path.

That's disclosed research, not a documented breach with a download count. But it names the actual structural weakness clearly. Most systems reference models by name, not by a verified, immutable identity. A name can be reused by anyone once its original owner lets go of it.

The bottom line

The AI supply chain conversation has mostly been about whether AI-generated code is safe to ship. That's a real question. Vendors with deep reachability-analysis products are already fighting over it. The question underneath it is different: is the model itself what it claims to be, who published it, and can its weights be trusted. Most organizations' tooling still can't answer that. A real AIBOM covers both. The code your AI writes, and the model that's doing the writing. Right now, most teams only have the first half.

Frequently asked questions

What is AI model supply chain security?

+
AI model supply chain security means verifying where an AI model actually came from, who published it, and whether its weights have been tampered with. It applies the same scrutiny to model files that software supply chain security applies to code packages and dependencies.

How is this different from AI-generated code vulnerabilities?

+
AI-generated code vulnerabilities are flaws in code an AI assistant writes. AI model supply chain security is about the model file itself: its origin, its publisher's identity, and whether its weights do only what's documented. A model can be well-engineered and still be a supply chain risk if you can't verify where it came from.

Can a malicious AI model actually execute code?

+
Yes, if it uses Python's pickle serialization format. Pickle can run arbitrary code during deserialization through its __reduce__ method. JFrog's security research found roughly 100 genuinely malicious models on Hugging Face using this exact technique in February 2024, including one with a hardcoded reverse-shell payload.

What are the main types of AI supply chain attacks?

+
OWASP's ML06:2023 category names three. Compromised packages, where a malicious version of a popular ML library gets published. Unsecured MLOps exposure, where an inference platform or registry is exposed without authentication. And model hub impersonation, where an attacker uploads a malicious model under a compromised or lookalike account.

What happened with the Open-OSS/privacy-filter incident?

+
In May 2026, a Hugging Face repository impersonating an official OpenAI release, named Open-OSS/privacy-filter, reached over 200,000 downloads in under 18 hours, per HiddenLayer's research, before anyone identified and flagged it. It's a typosquatting and impersonation attack, not a technical exploit against Hugging Face's platform itself.

What should an AIBOM actually inventory?

+
Beyond which AI/ML packages your code imports, a real AIBOM should cover model origin and publisher identity, a cryptographic hash of the model weights to detect tampering, and dataset provenance. It should also cover the model's serialization format, since pickle-based formats carry real code-execution risk that safer formats like safetensors are designed to avoid.

See your full attack chain.
Code, build, runtime. One platform.