Office 365 Connector

Security checks across malware telemetry and agentic risk

Overview

This connector mostly matches its Office 365 purpose, but it can expose powerful Microsoft account tokens and has unsafe account-name file-path handling that should be reviewed before use.

Use this only if you are comfortable granting broad Microsoft 365 email, calendar, and contact access. Do not run the token-printing command unless you understand the risk, avoid putting client secrets in shared terminals or chats, use simple account names such as work or personal, and revoke the Microsoft app consent if anything looks wrong.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI03: Identity and Privilege Abuse
High
What this means

If the agent runs this command or the output is copied into logs or chat, anyone who sees the token may be able to use the granted Microsoft Graph permissions until the token expires.

Why it was flagged

The CLI can print a raw Microsoft Graph bearer access token to stdout instead of keeping it internal to scoped email/calendar/contact operations.

Skill content
else if (command === 'token') { getAccessToken(accountName).then(token => { console.log(token);
Recommendation

Disable or remove the token-printing command, mask tokens in output, and require explicit user approval before any workflow exposes credentials.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

A crafted account name could cause token writes or removals outside ~/.openclaw/auth/office365, risking local JSON file overwrite or deletion.

Why it was flagged

Account names are user-controlled and are used directly in filesystem paths; the code also writes and deletes these token paths, so path separators in an account name could escape the intended directory.

Skill content
function getAccountTokenPath(accountName) { return path.join(ACCOUNTS_DIR, `${accountName}.json`); }
Recommendation

Restrict account names to a safe pattern such as letters, numbers, dashes, and underscores; reject path separators and verify resolved paths remain inside the intended token directory before reading, writing, or deleting.

#
ASI03: Identity and Privilege Abuse
High
What this means

This is largely expected for a full Office 365 connector, but it means the skill can read and modify sensitive Microsoft 365 data and send email as the user.

Why it was flagged

The skill requests broad delegated Microsoft Graph permissions, including email send, mailbox/calendar/contact write access, and persistent refresh-token access.

Skill content
const SCOPES = [ 'User.Read', 'Mail.Read', 'Mail.ReadWrite', 'Mail.Send', 'Calendars.Read', 'Calendars.ReadWrite', 'Contacts.Read', 'Contacts.ReadWrite', 'offline_access' ].join(' ');
Recommendation

Only consent if you need the full connector; consider a least-privilege app registration with only the scopes you actually use, and revoke tokens if you stop using the skill.

#
ASI03: Identity and Privilege Abuse
Medium
What this means

Client secrets typed into commands may remain in shell history, process listings, terminal logs, or agent transcripts if not handled carefully.

Why it was flagged

The setup flow has users pass an Azure client secret as a command-line argument, which is then stored for account configuration.

Skill content
node accounts.js add <name> <tenant-id> <client-id> <client-secret> [email] [description]
Recommendation

Avoid pasting secrets into chat or shared terminals; prefer secure prompts, environment injection, or a credential store, and rotate any secret that may have been exposed.

#
ASI04: Agentic Supply Chain Vulnerabilities
Low
What this means

Users relying only on registry metadata may underestimate the account access and local credential storage involved.

Why it was flagged

The registry metadata does not surface the OAuth credentials, Microsoft Graph authority, or local auth files that the documentation and code require.

Skill content
Required env vars: none; Primary credential: none; Required config paths: none; Capability signals: No capability tags were derived.
Recommendation

Review the SKILL.md, permission reference, and source files before installing; the publisher should declare credential/config requirements and capability tags in metadata.