Versioned security assessment

Report ID: SA-816C62B2

7/7/2026, 12:58:00 AM

m365-agents-py security assessment v3

Skill Security Certification Report

Audit History
Audit model: codex Historical report
Skill name
m365-agents-py
Version
v3
Maintainer
sickn33
Coverage
1 Files scanned · 346 Lines analyzed
Policy version
Unavailable

Highest confirmed finding severity

Medium

2 confirmed security findings require attention.

Installation context

Historical evidence

This report may not describe the currently installable artifact. Open the current Skill page for install guidance.

Open current Skill page

This report does not block or authorize the manifest or ZIP.

Most static findings are false positives from Markdown fences, inline backticks, static Python imports, placeholders, and reference links. Confirmed risks are limited to low-severity dotenv and authenticated Microsoft Graph examples, with a medium semantic concern around broad OAuth .default scope usage. No prompt-injection attempt or malicious data-exfiltration intent was found.

Report position

Historical report

Open audit history before using this report to install.

Audit attestation

Not attestable

The required immutable binding is incomplete.

Human verification

Not verified

No human verification is recorded for this report.

Coverage

1 Files scanned · 346 Lines analyzed

6 items shown for review

Limitations

This report does not claim runtime or sandbox execution and does not prove the absence of side effects.

Evidence chain

Follow the evidence from source binding to the install contract. Available evidence supports verification; it is not a safety guarantee.

  1. Source

    Binding unavailable

  2. Artifact

    Identity incomplete

  3. Audit

    Complete

  4. Install contract

    Open manifest to verify

    Open manifest

Capabilities observed

Observed means this report recorded supporting evidence. Not recorded does not prove that a capability is absent.

Contains scripts

May execute code included with the Skill.

Observed in 4 evidence locations

Network access

May connect to external services.

Observed in 9 evidence locations

Filesystem access

May read or write local files.

Observed in 2 evidence locations

Env variables

May read values from the process environment.

Observed in 5 evidence locations

External commands

May invoke commands or programs outside the Skill.

Observed in 21 evidence locations

Capability review items (4)
Low
HTTP client library
async def profile_request(context: TurnContext, state: TurnState):
The surrounding OAuth example uses aiohttp to make an authenticated Microsoft Graph request with a user bearer token. This is expected for the skill, but it is security-sensitive network and token handling.
Low
Hardcoded URL
"https://graph.microsoft.com/v1.0/me", headers=headers
The example sends a user OAuth bearer token to Microsoft Graph and retrieves profile data. The endpoint is legitimate, but copied implementations need consent, scope, and data-minimization controls.
Low
dotenv library
load_dotenv()
The sample calls load_dotenv(), which can import local .env secrets into the process. This is common configuration practice, but it requires strict source-control and secret-management discipline.
Low
Python dotenv loader
load_dotenv()
The actual dotenv loader call reads local environment configuration. It is legitimate for Microsoft app credentials but still handles sensitive values.

Risk findings

Confirmed security concerns are separated from items that still need review.

Confirmed security concerns (2)

RISK-001 Medium
Broad OAuth Default Scope in Copilot Studio Example
The Copilot Studio token request uses the Power Platform .default scope, which can request all pre-consented permissions for that resource. Production guidance should narrow or explicitly justify scopes.
The exact .default scope is present in the token request, and broad default scopes are a known permission-governance risk. The surrounding code is legitimate, so severity is medium rather than high.
RISK-002 Low
Authenticated Profile Data Returned to Chat
The Graph profile example retrieves signed-in user data and sends the display name back into the conversation. This may expose profile data in chat transcripts if copied without data-minimization review.
The sample directly obtains a user token, calls the Graph profile endpoint, and sends displayName to chat. It is expected behavior but still creates a privacy review requirement.

Remediation

Suggested fixes recorded by this audit. Applying them is the maintainer’s responsibility.

  1. FIX-001
    Medium
    The Copilot Studio example uses the Power Platform .default OAuth scope.
    Document the exact permissions required, avoid .default where narrower scopes are available, and require tenant consent review before production use.
  2. FIX-002
    Low
    The examples load secrets from .env and environment variables.
    Add explicit guidance to keep .env files out of source control, rotate leaked credentials, and use managed secret stores in production.
  3. FIX-003
    Low
    The Microsoft Graph example returns profile data into the chat conversation.
    Minimize returned fields, confirm user consent, and warn developers not to log tokens or unnecessary profile data.

Expert evidence

Immutable subject identity, scanner metadata, dismissed matches, and source-level evidence.

Artifact subject

Marketplace commit
Unavailable
Content hash
Unavailable
Tree hash
Unavailable
Skill path
Unavailable
Audit payload hash
Unavailable

Analysis metadata

Audit model: codex

Analysis state: Complete

Scope is limited to the recorded files, lines, methods, and evidence. No runtime or sandbox execution is claimed.

Verify and export

The manifest and lockfile bind install artifacts to cryptographic hashes. This integrity claim is separate from the security assessment.

Audit attestation: not_attestable