{"data":{"skill":{"slug":"caopulan-bark-notify","name":"bark-notify","icon":"📦","repo":"https://github.com/caopulan/Notification-Skill/tree/main/bark-notify","status":"approved","author":"caopulan","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"d0c10a87-ae55-4962-9041-0878e1cd43a9","skill_id":"f6ae5791-096e-4494-9f58-9cff714ded5b","version":9,"content_hash":"v3:a39a91716eadede5f4cdefd78178fed4e837a128:bf30fa2f0ae1efa1553eb8e9a5c4d5ba059a1ef18d16474a4a35cef2d81b000d:9492e407492e681286d6ba528e38a5df49eb7eeb8b7857cf4abdd3411054c806:736b696c6c732f63616f70756c616e2f6261726b2d6e6f74696679:b521c0160de0a9ae26da9a9e365b5c8f","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static findings are false positives caused by Markdown code spans, shell line continuations, standard installation paths, and specific configuration variable reads. Two medium risks remain: dry-run output reveals the Bark key, and a custom endpoint receives that key plus task metadata. No prompt injection or malicious intent was found.","remediation":[{"issue":"Dry-run output exposes the Bark key inside the request URL.","severity":"medium","suggestion":"Redact the Bark key before printing the request URL, or omit the URL entirely."},{"issue":"A configurable endpoint receives the Bark key and task details.","severity":"medium","suggestion":"Require HTTPS and reject unexpected schemes or untrusted hosts before sending credentials and task details."}],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"scripts/send_bark_notification.py","line_end":88,"line_start":88},{"file":"SKILL.md","line_end":19,"line_start":19},{"file":"SKILL.md","line_end":20,"line_start":20}]},{"factor":"env_access","evidence":[{"file":"scripts/send_bark_notification.py","line_end":86,"line_start":86},{"file":"scripts/send_bark_notification.py","line_end":87,"line_start":87},{"file":"scripts/send_bark_notification.py","line_end":88,"line_start":88}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":21,"line_start":17},{"file":"SKILL.md","line_end":32,"line_start":21},{"file":"SKILL.md","line_end":33,"line_start":32},{"file":"SKILL.md","line_end":33,"line_start":33},{"file":"SKILL.md","line_end":34,"line_start":34},{"file":"SKILL.md","line_end":40,"line_start":40},{"file":"SKILL.md","line_end":51,"line_start":45},{"file":"SKILL.md","line_end":55,"line_start":51}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":47,"line_start":47},{"file":"SKILL.md","line_end":49,"line_start":49},{"file":"SKILL.md","line_end":50,"line_start":50},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":46,"line_start":46},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":46,"line_start":46}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Dry-Run Output Exposes Bark Key","locations":[{"file":"scripts/send_bark_notification.py","line_end":123,"line_start":118}],"confidence":0.99,"description":"Dry-run mode prints the complete request URL after placing the Bark key in its path, exposing the credential to terminals and logs.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The URL directly includes parse.quote(bark_key), and dry-run mode prints that URL without redaction."},{"title":"Custom Endpoint Receives Credential and Task Context","locations":[{"file":"scripts/send_bark_notification.py","line_end":88,"line_start":88},{"file":"scripts/send_bark_notification.py","line_end":130,"line_start":109}],"confidence":0.97,"description":"A custom CODEX_BARK_BASE_URL receives the Bark key, machine name, project, status, and summary, enabling leakage if configuration is untrusted.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The environment controls the destination, while the request URL carries the Bark key and the payload contains task context."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":2,"total_lines":202,"audit_model":"codex","audited_at":"2026-07-23T12:56:10.406+00:00","created_at":"2026-07-24T13:25:11.985253+00:00","static_findings":[{"id":"network:scripts/send_bark_notification.py:88:hardcoded-url","file":"scripts/send_bark_notification.py","pattern":"Hardcoded URL","snippet":"base_url = os.environ.get(\"CODEX_BARK_BASE_URL\", \"https://api.day.app\")","category":"network","line_end":88,"severity":"low","line_start":88},{"id":"env_access:scripts/send_bark_notification.py:86:python-environment-access","file":"scripts/send_bark_notification.py","pattern":"Python environment access","snippet":"machine_name = os.environ.get(\"CODEX_MACHINE_NAME\")","category":"env_access","line_end":86,"severity":"low","line_start":86},{"id":"env_access:scripts/send_bark_notification.py:87:python-environment-access","file":"scripts/send_bark_notification.py","pattern":"Python environment access","snippet":"bark_key = os.environ.get(\"CODEX_BARK_KEY\")","category":"env_access","line_end":87,"severity":"low","line_start":87},{"id":"env_access:scripts/send_bark_notification.py:88:python-environment-access","file":"scripts/send_bark_notification.py","pattern":"Python environment access","snippet":"base_url = os.environ.get(\"CODEX_BARK_BASE_URL\", \"https://api.day.app\")","category":"env_access","line_end":88,"severity":"low","line_start":88},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"You can add the following lines to `~/.bashrc` (Linux) or `~/.zshrc` (macOS) to set environment vari","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":"```","category":"external_commands","line_end":21,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":32,"severity":"medium","line_start":21},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- To override the folder name, define a project name in `AGENTS.md` using one of:","category":"external_commands","line_end":33,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- YAML frontmatter: `project_name: My Project` (or `name:`)","category":"external_commands","line_end":33,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- A plain line: `Project Name: My Project` or `项目名称:我的项目`","category":"external_commands","line_end":34,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Pick an execution status: `success`, `failed`, `partial`, `blocked`, etc.","category":"external_commands","line_end":40,"severity":"medium","line_start":40},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":51,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":55,"severity":"medium","line_start":51},{"id":"network:SKILL.md:19:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"export CODEX_BARK_KEY=\"\" # https://api.day.app/<CODEX_BARK_KEY>/","category":"network","line_end":19,"severity":"low","line_start":19},{"id":"network:SKILL.md:20:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"export CODEX_BARK_BASE_URL=\"https://api.day.app\"","category":"network","line_end":20,"severity":"low","line_start":20},{"id":"filesystem:SKILL.md:47:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"--task-title \\\"...\\\" \\","category":"filesystem","line_end":47,"severity":"high","line_start":47},{"id":"filesystem:SKILL.md:49:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"--summary \\\"...\\\" \\","category":"filesystem","line_end":49,"severity":"high","line_start":49},{"id":"filesystem:SKILL.md:50:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"--project-name \\\"...\\\"","category":"filesystem","line_end":50,"severity":"high","line_start":50},{"id":"filesystem:SKILL.md:16:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"You can add the following lines to `~/.bashrc` (Linux) or `~/.zshrc` (macOS) to set environment vari","category":"filesystem","line_end":16,"severity":"high","line_start":16},{"id":"filesystem:SKILL.md:46:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"python3 ~/.codex/skills/bark-notify/scripts/send_bark_notification.py \\","category":"filesystem","line_end":46,"severity":"high","line_start":46},{"id":"filesystem:SKILL.md:16:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"You can add the following lines to `~/.bashrc` (Linux) or `~/.zshrc` (macOS) to set environment vari","category":"filesystem","line_end":16,"severity":"medium","line_start":16},{"id":"filesystem:SKILL.md:46:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"python3 ~/.codex/skills/bark-notify/scripts/send_bark_notification.py \\","category":"filesystem","line_end":46,"severity":"medium","line_start":46},{"id":"blocker:SKILL.md:41:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Write a brief result summary; avoid secrets.","category":"blocker","line_end":41,"severity":"low","line_start":41}],"finding_verdicts":[{"id":"network:scripts/send_bark_notification.py:88:hardcoded-url","reason":"The URL is Bark's documented API default and matches the skill's stated notification purpose. It does not indicate an unrelated destination.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/send_bark_notification.py:86:python-environment-access","reason":"The script reads only CODEX_MACHINE_NAME for the notification body. It does not enumerate the environment or access unrelated secrets.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/send_bark_notification.py:87:python-environment-access","reason":"Reading CODEX_BARK_KEY is required to address the configured Bark device. The environment access itself is narrow and purpose-specific.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/send_bark_notification.py:88:python-environment-access","reason":"CODEX_BARK_BASE_URL is a documented endpoint setting for Bark or self-hosted service use. This line does not access unrelated environment data.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","reason":"This is prose recommending manual environment setup in standard shell files. It contains no Ruby backticks or command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"The detected characters open a Markdown code fence. They do not execute a shell or Ruby command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","reason":"The detected characters close a Markdown code fence. They do not execute any content.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"The backticks format the AGENTS.md filename as inline Markdown. No command execution syntax is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"The backticks format project-name configuration examples. They are documentation, not executable Ruby or shell expressions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","reason":"The backticks format plain project-name examples in two languages. No shell or Ruby execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","reason":"The backticks format example status values. They do not perform command substitution or execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"This is a Markdown shell code fence for a documented invocation. It is not Ruby backtick execution or command substitution.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"This line closes the documented shell code fence. It does not execute the preceding command.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:19:hardcoded-url","reason":"The URL appears in a comment explaining Bark key placement. It documents the intended service and performs no request.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:20:hardcoded-url","reason":"The documented URL is the expected Bark API endpoint assigned by the user. It is not an unrelated or deceptive destination.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:47:path-traversal-sequence","reason":"The ellipsis is a task-title placeholder and the backslash continues a shell command. No parent-directory traversal sequence is present.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:49:path-traversal-sequence","reason":"The ellipsis is a summary placeholder and the backslash continues a shell command. It does not reference a filesystem path.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:50:path-traversal-sequence","reason":"The ellipsis is a project-name placeholder inside a quoted argument. It contains no path traversal.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:16:hidden-file-in-home-directory","reason":"The prose suggests manually adding dedicated exports to standard user shell configuration files. It does not modify hidden files automatically.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:46:hidden-file-in-home-directory","reason":"The path targets this skill's expected installation under the user's Codex directory. It does not access an unrelated hidden file.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:16:hidden-file-access","reason":"This line only documents optional manual shell configuration. The skill does not read or write either hidden file.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:46:hidden-file-access","reason":"The command executes the bundled helper from the documented Codex installation path. This is expected skill access, not covert hidden-file access.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:41:system-reconnaissance","reason":"The line instructs users to avoid secrets in summaries. It performs no host discovery or system reconnaissance.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Dry-Run Output Exposes Bark Key","severity":"medium","locations":[{"file":"scripts/send_bark_notification.py","line_end":123,"line_start":118}],"confidence":0.99,"description":"Dry-run mode prints the complete request URL after placing the Bark key in its path, exposing the credential to terminals and logs.","confidence_reasoning":"The URL directly includes parse.quote(bark_key), and dry-run mode prints that URL without redaction."},{"title":"Custom Endpoint Receives Credential and Task Context","severity":"medium","locations":[{"file":"scripts/send_bark_notification.py","line_end":88,"line_start":88},{"file":"scripts/send_bark_notification.py","line_end":130,"line_start":109}],"confidence":0.97,"description":"A custom CODEX_BARK_BASE_URL receives the Bark key, machine name, project, status, and summary, enabling leakage if configuration is untrusted.","confidence_reasoning":"The environment controls the destination, while the request URL carries the Bark key and the payload contains task context."}],"subject_marketplace_commit_sha":"a39a91716eadede5f4cdefd78178fed4e837a128","subject_content_hash":"bf30fa2f0ae1efa1553eb8e9a5c4d5ba059a1ef18d16474a4a35cef2d81b000d","subject_tree_hash":"9492e407492e681286d6ba528e38a5df49eb7eeb8b7857cf4abdd3411054c806","subject_plugin_path":"skills/caopulan/bark-notify","audit_payload_hash":"b521c0160de0a9ae26da9a9e365b5c8f","confirmed_risk_level":"medium","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"a39a91716eadede5f4cdefd78178fed4e837a128","contentHash":"bf30fa2f0ae1efa1553eb8e9a5c4d5ba059a1ef18d16474a4a35cef2d81b000d","treeHash":"9492e407492e681286d6ba528e38a5df49eb7eeb8b7857cf4abdd3411054c806","pluginPath":"skills/caopulan/bark-notify","auditPayloadHash":"b521c0160de0a9ae26da9a9e365b5c8f"},"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/caopulan-bark-notify/audits/9/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":2,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}