Skip to content
Report library
Purpose / Data analysis

Azure Storage Skill Security Audit

What the author says it does (original text)

Azure Storage Services including Blob Storage, File Shares, Queue Storage, Table Storage, and Data Lake. Answers questions about storage access tiers (hot, cool, cold, archive), when to use each tier, and tier comparison. Provides object storage, SMB file shares, async messaging, NoSQL key-value, and big data analytics. Includes lifecycle management. USE FOR: blob storage, file shares, queue stora

Independent security check

Security risks found

Files checked
14
Risks found
2
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.No risks found
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Upload examples explicitly overwrite an existing remote blob

Source references: 3
What we found

Several quick-start examples set the overwrite option to true. If a blob with the same name already exists, running them replaces its content with the example data.

Why this matters

Existing Azure data could be lost or corrupted. Recovery depends on whether blob versioning, soft delete, or backups are enabled.

This is example code and does not run merely because the Skill is installed. However, if a user runs it after replacing the placeholders with a real account, both the Python and C# examples explicitly permit overwriting. An existing blob with the same name would be replaced by the sample data. Before running it, verify the account, container, and blob name, and allow overwrite only when explicitly intended.

references/sdk-usage.md:36In the instructionsOpen original file
service = BlobServiceClient(account_url="https://ACCOUNT.blob.core.windows.net/", credential=DefaultAzureCredential())container = service.get_container_client("my-container")blob = container.get_blob_client("my-blob.txt")blob.upload_blob(b"Hello, Azure Storage!", overwrite=True)```
Show 2 other places
references/sdk-usage.md:58In the instructionsOpen original file
var client = new BlobServiceClient(new Uri("https://ACCOUNT.blob.core.windows.net/"), new DefaultAzureCredential());var container = client.GetBlobContainerClient("my-container");var blob = container.GetBlobClient("my-blob.txt");await blob.UploadAsync(BinaryData.FromString("Hello, Azure Storage!"), overwrite: true);```
references/sdk-usage.md:74In the instructionsOpen original file
    .buildClient();BlobContainerClient container = client.getBlobContainerClient("my-container");BlobClient blob = container.getBlobClient("my-blob.txt");blob.upload(BinaryData.fromString("Hello, Azure Storage!"), true);```
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
Medium risk

Local examples automatically adopt the user's existing Azure login

Source references: 5
What we found

The examples use DefaultAzureCredential, which the guide says automatically obtains credentials from developer tools such as Azure CLI, PowerShell, and VS Code. Code may therefore run without another login or tenant confirmation.

Why this matters

If the cached identity has broad permissions, an example or agent can read, upload, or overwrite cloud data with that user's authority. Choosing the wrong tenant, account, or container increases the scope of mistakes.

The risk is conditional: these are local-development examples, and the documentation explicitly warns against DefaultAzureCredential in production. When actually run, it can use an existing Azure CLI, PowerShell, or VS Code login; the upload example can then access the specified account with that identity without a separate tenant or write confirmation in the code. Verify the active Azure identity, tenant, subscription, and target account first, and limit that identity's RBAC permissions.

references/auth-best-practices.md:77In the instructionsOpen original file
`DefaultAzureCredential` is ideal for local dev because it automatically picks up credentials from developer tools:1. **Azure CLI** — `az login`2. **Azure Developer CLI** — `azd auth login`3. **Azure PowerShell** — `Connect-AzAccount`4. **Visual Studio / VS Code** — sign in via Azure extension
Show 4 other places
references/auth-best-practices.md:20In the instructionsOpen original file
1. **Unpredictable fallback chain** — walks through multiple credential types, adding latency and making failures harder to diagnose.2. **Broad surface area** — checks environment variables, CLI tokens, and other sources that should not exist in production.3. **Non-deterministic** — which credential actually authenticates depends on the environment, making behavior inconsistent across deployments.4. **Performance** — each failed credential attempt adds network round-trips before falling back to the next.
references/sdk-usage.md:29In the instructionsOpen original file
All examples use `DefaultAzureCredential` for authentication, which is recommended for **local development only**. In production, use `ManagedIdentityCredential` — see [auth-best-practices.md](auth-best-practices.md). Rust uses `DeveloperToolsCredential` as it doesn't have a `DefaultAzureCredential` equivalent.
references/auth-best-practices.md:7In the instructionsOpen original file
Use **managed identities** and **Azure RBAC** in production. Reserve `DefaultAzureCredential` for **local development only**.
references/sdk-usage.md:36In the instructionsOpen original file
service = BlobServiceClient(account_url="https://ACCOUNT.blob.core.windows.net/", credential=DefaultAzureCredential())container = service.get_container_client("my-container")blob = container.get_blob_client("my-blob.txt")blob.upload_blob(b"Hello, Azure Storage!", overwrite=True)```
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.No risks found

Inside this skill

8 instruction sections

The Skill operates Azure Storage primarily through Azure MCP, including listing accounts, containers, and blobs, plus downloading and uploading blob content.

View source
SKILL.md:26In the instructionsOpen original file
- `azure__storage` with command `storage_account_list` - List storage accounts- `azure__storage` with command `storage_container_list` - List containers in account- `azure__storage` with command `storage_blob_list` - List blobs in container- `azure__storage` with command `storage_blob_get` - Download blob content- `azure__storage` with command `storage_blob_put` - Upload blob content

When MCP is unavailable, the Skill provides Azure CLI fallbacks that download to a local path or upload from one.

View source
SKILL.md:46In the instructionsOpen original file
# Download blobaz storage blob download --account-name ACCOUNT --container-name CONTAINER --name BLOB --file LOCAL_PATH# Upload blobaz storage blob upload --account-name ACCOUNT --container-name CONTAINER --name BLOB --file LOCAL_PATH```

The references instruct installation of Azure SDK and identity packages, which changes the dependency environment of the user's project.

View source
references/sdk-usage.md:20In the instructionsOpen original file
|----------|-----------------------------|| .NET | `dotnet add package Azure.Storage.Blobs` `dotnet add package Azure.Identity` || Java | Maven: `com.azure:azure-storage-blob` `com.azure:azure-identity` || JavaScript | `npm install @azure/storage-blob @azure/identity` || Python | `pip install azure-storage-blob azure-identity` || Go | `go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob github.com/Azure/azure-sdk-for-go/sdk/azidentity` || Rust | `cargo add azure_storage_blob azure_identity` |

The authentication guide distinguishes local development from production and recommends managed identity with least-privilege RBAC in production. This mitigates, but does not eliminate, the risk of examples using an existing signed-in identity.

View source
references/auth-best-practices.md:7In the instructionsOpen original file
Use **managed identities** and **Azure RBAC** in production. Reserve `DefaultAzureCredential` for **local development only**.
references/auth-best-practices.md:112In the instructionsOpen original file
- [ ] Use managed identity for all Azure-hosted apps- [ ] Never hardcode credentials, connection strings, or keys- [ ] Apply least-privilege RBAC roles at the narrowest scope- [ ] Use `ManagedIdentityCredential` (not `DefaultAzureCredential`) in production- [ ] Store any required secrets in Azure Key Vault- [ ] Rotate secrets and certificates on a schedule
Start here · InstructionsSKILL.md
azure-storage
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source. 1 more sections are available in the original file.

File reference map

References: 23
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records14 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/sdk-usage.mdFull text included
  • references/sdk/azure-data-tables-java.mdFull text included
  • references/sdk/azure-data-tables-py.mdFull text included
  • references/sdk/azure-storage-blob-java.mdFull text included
  • references/sdk/azure-storage-blob-py.mdFull text included
  • references/sdk/azure-storage-blob-rust.mdFull text included
  • references/sdk/azure-storage-blob-ts.mdFull text included
  • references/sdk/azure-storage-file-datalake-py.mdFull text included
  • references/sdk/azure-storage-file-share-py.mdFull text included
  • references/sdk/azure-storage-file-share-ts.mdFull text included
  • references/sdk/azure-storage-queue-py.mdFull text included
  • references/sdk/azure-storage-queue-ts.mdFull text included
  • references/auth-best-practices.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/auth-best-practices.mdSupporting file
  • references/sdk-usage.mdSupporting file
  • references/sdk/azure-data-tables-java.mdSupporting file
  • references/sdk/azure-data-tables-py.mdSupporting file
  • references/sdk/azure-storage-blob-java.mdSupporting file
  • references/sdk/azure-storage-blob-py.mdSupporting file
  • references/sdk/azure-storage-blob-rust.mdSupporting file
  • references/sdk/azure-storage-blob-ts.mdSupporting file
  • references/sdk/azure-storage-file-datalake-py.mdSupporting file
  • references/sdk/azure-storage-file-share-py.mdSupporting file
  • references/sdk/azure-storage-file-share-ts.mdSupporting file
  • references/sdk/azure-storage-queue-py.mdSupporting file
  • references/sdk/azure-storage-queue-ts.mdSupporting file

Operations mentioned in code and instructions

Run commands
SKILL.md:36In the instructionsOpen original file
```bash# List storage accounts
references/auth-best-practices.md:16In the instructionsOpen original file
| **CI/CD pipelines** | `AzurePipelinesCredential` / `WorkloadIdentityCredential` | Scoped to pipeline identity || **Local development** | `DefaultAzureCredential` | Chains CLI, PowerShell, and VS Code credentials for convenience |
references/auth-best-practices.md:81In the instructionsOpen original file
2. **Azure Developer CLI** — `azd auth login`3. **Azure PowerShell** — `Connect-AzAccount`4. **Visual Studio / VS Code** — sign in via Azure extension
Connect to websites
SKILL.md:82In the instructionsOpen original file
- Blob storage patterns and lifecycle -> [Blob Storage documentation](https://learn.microsoft.com/azure/storage/blobs/storage-blobs-overview)- File shares and Azure File Sync -> [Azure Files documentation](https://learn.microsoft.com/azure/storage/files/storage-files-introduction)
SKILL.md:83In the instructionsOpen original file
- Blob storage patterns and lifecycle -> [Blob Storage documentation](https://learn.microsoft.com/azure/storage/blobs/storage-blobs-overview)- File shares and Azure File Sync -> [Azure Files documentation](https://learn.microsoft.com/azure/storage/files/storage-files-introduction)- Queue patterns and poison handling -> [Queue Storage documentation](https://learn.microsoft.com/azure/storage/queues/storage-queues-introduction)
SKILL.md:84In the instructionsOpen original file
- File shares and Azure File Sync -> [Azure Files documentation](https://learn.microsoft.com/azure/storage/files/storage-files-introduction)- Queue patterns and poison handling -> [Queue Storage documentation](https://learn.microsoft.com/azure/storage/queues/storage-queues-introduction)
Read keys or account settings
references/auth-best-practices.md:16In the instructionsOpen original file
| **CI/CD pipelines** | `AzurePipelinesCredential` / `WorkloadIdentityCredential` | Scoped to pipeline identity || **Local development** | `DefaultAzureCredential` | Chains CLI, PowerShell, and VS Code credentials for convenience |
references/auth-best-practices.md:32In the instructionsOpen original file
var credential = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") == "Development"    ? new DefaultAzureCredential()                          // local dev — uses CLI/VS credentials
references/auth-best-practices.md:33In the instructionsOpen original file
var credential = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") == "Development"    ? new DefaultAzureCredential()                          // local dev — uses CLI/VS credentials    : new ManagedIdentityCredential();                      // production — deterministic, no fallback chain
Install extra software packages
references/sdk-usage.md:22In the instructionsOpen original file
| Java | Maven: `com.azure:azure-storage-blob` `com.azure:azure-identity` || JavaScript | `npm install @azure/storage-blob @azure/identity` || Python | `pip install azure-storage-blob azure-identity` |
references/sdk-usage.md:23In the instructionsOpen original file
| JavaScript | `npm install @azure/storage-blob @azure/identity` || Python | `pip install azure-storage-blob azure-identity` || Go | `go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob github.com/Azure/azure-sdk-for-go/sdk/azidentity` |
references/sdk/azure-data-tables-py.md:8In the instructionsOpen original file
## Installpip install azure-data-tables azure-identity
Lines read
675
File checksum (to compare versions)
cac11802becf9138fc18858c282bc566fdbf2b3599b56464019adab320d07138