{"data":{"skill":{"slug":"sickn33-outlook-automation","name":"outlook-automation","icon":"📦","repo":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/outlook-automation","status":"approved","author":"sickn33","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"8a1429e2-a69d-4f79-bf0e-b6ba99b67d67","skill_id":"e21f25b3-50bc-4c71-a47b-f3109be1200b","version":5,"content_hash":"v3:81e05e636292629114b76cbb3922fbe57672fc02:2ee7213db8b1ed1b951abdd93c1116d53459eee62b141f7048b005cffa8ae603:5128378b3cd50cf25509b98c04d3f36230aade0171864361e1926a3f60f2877b:736b696c6c732f7369636b6e33332f6f75746c6f6f6b2d6175746f6d6174696f6e:1e22cd6f0f56c9a8cf54f8858f00c3a0","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"The static analyzer misclassified Markdown code spans and Outlook identifiers as shell execution or system reconnaissance. The skill has genuine network, OAuth data-access, attachment, and account-mutation risks because it delegates Outlook operations to an external MCP service.","remediation":[{"issue":"Outlook content and OAuth-authorized operations pass through an external MCP service.","severity":"high","suggestion":"Document Composio data handling, requested Microsoft scopes, retention, revocation, and least-privilege configuration before users connect accounts."},{"issue":"Contact and folder creation workflows do not require explicit user confirmation.","severity":"medium","suggestion":"Require a preview and direct confirmation immediately before every contact or folder creation call."},{"issue":"Attachment downloads lack guidance for handling untrusted files.","severity":"medium","suggestion":"Require filename and type review, malware scanning, and explicit confirmation before downloading or opening attachments."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":21,"line_start":21},{"file":"SKILL.md","line_end":23,"line_start":23},{"file":"SKILL.md","line_end":24,"line_start":24},{"file":"SKILL.md","line_end":35,"line_start":35},{"file":"SKILL.md","line_end":36,"line_start":36},{"file":"SKILL.md","line_end":37,"line_start":37},{"file":"SKILL.md","line_end":38,"line_start":38},{"file":"SKILL.md","line_end":41,"line_start":41},{"file":"SKILL.md","line_end":42,"line_start":42},{"file":"SKILL.md","line_end":43,"line_start":43},{"file":"SKILL.md","line_end":44,"line_start":44},{"file":"SKILL.md","line_end":58,"line_start":58},{"file":"SKILL.md","line_end":59,"line_start":59},{"file":"SKILL.md","line_end":62,"line_start":62},{"file":"SKILL.md","line_end":63,"line_start":63},{"file":"SKILL.md","line_end":64,"line_start":64},{"file":"SKILL.md","line_end":65,"line_start":65},{"file":"SKILL.md","line_end":66,"line_start":66},{"file":"SKILL.md","line_end":79,"line_start":79},{"file":"SKILL.md","line_end":80,"line_start":80},{"file":"SKILL.md","line_end":81,"line_start":81},{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":83,"line_start":83},{"file":"SKILL.md","line_end":86,"line_start":86},{"file":"SKILL.md","line_end":87,"line_start":87},{"file":"SKILL.md","line_end":88,"line_start":88},{"file":"SKILL.md","line_end":89,"line_start":89},{"file":"SKILL.md","line_end":90,"line_start":90},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":103,"line_start":103},{"file":"SKILL.md","line_end":104,"line_start":104},{"file":"SKILL.md","line_end":105,"line_start":105},{"file":"SKILL.md","line_end":106,"line_start":106},{"file":"SKILL.md","line_end":109,"line_start":109},{"file":"SKILL.md","line_end":110,"line_start":110},{"file":"SKILL.md","line_end":111,"line_start":111},{"file":"SKILL.md","line_end":112,"line_start":112},{"file":"SKILL.md","line_end":122,"line_start":122},{"file":"SKILL.md","line_end":123,"line_start":123},{"file":"SKILL.md","line_end":124,"line_start":124},{"file":"SKILL.md","line_end":127,"line_start":127},{"file":"SKILL.md","line_end":128,"line_start":128},{"file":"SKILL.md","line_end":129,"line_start":129},{"file":"SKILL.md","line_end":140,"line_start":140},{"file":"SKILL.md","line_end":141,"line_start":141},{"file":"SKILL.md","line_end":142,"line_start":142},{"file":"SKILL.md","line_end":143,"line_start":143},{"file":"SKILL.md","line_end":144,"line_start":144}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":21,"line_start":21}]}],"critical_findings":[],"high_findings":[{"title":"Third-Party OAuth Access to Sensitive Outlook Data","locations":[{"file":"SKILL.md","line_end":25,"line_start":11}],"confidence":0.96,"description":"The workflow connects Microsoft Outlook to Composio through Rube MCP. This external service can process mailbox, calendar, contact, and attachment data under granted OAuth scopes.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The skill explicitly names Composio, supplies the Rube MCP endpoint, and directs users to complete Microsoft OAuth. The documented workflows confirm access to sensitive Outlook data."}],"medium_findings":[{"title":"State-Changing Operations Lack Confirmation Safeguards","locations":[{"file":"SKILL.md","line_end":129,"line_start":98}],"confidence":0.95,"description":"The skill supports creating contacts, contact folders, and mail folders but does not require a final user preview or confirmation before mutation.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The listed create tools are explicit state-changing operations. The surrounding workflow contains parameters and pitfalls but no confirmation requirement."},{"title":"Attachment Downloads Lack Untrusted-File Safeguards","locations":[{"file":"SKILL.md","line_end":51,"line_start":30}],"confidence":0.94,"description":"The email workflow can download attachments without requiring file review, malware scanning, or confirmation before download or opening.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The workflow explicitly lists attachment discovery and download tools. Its pitfalls discuss inline images but provide no security handling for untrusted files."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":21,"line_start":21}],"confidence":0.98,"description":"**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API k","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The skill explicitly instructs users to configure the external https://rube.app/mcp endpoint. This creates a real network dependency handling OAuth-authorized Outlook operations."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":200,"audit_model":"codex","audited_at":"2026-08-04T17:02:17.658+00:00","created_at":"2026-08-05T01:55:03.596031+00:00","static_findings":[{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Active Outlook connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `outlook`","category":"external_commands","line_end":16,"severity":"medium","line_start":16},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas","category":"external_commands","line_end":17,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API k","category":"external_commands","line_end":21,"severity":"medium","line_start":21},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds","category":"external_commands","line_end":23,"severity":"medium","line_start":23},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `outlook`","category":"external_commands","line_end":24,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. `OUTLOOK_SEARCH_MESSAGES` - Search with KQL syntax across all folders [Required]","category":"external_commands","line_end":35,"severity":"medium","line_start":35},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. `OUTLOOK_GET_MESSAGE` - Get full message details [Optional]","category":"external_commands","line_end":36,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. `OUTLOOK_LIST_OUTLOOK_ATTACHMENTS` - List message attachments [Optional]","category":"external_commands","line_end":37,"severity":"medium","line_start":37},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"4. `OUTLOOK_DOWNLOAD_OUTLOOK_ATTACHMENT` - Download attachment [Optional]","category":"external_commands","line_end":38,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `query`: KQL search string (from:, to:, subject:, received:, hasattachment:)","category":"external_commands","line_end":41,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `from_index`: Pagination start (0-based)","category":"external_commands","line_end":42,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `size`: Results per page (max 25)","category":"external_commands","line_end":43,"severity":"medium","line_start":43},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `message_id`: Message ID (use hitId from search results)","category":"external_commands","line_end":44,"severity":"medium","line_start":44},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. `OUTLOOK_LIST_MAIL_FOLDERS` - List mail folders to get folder IDs [Prerequisite]","category":"external_commands","line_end":58,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. `OUTLOOK_QUERY_EMAILS` - Query emails with structured filters [Required]","category":"external_commands","line_end":59,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `folder`: Folder name ('inbox', 'sentitems', 'drafts') or folder ID","category":"external_commands","line_end":62,"severity":"medium","line_start":62},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `filter`: OData filter (e.g., `isRead eq false and importance eq 'high'`)","category":"external_commands","line_end":63,"severity":"medium","line_start":63},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `top`: Max results (1-1000)","category":"external_commands","line_end":64,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `orderby`: Sort field and direction","category":"external_commands","line_end":65,"severity":"medium","line_start":65},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `select`: Array of fields to return","category":"external_commands","line_end":66,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:79:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. `OUTLOOK_LIST_EVENTS` - List events with filters [Optional]","category":"external_commands","line_end":79,"severity":"medium","line_start":79},{"id":"external_commands:SKILL.md:80:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. `OUTLOOK_GET_CALENDAR_VIEW` - Get events in a time window [Optional]","category":"external_commands","line_end":80,"severity":"medium","line_start":80},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. `OUTLOOK_GET_EVENT` - Get specific event details [Optional]","category":"external_commands","line_end":81,"severity":"medium","line_start":81},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"4. `OUTLOOK_LIST_CALENDARS` - List available calendars [Optional]","category":"external_commands","line_end":82,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"5. `OUTLOOK_GET_SCHEDULE` - Get free/busy info [Optional]","category":"external_commands","line_end":83,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `filter`: OData filter (use start/dateTime, NOT receivedDateTime)","category":"external_commands","line_end":86,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `start_datetime`/`end_datetime`: ISO 8601 for calendar view","category":"external_commands","line_end":87,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `timezone`: IANA timezone (e.g., 'America/New_York')","category":"external_commands","line_end":88,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `calendar_id`: Optional non-primary calendar ID","category":"external_commands","line_end":89,"severity":"medium","line_start":89},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `select`: Fields to return","category":"external_commands","line_end":90,"severity":"medium","line_start":90},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Recurring events need `expand_recurring_events=true` to see individual occurrences","category":"external_commands","line_end":95,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. `OUTLOOK_LIST_CONTACTS` - List contacts [Optional]","category":"external_commands","line_end":103,"severity":"medium","line_start":103},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. `OUTLOOK_CREATE_CONTACT` - Create a new contact [Optional]","category":"external_commands","line_end":104,"severity":"medium","line_start":104},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. `OUTLOOK_GET_CONTACT_FOLDERS` - List contact folders [Optional]","category":"external_commands","line_end":105,"severity":"medium","line_start":105},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"4. `OUTLOOK_CREATE_CONTACT_FOLDER` - Create contact folder [Optional]","category":"external_commands","line_end":106,"severity":"medium","line_start":106},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `givenName`/`surname`: Contact name","category":"external_commands","line_end":109,"severity":"medium","line_start":109},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `emailAddresses`: Array of email objects","category":"external_commands","line_end":110,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `displayName`: Full display name","category":"external_commands","line_end":111,"severity":"medium","line_start":111},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `contact_folder_id`: Optional folder for contacts","category":"external_commands","line_end":112,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. `OUTLOOK_LIST_MAIL_FOLDERS` - List top-level folders [Required]","category":"external_commands","line_end":122,"severity":"medium","line_start":122},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. `OUTLOOK_LIST_CHILD_MAIL_FOLDERS` - List subfolders [Optional]","category":"external_commands","line_end":123,"severity":"medium","line_start":123},{"id":"external_commands:SKILL.md:124:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. `OUTLOOK_CREATE_MAIL_FOLDER` - Create a new folder [Optional]","category":"external_commands","line_end":124,"severity":"medium","line_start":124},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `parent_folder_id`: Well-known name or folder ID","category":"external_commands","line_end":127,"severity":"medium","line_start":127},{"id":"external_commands:SKILL.md:128:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `displayName`: New folder name","category":"external_commands","line_end":128,"severity":"medium","line_start":128},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `include_hidden_folders`: Show hidden folders","category":"external_commands","line_end":129,"severity":"medium","line_start":129},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `from:user@example.com` - From sender","category":"external_commands","line_end":140,"severity":"medium","line_start":140},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `to:recipient@example.com` - To recipient","category":"external_commands","line_end":141,"severity":"medium","line_start":141},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `subject:invoice` - Subject contains","category":"external_commands","line_end":142,"severity":"medium","line_start":142},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `received>=2025-01-01` - Date filter","category":"external_commands","line_end":143,"severity":"medium","line_start":143},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `hasattachment:yes` - Has attachments","category":"external_commands","line_end":144,"severity":"medium","line_start":144},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `AND` - Both conditions","category":"external_commands","line_end":147,"severity":"medium","line_start":147},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `OR` - Either condition","category":"external_commands","line_end":148,"severity":"medium","line_start":148},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `isRead eq false` - Unread emails","category":"external_commands","line_end":154,"severity":"medium","line_start":154},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `importance eq 'high'` - High importance","category":"external_commands","line_end":155,"severity":"medium","line_start":155},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `hasAttachments eq true` - Has attachments","category":"external_commands","line_end":156,"severity":"medium","line_start":156},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `receivedDateTime ge 2025-01-01T00:00:00Z` - Date filter","category":"external_commands","line_end":157,"severity":"medium","line_start":157},{"id":"external_commands:SKILL.md:160:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `start/dateTime ge '2025-01-01T00:00:00Z'` - Events after date","category":"external_commands","line_end":160,"severity":"medium","line_start":160},{"id":"external_commands:SKILL.md:161:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `contains(subject, 'Meeting')` - Subject contains text","category":"external_commands","line_end":161,"severity":"medium","line_start":161},{"id":"network:SKILL.md:21:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API k","category":"network","line_end":21,"severity":"low","line_start":21},{"id":"blocker:SKILL.md:49:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Use hitId from search results as message_id for downstream calls, not resource.id","category":"blocker","line_end":49,"severity":"low","line_start":49},{"id":"blocker:SKILL.md:179:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| Get message | OUTLOOK_GET_MESSAGE | message_id |","category":"blocker","line_end":179,"severity":"low","line_start":179},{"id":"blocker:SKILL.md:180:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| List attachments | OUTLOOK_LIST_OUTLOOK_ATTACHMENTS | message_id |","category":"blocker","line_end":180,"severity":"low","line_start":180},{"id":"blocker:SKILL.md:181:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| Download attachment | OUTLOOK_DOWNLOAD_OUTLOOK_ATTACHMENT | message_id, attachment_id |","category":"blocker","line_end":181,"severity":"low","line_start":181},{"id":"blocker:SKILL.md:183:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| Child folders | OUTLOOK_LIST_CHILD_MAIL_FOLDERS | parent_folder_id |","category":"blocker","line_end":183,"severity":"low","line_start":183},{"id":"blocker:SKILL.md:186:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| Get event | OUTLOOK_GET_EVENT | event_id |","category":"blocker","line_end":186,"severity":"low","line_start":186}],"finding_verdicts":[{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","reason":"The backticks are Markdown formatting around Rube MCP tool and toolkit names. No shell or Ruby command is executed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"The backticks format an MCP tool identifier in prose. The line contains no executable shell construct.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","reason":"The backticks format a URL as inline Markdown. This is configuration guidance, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","reason":"The backticks identify an MCP tool whose response should be checked. They do not execute a local external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"The line names an MCP tool and toolkit with Markdown code spans. It contains no shell command or interpolation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"The code span labels a documented query parameter. It is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The code span labels a documented pagination parameter. It is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The code span labels a documented result-size parameter. It is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"The code span labels a message identifier parameter. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","reason":"The code span labels a folder parameter in documentation. It is not executed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","reason":"The backticks show an OData filter parameter and example. They are data sent to Outlook, not shell syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"The code span labels a documented result-limit parameter. It is not a command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","reason":"The code span labels a documented sort parameter. It is not a command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"The code span labels a documented field-selection parameter. It is not a command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:79:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:80:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The code span labels an OData filter parameter. It is not Ruby or shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"The code spans label calendar time parameters. They are not executable commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"The code span labels a timezone parameter. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","reason":"The code span labels a calendar identifier parameter. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","reason":"The code span labels a field-selection parameter. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"The code span documents a Boolean API parameter. It does not invoke a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","reason":"The code spans label contact name fields. They are not executable commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"The code span labels a contact email field. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","reason":"The code span labels a contact display-name field. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"The code span labels a contact-folder identifier. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:124:ruby-shell-backtick-execution","reason":"The backticks format an Outlook MCP tool slug in documentation. No operating-system command is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","reason":"The code span labels a parent-folder identifier. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:128:ruby-shell-backtick-execution","reason":"The code span labels a folder display-name field. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","reason":"The code span labels a Boolean folder-listing parameter. It is not executable syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","reason":"The backticks show a KQL sender-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","reason":"The backticks show a KQL recipient-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","reason":"The backticks show a KQL subject-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"The backticks show a KQL date-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","reason":"The backticks show a KQL attachment-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","reason":"The code span documents the KQL AND operator. It does not execute an external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","reason":"The code span documents the KQL OR operator. It does not execute an external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","reason":"The backticks show an OData email-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","reason":"The backticks show an OData importance-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","reason":"The backticks show an OData attachment-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","reason":"The backticks show an OData date-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:160:ruby-shell-backtick-execution","reason":"The backticks show an OData calendar-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:161:ruby-shell-backtick-execution","reason":"The backticks show an OData subject-filter example. This query data is not a shell command.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:21:hardcoded-url","reason":"The skill explicitly instructs users to configure the external https://rube.app/mcp endpoint. This creates a real network dependency handling OAuth-authorized Outlook operations.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"blocker:SKILL.md:49:system-reconnaissance","reason":"The line explains which Outlook search-result identifier to pass into later API calls. It does not inspect the host system.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:179:system-reconnaissance","reason":"This table row documents the message_id input for an Outlook API tool. It performs no system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:180:system-reconnaissance","reason":"This table row documents the message_id input for listing Outlook attachments. It does not inspect the host system.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:181:system-reconnaissance","reason":"This table row documents Outlook attachment identifiers. It does not enumerate host processes, files, users, or network state.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:183:system-reconnaissance","reason":"This table row documents an Outlook parent-folder identifier. It does not inspect the local system.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:186:system-reconnaissance","reason":"This table row documents an Outlook event identifier. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Third-Party OAuth Access to Sensitive Outlook Data","severity":"high","locations":[{"file":"SKILL.md","line_end":25,"line_start":11}],"confidence":0.96,"description":"The workflow connects Microsoft Outlook to Composio through Rube MCP. This external service can process mailbox, calendar, contact, and attachment data under granted OAuth scopes.","confidence_reasoning":"The skill explicitly names Composio, supplies the Rube MCP endpoint, and directs users to complete Microsoft OAuth. The documented workflows confirm access to sensitive Outlook data."},{"title":"State-Changing Operations Lack Confirmation Safeguards","severity":"medium","locations":[{"file":"SKILL.md","line_end":129,"line_start":98}],"confidence":0.95,"description":"The skill supports creating contacts, contact folders, and mail folders but does not require a final user preview or confirmation before mutation.","confidence_reasoning":"The listed create tools are explicit state-changing operations. The surrounding workflow contains parameters and pitfalls but no confirmation requirement."},{"title":"Attachment Downloads Lack Untrusted-File Safeguards","severity":"medium","locations":[{"file":"SKILL.md","line_end":51,"line_start":30}],"confidence":0.94,"description":"The email workflow can download attachments without requiring file review, malware scanning, or confirmation before download or opening.","confidence_reasoning":"The workflow explicitly lists attachment discovery and download tools. Its pitfalls discuss inline images but provide no security handling for untrusted files."}],"subject_marketplace_commit_sha":"81e05e636292629114b76cbb3922fbe57672fc02","subject_content_hash":"2ee7213db8b1ed1b951abdd93c1116d53459eee62b141f7048b005cffa8ae603","subject_tree_hash":"5128378b3cd50cf25509b98c04d3f36230aade0171864361e1926a3f60f2877b","subject_plugin_path":"skills/sickn33/outlook-automation","audit_payload_hash":"1e22cd6f0f56c9a8cf54f8858f00c3a0","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"81e05e636292629114b76cbb3922fbe57672fc02","contentHash":"2ee7213db8b1ed1b951abdd93c1116d53459eee62b141f7048b005cffa8ae603","treeHash":"5128378b3cd50cf25509b98c04d3f36230aade0171864361e1926a3f60f2877b","pluginPath":"skills/sickn33/outlook-automation","auditPayloadHash":"1e22cd6f0f56c9a8cf54f8858f00c3a0"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/sickn33-outlook-automation/audits/5/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":3,"capabilityReviewCount":1,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}