Unity's documentation says an AssetBundle can contain platform-specific non-code assets such as models, textures, prefabs, audio clips and scenes. So a bundle is not a code package. The risk is in what your game does with downloaded bundles: where it fetches them, whether it checks them, and what its own code then does with the content.
Definition
An AssetBundle is an archive file used to group assets for downloadable content or to reduce the initial install size. Unity's page describes it as a container format, similar to a zip file, holding serialized files and resource files behind a binary header. Bundles are platform specific, so one built for iOS will not load on Android.
You can build them through the Addressables package or through low level APIs. Unity also notes that content directories are intended as a replacement for the AssetBundle system for locally distributed content, while AssetBundles remain a valid workflow for remote content builds.
Why "no code" is not the whole story
Three points keep this from being a free pass.
First, a prefab or scene in a bundle can reference components. Those components are scripts that must already exist in your game build. A bundle cannot add new compiled scripts, per the non-code statement, but it can wire existing scripts together in ways you did not test.
Second, serialized data is parsed by the engine. Any parser can have defects, so loading bundles from an untrusted source deserves the same caution as loading any file format.
Third, the delivery path is a risk. If the server, the CDN account or the connection is compromised, the bundle your game loads may not be the one you built.
What to check
| Check | Why |
|---|---|
| Where bundles are hosted and who can write there | Write access to the host is write access to your players' content |
| Use of HTTPS for downloads | Protects against tampering in transit |
| CRC verification at load time | Unity's LoadFromFile accepts an optional CRC-32 and gives an error if the content does not match |
| Which scripts a bundle's prefabs can reference | Limits what a swapped bundle could trigger |
| Whether players can supply their own bundles | That is a mod system and needs mod controls |
How the CRC check works
The scripting reference says the optional crc parameter is a CRC-32 checksum of the uncompressed content. If it is non-zero, Unity compares the content against it before loading and reports an error on mismatch. That catches corruption and some tampering, provided the expected value reaches the game from a trusted place. A checksum stored next to the bundle on the same server proves little, because whoever replaces the bundle can replace the number.
A CRC is also not a signature. If you need to prove who produced a bundle, you need a signing step that you design and verify yourself.
Steps for a studio
- List the bundle hosts and the accounts that can publish to them.
- Ship the expected CRC or hash inside your signed game build or a signed manifest, not beside the bundle.
- Load bundles only from your own domains, over HTTPS.
- Review which components your content prefabs reference.
- If you allow user content, treat it as a separate, lower trust path.
The middleware and asset store inventory guide helps you keep the build side of this tidy.
Safeguard's SBOM and dependency scanning covers packages and manifests in your repository, and you can try a free scan at gold.safeguard.sh/scan. Remote content delivery is a design question your team owns.
Quick check
Can an AssetBundle add new C# scripts to a shipped game?
Unity's documentation describes bundles as holding non-code assets, so new compiled scripts are not part of what a bundle carries.
Is the CRC option a signature?
No. It is a checksum that Unity compares before loading. Its value depends on the expected number coming from a trusted source.
Do Addressables change any of this?
Unity describes Addressables as a higher level way to define and build AssetBundles, so the same hosting and verification questions apply.
Sources
Last reviewed: 19 October 2026.